diff --git a/ChangeLog b/ChangeLog index e33acde4239..d7d9b14c929 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,47 @@ +2012-02-05 Christoph Scholtes + + * make-dist (README.W32): Include file in source tarball. (Bug#9750) + + * lib/makefile.w32-in (PRAGMA_SYSTEM_HEADER): Move to platform + specific makefiles to support getopt_.h generation with MSVC. + +2012-02-04 Glenn Morris + + * Makefile.in (uninstall): + Handle compressed info files and man pages. (Bug#10718) + +2012-02-02 Glenn Morris + + * configure.in [HAVE_NS]: + Error if use --without-toolkit-scroll-bars. (Bug#10673) + +2012-02-01 Paul Eggert + + Port to older Solaris 10 versions (Bug#10677). + Bug reported by Chong Yidong for SunOS 5.10 Generic_127111-11 sparc. + I cannot reproduce it on SunOS 5.10 Generic_141444-09 sparc but + possibly this is because Sun fixed the 'stat' bug in my version. + * Makefile.in (GNULIB_TOOL_FLAGS): Do not avoid the pathmax module. + * lib/pathmax.h, m4/pathmax.m4: New files, from gnulib. + * lib/gnulib.mk, m4/gl-comp.m4: Regenerate. + These changes are based on gnulib version + 4f11d6bebc3098c64ffde27079ab0d0cecfd0cdc dated 2011-10-07 20:59:10, + because Emacs is in feature freeze and we do not want to merge any + more-recent changes from gnulib. + +2012-01-31 Glenn Morris + + * configure.in: Throw an explicit error if Motif toolkit was + requested but requirements could not be found. + + * configure.in: Allow Emacs to actually be built with xaw scroll-bars. + +2012-01-30 Eli Zaretskii + + * lib/makefile.w32-in ($(BLD)/sha1.$(O) $(BLD)/sha256.$(O) + $(BLD)/sha512.$(O)): Depend on stamp_BLD. Fixes a build failure + with "make -j3". + 2012-01-16 Juanma Barranquero * .bzrignore: Ignore etc/__pycache__. diff --git a/Makefile.in b/Makefile.in index f178a3aeb16..af0c902b381 100644 --- a/Makefile.in +++ b/Makefile.in @@ -341,7 +341,7 @@ GNULIB_MODULES = \ mktime pthread_sigmask readlink \ socklen stdarg stdio strftime strtoimax strtoumax symlink sys_stat GNULIB_TOOL_FLAGS = \ - --avoid=msvc-inval --avoid=msvc-nothrow --avoid=pathmax \ + --avoid=msvc-inval --avoid=msvc-nothrow \ --avoid=raise --avoid=threadlib \ --conditional-dependencies --import --no-changelog --no-vc-files \ --makefile-name=gnulib.mk @@ -727,11 +727,16 @@ uninstall: (cd $(DESTDIR)${infodir} && \ for elt in $(INFO_FILES); do \ $(INSTALL_INFO) --remove --info-dir=. $$elt; \ - for f in `ls $$elt $$elt-[1-9] $$elt-[1-9][0-9] 2>/dev/null`; do \ + if [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ]; then \ + ext=.gz; else ext=; fi; \ + for f in `ls $$elt$$ext $$elt-[1-9]$$ext $$elt-[1-9][0-9]$$ext 2>/dev/null`; do \ rm -f $$f; \ done; \ done;) - (cd $(DESTDIR)${man1dir} && rm -f $(MAN_PAGES)) + (if [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ]; then \ + ext=.gz; else ext=; fi; \ + cd $(DESTDIR)${man1dir} && for page in ${MAN_PAGES}; do \ + rm -f $$page$$ext; done ) (cd $(DESTDIR)${bindir} && rm -f $(EMACSFULL) $(EMACS)) (cd $(DESTDIR)${icondir} && rm -f hicolor/*x*/apps/emacs.png hicolor/*x*/apps/emacs22.png hicolor/scalable/apps/emacs.svg hicolor/scalable/mimetypes/emacs-document.svg ) -rm -f $(DESTDIR)${desktopdir}/emacs.desktop diff --git a/README b/README index cf837ba4ea3..2fa93cbf1a8 100644 --- a/README +++ b/README @@ -2,7 +2,7 @@ Copyright (C) 2001-2012 Free Software Foundation, Inc. See the end of the file for license conditions. -This directory tree holds version 24.0.92 of GNU Emacs, the extensible, +This directory tree holds version 24.0.93 of GNU Emacs, the extensible, customizable, self-documenting real-time display editor. The file INSTALL in this directory says how to build and install GNU diff --git a/admin/ChangeLog b/admin/ChangeLog index 597beb60ce2..2178df6caf0 100644 --- a/admin/ChangeLog +++ b/admin/ChangeLog @@ -1,3 +1,8 @@ +2012-01-19 Glenn Morris + + * bzrmerge.el (bzrmerge-missing): Allow a definitive "no" answer to the + "skip?" question, since there can be multiple such for any revision. + 2012-01-14 Eli Zaretskii * FOR-RELEASE (Check the Emacs Tutorial): Mark TUTORIAL.he as diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index daf8e33d041..abe53ad0b0d 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE @@ -100,10 +100,10 @@ names of the people who have checked it. SECTION READERS ---------------------------------- TUTORIAL cyd -TUTORIAL.bg +TUTORIAL.bg ogi TUTORIAL.cn TUTORIAL.cs -TUTORIAL.de +TUTORIAL.de wl TUTORIAL.eo TUTORIAL.es TUTORIAL.fr @@ -111,14 +111,14 @@ TUTORIAL.he eliz TUTORIAL.it TUTORIAL.ja TUTORIAL.ko -TUTORIAL.nl +TUTORIAL.nl Pieter Schoenmakers TUTORIAL.pl TUTORIAL.pt_BR TUTORIAL.ro -TUTORIAL.ru +TUTORIAL.ru Alex Ott TUTORIAL.sk -TUTORIAL.sl -TUTORIAL.sv +TUTORIAL.sl Primoz PETERLIN +TUTORIAL.sv Mats Lidell TUTORIAL.th TUTORIAL.zh @@ -126,7 +126,7 @@ TUTORIAL.zh abbrevs.texi cyd ack.texi -anti.texi +anti.texi cyd arevert-xtra.texi cyd basic.texi cyd buffers.texi cyd @@ -180,60 +180,59 @@ xresources.texi cyd ** Check the Lisp manual. abbrevs.texi -advice.texi +advice.texi cyd anti.texi back.texi backups.texi buffers.texi commands.texi -compile.texi -control.texi -customize.texi +compile.texi cyd +control.texi cyd +customize.texi cyd debugging.texi display.texi edebug.texi elisp.texi errors.texi -eval.texi +eval.texi cyd files.texi frames.texi -functions.texi -hash.texi +functions.texi cyd +hash.texi cyd help.texi hooks.texi index.texi internals.texi -intro.texi +intro.texi cyd keymaps.texi -lists.texi -loading.texi +lists.texi cyd +loading.texi cyd locals.texi -macros.texi +macros.texi cyd maps.texi markers.texi minibuf.texi modes.texi nonascii.texi -numbers.texi -objects.texi +numbers.texi cyd +objects.texi cyd os.texi package.texi positions.texi processes.texi searching.texi -sequences.texi +sequences.texi cyd streams.texi -strings.texi -symbols.texi +strings.texi cyd +symbols.texi cyd syntax.texi text.texi tips.texi -variables.texi +variables.texi cyd windows.texi * PLANNED ADDITIONS - -** pov-mode (probably not for Emacs-23: waiting for a Free POV-Ray). +* pov-mode (probably not for Emacs-23: waiting for a Free POV-Ray). ** gas-mode ? diff --git a/admin/bzrmerge.el b/admin/bzrmerge.el index 2efb17603cd..cb63d5b16ba 100644 --- a/admin/bzrmerge.el +++ b/admin/bzrmerge.el @@ -133,9 +133,23 @@ are both lists of revnos, in oldest-first order." (setq str (substring str (match-end 0)))) (when (string-match "[.!;, ]+\\'" str) (setq str (substring str 0 (match-beginning 0)))) - (if (save-excursion (y-or-n-p (concat str ": Skip? "))) - (setq skip t)))) - (if skip + (let ((help-form "\ +Type `y' to skip this revision, +`N' to include it and go on to the next revision, +`n' to not skip, but continue to search this log entry for skip regexps, +`q' to quit merging.")) + (case (save-excursion + (read-char-choice + (format "%s: Skip (y/n/N/q/%s)? " str + (key-description (vector help-char))) + '(?y ?n ?N ?q))) + (?y (setq skip t)) + (?q (keyboard-quit)) + ;; A single log entry can match skip-regexp multiple + ;; times. If you are sure you don't want to skip it, + ;; you don't want to be asked multiple times. + (?N (setq skip 'no)))))) + (if (eq skip t) (push revno skipped) (push revno revnos))))) (delete-region (point) (point-max))) diff --git a/admin/grammars/python.wy b/admin/grammars/python.wy index 65f317145a0..f7808fd20b8 100644 --- a/admin/grammars/python.wy +++ b/admin/grammars/python.wy @@ -1,7 +1,8 @@ ;;; python.wy -- LALR grammar for Python ;; Copyright (C) 2002-2012 Free Software Foundation, Inc. -;; Copyright (C) 2001-2010 Python Software Foundation +;; Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, +;; 2009, 2010 Python Software Foundation; All Rights Reserved ;; Author: Richard Kim ;; Maintainer: Richard Kim diff --git a/admin/grammars/wisent-grammar.el b/admin/grammars/wisent-grammar.el index be014a56906..714b5211127 100644 --- a/admin/grammars/wisent-grammar.el +++ b/admin/grammars/wisent-grammar.el @@ -470,13 +470,13 @@ Menu items are appended to the common grammar menu.") "srecode/srt-wy") ("wisent-javascript-jv-wy.el" "semantic/wisent/js-wy" - "Copyright (C) 1998-2011 Ecma International" + "Copyright (C) 1998-2011 Ecma International." ,wisent-make-parsers--ecmascript-license) ("wisent-java-tags-wy.el" "semantic/wisent/javat-wy") ("wisent-python-wy.el" "semantic/wisent/python-wy" - "Copyright (C) 2001-2010 Python Software Foundation" + "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Python Software Foundation; All Rights Reserved." ,wisent-make-parsers--python-license))) (defun wisent-make-parsers () diff --git a/admin/make-tarball.txt b/admin/make-tarball.txt index 06793b31097..0acd29bbc13 100644 --- a/admin/make-tarball.txt +++ b/admin/make-tarball.txt @@ -102,3 +102,6 @@ For each step, check for possible errors. 13. For a pretest, announce it on emacs-devel and BCC the pretesters. For a release, announce it on info-gnu@gnu.org, info-gnu-emacs@gnu.org, and emacs-devel. + +14. For a release, update the Emacs homepage in the web repository. + Also add the new NEWS file as NEWS.xx.y. diff --git a/admin/notes/bugtracker b/admin/notes/bugtracker index dd1ea46ceb2..3c24212ea10 100644 --- a/admin/notes/bugtracker +++ b/admin/notes/bugtracker @@ -640,3 +640,14 @@ I think you also have to add them to 'tags' and 'tags_single_letter' in /usr/share/perl5/Debbugs/Config.pm. And update /var/www/Developer.html with a description of what the tag means. And the "valid tags" list in /var/www/index.html. + +** Backups + +The FSF sysadmins handle multi-generational backups of the filesystem +on debbugs.gnu.org. But if you really want to have your own backup of +the bug database, you can use rsync (this requires login access to +debbugs.gnu.org): + + rsync -azvv -e ssh USER@debbugs.gnu.org:/var/lib/debbugs/ DEST + +Note that this occupies well over 1G of disk space. diff --git a/admin/notes/lel-TODO b/admin/notes/lel-TODO index 065a10f20e4..139aa09e919 100644 --- a/admin/notes/lel-TODO +++ b/admin/notes/lel-TODO @@ -7,6 +7,7 @@ See the end of the file for license conditions. * Status Key - -- as yet unknown n/a -- not applicable (internal, uninteresting, etc) + obsolete -- an obsolete feature, to be removed in future todo -- not documented but should be NODE -- documented in or under info node NODE @@ -26,7 +27,6 @@ See the end of the file for license conditions. bytecomp (elisp) Compilation Functions checkdoc (elisp) Documentation Tips cl (cl) - cl-19 n/a cl-compat n/a cl-specs n/a copyright - @@ -47,13 +47,12 @@ See the end of the file for license conditions. generic (elisp) Generic Modes gulp n/a helper - - levents - + levents obsolete lisp-float-type - lisp-mnt - lisp-mode n/a - lmenu - - lselect - - lucid - + lmenu obsolete + lucid obsolete macroexp (elisp) Expansion pp (emacs) Program Indent re-builder - @@ -62,7 +61,7 @@ See the end of the file for license conditions. ring (elisp) Rings rx - shadow - - sregex - + sregex obsolete syntax (elisp) Position Parse testcover - timer (elisp) Timers diff --git a/autogen/Makefile.in b/autogen/Makefile.in index c3cca3f9f1b..4ade989d095 100644 --- a/autogen/Makefile.in +++ b/autogen/Makefile.in @@ -36,7 +36,7 @@ # 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=msvc-inval --avoid=msvc-nothrow --avoid=pathmax --avoid=raise --avoid=threadlib --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt careadlinkat crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dup2 filemode getloadavg getopt-gnu ignore-value intprops lstat mktime pthread_sigmask readlink socklen stdarg stdio strftime strtoimax strtoumax symlink sys_stat +# 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=msvc-inval --avoid=msvc-nothrow --avoid=raise --avoid=threadlib --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt careadlinkat crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dup2 filemode getloadavg getopt-gnu ignore-value intprops lstat mktime pthread_sigmask readlink socklen stdarg stdio strftime strtoimax strtoumax symlink sys_stat VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ @@ -72,7 +72,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ $(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/longlong.m4 \ $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/md5.m4 \ $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/multiarch.m4 \ - $(top_srcdir)/m4/nocrash.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/pathmax.m4 \ $(top_srcdir)/m4/pthread_sigmask.m4 \ $(top_srcdir)/m4/readlink.m4 $(top_srcdir)/m4/sha1.m4 \ $(top_srcdir)/m4/sha256.m4 $(top_srcdir)/m4/sha512.m4 \ @@ -795,8 +795,8 @@ EXTRA_DIST = alloca.in.h allocator.h careadlinkat.h md5.h sha1.h \ sha256.h sha512.h dosname.h ftoastr.c ftoastr.h dup2.c \ filemode.h getloadavg.c getopt.c getopt.in.h getopt1.c \ getopt_int.h ignore-value.h intprops.h inttypes.in.h lstat.c \ - mktime-internal.h mktime.c pthread_sigmask.c readlink.c \ - signal.in.h sigprocmask.c \ + mktime-internal.h mktime.c pathmax.h pthread_sigmask.c \ + readlink.c signal.in.h sigprocmask.c \ $(top_srcdir)/build-aux/snippet/_Noreturn.h \ $(top_srcdir)/build-aux/snippet/arg-nonnull.h \ $(top_srcdir)/build-aux/snippet/c++defs.h \ diff --git a/autogen/aclocal.m4 b/autogen/aclocal.m4 index 98a0e905b08..5fd9650b86b 100644 --- a/autogen/aclocal.m4 +++ b/autogen/aclocal.m4 @@ -1003,6 +1003,7 @@ m4_include([m4/md5.m4]) m4_include([m4/mktime.m4]) m4_include([m4/multiarch.m4]) m4_include([m4/nocrash.m4]) +m4_include([m4/pathmax.m4]) m4_include([m4/pthread_sigmask.m4]) m4_include([m4/readlink.m4]) m4_include([m4/sha1.m4]) diff --git a/autogen/configure b/autogen/configure index 325df38a2df..a83a6bda55c 100755 --- a/autogen/configure +++ b/autogen/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.65 for emacs 24.0.92. +# Generated by GNU Autoconf 2.65 for emacs 24.0.93. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, @@ -549,8 +549,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='emacs' PACKAGE_TARNAME='emacs' -PACKAGE_VERSION='24.0.92' -PACKAGE_STRING='emacs 24.0.92' +PACKAGE_VERSION='24.0.93' +PACKAGE_STRING='emacs 24.0.93' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -620,6 +620,8 @@ gl_GNULIB_ENABLED_stat_FALSE gl_GNULIB_ENABLED_stat_TRUE gl_GNULIB_ENABLED_sigprocmask_FALSE gl_GNULIB_ENABLED_sigprocmask_TRUE +gl_GNULIB_ENABLED_pathmax_FALSE +gl_GNULIB_ENABLED_pathmax_TRUE gl_GNULIB_ENABLED_be453cec5eecf5731a274f2de7f2db36_FALSE gl_GNULIB_ENABLED_be453cec5eecf5731a274f2de7f2db36_TRUE gl_GNULIB_ENABLED_dosname_FALSE @@ -1885,7 +1887,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures emacs 24.0.92 to adapt to many kinds of systems. +\`configure' configures emacs 24.0.93 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1959,7 +1961,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of emacs 24.0.92:";; + short | recursive ) echo "Configuration of emacs 24.0.93:";; esac cat <<\_ACEOF @@ -2122,7 +2124,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -emacs configure 24.0.92 +emacs configure 24.0.93 generated by GNU Autoconf 2.65 Copyright (C) 2009 Free Software Foundation, Inc. @@ -2844,7 +2846,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by emacs $as_me 24.0.92, which was +It was created by emacs $as_me 24.0.93, which was generated by GNU Autoconf 2.65. Invocation command line was $ $0 $@ @@ -3677,7 +3679,7 @@ fi # Define the identity of the package. PACKAGE='emacs' - VERSION='24.0.92' + VERSION='24.0.93' cat >>confdefs.h <<_ACEOF @@ -6959,6 +6961,7 @@ esac # Code from module mktime: # Code from module multiarch: # Code from module nocrash: + # Code from module pathmax: # Code from module pthread_sigmask: # Code from module readlink: # Code from module signal-h: @@ -9835,6 +9838,10 @@ ns_frag=/dev/null NS_OBJ= NS_OBJC_OBJ= if test "${HAVE_NS}" = yes; then + if test "$with_toolkit_scroll_bars" = "no"; then + as_fn_error "Non-toolkit scroll bars are not implemented for Nextstep." "$LINENO" 5 + fi + window_system=nextstep with_xft=no # set up packaging dirs @@ -12190,6 +12197,14 @@ $as_echo "$emacs_cv_lesstif" >&6; } CPPFLAGS=$OLD_CPPFLAGS fi fi + ac_fn_c_check_header_mongrel "$LINENO" "Xm/BulletinB.h" "ac_cv_header_Xm_BulletinB_h" "$ac_includes_default" +if test "x$ac_cv_header_Xm_BulletinB_h" = x""yes; then : + +else + as_fn_error "Motif toolkit requested but requirements not found." "$LINENO" 5 +fi + + fi @@ -12201,7 +12216,7 @@ if test "${with_toolkit_scroll_bars}" != "no"; then HAVE_XAW3D=no USE_TOOLKIT_SCROLL_BARS=yes - elif test "${HAVE_XAW3D}" = "yes"; then + elif test "${HAVE_XAW3D}" = "yes" || test "${USE_X_TOOLKIT}" = "LUCID"; then $as_echo "#define USE_TOOLKIT_SCROLL_BARS 1" >>confdefs.h USE_TOOLKIT_SCROLL_BARS=yes @@ -21802,6 +21817,7 @@ $as_echo "$gl_cv_next_unistd_h" >&6; } gl_gnulib_enabled_dosname=false gl_gnulib_enabled_be453cec5eecf5731a274f2de7f2db36=false + gl_gnulib_enabled_pathmax=false gl_gnulib_enabled_sigprocmask=false gl_gnulib_enabled_stat=false gl_gnulib_enabled_strtoll=false @@ -21821,6 +21837,15 @@ $as_echo "$gl_cv_next_unistd_h" >&6; } gl_gnulib_enabled_be453cec5eecf5731a274f2de7f2db36=true fi } + func_gl_gnulib_m4code_pathmax () + { + if ! $gl_gnulib_enabled_pathmax; then + + + + gl_gnulib_enabled_pathmax=true + fi + } func_gl_gnulib_m4code_sigprocmask () { if ! $gl_gnulib_enabled_sigprocmask; then @@ -21999,6 +22024,9 @@ fi if test $REPLACE_STAT = 1; then func_gl_gnulib_m4code_dosname fi + if test $REPLACE_STAT = 1; then + func_gl_gnulib_m4code_pathmax + fi if test $REPLACE_STAT = 1; then func_gl_gnulib_m4code_verify fi @@ -22158,6 +22186,14 @@ else gl_GNULIB_ENABLED_be453cec5eecf5731a274f2de7f2db36_FALSE= fi + if $gl_gnulib_enabled_pathmax; then + gl_GNULIB_ENABLED_pathmax_TRUE= + gl_GNULIB_ENABLED_pathmax_FALSE='#' +else + gl_GNULIB_ENABLED_pathmax_TRUE='#' + gl_GNULIB_ENABLED_pathmax_FALSE= +fi + if $gl_gnulib_enabled_sigprocmask; then gl_GNULIB_ENABLED_sigprocmask_TRUE= gl_GNULIB_ENABLED_sigprocmask_FALSE='#' @@ -22656,6 +22692,10 @@ if test -z "${gl_GNULIB_ENABLED_be453cec5eecf5731a274f2de7f2db36_TRUE}" && test as_fn_error "conditional \"gl_GNULIB_ENABLED_be453cec5eecf5731a274f2de7f2db36\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${gl_GNULIB_ENABLED_pathmax_TRUE}" && test -z "${gl_GNULIB_ENABLED_pathmax_FALSE}"; then + as_fn_error "conditional \"gl_GNULIB_ENABLED_pathmax\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${gl_GNULIB_ENABLED_sigprocmask_TRUE}" && test -z "${gl_GNULIB_ENABLED_sigprocmask_FALSE}"; then as_fn_error "conditional \"gl_GNULIB_ENABLED_sigprocmask\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -23116,7 +23156,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by emacs $as_me 24.0.92, which was +This file was extended by emacs $as_me 24.0.93, which was generated by GNU Autoconf 2.65. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -23182,7 +23222,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -emacs config.status 24.0.92 +emacs config.status 24.0.93 configured by $0, generated by GNU Autoconf 2.65, with options \\"\$ac_cs_config\\" diff --git a/configure.in b/configure.in index 91302e1c3ee..0277c0a6b60 100644 --- a/configure.in +++ b/configure.in @@ -22,7 +22,7 @@ dnl You should have received a copy of the GNU General Public License dnl along with GNU Emacs. If not, see . AC_PREREQ(2.65) -AC_INIT(emacs, 24.0.92) +AC_INIT(emacs, 24.0.93) AC_CONFIG_HEADER(src/config.h:src/config.in) AC_CONFIG_SRCDIR(src/lisp.h) AC_CONFIG_AUX_DIR(build-aux) @@ -1568,6 +1568,10 @@ ns_frag=/dev/null NS_OBJ= NS_OBJC_OBJ= if test "${HAVE_NS}" = yes; then + if test "$with_toolkit_scroll_bars" = "no"; then + AC_MSG_ERROR([Non-toolkit scroll bars are not implemented for Nextstep.]) + fi + window_system=nextstep with_xft=no # set up packaging dirs @@ -2234,6 +2238,8 @@ Motif version prior to 2.1. CPPFLAGS=$OLD_CPPFLAGS fi fi + AC_CHECK_HEADER([Xm/BulletinB.h], [], + [AC_MSG_ERROR([Motif toolkit requested but requirements not found.])]) fi dnl Use toolkit scroll bars if configured for GTK or X toolkit and either @@ -2249,7 +2255,7 @@ if test "${with_toolkit_scroll_bars}" != "no"; then AC_DEFINE(USE_TOOLKIT_SCROLL_BARS) HAVE_XAW3D=no USE_TOOLKIT_SCROLL_BARS=yes - elif test "${HAVE_XAW3D}" = "yes"; then + elif test "${HAVE_XAW3D}" = "yes" || test "${USE_X_TOOLKIT}" = "LUCID"; then AC_DEFINE(USE_TOOLKIT_SCROLL_BARS) USE_TOOLKIT_SCROLL_BARS=yes fi diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 90a7f69ea72..004911faf57 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,72 @@ +2012-02-10 Glenn Morris + + * mini.texi (Minibuffer Edit): Mention minibuffer-inactive-mode. + + * programs.texi (Misc for Programs): Mention electric-layout-mode. + +2012-02-09 Glenn Morris + + * buffers.texi (Misc Buffer): M-x info does not seem to require a + buffer switch after M-x rename-uniquely. + + * trouble.texi (Checklist): Mention C-c m in report-emacs-bug. + +2012-02-09 Jay Belanger + + * text.texi (Org Mode): Fix typo. + +2012-02-08 Glenn Morris + + * ack.texi (Acknowledgments): Update emacs-lock info. + + * rmail.texi (Rmail Display): Mention rmail-epa-decrypt. + + * text.texi (LaTeX Editing): Mention latex-electric-env-pair-mode. + +2012-02-07 Glenn Morris + + * files.texi (File Conveniences): Mention ImageMagick images. + +2012-02-05 Glenn Morris + + * trouble.texi (Checklist): Mention debug-on-event. + + * maintaining.texi (Maintaining): Add cross-ref to ERT. + +2012-02-04 Glenn Morris + + * macos.texi (Customization options specific to Mac OS / GNUstep): + New subsection. + + * display.texi (Colors): Mention list-colors-sort. + + * files.texi (File Conveniences): Mention image animation. + +2012-01-31 Chong Yidong + + * windows.texi (Split Window): C-mouse-2 doesn't work on GTK+ + scroll bars (Bug#10666). + +2012-01-28 Chong Yidong + + * files.texi (Filesets): Fix typos. + + * display.texi (Faces): Add xref to Colors node. + +2012-01-27 Dani Moncayo + + * buffers.texi (Select Buffer): Clarify explanation of switching + to new buffers. Fix description of next-buffer and + previous-buffer (Bug#10334). + (Misc Buffer): Add xref to View Mode. + + * text.texi (Fill Commands): Fix description of + sentence-end-double-space. + +2012-01-23 Chong Yidong + + * anti.texi (Antinews): Add Emacs 23 antinews. + 2012-01-16 Volker Sobek (tiny change) * programs.texi (Comment Commands): Typo (bug#10514). diff --git a/doc/emacs/ack.texi b/doc/emacs/ack.texi index 184f8272cab..13bc327fbab 100644 --- a/doc/emacs/ack.texi +++ b/doc/emacs/ack.texi @@ -79,6 +79,12 @@ individual buffers; and @file{macroexp.el} for macro-expansion. David Bakhash wrote @file{strokes.el}, a mode for controlling Emacs by moving the mouse in particular patterns. +@item +Juanma Barranquero wrote @file{emacs-lock.el} (based on the original +version by Tom Wurgler), which makes it harder to exit with valuable +buffers unsaved. He also made many other contributions to other +areas, including MS Windows support. + @item Eli Barzilay wrote @file{calculator.el}, a desktop calculator for Emacs. @@ -1340,10 +1346,6 @@ merging two versions of a file. Francis J.@: Wright wrote @file{woman.el}, a package for browsing manual pages without the @code{man} command. -@item -Tom Wurgler wrote @file{emacs-lock.el}, which makes it harder -to exit with valuable buffers unsaved. - @item Masatake Yamato wrote @file{ld-script.el}, an editing mode for GNU linker scripts, and contributed subword handling in CC mode. diff --git a/doc/emacs/anti.texi b/doc/emacs/anti.texi index d9f17c91f5e..7bc405e442e 100644 --- a/doc/emacs/anti.texi +++ b/doc/emacs/anti.texi @@ -13,7 +13,100 @@ greater simplicity that results from the absence of many Emacs @itemize @bullet @item -FIXME +Support for displaying and editing ``bidirectional'' text has been +removed. Text is now always displayed on the screen in a single +consistent direction---left to right---regardless of the underlying +script. Similarly, @kbd{C-f} and @kbd{C-b} always move the text +cursor to the right and left respectively. Also, @key{right} and +@key{left} are now equivalent to @kbd{C-f} and @kbd{C-b}, as you might +expect, rather than moving forward or backward based on the underlying +``paragraph direction''. + +Users of ``right-to-left'' languages, like Arabic and Hebrew, may +adapt by reading and/or editing text in left-to-right order. + +@item +The Emacs Lisp package manager has been removed. Instead of using a +``user interface'' (@kbd{M-x list-packages}), additional Lisp packages +must now be installed by hand, which is the most flexible and +``Lispy'' method anyway. Typically, this just involves editing your +init file to add the package installation directory to the load path +and defining some autoloads; see each package's commentary section +and/or README file for details. + +@item +The option @code{delete-active-region} has been deleted. When the +region is active, typing @key{DEL} or @key{delete} no longer deletes +the text in the region; it deletes a single character instead. + +@item +We have reworked how Emacs handles the clipboard and the X primary +selection. Commands for killing and yanking, like @kbd{C-w} and +@kbd{C-y}, use the primary selection and not the clipboard, so you can +use these commands without interfering with ``cutting'' or ``pasting'' +in other programs. The @samp{Cut}/@samp{Copy}/@samp{Paste} menu items +are bound to separate clipboard commands, not to the same commands as +@kbd{C-w}/@kbd{M-w}/@kbd{C-y}. + +Selecting text by dragging with the mouse now puts the text in the +kill ring, in addition to the primary selection. But note that +selecting an active region with @kbd{C-@key{SPC}} does @emph{not} +alter the kill ring nor the primary selection, even though the text +highlighting is visually identical. + +@item +In Isearch, @kbd{C-y} and @kbd{M-y} are no longer bound to +@code{isearch-yank-kill} and @code{isearch-yank-pop} respectively. +Instead, @kbd{C-y} yanks the rest of the current line into the search +string (@code{isearch-yank-line}), whereas @kbd{M-y} does +@code{isearch-yank-kill}. The mismatch with the usual meanings of +@kbd{C-y} and @kbd{M-y} is unintended. + +@item +Various completion features have been simplified. The options +@code{completion-cycle-threshold} and +@code{completion-category-overrides} have been removed. Due to the +latter removal, Emacs uses a single consistent scheme to generate +completions, instead of using a separate scheme for (say) buffer name +completion. Several major modes, such as Shell mode, now implement +their own inline completion commands instead of using +@code{completion-at-point}. + +@item +We have removed various options for controlling how windows are used, +e.g.@: @code{display-buffer-base-action}, @code{display-buffer-alist}, +@code{window-combination-limit}, and @code{window-combination-resize}. + +@item +The command @kbd{M-x customize-themes} has been removed. Emacs no +longer comes with pre-defined themes (you can write your own). + +@item +Emacs no longer adapts various aspects of its display to GTK+ +settings, opting instead for a uniform toolkit-independent look. GTK+ +scroll bars are placed on the left, the same position as non-GTK+ X +scroll bars. Emacs no longer refers to GTK+ to set the default +@code{region} face, nor for drawing tooltips. + +@item +Setting the option @code{delete-by-moving-to-trash} to a +non-@code{nil} now causes all file deletions to use the system trash, +even temporary files created by Lisp programs; furthermore, the +@kbd{M-x delete-file} and @kbd{M-x delete-directory} commands no +longer accept prefix arguments to force true deletion. + +@item +On GNU/Linux and Unix, the default method for sending mail (as +specified by @code{send-mail-function}) is to use the +@command{sendmail} program. Emacs no longer asks for a delivery +method the first time you try to send mail, trusting instead that the +system is configured for mail delivery, as it ought to be. + +@item +Several VC features have been removed, including the @kbd{C-x v +} and +@kbd{C-x v m} commands for pulling and merging on distributed version +control systems, and the ability to view inline log entries in the log +buffers made by @kbd{C-x v L}. @item To keep up with decreasing computer memory capacity and disk space, many diff --git a/doc/emacs/buffers.texi b/doc/emacs/buffers.texi index fb71e04c184..c3a778dd202 100644 --- a/doc/emacs/buffers.texi +++ b/doc/emacs/buffers.texi @@ -90,9 +90,7 @@ selected buffer other than the current buffer. name using the minibuffer. Then it makes that buffer current, and displays it in the currently-selected window. An empty input specifies the buffer that was current most recently among those not -now displayed in any window. If you specify a buffer that does not -exist, @kbd{C-x b} creates a new, empty buffer that is not visiting -any file, and selects it for editing. +now displayed in any window. While entering the buffer name, you can use the usual completion and history commands (@pxref{Minibuffer}). Note that @kbd{C-x b}, and @@ -102,21 +100,24 @@ completing up to a nonexistent buffer name, Emacs prints @samp{[Confirm]} and you must type a second @key{RET} to submit that buffer name. @xref{Completion Exit}, for details. - One reason to create a new buffer is to use it for making temporary -notes. If you try to save it, Emacs asks for the file name to use. -The default value of the variable @code{major-mode} determines the new -buffer's major mode; the default value is Fundamental mode. @xref{Major -Modes}. + If you specify a buffer that does not exist, @kbd{C-x b} creates a +new, empty buffer that is not visiting any file, and selects it for +editing. The default value of the variable @code{major-mode} +determines the new buffer's major mode; the default value is +Fundamental mode. @xref{Major Modes}. One reason to create a new +buffer is to use it for making temporary notes. If you try to save +it, Emacs asks for the file name to use. @kindex C-x @key{LEFT} @kindex C-x @key{RIGHT} @findex next-buffer @findex previous-buffer For conveniently switching between a few buffers, use the commands -@kbd{C-x @key{LEFT}} and @kbd{C-x @key{RIGHT}}. @kbd{C-x @key{RIGHT}} -(@code{previous-buffer}) selects the previous buffer (following the order -of most recent selection in the current frame), while @kbd{C-x @key{LEFT}} -(@code{next-buffer}) moves through buffers in the reverse direction. +@kbd{C-x @key{LEFT}} and @kbd{C-x @key{RIGHT}}. @kbd{C-x @key{LEFT}} +(@code{previous-buffer}) selects the previous buffer (following the +order of most recent selection in the current frame), while @kbd{C-x +@key{RIGHT}} (@code{next-buffer}) moves through buffers in the reverse +direction. @kindex C-x 4 b @findex switch-to-buffer-other-window @@ -215,7 +216,7 @@ Change the name of the current buffer. @item M-x rename-uniquely Rename the current buffer by adding @samp{<@var{number}>} to the end. @item M-x view-buffer @key{RET} @var{buffer} @key{RET} -Scroll through buffer @var{buffer}. +Scroll through buffer @var{buffer}. @xref{View Mode}. @end table @kindex C-x C-q @@ -251,13 +252,13 @@ do @kbd{M-x shell} again, it makes a new shell buffer named under its new name. This method is also good for mail buffers, compilation buffers, and most Emacs features that create special buffers with particular names. (With some of these features, such as -@kbd{M-x compile}, @kbd{M-x grep} an @kbd{M-x info}, you need to -switch to some other buffer before using the command, in order for it -to make a different buffer.) +@kbd{M-x compile}, @kbd{M-x grep}, you need to switch to some other +buffer before using the command again, otherwise it will reuse the +current buffer despite the name change.) The commands @kbd{M-x append-to-buffer} and @kbd{M-x insert-buffer} -can be used to copy text from one buffer to another. @xref{Accumulating -Text}. +can also be used to copy text from one buffer to another. +@xref{Accumulating Text}. @node Kill Buffer @section Killing Buffers diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi index 67feb791fe1..8159b8cc6aa 100644 --- a/doc/emacs/display.texi +++ b/doc/emacs/display.texi @@ -493,7 +493,7 @@ attribute is taken from the face named @code{default}. The @code{default} face is the default for displaying text, and all of its attributes are specified. Its background color is also used as -the frame's background color. +the frame's background color. @xref{Colors}. @cindex cursor face Another special face is the @code{cursor} face. On graphical @@ -524,16 +524,18 @@ specify a color for a face---for instance, when customizing the face or an @dfn{RGB triplet}. @findex list-colors-display +@vindex list-colors-sort A color name is a pre-defined name, such as @samp{dark orange} or @samp{medium sea green}. To view a list of color names, type @kbd{M-x -list-colors-display}. If you run this command on a graphical display, -it shows the full range of color names known to Emacs (these are the -standard X11 color names, defined in X's @file{rgb.txt} file). If you -run the command on a text-only terminal, it shows only a small subset -of colors that can be safely displayed on such terminals. However, -Emacs understands X11 color names even on text-only terminals; if a -face is given a color specified by an X11 color name, it is displayed -using the closest-matching terminal color. +list-colors-display}. To control the order in which colors are shown, +customize @code{list-colors-sort}. If you run this command on a +graphical display, it shows the full range of color names known to Emacs +(these are the standard X11 color names, defined in X's @file{rgb.txt} +file). If you run the command on a text-only terminal, it shows only a +small subset of colors that can be safely displayed on such terminals. +However, Emacs understands X11 color names even on text-only terminals; +if a face is given a color specified by an X11 color name, it is +displayed using the closest-matching terminal color. An RGB triplet is a string of the form @samp{#RRGGBB}. Each of the R, G, and B components is a hexadecimal number specifying the diff --git a/doc/emacs/emacsver.texi b/doc/emacs/emacsver.texi index cb3f3f39778..d85e6c7fdee 100644 --- a/doc/emacs/emacsver.texi +++ b/doc/emacs/emacsver.texi @@ -1,4 +1,4 @@ @c It would be nicer to generate this using configure and @version@. @c However, that would mean emacsver.texi would always be newer @c then the info files in release tarfiles. -@set EMACSVER 24.0.92 +@set EMACSVER 24.0.93 diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi index 77211a3d9ac..b34b96126ad 100644 --- a/doc/emacs/files.texi +++ b/doc/emacs/files.texi @@ -1907,15 +1907,26 @@ point. Partial Completion mode offers other features extending @findex image-mode @findex image-toggle-display +@findex image-toggle-animation @cindex images, viewing +@cindex image animation +@cindex animated images Visiting image files automatically selects Image mode. This major mode allows you to toggle between displaying the file as an image in the Emacs buffer, and displaying its underlying text representation, using the command @kbd{C-c C-c} (@code{image-toggle-display}). This -works only when Emacs can display the specific image type. If the -displayed image is wider or taller than the frame, the usual point -motion keys (@kbd{C-f}, @kbd{C-p}, and so forth) cause different parts -of the image to be displayed. +works only when Emacs can display the specific image type@footnote{If +your Emacs was compiled with ImageMagick support, then after using +@code{imagemagick-register-types}, you can view in Image mode any +image type that ImageMagick supports; @pxref{ImageMagick Images,,, +elisp, The Emacs Lisp Reference Manual}}. If the displayed image is wider +or taller than the frame, the usual point motion keys (@kbd{C-f}, +@kbd{C-p}, and so forth) cause different parts of the image to be +displayed. If the image can be animated, then the command @kbd{RET} +(@code{image-toggle-animation}), will start (or stop) animating it. +Animation plays once, unless the option @code{image-animate-loop} is +non-@code{nil}. Currently, Emacs only supports animated GIF files +(@pxref{Animated Images,,, elisp, The Emacs Lisp Reference Manual}). @findex thumbs-mode @findex mode, thumbs @@ -1936,20 +1947,20 @@ adds a @samp{Filesets} menu to the menu bar. @findex filesets-add-buffer @findex filesets-remove-buffer - The simplest way to define a fileset is by adding files to it one -at a time. To add a file to fileset @var{name}, visit the file and -type @kbd{M-x filesets-add-buffer @kbd{RET} @var{name} @kbd{RET}}. If + The simplest way to define a fileset is by adding files to it one at +a time. To add a file to fileset @var{name}, visit the file and type +@kbd{M-x filesets-add-buffer @kbd{RET} @var{name} @kbd{RET}}. If there is no fileset @var{name}, this creates a new one, which -initially creates only the current file. The command @kbd{M-x +initially contains only the current file. The command @kbd{M-x filesets-remove-buffer} removes the current file from a fileset. You can also edit the list of filesets directly, with @kbd{M-x filesets-edit} (or by choosing @samp{Edit Filesets} from the @samp{Filesets} menu). The editing is performed in a Customize buffer -(@pxref{Easy Customization}). Filesets need not be a simple list of -files---you can also define filesets using regular expression matching -file names. Some examples of these more complicated filesets are -shown in the Customize buffer. Remember to select @samp{Save for +(@pxref{Easy Customization}). Normally, a fileset is a simple list of +files, but you can also define a fileset as a regular expression +matching file names. Some examples of these more complicated filesets +are shown in the Customize buffer. Remember to select @samp{Save for future sessions} if you want to use the same filesets in future Emacs sessions. diff --git a/doc/emacs/frames.texi b/doc/emacs/frames.texi index 1adeee480a6..38ee620dbd5 100644 --- a/doc/emacs/frames.texi +++ b/doc/emacs/frames.texi @@ -370,7 +370,6 @@ side-by-side windows with the boundary running through the click position (@pxref{Split Window}). @end table -@kindex C-Mouse-2 @r{(scroll bar)} @kindex Mouse-1 @r{(scroll bar)} Furthermore, by clicking and dragging @kbd{Mouse-1} on the divider between two side-by-side mode lines, you can move the vertical diff --git a/doc/emacs/macos.texi b/doc/emacs/macos.texi index a36dc0cbcc5..e6d936e8e9f 100644 --- a/doc/emacs/macos.texi +++ b/doc/emacs/macos.texi @@ -130,6 +130,18 @@ open the dragged files in the current frame use the following line: @end lisp +@subsection Customization options specific to Mac OS / GNUstep + +The following customization options are specific to the Nextstep port. + +@table @code +@item ns-auto-hide-menu-bar +Non-nil means the menu-bar is hidden by default, but appears if you +move the mouse pointer over it. (Requires OS X 10.6 or later.) + +@end table + + @node Mac / GNUstep Events, GNUstep Support, Mac / GNUstep Customization, Mac OS / GNUstep @section Windowing System Events under Mac OS / GNUstep diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi index 2ec477031ca..d2f92bf0da5 100644 --- a/doc/emacs/maintaining.texi +++ b/doc/emacs/maintaining.texi @@ -6,7 +6,10 @@ @chapter Maintaining Large Programs This chapter describes Emacs features for maintaining large -programs. +programs. If you are maintaining a large Lisp program, then in +addition to the features described here, you may find +the @file{ERT} (``Emacs Lisp Regression Testing'') library useful +(@pxref{Top,,ERT,ert, Emacs Lisp Regression Testing}). @menu * Version Control:: Using version control systems. diff --git a/doc/emacs/mini.texi b/doc/emacs/mini.texi index b7c63171c56..ca8e8f705b4 100644 --- a/doc/emacs/mini.texi +++ b/doc/emacs/mini.texi @@ -195,6 +195,12 @@ possible completions. @xref{Other Window}. the minibuffer is active. To allow such commands in the minibuffer, set the variable @code{enable-recursive-minibuffers} to @code{t}. +@findex minibuffer-inactive-mode + When not active, the minibuffer is in @code{minibuffer-inactive-mode}, +and clicking @kbd{Mouse-1} there shows the @samp{*Messages*} buffer. +If you use a dedicated frame for minibuffers, Emacs also recognizes +certain keys there, for example @kbd{n} to make a new frame. + @node Completion @section Completion @c This node is referenced in the tutorial. When renaming or deleting diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi index 8ba9b78603a..346e2fff5ff 100644 --- a/doc/emacs/programs.texi +++ b/doc/emacs/programs.texi @@ -1415,6 +1415,12 @@ paragraph commands to work on. Auto Fill mode, if enabled in a programming language major mode, indents the new lines which it creates. +@findex electric-layout-mode + Electric Layout mode (@kbd{M-x electric-layout-mode}) is a global +minor mode that automatically inserts newlines when you type certain +characters; for example, @samp{@{}, @samp{@}} and @samp{;} in Javascript +mode. + Apart from Hideshow mode (@pxref{Hideshow}), another way to selectively display parts of a program is to use the selective display feature (@pxref{Selective Display}). Programming modes often also diff --git a/doc/emacs/rmail.texi b/doc/emacs/rmail.texi index be1c1f68c66..18556d4a5ef 100644 --- a/doc/emacs/rmail.texi +++ b/doc/emacs/rmail.texi @@ -1118,7 +1118,7 @@ buffer before sorting it. @section Display of Messages This section describes how Rmail displays mail headers, -@acronym{MIME} sections and attachments, and URLs. +@acronym{MIME} sections and attachments, URLs, and encrypted messages. @table @kbd @item t @@ -1209,6 +1209,12 @@ variable @code{rmail-enable-mime} to @code{nil}. When this is the case, the @kbd{v} (@code{rmail-mime}) command instead creates a temporary buffer to display the current @acronym{MIME} message. +@findex rmail-epa-decrypt +@cindex encrypted mails (reading in Rmail) + If the current message is an encrypted one, use the command @kbd{M-x +rmail-epa-decrypt} to decrypt it, using the EasyPG library +(@pxref{Top,,, epa, EasyPG Assistant User's Manual}). + You can highlight and activate URLs in the Rmail buffer using Goto Address mode: diff --git a/doc/emacs/text.texi b/doc/emacs/text.texi index ccc546fb0a1..027138811ca 100644 --- a/doc/emacs/text.texi +++ b/doc/emacs/text.texi @@ -546,11 +546,11 @@ made by Text mode and is available only in that and related modes newline as the end of a sentence; a period followed by just one space indicates an abbreviation, not the end of a sentence. Accordingly, the fill commands will not break a line after a period followed by -just one space. If you change the variable -@code{sentence-end-double-space} to a non-@code{nil} value, the fill -commands will break a line after a period followed by one space, and -put just one space after each period. @xref{Sentences}, for other -effects and possible drawbacks of this. +just one space. If you set the variable +@code{sentence-end-double-space} to @code{nil}, the fill commands will +break a line after a period followed by one space, and put just one +space after each period. @xref{Sentences}, for other effects and +possible drawbacks of this. @vindex colon-double-space If the variable @code{colon-double-space} is non-@code{nil}, the @@ -1302,7 +1302,7 @@ lines but no body lines, and (iii) showing everything. body lines and subtree (if any), by typing @kbd{M-} (@code{org-metaup}) or @kbd{M-} (@code{org-metadown}) on the heading line. Similarly, you can promote or demote a heading line -with @kbd{M-} (@code{org-metaleft}) and @kbd{M-} +with @kbd{M-} (@code{org-metaleft}) and @kbd{M-} (@code{org-metaright}). These commands execute their global bindings if invoked on a body line. @@ -1591,12 +1591,15 @@ variable @code{latex-block-names}. @findex tex-close-latex-block @kindex C-c C-e @r{(La@TeX{} mode)} +@findex latex-electric-env-pair-mode In La@TeX{} input, @samp{\begin} and @samp{\end} tags must balance. You can use @kbd{C-c C-e} (@code{tex-close-latex-block}) to insert an @samp{\end} tag which matches the last unmatched @samp{\begin}. It also indents the @samp{\end} to match the corresponding @samp{\begin}, and inserts a newline after the @samp{\end} tag if point is at the -beginning of a line. +beginning of a line. The minor mode @code{latex-electric-env-pair-mode} +automatically inserts an @samp{\end} or @samp{\begin} tag for you +when you type the corresponding one. @node TeX Print @subsection @TeX{} Printing Commands diff --git a/doc/emacs/trouble.texi b/doc/emacs/trouble.texi index 8cb5ab44a2e..1b3f1419af4 100644 --- a/doc/emacs/trouble.texi +++ b/doc/emacs/trouble.texi @@ -592,9 +592,10 @@ When you have finished writing your report, type @kbd{C-c C-c} and it will be sent to the Emacs maintainers at @email{bug-gnu-emacs@@gnu.org}. (If you want to suggest an improvement or new feature, use the same address.) If you cannot send mail from inside Emacs, you can copy the -text of your report to your normal mail client and send it to that -address. Or you can simply send an email to that address describing -the problem. +text of your report to your normal mail client (if your system +supports it, you can type @kbd{C-c m} to have Emacs do this for you) +and send it to that address. Or you can simply send an email to that +address describing the problem. Your report will be sent to the @samp{bug-gnu-emacs} mailing list, and stored in the GNU Bug Tracker at @url{http://debbugs.gnu.org}. Please @@ -784,6 +785,12 @@ non-@code{nil} will start the Lisp debugger and show a backtrace. This backtrace is useful for debugging such long loops, so if you can produce it, copy it into the bug report. +@vindex debug-on-event +If you cannot get Emacs to respond to @kbd{C-g} (e.g., because +@code{inhibit-quit} is set), then you can try sending the signal +specified by @code{debug-on-event} (default SIGUSR2) from outside +Emacs to cause it to enter the debugger. + @item Check whether any programs you have loaded into the Lisp world, including your initialization file, set any variables that may affect diff --git a/doc/emacs/windows.texi b/doc/emacs/windows.texi index 76ab79361e4..3733eed3eca 100644 --- a/doc/emacs/windows.texi +++ b/doc/emacs/windows.texi @@ -72,7 +72,7 @@ Split the selected window into two windows, one above the other Split the selected window into two windows, positioned side by side (@code{split-window-right}). @item C-Mouse-2 -In the mode line or scroll bar of a window, split that window. +In the mode line of a window, split that window. @end table @kindex C-x 2 @@ -125,11 +125,14 @@ lines in every partial-width window regardless of its width. On text terminals, side-by-side windows are separated by a vertical divider which is drawn using the @code{vertical-border} face. +@kindex C-Mouse-2 @r{(mode line)} @kindex C-Mouse-2 @r{(scroll bar)} - You can also split a window horizontally or vertically by clicking -@kbd{C-Mouse-2} in the mode line or the scroll bar. If you click on -the mode line, that puts the vertical divider where you click; if you -click in the scroll bar, that puts the new mode-line where you click. + If you click @kbd{C-Mouse-2} in the mode line of a window, that +splits the window, putting a vertical divider where you click. +Depending on how Emacs is compiled, you can also split a window by +clicking @kbd{C-Mouse-2} in the scroll bar, which puts a horizontal +divider where you click (this feature does not work when Emacs uses +GTK+ scroll bars). @node Other Window @section Using Other Windows diff --git a/doc/lispintro/ChangeLog b/doc/lispintro/ChangeLog index 0365a3ca174..bf08571f6fb 100644 --- a/doc/lispintro/ChangeLog +++ b/doc/lispintro/ChangeLog @@ -1,3 +1,17 @@ +2012-01-28 Andreas Schwab + + * emacs-lisp-intro.texi (Top): Move setting of COUNT-WORDS outside + of @menu. (Bug#10628) + +2012-01-19 Juanma Barranquero + + * emacs-lisp-intro.texi (count-words-in-defun): + Add missing parenthesis (bug#10544). + +2012-01-17 Glenn Morris + + * emacs-lisp-intro.texi (re-search-forward): Fix typo. + 2011-11-24 Juanma Barranquero * makefile.w32-in: Update dependencies. diff --git a/doc/lispintro/emacs-lisp-intro.texi b/doc/lispintro/emacs-lisp-intro.texi index 0f9b6b906aa..a72fd253bc8 100644 --- a/doc/lispintro/emacs-lisp-intro.texi +++ b/doc/lispintro/emacs-lisp-intro.texi @@ -334,6 +334,9 @@ every node in every chapter. @c global@pageno = -11 @c end iftex +@set COUNT-WORDS count-words-example +@c Length of variable name chosen so that things still line up when expanded. + @menu * Preface:: What to look for. * List Processing:: What is Lisp? @@ -702,8 +705,6 @@ Regular Expression Searches * fwd-para while:: The forward motion @code{while} loop. Counting: Repetition and Regexps -@set COUNT-WORDS count-words-example -@c Length of variable name chosen so that things still line up when expanded. * Why Count Words:: * @value{COUNT-WORDS}:: Use a regexp, but find a problem. @@ -12607,7 +12608,7 @@ four arguments: @enumerate @item The first argument is the regular expression that the function searches -for. The regular expression will be a string between quotations marks. +for. The regular expression will be a string between quotation marks. @item The optional second argument limits how far the function will search; it is a @@ -15012,7 +15013,7 @@ expression for this (@pxref{Syntax}), so the loop is straightforward: @group (while (and (< (point) end) (re-search-forward - "\\(\\w\\|\\s_\\)+[^ \t\n]*[ \t\n]*" end t) + "\\(\\w\\|\\s_\\)+[^ \t\n]*[ \t\n]*" end t)) (setq count (1+ count))) @end group @end smallexample diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 4b9531c0e6c..d8e322790e7 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,321 @@ +2012-02-10 Leo Liu + + * control.texi (Handling Errors): Change condition-case-no-debug + to condition-case-unless-debug. + +2012-02-10 Chong Yidong + + * advice.texi (Defining Advice): Clarify ad-unadvise. + (Activation of Advice): Specifying the ACTIVATE flag in defadvice + is not abnormal. + (Advising Primitives): Node deleted; ad-define-subr-args has been + removed. + + * compile.texi (Speed of Byte-Code): Use float-time in example. + (Compilation Functions): Note that the log uses Compilation mode. + Don't discuss the contents of byte-code function object here. + (Compilation Functions): De-document internal function byte-code. + (Docs and Compilation): Minor clarifications. + + * objects.texi (Byte-Code Type): Add xref to Byte-Code Function + Objects. + +2012-02-10 Glenn Morris + + * text.texi (Checksum/Hash): Rename node from MD5 Checksum. + Mention secure-hash. + * elisp.texi, vol1.texi, vol2.texi: Update menu entry. + +2012-02-10 Chong Yidong + + * loading.texi (Loading): Don't emphasize "library" terminology. + (Library Search): load-path is not a user option. Mention role of + -L option and packages. Improve examples. + (Loading Non-ASCII): Don't mention unibyte Emacs, which is + obsolete. + (Autoload): Minor clarifications. + +2012-02-10 Glenn Morris + + * files.texi (Magic File Names): Tweak remote-file-name-inhibit-cache. + + * modes.texi (Basic Major Modes): Mention tabulated-list-mode. + +2012-02-08 Glenn Morris + + * loading.texi (Named Features): Update the require example. + +2012-02-07 Glenn Morris + + * modes.texi (Defining Minor Modes): + Expand on args of defined minor modes. + +2012-02-07 Chong Yidong + + * variables.texi (Creating Buffer-Local): Minor clarification + to buffer-local-variables doc (Bug#10715). + +2012-02-07 Glenn Morris + + * display.texi (ImageMagick Images): General update. + Move most details of imagemagick-render-type to the variable's doc. + +2012-02-06 Glenn Morris + + * keymaps.texi (Tool Bar): Mention separators. + (Inheritance and Keymaps): + Mention make-composed-keymap and multiple inheritance. + + * modes.texi (Running Hooks): Mention run-hook-wrapped. + + * control.texi (Handling Errors): + Mention condition-case-no-debug and with-demoted-errors. + +2012-02-05 Chong Yidong + + * customize.texi (Common Keywords): Minor clarifications. + Document custom-unlispify-remove-prefixes. + (Variable Definitions): Backquotes in defcustom seem to work fine + now. Various other copyedits. + (Simple Types): Copyedits. Document color selector. + (Composite Types): Copyedits. + (Splicing into Lists): Clarifications. + + * eval.texi (Backquote): Move from macros.texi. + + * macros.texi (Expansion): Minor clarification. + (Backquote): Move node to eval.texi. + (Defining Macros): Move an example from Backquote node. + (Argument Evaluation): No need to mention Pascal. + (Indenting Macros): Add xref to Defining Macros. + +2012-02-05 Glenn Morris + + * debugging.texi (Error Debugging): Mention debug-on-event default. + +2012-02-04 Glenn Morris + + * backups.texi (Reverting): Mention revert-buffer-in-progress-p. + + * debugging.texi (Error Debugging): Mention debug-on-event. + * commands.texi (Misc Events): Mention sigusr1,2 and debugging. + + * modes.texi (Running Hooks): Try to clarify with-wrapper-hook. + + * text.texi (Buffer Contents): + Update filter-buffer-substring description. + +2012-02-04 Chong Yidong + + * functions.texi (What Is a Function): Add closures. Mention + "return value" terminology. Add xref for command-execute. Remove + unused "keystroke command" terminology. + (Lambda Expressions): Give a different example than in the + following subsection. Add xref to Anonymous Functions. + (Function Documentation): Remove gratuitous markup. + (Function Names): Move introductory text to `What Is a Function'. + (Defining Functions): Fix defun argument spec. + (Anonymous Functions): Document lambda macro explicitly. Mention + effects on lexical binding. + (Function Cells): Downplay direct usage of fset. + (Closures): New node. + (Inline Functions): Remove "open-code" terminology. + (Declaring Functions): Minor tweak; .m is not C code. + + * variables.texi (Variables): Don't refer to "global value". + (Local Variables, Void Variables): Copyedits. + (Lexical Binding): Minor clarification of example. + (File Local Variables): Mention :safe and :risky defcustom args. + (Lexical Binding): Add xref to Closures node. + +2012-02-04 Glenn Morris + + * minibuf.texi (High-Level Completion): Updates for read-color. + +2012-02-03 Glenn Morris + + * display.texi (GIF Images): Mention animation. + Remove commented-out old example of animation. + (Animated Images): New subsection. + * elisp.texi (Top): + * vol1.texi (Top): + * vol2.texi (Top): Add Animated Images menu entry. + + * display.texi (Image Formats): Remove oddly specific information + on versions of image libraries. + (GIF Images, TIFF Images): Minor rephrasing. + +2012-02-02 Glenn Morris + + * processes.texi (Synchronous Processes): + Mention call-process's :file gets overwritten. + + * commands.texi (Reading One Event): + * help.texi (Help Functions): Document read-char-choice. + + * hooks.texi (Standard Hooks): + * modes.texi (Keymaps and Minor Modes): + * text.texi (Commands for Insertion): Document post-self-insert-hook. + + * hooks.texi (Standard Hooks): Add prog-mode-hook. + + * hooks.texi (Standard Hooks): + * modes.texi (Major Mode Conventions, Mode Hooks): + Document change-major-mode-after-body-hook. + +2012-02-01 Glenn Morris + + * modes.texi (Defining Minor Modes): + Mention disabling global minor modes on a per-major-mode basis. + +2012-01-31 Chong Yidong + + * syntax.texi (Parsing Expressions): Clarify intro (Bug#10657). + (Parser State): Remove unnecessary statement (Bug#10661). + + * eval.texi (Intro Eval): Add footnote about "sexp" terminology. + +2012-01-31 Glenn Morris + + * modes.texi (Defining Minor Modes): + Document define-minor-mode's new :variable keyword. + +2012-01-29 Chong Yidong + + * syntax.texi (Syntax Class Table): Tweak description of newline + char syntax (Bug#9619). + + * numbers.texi (Predicates on Numbers): Fix wholenump/natnump + description (Bug#10189). + +2012-01-29 Glenn Morris + + * files.texi (Changing Files): Document SELinux support. + + * windows.texi (Window Sizes): Fix typo. + +2012-01-28 Chong Yidong + + * display.texi (Fringe Indicators): Clarify fringe-indicator-alist + doc (Bug#8568). + + * frames.texi (Input Focus): Add NORECORD arg to + select-frame-set-input-focus. Clarify its role in select-frame. + + * text.texi (Transposition): We don't use transpose-region as an + internal subroutine (Bug#3249). + + * modes.texi (Example Major Modes): Update Lisp example code to + current sources. Delete the old non-derived-major-mode example, + which has diverged badly from current sources. + +2012-01-27 Glenn Morris + + * makefile.w32-in (texinputdir): Fix (presumed) typo. + (VERSION, manual): Remove, unused. + +2012-01-27 Chong Yidong + + * commands.texi (Command Overview): Minor clarification (Bug#10384). + +2012-01-26 Chong Yidong + + * searching.texi (String Search): Document negative repeat count + (Bug#10507). + +2012-01-26 Glenn Morris + + * variables.texi (Using Lexical Binding): + Mention that lexical-binding should be set in the first line. + +2012-01-26 Lars Ingebrigtsen + + * macros.texi (Defining Macros): Don't claim that `declare' only + affects Edebug and indentation. + +2012-01-25 Lars Ingebrigtsen + + * macros.texi (Defining Macros): Slight `declare' fixup. + +2012-01-25 Glenn Morris + + * makefile.w32-in (texinputdir): + * Makefile.in (ENVADD): Add $emacsdir. (Bug#10603) + +2012-01-24 Chong Yidong + + * variables.texi (Variables, Local Variables, Void Variables): + Edit to make the descriptions less specific to dynamic binding. + (Local Variables): Default max-specpdl-size is now 1300. + (Defining Variables): Edits for lexical scoping. Delete + information about starting docstrings with *. De-document + user-variable-p. + (Tips for Defining): Remove an unimportant discussion of quitting + in the middle of a load. + (Accessing Variables, Setting Variables): Discuss lexical binding. + (Variable Scoping): Rewrite. + (Scope, Extent, Impl of Scope): Nodes deleted. + (Dynamic Binding): New node, with material from Scope, Extent, and + Impl of Scope nodes. + (Dynamic Binding Tips): Rename from Using Scoping. + (Lexical Binding): Rewrite. + (Using Lexical Binding): Rename from Converting to Lexical + Binding. Convert to subsection. + + * customize.texi (Variable Definitions): Add custom-variable-p. + Move user-variable-p documentation here. + +2012-01-23 Chong Yidong + + * strings.texi (Text Comparison): Minor qualification. + + * lists.texi (Cons Cells): Copyedits. + (List Elements): Mention push. + (List Variables): Mention pop. + (Rings): Move to sequences.texi. + + * sequences.texi (Sequence Functions): Don't repeat the + introduction already given in the parent. + (Vectors): Copyedits. + (Rings): Move from lists.texi. Note that this is specific to the + ring package. + + * symbols.texi (Definitions, Symbol Components): Mention variable + scoping issues. + (Plists and Alists): Copyedits. + + * eval.texi (Intro Eval, Symbol Forms): Minor tweaks for + correctness with lexical scoping. + (Eval): Copyedits. + +2012-01-21 Chong Yidong + + * intro.texi (A Sample Function Description): Special notation + used for macros too. + + * objects.texi (Ctl-Char Syntax, Other Char Bits): Copyedits. + (Symbol Type): Add xref for keyword symbols. + (Sequence Type): Clarify differences between sequence types. + (Cons Cell Type): Add "linked list" index entry. + (Non-ASCII in Strings): Copyedits. + (Equality Predicates): Symbols with same name need not be eq. + + * numbers.texi (Float Basics): Document isnan, copysign, frexp and + ldexp. Move float-e and float-pi to Math Functions node. + +2012-01-21 Glenn Morris + + * modes.texi (Auto Major Mode): + * variables.texi (File Local Variables): + Mention inhibit-local-variables-regexps. + +2012-01-19 Martin Rudalics + + * windows.texi (Window Configurations): Rewrite references to + persistent window parameters. + (Window Parameters): Fix description of persistent window + parameters. + 2012-01-16 Juanma Barranquero * windows.texi (Window Parameters): Use @pxref. diff --git a/doc/lispref/Makefile.in b/doc/lispref/Makefile.in index 0b616884ff2..4128eb06d7f 100644 --- a/doc/lispref/Makefile.in +++ b/doc/lispref/Makefile.in @@ -36,7 +36,7 @@ TEXI2DVI = texi2dvi TEXI2PDF = texi2pdf DVIPS = dvips -ENVADD = TEXINPUTS="$(srcdir):$(texinfodir):$(TEXINPUTS)" \ +ENVADD = TEXINPUTS="$(srcdir):$(texinfodir):$(emacsdir):$(TEXINPUTS)" \ MAKEINFO="$(MAKEINFO) $(MAKEINFO_OPTS)" # List of all the texinfo files in the manual: diff --git a/doc/lispref/advice.texi b/doc/lispref/advice.texi index ee1950a589a..78b4ac9aa2d 100644 --- a/doc/lispref/advice.texi +++ b/doc/lispref/advice.texi @@ -13,30 +13,35 @@ for a library to customize functions defined within Emacs---cleaner than redefining the whole function. @cindex piece of advice - Each function can have multiple @dfn{pieces of advice}, separately -defined. Each defined piece of advice can be @dfn{enabled} or -@dfn{disabled} explicitly. All the enabled pieces of advice for any given -function actually take effect when you @dfn{activate} advice for that + Each function can have multiple @dfn{pieces of advice}, each of +which can be separately defined and then @dfn{enabled} or +@dfn{disabled}. All the enabled pieces of advice for any given +function actually take effect when you @dfn{activate advice} for that function, or when you define or redefine the function. Note that -enabling a piece of advice and activating advice for a function -are not the same thing. +enabling a piece of advice and activating advice for a function are +not the same thing. - @strong{Usage Note:} Advice is useful for altering the behavior of -existing calls to an existing function. If you want the new behavior -for new calls, or for key bindings, you should define a new function -(or a new command) which uses the existing function. + Advice is useful for altering the behavior of existing calls to an +existing function. If you want the new behavior for new function +calls or new key bindings, you should define a new function or +command, and have it use the existing function as a subroutine. - @strong{Usage note:} Advising a function can cause confusion in -debugging, since people who debug calls to the original function may -not notice that it has been modified with advice. Therefore, if you -have the possibility to change the code of that function (or ask -someone to do so) to run a hook, please solve the problem that way. -Advice should be reserved for the cases where you cannot get the -function changed. + Advising a function can cause confusion in debugging, since people +who debug calls to the original function may not notice that it has +been modified with advice. Therefore, if you have the possibility to +change the code of that function to run a hook, please solve the +problem that way. Advice should be reserved for the cases where you +cannot get the function changed. In particular, Emacs' own source +files should not put advice on functions in Emacs. There are +currently a few exceptions to this convention, but we aim to correct +them. - In particular, this means that a file in Emacs should not put advice -on a function in Emacs. There are currently a few exceptions to this -convention, but we aim to correct them. + Unless you know what you are doing, do @emph{not} advise a primitive +(@pxref{What Is a Function}). Some primitives are used by the advice +mechanism; advising them could cause an infinite recursion. Also, +many primitives are called directly from C code. Calls to the +primitive from Lisp code will take note of the advice, but calls from +C code will ignore the advice. @menu * Simple Advice:: A simple example to explain the basics of advice. @@ -48,7 +53,6 @@ convention, but we aim to correct them. * Preactivation:: Preactivation is a way of speeding up the loading of compiled advice. * Argument Access in Advice:: How advice can access the function's arguments. -* Advising Primitives:: Accessing arguments when advising a primitive. * Combined Definition:: How advice is implemented. @end menu @@ -258,7 +262,7 @@ All subroutines used by the advice need to be available when the byte compiler expands the macro. @deffn Command ad-unadvise function -This command deletes the advice from @var{function}. +This command deletes all pieces of advice from @var{function}. @end deffn @deffn Command ad-unadvise-all @@ -355,13 +359,13 @@ replaced with the new one. @cindex advice, activating By default, advice does not take effect when you define it---only when -you @dfn{activate} advice for the function that was advised. However, -the advice will be activated automatically if you define or redefine -the function later. You can request the activation of advice for a -function when you define the advice, by specifying the @code{activate} -flag in the @code{defadvice}. But normally you activate the advice -for a function by calling the function @code{ad-activate} or one of -the other activation commands listed below. +you @dfn{activate} advice for the function. However, the advice will +be activated automatically if you define or redefine the function +later. You can request the activation of advice for a function when +you define the advice, by specifying the @code{activate} flag in the +@code{defadvice}; or you can activate the advice separately by calling +the function @code{ad-activate} or one of the other activation +commands listed below. Separating the activation of advice from the act of defining it permits you to add several pieces of advice to one function efficiently, without @@ -680,39 +684,6 @@ will be 3, and @var{r} will be @code{(2 1 0)} inside the body of These argument constructs are not really implemented as Lisp macros. Instead they are implemented specially by the advice mechanism. -@node Advising Primitives -@section Advising Primitives -@cindex advising primitives - - Advising a primitive function (@pxref{What Is a Function}) is risky. -Some primitive functions are used by the advice mechanism; advising -them could cause an infinite recursion. Also, many primitive -functions are called directly from C code. Calls to the primitive -from Lisp code will take note of the advice, but calls from C code -will ignore the advice. - -When the advice facility constructs the combined definition, it needs -to know the argument list of the original function. This is not -always possible for primitive functions. When advice cannot determine -the argument list, it uses @code{(&rest ad-subr-args)}, which always -works but is inefficient because it constructs a list of the argument -values. You can use @code{ad-define-subr-args} to declare the proper -argument names for a primitive function: - -@defun ad-define-subr-args function arglist -This function specifies that @var{arglist} should be used as the -argument list for function @var{function}. -@end defun - -For example, - -@example -(ad-define-subr-args 'fset '(sym newdef)) -@end example - -@noindent -specifies the argument list for the function @code{fset}. - @node Combined Definition @section The Combined Definition diff --git a/doc/lispref/backups.texi b/doc/lispref/backups.texi index 969220845d0..a4b3a0b9bef 100644 --- a/doc/lispref/backups.texi +++ b/doc/lispref/backups.texi @@ -696,6 +696,9 @@ operation, reverting preserves all the markers. If they are not identical, reverting does change the buffer; in that case, it preserves the markers in the unchanged text (if any) at the beginning and end of the buffer. Preserving any additional markers would be problematical. + +This command binds @code{revert-buffer-in-progress-p} to a +non-@code{nil} value while it operates. @end deffn You can customize how @code{revert-buffer} does its work by setting diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi index 4a0bc8a6b24..91e224a439f 100644 --- a/doc/lispref/commands.texi +++ b/doc/lispref/commands.texi @@ -75,18 +75,22 @@ function yourself (@pxref{Keyboard Macros}). character causes @dfn{quitting} (@pxref{Quitting}). @defvar pre-command-hook -The editor command loop runs this normal hook before each command. At -that time, @code{this-command} contains the command that is about to -run, and @code{last-command} describes the previous command. -@xref{Command Loop Info}. +This normal hook is run by the editor command loop before it executes +each command. At that time, @code{this-command} contains the command +that is about to run, and @code{last-command} describes the previous +command. @xref{Command Loop Info}. @end defvar @defvar post-command-hook -The editor command loop runs this normal hook after each command -(including commands terminated prematurely by quitting or by errors), -and also when the command loop is first entered. At that time, -@code{this-command} refers to the command that just ran, and -@code{last-command} refers to the command before that. +This normal hook is run by the editor command loop after it executes +each command (including commands terminated prematurely by quitting or +by errors). At that time, @code{this-command} refers to the command +that just ran, and @code{last-command} refers to the command before +that. + +This hook is also run when Emacs first enters the command loop (at +which point @code{this-command} and @code{last-command} are both +@code{nil}). @end defvar Quitting is suppressed while running @code{pre-command-hook} and @@ -1692,6 +1696,7 @@ parameters are used to display the help-echo text are described in These events are generated when the Emacs process receives the signals @code{SIGUSR1} and @code{SIGUSR2}. They contain no additional data because signals do not carry additional information. +They can be useful for debugging (@pxref{Error Debugging}). To catch a user signal, bind the corresponding event to an interactive command in the @code{special-event-map} (@pxref{Active Keymaps}). @@ -2468,6 +2473,17 @@ The argument @var{prompt} is either a string to be displayed in the echo area as a prompt, or @code{nil}, meaning not to display a prompt. @end defun +@defun read-char-choice prompt chars &optional inhibit-quit +This function uses @code{read-key} to read and return a single +character. It ignores any input that is not a member of @var{chars}, +a list of accepted characters. Optionally, it will also ignore +keyboard-quit events while it is waiting for valid input. If you bind +@code{help-form} (@pxref{Help Functions}) to a non-@code{nil} value +while calling @code{read-char-choice}, then pressing @code{help-char} +causes it to evaluate @code{help-form} and display the result. It +then continues to wait for a valid input character, or keyboard-quit. +@end defun + @node Event Mod @subsection Modifying and Translating Input Events diff --git a/doc/lispref/compile.texi b/doc/lispref/compile.texi index 4e21df78430..545f05d9d57 100644 --- a/doc/lispref/compile.texi +++ b/doc/lispref/compile.texi @@ -32,9 +32,6 @@ variable binding for @code{no-byte-compile} into it, like this: ;; -*-no-byte-compile: t; -*- @end example - @xref{Compilation Errors}, for how to investigate errors occurring in -byte compilation. - @menu * Speed of Byte-Code:: An example of speedup from byte compilation. * Compilation Functions:: Byte compilation functions. @@ -56,18 +53,16 @@ Here is an example: @example @group (defun silly-loop (n) - "Return time before and after N iterations of a loop." - (let ((t1 (current-time-string))) - (while (> (setq n (1- n)) - 0)) - (list t1 (current-time-string)))) + "Return the time, in seconds, to run N iterations of a loop." + (let ((t1 (float-time))) + (while (> (setq n (1- n)) 0)) + (- (float-time) t1))) @result{} silly-loop @end group @group (silly-loop 50000000) -@result{} ("Wed Mar 11 21:10:19 2009" - "Wed Mar 11 21:10:41 2009") ; @r{22 seconds} +@result{} 10.235304117202759 @end group @group @@ -77,18 +72,17 @@ Here is an example: @group (silly-loop 50000000) -@result{} ("Wed Mar 11 21:12:26 2009" - "Wed Mar 11 21:12:32 2009") ; @r{6 seconds} +@result{} 3.705854892730713 @end group @end example - In this example, the interpreted code required 22 seconds to run, -whereas the byte-compiled code required 6 seconds. These results are -representative, but actual results will vary greatly. + In this example, the interpreted code required 10 seconds to run, +whereas the byte-compiled code required less than 4 seconds. These +results are representative, but actual results may vary. @node Compilation Functions @comment node-name, next, previous, up -@section The Compilation Functions +@section Byte-Compilation Functions @cindex compilation functions You can byte-compile an individual function or macro definition with @@ -96,43 +90,36 @@ the @code{byte-compile} function. You can compile a whole file with @code{byte-compile-file}, or several files with @code{byte-recompile-directory} or @code{batch-byte-compile}. - The byte compiler produces error messages and warnings about each file -in a buffer called @samp{*Compile-Log*}. These report things in your -program that suggest a problem but are not necessarily erroneous. + Sometimes, the byte compiler produces warning and/or error messages +(@pxref{Compiler Errors}, for details). These messages are recorded +in a buffer called @samp{*Compile-Log*}, which uses Compilation mode. +@xref{Compilation Mode,,,emacs, The GNU Emacs Manual}. @cindex macro compilation - Be careful when writing macro calls in files that you may someday -byte-compile. Macro calls are expanded when they are compiled, so the -macros must already be defined for proper compilation. For more -details, see @ref{Compiling Macros}. If a program does not work the -same way when compiled as it does when interpreted, erroneous macro -definitions are one likely cause (@pxref{Problems with Macros}). -Inline (@code{defsubst}) functions are less troublesome; if you + Be careful when writing macro calls in files that you intend to +byte-compile. Since macro calls are expanded when they are compiled, +the macros need to be loaded into Emacs or the byte compiler will not +do the right thing. The usual way to handle this is with +@code{require} forms which specify the files containing the needed +macro definitions (@pxref{Named Features}). Normally, the +byte compiler does not evaluate the code that it is compiling, but it +handles @code{require} forms specially, by loading the specified +libraries. To avoid loading the macro definition files when someone +@emph{runs} the compiled program, write @code{eval-when-compile} +around the @code{require} calls (@pxref{Eval During Compile}). For +more details, @xref{Compiling Macros}. + + Inline (@code{defsubst}) functions are less troublesome; if you compile a call to such a function before its definition is known, the call will still work right, it will just run slower. - Normally, compiling a file does not evaluate the file's contents or -load the file. But it does execute any @code{require} calls at top -level in the file. One way to ensure that necessary macro definitions -are available during compilation is to require the file that defines -them (@pxref{Named Features}). To avoid loading the macro definition files -when someone @emph{runs} the compiled program, write -@code{eval-when-compile} around the @code{require} calls (@pxref{Eval -During Compile}). - @defun byte-compile symbol This function byte-compiles the function definition of @var{symbol}, replacing the previous definition with the compiled one. The function definition of @var{symbol} must be the actual code for the function; -i.e., the compiler does not follow indirection to another symbol. -@code{byte-compile} returns the new, compiled definition of -@var{symbol}. - - If @var{symbol}'s definition is a byte-code function object, -@code{byte-compile} does nothing and returns @code{nil}. Lisp records -only one function definition for any symbol, and if that is already -compiled, non-compiled code is not available anywhere. So there is no -way to ``compile the same definition again.'' +@code{byte-compile} does not handle function indirection. The return +value is the byte-code function object which is the compiled +definition of @var{symbol} (@pxref{Byte-Code Objects}). @example @group @@ -153,16 +140,15 @@ way to ``compile the same definition again.'' @end group @end example -@noindent -The result is a byte-code function object. The string it contains is -the actual byte-code; each character in it is an instruction or an -operand of an instruction. The vector contains all the constants, -variable names and function names used by the function, except for -certain primitives that are coded as special instructions. +If @var{symbol}'s definition is a byte-code function object, +@code{byte-compile} does nothing and returns @code{nil}. It does not +``compile the symbol's definition again'', since the original +(non-compiled) code has already been replaced in the symbol's function +cell by the byte-compiled code. -If the argument to @code{byte-compile} is a @code{lambda} expression, -it returns the corresponding compiled code, but does not store -it anywhere. +The argument to @code{byte-compile} can also be a @code{lambda} +expression. In that case, the function returns the corresponding +compiled code but does not store it anywhere. @end defun @deffn Command compile-defun &optional arg @@ -252,19 +238,6 @@ files that have an up-to-date @samp{.elc} file. @end example @end defun -@defun byte-code code-string data-vector max-stack -@cindex byte-code interpreter -This function actually interprets byte-code. A byte-compiled function -is actually defined with a body that calls @code{byte-code}. Don't call -this function yourself---only the byte compiler knows how to generate -valid calls to this function. - -In Emacs version 18, byte-code was always executed by way of a call to -the function @code{byte-code}. Nowadays, byte-code is usually executed -as part of a byte-code function object, and only rarely through an -explicit call to @code{byte-code}. -@end defun - @node Docs and Compilation @section Documentation Strings and Compilation @cindex dynamic loading of documentation @@ -290,33 +263,11 @@ then further access to documentation strings in this file will probably give nonsense results. @end itemize - If your site installs Emacs following the usual procedures, these -problems will never normally occur. Installing a new version uses a new -directory with a different name; as long as the old version remains -installed, its files will remain unmodified in the places where they are -expected to be. - - However, if you have built Emacs yourself and use it from the -directory where you built it, you will experience this problem -occasionally if you edit and recompile Lisp files. When it happens, you -can cure the problem by reloading the file after recompiling it. - - You can turn off this feature at compile time by setting -@code{byte-compile-dynamic-docstrings} to @code{nil}; this is useful -mainly if you expect to change the file, and you want Emacs processes -that have already loaded it to keep working when the file changes. -You can do this globally, or for one source file by specifying a -file-local binding for the variable. One way to do that is by adding -this string to the file's first line: - -@example --*-byte-compile-dynamic-docstrings: nil;-*- -@end example - -@defvar byte-compile-dynamic-docstrings -If this is non-@code{nil}, the byte compiler generates compiled files -that are set up for dynamic loading of documentation strings. -@end defvar +@noindent +These problems normally occur only if you build Emacs yourself and use +it from the directory where you built it, and you happen to edit +and/or recompile the Lisp source files. They can be easily cured by +reloading each file after recompiling it. @cindex @samp{#@@@var{count}} @cindex @samp{#$} @@ -328,6 +279,23 @@ string.'' It is usually best not to use these constructs in Lisp source files, since they are not designed to be clear to humans reading the file. + You can disable the dynamic documentation string feature at compile +time by setting @code{byte-compile-dynamic-docstrings} to @code{nil}; +this is useful mainly if you expect to change the file, and you want +Emacs processes that have already loaded it to keep working when the +file changes. You can do this globally, or for one source file by +specifying a file-local binding for the variable. One way to do that +is by adding this string to the file's first line: + +@example +-*-byte-compile-dynamic-docstrings: nil;-*- +@end example + +@defvar byte-compile-dynamic-docstrings +If this is non-@code{nil}, the byte compiler generates compiled files +that are set up for dynamic loading of documentation strings. +@end defvar + @node Dynamic Loading @section Dynamic Loading of Individual Functions @@ -541,17 +509,16 @@ one you intend to suppress. @cindex byte-code function Byte-compiled functions have a special data type: they are -@dfn{byte-code function objects}. +@dfn{byte-code function objects}. Whenever such an object appears as +a function to be called, Emacs uses the byte-code interpreter to +execute the byte-code. - Internally, a byte-code function object is much like a vector; -however, the evaluator handles this data type specially when it appears -as a function to be called. The printed representation for a byte-code -function object is like that for a vector, with an additional @samp{#} -before the opening @samp{[}. - - A byte-code function object must have at least four elements; there is -no maximum number, but only the first six elements have any normal use. -They are: + Internally, a byte-code function object is much like a vector; its +elements can be accessed using @code{aref}. Its printed +representation is like that for a vector, with an additional @samp{#} +before the opening @samp{[}. It must have at least four elements; +there is no maximum number, but only the first six elements have any +normal use. They are: @table @var @item arglist @@ -588,7 +555,7 @@ representation. It is the definition of the command [arg 1 forward-sexp] 2 254435 - "p"] + "^p"] @end example The primitive way to create a byte-code object is with @@ -604,10 +571,6 @@ function yourself, because if they are inconsistent, Emacs may crash when you call the function. Always leave it to the byte compiler to create these objects; it makes the elements consistent (we hope). - You can access the elements of a byte-code object using @code{aref}; -you can also use @code{vconcat} to create a vector with the same -elements. - @node Disassembly @section Disassembled Byte-Code @cindex disassembled byte-code diff --git a/doc/lispref/control.texi b/doc/lispref/control.texi index e74f3e198bf..c23c93300a6 100644 --- a/doc/lispref/control.texi +++ b/doc/lispref/control.texi @@ -8,11 +8,11 @@ @cindex special forms for control structures @cindex control structures - A Lisp program consists of expressions or @dfn{forms} (@pxref{Forms}). -We control the order of execution of these forms by enclosing them in -@dfn{control structures}. Control structures are special forms which -control when, whether, or how many times to execute the forms they -contain. + A Lisp program consists of a set of @dfn{expressions}, or +@dfn{forms} (@pxref{Forms}). We control the order of execution of +these forms by enclosing them in @dfn{control structures}. Control +structures are special forms which control when, whether, or how many +times to execute the forms they contain. @cindex textual order The simplest order of execution is sequential execution: first form @@ -891,9 +891,8 @@ establishing an error handler, with the special form @noindent This deletes the file named @var{filename}, catching any error and -returning @code{nil} if an error occurs@footnote{ -Actually, you should use @code{ignore-errors} in such a simple case; -see below.}. +returning @code{nil} if an error occurs. (You can use the macro +@code{ignore-errors} for a simple case like this; see below.) The @code{condition-case} construct is often used to trap errors that are predictable, such as failure to open a file in a call to @@ -949,6 +948,13 @@ The effect of @code{debug} here is only to prevent given error will invoke the debugger only if @code{debug-on-error} and the other usual filtering mechanisms say it should. @xref{Error Debugging}. +@defmac condition-case-unless-debug var protected-form handlers@dots{} +The macro @code{condition-case-unless-debug} provides another way to +handle debugging of such forms. It behaves exactly like +@code{condition-case}, unless the variable @code{debug-on-error} is +non-@code{nil}, in which case it does not handle any errors at all. +@end defmac + Once Emacs decides that a certain handler handles the error, it returns control to that handler. To do so, Emacs unbinds all variable bindings made by binding constructs that are being exited, and @@ -1122,6 +1128,13 @@ Here's the example at the beginning of this subsection rewritten using @end smallexample @end defmac +@defmac with-demoted-errors body@dots{} +This macro is like a milder version of @code{ignore-errors}. Rather +than suppressing errors altogether, it converts them into messages. +Use this form around code that is not expected to signal errors, but +should be robust if one does occur. Note that this macro uses +@code{condition-case-unless-debug} rather than @code{condition-case}. +@end defmac @node Error Symbols @subsubsection Error Symbols and Condition Names diff --git a/doc/lispref/customize.texi b/doc/lispref/customize.texi index f8495513be4..4c3adee0db5 100644 --- a/doc/lispref/customize.texi +++ b/doc/lispref/customize.texi @@ -24,9 +24,10 @@ definitions---as well as face definitions (@pxref{Defining Faces}). @section Common Item Keywords @cindex customization keywords - All kinds of customization declarations (for variables and groups, and -for faces) accept keyword arguments for specifying various information. -This section describes some keywords that apply to all kinds. + The customization declarations that we will describe in the next few +sections (@code{defcustom}, @code{defgroup}, etc.) all accept keyword +arguments for specifying various information. This section describes +keywords that apply to all types of customization declarations. All of these keywords, except @code{:tag}, can be used more than once in a given item. Each use of the keyword has an independent effect. @@ -108,8 +109,7 @@ You can specify the text to use in the customization buffer by adding for example, @code{(info-link :tag "foo" "(emacs)Top")} makes a link to the Emacs manual which appears in the buffer as @samp{foo}. -An item can have more than one external link; however, most items have -none at all. +You can use this keyword more than once, to add multiple links. @item :load @var{file} @kindex load@r{, customization keyword} @@ -136,14 +136,13 @@ version. The value @var{version} must be a string. @kindex package-version@r{, customization keyword} This keyword specifies that the item was first introduced in @var{package} version @var{version}, or that its meaning or default -value was changed in that version. The value of @var{package} is a -symbol and @var{version} is a string. +value was changed in that version. This keyword takes priority over +@code{:version}. -This keyword takes priority over @code{:version}. - -@var{package} should be the official name of the package, such as MH-E -or Gnus. If the package @var{package} is released as part of Emacs, -@var{package} and @var{version} should appear in the value of +@var{package} should be the official name of the package, as a symbol +(e.g.@: @code{MH-E}). @var{version} should be a string. If the +package @var{package} is released as part of Emacs, @var{package} and +@var{version} should appear in the value of @code{customize-package-emacs-version-alist}. @end table @@ -226,47 +225,31 @@ also use this keyword in @code{defgroup}: @table @code @item :prefix @var{prefix} @kindex prefix@r{, @code{defgroup} keyword} -If the name of an item in the group starts with @var{prefix}, then the -tag for that item is constructed (by default) by omitting @var{prefix}. - -One group can have any number of prefixes. +If the name of an item in the group starts with @var{prefix}, and the +customizable variable @code{custom-unlispify-remove-prefixes} is +non-@code{nil}, the item's tag will omit @var{prefix}. A group can +have any number of prefixes. @end table @end defmac - The prefix-discarding feature is currently turned off, which means -that @code{:prefix} currently has no effect. We did this because we -found that discarding the specified prefixes often led to confusing -names for options. This happened because the people who wrote the -@code{defgroup} definitions for various groups added @code{:prefix} -keywords whenever they make logical sense---that is, whenever the -variables in the library have a common prefix. +@defopt custom-unlispify-remove-prefixes +If this variable is non-@code{nil}, the prefixes specified by a +group's @code{:prefix} keyword are omitted from tag names, whenever +the user customizes the group. - In order to obtain good results with @code{:prefix}, it would be -necessary to check the specific effects of discarding a particular -prefix, given the specific items in a group and their names and -documentation. If the resulting text is not clear, then @code{:prefix} -should not be used in that case. - - It should be possible to recheck all the customization groups, delete -the @code{:prefix} specifications which give unclear results, and then -turn this feature back on, if someone would like to do the work. +The default value is @code{nil}, i.e.@: the prefix-discarding feature +is disabled. This is because discarding prefixes often leads to +confusing names for options and faces. +@end defopt @node Variable Definitions @section Defining Customization Variables @cindex define customization options @cindex customization variables, how to define - Use @code{defcustom} to declare user-customizable variables. - @defmac defcustom option standard doc [keyword value]@dots{} -This macro declares @var{option} as a customizable @dfn{user option}. -You should not quote @var{option}. - -This causes the function @code{user-variable-p} to return @code{t} -when given @var{option} as an argument. @xref{Defining Variables}. -The argument @var{doc} specifies the documentation string for the -variable. (Note that there is no need to start @var{doc} with a -@samp{*}.) +This macro declares @var{option} as a user option (i.e.@: a +customizable variable). You should not quote @var{option}. The argument @var{standard} is an expression that specifies the standard value for @var{option}. Evaluating the @code{defcustom} form @@ -281,28 +264,25 @@ cases applies, @code{defcustom} installs the result of evaluating The expression @var{standard} can be evaluated at various other times, too---whenever the customization facility needs to know @var{option}'s standard value. So be sure to use an expression which is harmless to -evaluate at any time. We recommend avoiding backquotes in -@var{standard}, because they are not expanded when editing the value, -so list values will appear to have the wrong structure. +evaluate at any time. + +The argument @var{doc} specifies the documentation string for the +variable. Every @code{defcustom} should specify @code{:group} at least once. -If you specify the @code{:set} keyword, to make the variable take other -special actions when set through the customization buffer, the -variable's documentation string should tell the user specifically how -to do the same job in hand-written Lisp code. - When you evaluate a @code{defcustom} form with @kbd{C-M-x} in Emacs Lisp mode (@code{eval-defun}), a special feature of @code{eval-defun} arranges to set the variable unconditionally, without testing whether its value is void. (The same feature applies to @code{defvar}.) @xref{Defining Variables}. -If you put a @code{defcustom} in a file that is preloaded at dump time -(@pxref{Building Emacs}), and the standard value installed for the -variable at that time might not be correct, use +If you put a @code{defcustom} in a pre-loaded Emacs Lisp file +(@pxref{Building Emacs}), the standard value installed at dump time +might be incorrect, e.g.@: because another variable that it depends on +has not been assigned the right value yet. In that case, use @code{custom-reevaluate-setting}, described below, to re-evaluate the -standard value during or after Emacs startup. +standard value after Emacs starts up. @end defmac @code{defcustom} accepts the following additional keywords: @@ -333,6 +313,9 @@ the value properly for this option (which may not mean simply setting the option as a Lisp variable). The default for @var{setfunction} is @code{set-default}. +If you specify this keyword, the variable's documentation string +should describe how to do the same job in hand-written Lisp code. + @item :get @var{getfunction} @kindex get@r{, @code{defcustom} keyword} Specify @var{getfunction} as the way to extract the value of this @@ -344,7 +327,7 @@ value). The default is @code{default-value}. You have to really understand the workings of Custom to use @code{:get} correctly. It is meant for values that are treated in Custom as variables but are not actually stored in Lisp variables. It -is almost surely a mistake to specify @code{getfunction} for a value +is almost surely a mistake to specify @var{getfunction} for a value that really is stored in a Lisp variable. @item :initialize @var{function} @@ -383,16 +366,15 @@ already set or has been customized; otherwise, just use These functions behave like @code{custom-initialize-set} (@code{custom-initialize-default}, respectively), but catch errors. If an error occurs during initialization, they set the variable to -@code{nil} using @code{set-default}, and throw no error. +@code{nil} using @code{set-default}, and signal no error. -These two functions are only meant for options defined in pre-loaded -files, where some variables or functions used to compute the option's -value may not yet be defined. The option normally gets updated in -@file{startup.el}, ignoring the previously computed value. Because of -this typical usage, the value which these two functions compute -normally only matters when, after startup, one unsets the option's -value and then reevaluates the defcustom. By that time, the necessary -variables and functions will be defined, so there will not be an error. +These functions are meant for options defined in pre-loaded files, +where the @var{standard} expression may signal an error because some +required variable or function is not yet defined. The value normally +gets updated in @file{startup.el}, ignoring the value computed by +@code{defcustom}. After startup, if one unsets the value and +reevaluates the @code{defcustom}, the @var{standard} expression can be +evaluated without error. @end table @item :risky @var{value} @@ -460,18 +442,32 @@ is an expression that evaluates to the value. @defun custom-reevaluate-setting symbol This function re-evaluates the standard value of @var{symbol}, which -should be a user option declared via @code{defcustom}. (If the +should be a user option declared via @code{defcustom}. If the variable was customized, this function re-evaluates the saved value -instead.) This is useful for customizable options that are defined -before their value could be computed correctly, such as variables -defined in packages that are loaded at dump time, but depend on the -run-time information. For example, the value could be a file whose -precise name depends on the hierarchy of files when Emacs runs, or a -name of a program that needs to be searched at run time. +instead. Then it sets the user option to that value (using the +option's @code{:set} property if that is defined). -A good place to put calls to this function is in the function -@code{command-line} that is run during startup (@pxref{Startup Summary}) -or in the various hooks it calls. +This is useful for customizable options that are defined before their +value could be computed correctly. For example, during startup Emacs +calls this function for some user options that were defined in +pre-loaded Emacs Lisp files, but whose initial values depend on +information available only at run-time. +@end defun + +@defun custom-variable-p arg +This function returns non-@code{nil} if @var{arg} is a customizable +variable. A customizable variable is either a variable that has a +@code{standard-value} or @code{custom-autoload} property (usually +meaning it was declared with @code{defcustom}), or an alias for +another customizable variable. +@end defun + +@defun user-variable-p arg +This function is like @code{custom-variable-p}, except it also returns +@code{t} if the first character of the variable's documentation string +is the character @samp{*}. That is an obsolete way of indicating a +user option, so for most purposes you may consider +@code{user-variable-p} as equivalent to @code{custom-variable-p}. @end defun @node Customization Types @@ -523,30 +519,28 @@ Introduction, widget, The Emacs Widget Library}, for details. @node Simple Types @subsection Simple Types - This section describes all the simple customization types. + This section describes all the simple customization types. For +several of these customization types, the customization widget +provides inline completion with @kbd{C-M-i} or @kbd{M-@key{TAB}}. @table @code @item sexp -The value may be any Lisp object that can be printed and read back. You -can use @code{sexp} as a fall-back for any option, if you don't want to -take the time to work out a more specific type to use. +The value may be any Lisp object that can be printed and read back. +You can use @code{sexp} as a fall-back for any option, if you don't +want to take the time to work out a more specific type to use. @item integer -The value must be an integer, and is represented textually -in the customization buffer. +The value must be an integer. @item number -The value must be a number (floating point or integer), and is -represented textually in the customization buffer. +The value must be a number (floating point or integer). @item float -The value must be a floating point number, and is represented -textually in the customization buffer. +The value must be a floating point number. @item string -The value must be a string, and the customization buffer shows just the -contents, with no delimiting @samp{"} characters and no quoting with -@samp{\}. +The value must be a string. The customization buffer shows the string +without delimiting @samp{"} characters or @samp{\} quotes. @item regexp Like @code{string} except that the string must be a valid regular @@ -558,39 +552,35 @@ integer, but this type shows the value by inserting the character in the buffer, rather than by showing the number. @item file -The value must be a file name, and you can do completion with -@kbd{M-@key{TAB}}. +The value must be a file name. The widget provides completion. @item (file :must-match t) -The value must be a file name for an existing file, and you can do -completion with @kbd{M-@key{TAB}}. +The value must be a file name for an existing file. The widget +provides completion. @item directory -The value must be a directory name, and you can do completion with -@kbd{M-@key{TAB}}. +The value must be a directory name. The widget provides completion. @item hook -The value must be a list of functions (or a single function, but that is -obsolete usage). This customization type is used for hook variables. -You can use the @code{:options} keyword in a hook variable's -@code{defcustom} to specify a list of functions recommended for use in -the hook; see @ref{Variable Definitions}. +The value must be a list of functions. This customization type is +used for hook variables. You can use the @code{:options} keyword in a +hook variable's @code{defcustom} to specify a list of functions +recommended for use in the hook; @xref{Variable Definitions}. @item symbol The value must be a symbol. It appears in the customization buffer as -the name of the symbol. +the symbol name. The widget provides completion. @item function -The value must be either a lambda expression or a function name. When -it is a function name, you can do completion with @kbd{M-@key{TAB}}. +The value must be either a lambda expression or a function name. The +widget provides completion for function names. @item variable -The value must be a variable name, and you can do completion with -@kbd{M-@key{TAB}}. +The value must be a variable name. The widget provides completion. @item face -The value must be a symbol which is a face name, and you can do -completion with @kbd{M-@key{TAB}}. +The value must be a symbol which is a face name. The widget provides +completion. @item boolean The value is boolean---either @code{nil} or @code{t}. Note that by @@ -604,8 +594,10 @@ The value must be a coding-system name, and you can do completion with @kbd{M-@key{TAB}}. @item color -The value must be a valid color name, and you can do completion with -@kbd{M-@key{TAB}}. A sample is provided. +The value must be a valid color name. The widget provides completion +for color names, as well as a sample and a button for selecting a +color name from a list of color names shown in a @samp{*Colors*} +buffer. @end table @node Composite Types @@ -639,9 +631,8 @@ its @sc{cdr} must fit @var{cdr-type}. For example, @code{(cons string symbol)} is a customization type which matches values such as @code{("foo" . foo)}. -In the customization buffer, the @sc{car} and the @sc{cdr} are -displayed and edited separately, each according to the type -that you specify for it. +In the customization buffer, the @sc{car} and @sc{cdr} are displayed +and edited separately, each according to their specified type. @item (list @var{element-types}@dots{}) The value must be a list with exactly as many elements as the @@ -684,7 +675,7 @@ specified by the @code{:options} keyword argument. The argument to the @code{:options} keywords should be a list of specifications for reasonable keys in the alist. Ordinarily, they are -simply atoms, which stand for themselves as. For example: +simply atoms, which stand for themselves. For example: @smallexample :options '("foo" "bar" "baz") @@ -757,14 +748,6 @@ key, using variations of this trick: "Alist of basic info about people. Each element has the form (NAME AGE MALE-FLAG)." :type '(alist :value-type (group integer boolean))) - -(defcustom pets '(("brian") - ("dorith" "dog" "guppy") - ("ken" "cat")) - "Alist of people's pets. -In an element (KEY . VALUE), KEY is the person's name, -and the VALUE is a list of that person's pets." - :type '(alist :value-type (repeat string))) @end smallexample @item (plist :key-type @var{key-type} :value-type @var{value-type}) @@ -774,9 +757,8 @@ that (i) the information is stored as a property list, defaults to @code{symbol} rather than @code{sexp}. @item (choice @var{alternative-types}@dots{}) -The value must fit at least one of @var{alternative-types}. -For example, @code{(choice integer string)} allows either an -integer or a string. +The value must fit one of @var{alternative-types}. For example, +@code{(choice integer string)} allows either an integer or a string. In the customization buffer, the user selects an alternative using a menu, and can then edit the value in the usual way for that @@ -968,20 +950,18 @@ whatever follows the last keyword-value pair. @subsection Splicing into Lists The @code{:inline} feature lets you splice a variable number of -elements into the middle of a list or vector. You use it in a -@code{set}, @code{choice} or @code{repeat} type which appears among the -element-types of a @code{list} or @code{vector}. +elements into the middle of a @code{list} or @code{vector} +customization type. You use it by adding @code{:inline t} to a type +specification which is contained in a @code{list} or @code{vector} +specification. - Normally, each of the element-types in a @code{list} or @code{vector} -describes one and only one element of the list or vector. Thus, if an -element-type is a @code{repeat}, that specifies a list of unspecified -length which appears as one element. - - But when the element-type uses @code{:inline}, the value it matches is -merged directly into the containing sequence. For example, if it -matches a list with three elements, those become three elements of the -overall sequence. This is analogous to using @samp{,@@} in the backquote -construct. + Normally, each entry in a @code{list} or @code{vector} type +specification describes a single element type. But when an entry +contains @code{:inline t}, the value it matches is merged directly +into the containing sequence. For example, if the entry matches a +list with three elements, those become three elements of the overall +sequence. This is analogous to @samp{,@@} in a backquote construct +(@pxref{Backquote}). For example, to specify a list whose first element must be @code{baz} and whose remaining arguments should be zero or more of @code{foo} and diff --git a/doc/lispref/debugging.texi b/doc/lispref/debugging.texi index 9466f21a563..cc92fc225f9 100644 --- a/doc/lispref/debugging.texi +++ b/doc/lispref/debugging.texi @@ -146,6 +146,15 @@ enter the debugger. @strong{Warning:} @code{debug-on-signal} has no effect when @code{debug-on-error} is @code{nil}. +@end defopt + +@defopt debug-on-event +If you set @code{debug-on-event} to a special event (@pxref{Special +Events}), Emacs will try to enter the debugger as soon as it receives +this event, bypassing @code{special-event-map}. At present, the only +supported values correspond to the signals @code{SIGUSR1} and +@code{SIGUSR2} (this is the default). This can be helpful when +@code{inhibit-quit} is set and Emacs is not otherwise responding. @end defopt To debug an error that happens during loading of the init diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index 381eaf66c12..d5870fd3abb 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -3367,54 +3367,48 @@ fringe, and no arrow bitmaps, use @code{((top . left) (bottom . left))}. @defvar fringe-indicator-alist This buffer-local variable specifies the mapping from logical fringe -indicators to the actual bitmaps displayed in the window fringes. +indicators to the actual bitmaps displayed in the window fringes. The +value is an alist of elements @code{(@var{indicator} +. @var{bitmaps})}, where @var{indicator} specifies a logical indicator +type and @var{bitmaps} specifies the fringe bitmaps to use for that +indicator. -These symbols identify the logical fringe indicators: + Each @var{indicator} should be one of the following symbols: @table @asis -@item Truncation and continuation line indicators: -@code{truncation}, @code{continuation}. +@item @code{truncation}, @code{continuation}. +Used for truncation and continuation lines. -@item Buffer position indicators: -@code{up}, @code{down}, -@code{top}, @code{bottom}, -@code{top-bottom}. +@item @code{up}, @code{down}, @code{top}, @code{bottom}, @code{top-bottom} +Used to indicate buffer boundaries when +@code{indicate-buffer-boundaries} is non-@code{nil}: @code{up} and +@code{down} indicate a buffer boundary lying above or below the window +edge; @code{top} and @code{bottom} indicate the topmost and bottommost +buffer text line; and @code{top-bottom} indicates where there is just +one line of text in the buffer. -@item Empty line indicator: -@code{empty-line}. +@item @code{empty-line} +Used to indicate empty lines when @code{indicate-empty-lines} is +non-@code{nil}. -@item Overlay arrow indicator: -@code{overlay-arrow}. - -@item Unknown bitmap indicator: -@code{unknown}. +@item @code{overlay-arrow} +Used for overlay arrows (@pxref{Overlay Arrow}). +@c Is this used anywhere? +@c @item Unknown bitmap indicator: +@c @code{unknown}. @end table - The value is an alist where each element @code{(@var{indicator} . @var{bitmaps})} -specifies the fringe bitmaps used to display a specific logical -fringe indicator. + Each @var{bitmaps} value may be a list of symbols @code{(@var{left} +@var{right} [@var{left1} @var{right1}])}. The @var{left} and +@var{right} symbols specify the bitmaps shown in the left and/or right +fringe, for the specific indicator. @var{left1} and @var{right1} are +specific to the @code{bottom} and @code{top-bottom} indicators, and +are used to indicate that the last text line has no final newline. +Alternatively, @var{bitmaps} may be a single symbol which is used in +both left and right fringes. -Here, @var{indicator} specifies the logical indicator type, and -@var{bitmaps} is list of symbols @code{(@var{left} @var{right} -[@var{left1} @var{right1}])} which specifies the actual bitmap shown -in the left or right fringe for the logical indicator. + The standard symbols for fringe bitmaps are: -The @var{left} and @var{right} symbols specify the bitmaps shown in -the left and/or right fringe for the specific indicator. The -@var{left1} or @var{right1} bitmaps are used only for the `bottom' and -`top-bottom indicators when the last (only) line in has no final -newline. Alternatively, @var{bitmaps} may be a single symbol which is -used in both left and right fringes. - -When @code{fringe-indicator-alist} has a buffer-local value, and there -is no bitmap defined for a logical indicator, or the bitmap is -@code{t}, the corresponding value from the default value of -@code{fringe-indicator-alist} is used. - -To completely hide a specific indicator, set the bitmap to @code{nil}. -@end defvar - -Standard fringe bitmaps for indicators: @example left-arrow right-arrow up-arrow down-arrow left-curly-arrow right-curly-arrow @@ -3428,6 +3422,16 @@ vertical-bar horizontal-bar empty-line question-mark @end example +@noindent +In addition, @code{nil} represents the empty bitmap (i.e.@: an +indicator that is not shown). + + When @code{fringe-indicator-alist} has a buffer-local value, and +there is no bitmap defined for a logical indicator, or the bitmap is +@code{t}, the corresponding value from the default value of +@code{fringe-indicator-alist} is used. +@end defvar + @node Fringe Cursors @subsection Fringe Cursors @cindex fringe cursors @@ -4130,6 +4134,7 @@ displayed (@pxref{Display Feature Testing}). * Other Image Types:: Various other formats are supported. * Defining Images:: Convenient ways to define an image for later use. * Showing Images:: Convenient ways to display an image once it is defined. +* Animated Images:: Some image formats can be animated. * Image Cache:: Internal mechanisms of image display. @end menu @@ -4147,12 +4152,10 @@ names for these dynamic libraries (though it is not possible to add new image formats). Note that image types @code{pbm} and @code{xbm} do not depend on external libraries and are always available in Emacs. - The supported image formats include XBM, XPM (this requires the -libraries @code{libXpm} version 3.4k and @code{libz}), GIF (requiring -@code{libungif} 4.1.0), PostScript, PBM, JPEG (requiring the -@code{libjpeg} library version v6a), TIFF (requiring @code{libtiff} -v3.4), PNG (requiring @code{libpng} 1.0.2), and SVG (requiring -@code{librsvg} 2.0.0). + The supported image formats (and the necessary library files) +include XBM, XPM (@code{libXpm} and @code{libz}), GIF (@code{libgif} +or @code{libungif}), PostScript, PBM, JPEG (@code{libjpeg}), TIFF +(@code{libtiff}), PNG (@code{libpng}), and SVG (@code{librsvg}). You specify one of these formats with an image type symbol. The image type symbols are @code{xbm}, @code{xpm}, @code{gif}, @code{postscript}, @@ -4467,33 +4470,13 @@ specifies the actual color to use for displaying that name. @table @code @item :index @var{index} -You can use @code{:index} to specify one image from a GIF file that -contains more than one image. This property specifies use of image -number @var{index} from the file. If the GIF file doesn't contain an -image with index @var{index}, the image displays as a hollow box. +You can use @code{:index} to specify image number @var{index} from a +GIF file that contains more than one image. If the GIF file doesn't +contain an image with the specified index, the image displays as a +hollow box. GIF files with more than one image can be animated, +@pxref{Animated Images}. @end table -@ignore -This could be used to implement limited support for animated GIFs. -For example, the following function displays a multi-image GIF file -at point-min in the current buffer, switching between sub-images -every 0.1 seconds. - -(defun show-anim (file max) - "Display multi-image GIF file FILE which contains MAX subimages." - (display-anim (current-buffer) file 0 max t)) - -(defun display-anim (buffer file idx max first-time) - (when (= idx max) - (setq idx 0)) - (let ((img (create-image file nil :image idx))) - (with-current-buffer buffer - (goto-char (point-min)) - (unless first-time (delete-char 1)) - (insert-image img)) - (run-with-timer 0.1 nil 'display-anim buffer file (1+ idx) max nil))) -@end ignore - @node TIFF Images @subsection TIFF Images @cindex TIFF @@ -4502,10 +4485,10 @@ every 0.1 seconds. @table @code @item :index @var{index} -You can use @code{:index} to specify one image from a TIFF file that -contains more than one image. This property specifies use of image -number @var{index} from the file. If the TIFF file doesn't contain an -image with index @var{index}, the image displays as a hollow box. +You can use @code{:index} to specify image number @var{index} from a +TIFF file that contains more than one image. If the TIFF file doesn't +contain an image with the specified index, the image displays as a +hollow box. @end table @node PostScript Images @@ -4544,30 +4527,51 @@ specifying the bounding box of the PostScript image, analogous to the support, you can use the ImageMagick library to load many image formats. @findex imagemagick-types +@findex imagemagick-register-types The function @code{imagemagick-types} returns a list of image file extensions that your installation of ImageMagick supports. To enable support, you must call the function @code{imagemagick-register-types}. +This enables Emacs to visit these file types in @code{image-mode} +(@pxref{File Conveniences,,, emacs, The GNU Emacs Manual}). +If your Emacs was not compiled with ImageMagick support, then +@code{imagemagick-types} will be undefined and +@code{imagemagick-register-types} will do nothing. @vindex imagemagick-types-inhibit The variable @code{imagemagick-types-inhibit} specifies a list of -image types that you do @emph{not} want ImageMagick to handle. There -may be overlap between image loaders in your Emacs installation, and -you may prefer to use a different one for a given image type (which -@c FIXME how is this priority determined? -loader will be used in practice depends on the priority of the loaders). -@c FIXME why are these uppercase when image-types is lower-case? -@c FIXME what are the possible options? Are these actually file extensions? -For example, if you never want to use the ImageMagick loader to use +image types that you do @emph{not} want ImageMagick to handle. It is +a list of symbols, each of which has the same name as one of the +format tags used internally by ImageMagick (i.e., as +@code{imagemagick-types} returns). ImageMagick has a very broad +definition of what an image is, for example it includes such file +types as C files and HTML files. It is not appropriate to treat these +as images in Emacs. You can add any other ImageMagick type that you +wish to this list. +@ignore +@c I don't know what this means. I suspect it means eg loading jpg +@c images via libjpeg or ImageMagick. But it doesn't work. +@c If you don't have libjpeg support compiled in, you cannot +@c view jpeg images, even if you have imagemagick support: +@c http://debbugs.gnu.org/9045 +@c And if you have both compiled in, then you always get +@c the libjpeg version: +@c http://debbugs.gnu.org/10746 +There may be overlap between image loaders in your Emacs installation, +and you may prefer to use a different one for a given image type +(which loader will be used in practice depends on the priority of the +loaders). +For example, if you never want to use the ImageMagick loader to view JPEG files, add @code{JPG} to this list. +@end ignore +Note that ImageMagick often distinguishes between several different +types of a particular format (e.g., @code{JPG}, @code{JPEG}, +@code{PJPEG}, etc.), and you may need to add all versions to this +list. +@c Not sure this should even be in the manual at all. @vindex imagemagick-render-type -You can set the variable @code{imagemagick-render-type} to choose -between screen render methods for the ImageMagick loader. The options -are: @code{0}, a conservative method which works with older -@c FIXME details of this "newer method"? -@c Presumably it is faster but may be less "robust"? -ImageMagick versions (it is a bit slow, but robust); and @code{1}, -a newer ImageMagick method. +If you wish to experiment with the performance of the ImageMagick +loader, see the variable @code{imagemagick-render-type}. Images loaded with ImageMagick support a few new display specifications: @@ -4582,10 +4586,11 @@ aspect ratio may not be preserved. Specifies a rotation angle in degrees. @item :index -Specifies which image to view inside an image bundle file format, such -as TIFF or DJVM. You can use the @code{image-metadata} function to -retrieve the total number of images in an image bundle (this is -similar to how GIF files work). +@c Doesn't work: http://debbugs.gnu.org/7978 +This has the same meaning as it does for GIF images (@pxref{GIF Images}), +i.e. it specifies which image to view inside an image bundle file format +such as DJVM. You can use the @code{image-metadata} function to +retrieve the total number of images in an image bundle. @end table @@ -4853,6 +4858,39 @@ cache, it can always be displayed, even if the value of @var{max-image-size} is subsequently changed (@pxref{Image Cache}). @end defvar +@node Animated Images +@subsection Animated Images + +@cindex animation +@cindex image animation +Some image files can contain more than one image. This can be used to +create animation. Currently, Emacs only supports animated GIF files. +The following functions related to animated images are available. + +@defun image-animated-p image +This function returns non-nil if @var{image} can be animated. +The actual return value is a cons @code{(@var{nimages} . @var{delay})}, +where @var{nimages} is the number of frames and @var{delay} is the +delay in seconds between them. +@end defun + +@defun image-animate image &optional index limit +This function animates @var{image}. The optional integer @var{index} +specifies the frame from which to start (default 0). The optional +argument @var{limit} controls the length of the animation. If omitted +or @code{nil}, the image animates once only; if @code{t} it loops +forever; if a number animation stops after that many seconds. +@end defun + +@noindent Animation operates by means of a timer. Note that Emacs imposes a +minimum frame delay of 0.01 seconds. + +@defun image-animate-timer image +This function returns the timer responsible for animating @var{image}, +if there is one. +@end defun + + @node Image Cache @subsection Image Cache @cindex image cache diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi index 0b8d972c1d5..a925f3865a4 100644 --- a/doc/lispref/elisp.texi +++ b/doc/lispref/elisp.texi @@ -326,7 +326,6 @@ Lists * Modifying Lists:: Storing new pieces into an existing list. * Sets And Lists:: A list can represent a finite mathematical set. * Association Lists:: A list can represent a finite relation or mapping. -* Rings:: Managing a fixed-size ring of objects. Modifying Existing List Structure @@ -344,6 +343,7 @@ Sequences, Arrays, and Vectors * Vector Functions:: Functions specifically for vectors. * Char-Tables:: How to work with char-tables. * Bool-Vectors:: How to work with bool-vectors. +* Rings:: Managing a fixed-size ring of objects. Hash Tables @@ -374,6 +374,7 @@ Evaluation * Forms:: How various sorts of objects are evaluated. * Quoting:: Avoiding evaluation (to put constants in the program). +* Backquote:: Easier construction of list structure. * Eval:: How to invoke the Lisp interpreter explicitly. Kinds of Forms @@ -436,12 +437,10 @@ Variables Scoping Rules for Variable Bindings -* Scope:: Scope means where in the program a value - is visible. Comparison with other languages. -* Extent:: Extent means how long in time a value exists. -* Impl of Scope:: Two ways to implement dynamic scoping. -* Using Scoping:: How to use dynamic scoping carefully and - avoid problems. +* Dynamic Binding:: The default for binding local variables in Emacs. +* Dynamic Binding Tips:: Avoiding problems with dynamic binding. +* Lexical Binding:: A different type of local variable binding. +* Using Lexical Binding:: How to enable lexical binding. Buffer-Local Variables @@ -461,6 +460,7 @@ Functions * Anonymous Functions:: Lambda expressions are functions with no names. * Function Cells:: Accessing or setting the function definition of a symbol. +* Closures:: Functions that enclose a lexical environment. * Obsolete Functions:: Declaring functions obsolete. * Inline Functions:: Defining functions that the compiler will open code. @@ -483,7 +483,6 @@ Macros * Expansion:: How, when and why macros are expanded. * Compiling Macros:: How macros are expanded by the compiler. * Defining Macros:: How to write a macro definition. -* Backquote:: Easier construction of list structure. * Problems with Macros:: Don't evaluate the macro arguments too many times. Don't hide the user's variables. * Indenting Macros:: Specifying how to indent macro calls. @@ -549,7 +548,6 @@ Advising Emacs Lisp Functions * Preactivation:: Preactivation is a way of speeding up the loading of compiled advice. * Argument Access in Advice:: How advice can access the function's arguments. -* Advising Primitives:: Accessing arguments when advising a primitive. * Combined Definition:: How advice is implemented. Debugging Lisp Programs @@ -1062,7 +1060,7 @@ Text * Registers:: How registers are implemented. Accessing the text or position stored in a register. * Base 64:: Conversion to or from base 64 encoding. -* MD5 Checksum:: Compute the MD5 "message digest"/"checksum". +* Checksum/Hash:: Computing "message digests"/"checksums"/"hashes". * Atomic Changes:: Installing several buffer changes "atomically". * Change Hooks:: Supplying functions to be run when text is changed. @@ -1353,6 +1351,7 @@ Images * Defining Images:: Convenient ways to define an image for later use. * Showing Images:: Convenient ways to display an image once it is defined. +* Animated Images:: Some image formats can be animated. * Image Cache:: Internal mechanisms of image display. Buttons diff --git a/doc/lispref/eval.texi b/doc/lispref/eval.texi index adb4841a82d..cb3a4c54fac 100644 --- a/doc/lispref/eval.texi +++ b/doc/lispref/eval.texi @@ -23,6 +23,7 @@ function @code{eval}. * Intro Eval:: Evaluation in the scheme of things. * Forms:: How various sorts of objects are evaluated. * Quoting:: Avoiding evaluation (to put constants in the program). +* Backquote:: Easier construction of list structure. * Eval:: How to invoke the Lisp interpreter explicitly. @end menu @@ -39,12 +40,15 @@ interpreter. @cindex form @cindex expression - A Lisp object that is intended for evaluation is called an -@dfn{expression} or a @dfn{form}. The fact that forms are data -objects and not merely text is one of the fundamental differences -between Lisp-like languages and typical programming languages. Any -object can be evaluated, but in practice only numbers, symbols, lists -and strings are evaluated very often. +@cindex S-expression + A Lisp object that is intended for evaluation is called a @dfn{form} +or @dfn{expression}@footnote{It is sometimes also referred to as an +@dfn{S-expression} or @dfn{sexp}, but we generally do not use this +terminology in this manual.}. The fact that forms are data objects +and not merely text is one of the fundamental differences between +Lisp-like languages and typical programming languages. Any object can +be evaluated, but in practice only numbers, symbols, lists and strings +are evaluated very often. In subsequent sections, we will describe the details of what evaluation means for each kind of form. @@ -64,8 +68,8 @@ evaluate a @dfn{function call} form such as @code{(car x)}, Emacs first evaluates the argument (the subform @code{x}). After evaluating the argument, Emacs @dfn{executes} the function (@code{car}), and if the function is written in Lisp, execution works by evaluating the -@dfn{body} of the function. (In this example, however, @code{car} is -not a Lisp function; it is a primitive function implemented in C.) +@dfn{body} of the function (in this example, however, @code{car} is +not a Lisp function; it is a primitive function implemented in C). @xref{Functions}, for more information about functions and function calls. @@ -77,9 +81,8 @@ variables (@pxref{Variables}).@footnote{This definition of that can affect the result of a program.} Whenever a form refers to a variable without creating a new binding for it, the variable evaluates to the value given by the current environment. Evaluating a form may -create a new environment for recursive evaluation, by binding -variables (@pxref{Local Variables}). Such environments are temporary, -and vanish when the evaluation of the form is complete. +also temporarily alter the environment by binding variables +(@pxref{Local Variables}). @cindex side effect Evaluating a form may also make changes that persist; these changes @@ -97,12 +100,12 @@ interpretation. @xref{Command Loop}. @node Forms @section Kinds of Forms - A Lisp object that is intended to be evaluated is called a @dfn{form}. -How Emacs evaluates a form depends on its data type. Emacs has three -different kinds of form that are evaluated differently: symbols, lists, -and ``all other types.'' This section describes all three kinds, one by -one, starting with the ``all other types'' which are self-evaluating -forms. + A Lisp object that is intended to be evaluated is called a +@dfn{form} (or an @dfn{expression}). How Emacs evaluates a form +depends on its data type. Emacs has three different kinds of form +that are evaluated differently: symbols, lists, and ``all other +types.'' This section describes all three kinds, one by one, starting +with the ``all other types'' which are self-evaluating forms. @menu * Self-Evaluating Forms:: Forms that evaluate to themselves. @@ -177,9 +180,9 @@ program. Here is an example: @cindex symbol evaluation When a symbol is evaluated, it is treated as a variable. The result -is the variable's value, if it has one. If it has none (if its value -cell is void), an error is signaled. For more information on the use of -variables, see @ref{Variables}. +is the variable's value, if it has one. If the symbol has no value as +a variable, the Lisp interpreter signals an error. For more +information on the use of variables, see @ref{Variables}. In the following example, we set the value of a symbol with @code{setq}. Then we evaluate the symbol, and get back the value that @@ -577,6 +580,96 @@ Functions}), which causes an anonymous lambda expression written in Lisp to be compiled, and @samp{`} (@pxref{Backquote}), which is used to quote only part of a list, while computing and substituting other parts. +@node Backquote +@section Backquote +@cindex backquote (list substitution) +@cindex ` (list substitution) +@findex ` + + @dfn{Backquote constructs} allow you to quote a list, but +selectively evaluate elements of that list. In the simplest case, it +is identical to the special form @code{quote} +@iftex +@end iftex +@ifnottex +(described in the previous section; @pxref{Quoting}). +@end ifnottex +For example, these two forms yield identical results: + +@example +@group +`(a list of (+ 2 3) elements) + @result{} (a list of (+ 2 3) elements) +@end group +@group +'(a list of (+ 2 3) elements) + @result{} (a list of (+ 2 3) elements) +@end group +@end example + +@findex , @r{(with backquote)} + The special marker @samp{,} inside of the argument to backquote +indicates a value that isn't constant. The Emacs Lisp evaluator +evaluates the argument of @samp{,}, and puts the value in the list +structure: + +@example +@group +`(a list of ,(+ 2 3) elements) + @result{} (a list of 5 elements) +@end group +@end example + +@noindent +Substitution with @samp{,} is allowed at deeper levels of the list +structure also. For example: + +@example +@group +`(1 2 (3 ,(+ 4 5))) + @result{} (1 2 (3 9)) +@end group +@end example + +@findex ,@@ @r{(with backquote)} +@cindex splicing (with backquote) + You can also @dfn{splice} an evaluated value into the resulting list, +using the special marker @samp{,@@}. The elements of the spliced list +become elements at the same level as the other elements of the resulting +list. The equivalent code without using @samp{`} is often unreadable. +Here are some examples: + +@example +@group +(setq some-list '(2 3)) + @result{} (2 3) +@end group +@group +(cons 1 (append some-list '(4) some-list)) + @result{} (1 2 3 4 2 3) +@end group +@group +`(1 ,@@some-list 4 ,@@some-list) + @result{} (1 2 3 4 2 3) +@end group + +@group +(setq list '(hack foo bar)) + @result{} (hack foo bar) +@end group +@group +(cons 'use + (cons 'the + (cons 'words (append (cdr list) '(as elements))))) + @result{} (use the words foo bar as elements) +@end group +@group +`(use the words ,@@(cdr list) as elements) + @result{} (use the words foo bar as elements) +@end group +@end example + + @node Eval @section Eval @@ -602,12 +695,13 @@ functions provides the ability to pass information to them as arguments. @defun eval form &optional lexical -This is the basic function evaluating an expression. It evaluates +This is the basic function for evaluating an expression. It evaluates @var{form} in the current environment and returns the result. How the evaluation proceeds depends on the type of the object (@pxref{Forms}). -@var{lexical} if non-nil means to evaluate @var{form} using lexical scoping -rules (@pxref{Lexical Binding}) instead of the default dynamic scoping used -historically in Emacs Lisp. + +The argument @var{lexical}, if non-@code{nil}, means to evaluate +@var{form} using lexical scoping rules for variables, instead of the +default dynamic scoping rules. @xref{Lexical Binding}. Since @code{eval} is a function, the argument expression that appears in a call to @code{eval} is evaluated twice: once as preparation before diff --git a/doc/lispref/files.texi b/doc/lispref/files.texi index 614bd827489..cf093ba36cb 100644 --- a/doc/lispref/files.texi +++ b/doc/lispref/files.texi @@ -1480,7 +1480,7 @@ with @code{add-name-to-file} and then deleting @var{filename} has the same effect as renaming, aside from momentary intermediate states. @end deffn -@deffn Command copy-file oldname newname &optional ok-if-exists time preserve-uid-gid +@deffn Command copy-file oldname newname &optional ok-if-exists time preserve-uid-gid preserve-selinux This command copies the file @var{oldname} to @var{newname}. An error is signaled if @var{oldname} does not exist. If @var{newname} names a directory, it copies @var{oldname} into that directory, @@ -1501,6 +1501,16 @@ usually set to the user running Emacs). If @var{preserve-uid-gid} is non-@code{nil}, we attempt to copy the user and group ownership of the file. This works only on some operating systems, and only if you have the correct permissions to do so. + +@cindex SELinux +If the optional argument @var{preserve-selinux} is non-@code{nil}, we +attempt to copy the SELinux@footnote{@samp{Security-Enhanced Linux} +is a kernel feature that allows for finer access controls to be set on +files, and a system security policy to define who can access what. +The functions @code{file-selinux-context} and @code{set-file-selinux-context} +get and set, respectively, the SELinux properties of a file.} +context of the file. For this to work, Emacs must have been built +with libselinux support. @end deffn @deffn Command make-symbolic-link filename newname &optional ok-if-exists @@ -2852,24 +2862,21 @@ is a good way to come up with one. @end defun @defopt remote-file-name-inhibit-cache -Whether to use the remote file-name cache for read access. - -File attributes of remote files are cached for better performance. If -they are changed out of Emacs' control, the cached values become +The attributes of remote files can be cached for better performance. If +they are changed outside of Emacs's control, the cached values become invalid, and must be reread. -When set to @code{nil}, cached values are always used. This shall be -set with care. When set to @code{t}, cached values are never used. -ALthough this is the safest value, it could result in performance -degradation. +When this variable is set to @code{nil}, cached values are never +expired. Use this setting with caution, only if you are sure nothing +other than Emacs ever changes the remote files. If it is set to +@code{t}, cached values are never used. This is the safest value, but +could result in performance degradation. A compromise is to set it to a positive number. This means that cached values are used for that amount of seconds since they were -cached. - -In case a remote file is checked regularly, it might be reasonable to -let-bind this variable to a value less then the time period between -two checks. Example: +cached. If a remote file is checked regularly, it might be a good +idea to let-bind this variable to a value less than the time period +between consecutive checks. For example: @example (defun display-time-file-nonempty-p (file) diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index 4835a5b3da2..27303637e42 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi @@ -1377,15 +1377,15 @@ remains selected until a subsequent call to @code{select-frame}. Each terminal frame has a number which appears in the mode line before the buffer name (@pxref{Mode Line Variables}). -@defun select-frame-set-input-focus frame +@defun select-frame-set-input-focus frame &optional norecord This function selects @var{frame}, raises it (should it happen to be -obscured by other frames) and tries to give it the X server's focus. On -a text-only terminal, the next redisplay displays the new frame on the -entire terminal screen. The return value of this function is not -significant. +obscured by other frames) and tries to give it the X server's focus. +On a text-only terminal, the next redisplay displays the new frame on +the entire terminal screen. The optional argument @var{norecord} has +the same meaning as for @code{select-frame} (see below). The return +value of this function is not significant. @end defun -@c ??? This is not yet implemented properly. @defun select-frame frame &optional norecord This function selects frame @var{frame}, temporarily disregarding the focus of the X server if any. The selection of @var{frame} lasts until @@ -1395,18 +1395,20 @@ window system, the previously selected frame may be restored as the selected frame after return to the command loop, because it still may have the window system's input focus.) -The specified @var{frame} becomes the selected frame, as explained -above, and the terminal that @var{frame} is on becomes the selected -terminal. The window selected within @var{frame} becomes the selected -window. This function returns @var{frame}, or @code{nil} if @var{frame} -has been deleted. +The specified @var{frame} becomes the selected frame, and its terminal +becomes the selected terminal. This function then calls +@code{select-window} as a subroutine, passing the window selected +within @var{frame} as its first argument and @var{norecord} as its +second argument (hence, if @var{norecord} is non-@code{nil}, this +avoids changing the order of recently selected windows nor the buffer +list). @xref{Selecting Windows}. -Optional argument @var{norecord} non-@code{nil} means to neither change -the order of recently selected windows nor the buffer list. @xref{The -Buffer List}. +This function returns @var{frame}, or @code{nil} if @var{frame} has +been deleted. -In general, you should never use @code{select-frame} in a way that could -switch to a different terminal without switching back when you're done. +In general, you should never use @code{select-frame} in a way that +could switch to a different terminal without switching back when +you're done. @end defun Emacs cooperates with the window system by arranging to select frames as diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi index ada00867bd0..9ee94557066 100644 --- a/doc/lispref/functions.texi +++ b/doc/lispref/functions.texi @@ -21,8 +21,9 @@ define them. * Anonymous Functions:: Lambda expressions are functions with no names. * Function Cells:: Accessing or setting the function definition of a symbol. +* Closures:: Functions that enclose a lexical environment. * Obsolete Functions:: Declaring functions obsolete. -* Inline Functions:: Defining functions that the compiler will open code. +* Inline Functions:: Functions that the compiler will expand inline. * Declaring Functions:: Telling the compiler that a function is defined. * Function Safety:: Determining whether a function is safe to call. * Related Topics:: Cross-references to specific Lisp primitives @@ -32,104 +33,117 @@ define them. @node What Is a Function @section What Is a Function? - In a general sense, a function is a rule for carrying on a computation -given several values called @dfn{arguments}. The result of the -computation is called the value of the function. The computation can -also have side effects: lasting changes in the values of variables or -the contents of data structures. +@cindex return value +@cindex value of function +@cindex argument + In a general sense, a function is a rule for carrying out a +computation given input values called @dfn{arguments}. The result of +the computation is called the @dfn{value} or @dfn{return value} of the +function. The computation can also have side effects, such as lasting +changes in the values of variables or the contents of data structures. - Here are important terms for functions in Emacs Lisp and for other -function-like objects. + In most computer languages, every function has a name. But in Lisp, +a function in the strictest sense has no name: it is an object which +can @emph{optionally} be associated with a symbol (e.g.@: @code{car}) +that serves as the function name. @xref{Function Names}. When a +function has been given a name, we usually also refer to that symbol +as a ``function'' (e.g.@: we refer to ``the function @code{car}''). +In this manual, the distinction between a function name and the +function object itself is usually unimportant, but we will take note +wherever it is relevant. + + Certain function-like objects, called @dfn{special forms} and +@dfn{macros}, also accept arguments to carry out computations. +However, as explained below, these are not considered functions in +Emacs Lisp. + + Here are important terms for functions and function-like objects: @table @dfn -@item function -@cindex function -In Emacs Lisp, a @dfn{function} is anything that can be applied to -arguments in a Lisp program. In some cases, we use it more -specifically to mean a function written in Lisp. Special forms and -macros are not functions. +@item lambda expression +A function (in the strict sense, i.e.@: a function object) which is +written in Lisp. These are described in the following section. +@ifnottex +@xref{Lambda Expressions}. +@end ifnottex @item primitive @cindex primitive @cindex subr @cindex built-in function -A @dfn{primitive} is a function callable from Lisp that is written in C, -such as @code{car} or @code{append}. These functions are also called -@dfn{built-in functions}, or @dfn{subrs}. (Special forms are also -considered primitives.) +A function which is callable from Lisp but is actually written in C. +Primitives are also called @dfn{built-in functions}, or @dfn{subrs}. +Examples include functions like @code{car} and @code{append}. In +addition, all special forms (see below) are also considered +primitives. -Usually the reason we implement a function as a primitive is either -because it is fundamental, because it provides a low-level interface -to operating system services, or because it needs to run fast. -Primitives can be modified or added only by changing the C sources and -recompiling the editor. See @ref{Writing Emacs Primitives}. - -@item lambda expression -A @dfn{lambda expression} is a function written in Lisp. -These are described in the following section. -@ifnottex -@xref{Lambda Expressions}. -@end ifnottex +Usually, a function is implemented as a primitive because it is a +fundamental part of Lisp (e.g.@: @code{car}), or because it provides a +low-level interface to operating system services, or because it needs +to run fast. Unlike functions defined in Lisp, primitives can be +modified or added only by changing the C sources and recompiling +Emacs. See @ref{Writing Emacs Primitives}. @item special form -A @dfn{special form} is a primitive that is like a function but does not -evaluate all of its arguments in the usual way. It may evaluate only -some of the arguments, or may evaluate them in an unusual order, or -several times. Many special forms are described in @ref{Control -Structures}. +A primitive that is like a function but does not evaluate all of its +arguments in the usual way. It may evaluate only some of the +arguments, or may evaluate them in an unusual order, or several times. +Examples include @code{if}, @code{and}, and @code{while}. +@xref{Special Forms}. @item macro @cindex macro -A @dfn{macro} is a construct defined in Lisp by the programmer. It -differs from a function in that it translates a Lisp expression that you -write into an equivalent expression to be evaluated instead of the -original expression. Macros enable Lisp programmers to do the sorts of -things that special forms can do. @xref{Macros}, for how to define and -use macros. +A construct defined in Lisp, which differs from a function in that it +translates a Lisp expression into another expression which is to be +evaluated instead of the original expression. Macros enable Lisp +programmers to do the sorts of things that special forms can do. +@xref{Macros}. @item command @cindex command -A @dfn{command} is an object that @code{command-execute} can invoke; it -is a possible definition for a key sequence. Some functions are -commands; a function written in Lisp is a command if it contains an -interactive declaration (@pxref{Defining Commands}). Such a function -can be called from Lisp expressions like other functions; in this case, -the fact that the function is a command makes no difference. +An object which can be invoked via the @code{command-execute} +primitive, usually due to the user typing in a key sequence +@dfn{bound} to that command. @xref{Interactive Call}. A command is +usually a function; if the function is written in Lisp, it is made +into a command by an @code{interactive} form in the function +definition (@pxref{Defining Commands}). Commands that are functions +can also be called from Lisp expressions, just like other functions. Keyboard macros (strings and vectors) are commands also, even though -they are not functions. A symbol is a command if its function -definition is a command; such symbols can be invoked with @kbd{M-x}. -The symbol is a function as well if the definition is a function. -@xref{Interactive Call}. +they are not functions. @xref{Keyboard Macros}. We say that a symbol +is a command if its function cell contains a command (@pxref{Symbol +Components}); such a @dfn{named command} can be invoked with +@kbd{M-x}. -@item keystroke command -@cindex keystroke command -A @dfn{keystroke command} is a command that is bound to a key sequence -(typically one to three keystrokes). The distinction is made here -merely to avoid confusion with the meaning of ``command'' in non-Emacs -editors; for Lisp programs, the distinction is normally unimportant. +@item closure +A function object that is much like a lambda expression, except that +it also encloses an ``environment'' of lexical variable bindings. +@xref{Closures}. @item byte-code function -A @dfn{byte-code function} is a function that has been compiled by the -byte compiler. @xref{Byte-Code Type}. +A function that has been compiled by the byte compiler. +@xref{Byte-Code Type}. @item autoload object @cindex autoload object -An @dfn{autoload object} is a place-holder for a real function. If -the autoload object is called, it will make Emacs load the file -containing the definition of the real function, and then call the real -function instead. +A place-holder for a real function. If the autoload object is called, +Emacs loads the file containing the definition of the real function, +and then calls the real function. @xref{Autoload}. @end table + You can use the function @code{functionp} to test if an object is a +function: + @defun functionp object This function returns @code{t} if @var{object} is any kind of function, i.e.@: can be passed to @code{funcall}. Note that -@code{functionp} returns @code{nil} for special forms (@pxref{Special -Forms}). +@code{functionp} returns @code{t} for symbols that are function names, +and returns @code{nil} for special forms. @end defun -Unlike @code{functionp}, the next three functions do @emph{not} -treat a symbol as its function definition. +@noindent +Unlike @code{functionp}, the next three functions do @emph{not} treat +a symbol as its function definition. @defun subrp object This function returns @code{t} if @var{object} is a built-in function @@ -172,21 +186,26 @@ function with @code{&rest} arguments, or the symbol @code{unevalled} if @section Lambda Expressions @cindex lambda expression - A function written in Lisp is a list that looks like this: + A lambda expression is a function object written in Lisp. Here is +an example: @example -(lambda (@var{arg-variables}@dots{}) - @r{[}@var{documentation-string}@r{]} - @r{[}@var{interactive-declaration}@r{]} - @var{body-forms}@dots{}) +(lambda (x) + "Return the hyperbolic cosine of X." + (* 0.5 (+ (exp x) (exp (- x))))) @end example @noindent -Such a list is called a @dfn{lambda expression}. In Emacs Lisp, it -actually is valid as an expression---it evaluates to itself. In some -other Lisp dialects, a lambda expression is not a valid expression at -all. In either case, its main use is not to be evaluated as an -expression, but to be called as a function. +In Emacs Lisp, such a list is valid as an expression---it evaluates to +itself. But its main use is not to be evaluated as an expression, but +to be called as a function. + + A lambda expression, by itself, has no name; it is an @dfn{anonymous +function}. Although lambda expressions can be used this way +(@pxref{Anonymous Functions}), they are more commonly associated with +symbols to make @dfn{named functions} (@pxref{Function Names}). +Before going into these details, the following subsections describe +the components of a lambda expression and what they do. @menu * Lambda Components:: The parts of a lambda expression. @@ -198,10 +217,7 @@ expression, but to be called as a function. @node Lambda Components @subsection Components of a Lambda Expression -@ifnottex - - A function written in Lisp (a ``lambda expression'') is a list that -looks like this: + A lambda expression is a list that looks like this: @example (lambda (@var{arg-variables}@dots{}) @@ -209,7 +225,6 @@ looks like this: [@var{interactive-declaration}] @var{body-forms}@dots{}) @end example -@end ifnottex @cindex lambda list The first element of a lambda expression is always the symbol @@ -243,9 +258,9 @@ code to do the work of the function (or, as a Lisp programmer would say, function is the value returned by the last element of the body. @node Simple Lambda -@subsection A Simple Lambda-Expression Example +@subsection A Simple Lambda Expression Example - Consider for example the following function: + Consider the following example: @example (lambda (a b c) (+ a b c)) @@ -283,18 +298,15 @@ This evaluates the arguments @code{1}, @code{(* 2 3)}, and @code{(- 5 4)} from left to right. Then it applies the lambda expression to the argument values 1, 6 and 1 to produce the value 8. - It is not often useful to write a lambda expression as the @sc{car} of -a form in this way. You can get the same result, of making local -variables and giving them values, using the special form @code{let} -(@pxref{Local Variables}). And @code{let} is clearer and easier to use. -In practice, lambda expressions are either stored as the function -definitions of symbols, to produce named functions, or passed as -arguments to other functions (@pxref{Anonymous Functions}). - - However, calls to explicit lambda expressions were very useful in the -old days of Lisp, before the special form @code{let} was invented. At -that time, they were the only way to bind and initialize local -variables. + As these examples show, you can use a form with a lambda expression +as its @sc{car} to make local variables and give them values. In the +old days of Lisp, this technique was the only way to bind and +initialize local variables. But nowadays, it is clearer to use the +special form @code{let} for this purpose (@pxref{Local Variables}). +Lambda expressions are mainly used as anonymous functions for passing +as arguments to other functions (@pxref{Anonymous Functions}), or +stored as symbol function definitions to produce named functions +(@pxref{Function Names}). @node Argument List @subsection Other Features of Argument Lists @@ -405,12 +417,12 @@ after a @code{&rest} argument. @subsection Documentation Strings of Functions @cindex documentation of function - A lambda expression may optionally have a @dfn{documentation string} just -after the lambda list. This string does not affect execution of the -function; it is a kind of comment, but a systematized comment which -actually appears inside the Lisp world and can be used by the Emacs help -facilities. @xref{Documentation}, for how the @var{documentation-string} is -accessed. + A lambda expression may optionally have a @dfn{documentation string} +just after the lambda list. This string does not affect execution of +the function; it is a kind of comment, but a systematized comment +which actually appears inside the Lisp world and can be used by the +Emacs help facilities. @xref{Documentation}, for how the +documentation string is accessed. It is a good idea to provide documentation strings for all the functions in your program, even those that are called only from within @@ -463,55 +475,45 @@ way users think of the parts of the macro call. @cindex named function @cindex function name - In most computer languages, every function has a name; the idea of a -function without a name is nonsensical. In Lisp, a function in the -strictest sense has no name. It is simply a list whose first element is -@code{lambda}, a byte-code function object, or a primitive subr-object. + A symbol can serve as the name of a function. This happens when the +symbol's @dfn{function cell} (@pxref{Symbol Components}) contains a +function object (e.g.@: a lambda expression). Then the symbol itself +becomes a valid, callable function, equivalent to the function object +in its function cell. - However, a symbol can serve as the name of a function. This happens -when you put the function in the symbol's @dfn{function cell} -(@pxref{Symbol Components}). Then the symbol itself becomes a valid, -callable function, equivalent to the list or subr-object that its -function cell refers to. The contents of the function cell are also -called the symbol's @dfn{function definition}. The procedure of using a -symbol's function definition in place of the symbol is called -@dfn{symbol function indirection}; see @ref{Function Indirection}. + The contents of the function cell are also called the symbol's +@dfn{function definition}. The procedure of using a symbol's function +definition in place of the symbol is called @dfn{symbol function +indirection}; see @ref{Function Indirection}. If you have not given a +symbol a function definition, its function cell is said to be +@dfn{void}, and it cannot be used as a function. - In practice, nearly all functions are given names in this way and -referred to through their names. For example, the symbol @code{car} works -as a function and does what it does because the primitive subr-object -@code{#} is stored in its function cell. + In practice, nearly all functions have names, and are referred to by +their names. You can create a named Lisp function by defining a +lambda expression and putting it in a function cell (@pxref{Function +Cells}). However, it is more common to use the @code{defun} special +form, described in the next section. +@ifnottex +@xref{Defining Functions}. +@end ifnottex We give functions names because it is convenient to refer to them by -their names in Lisp expressions. For primitive subr-objects such as -@code{#}, names are the only way you can refer to them: there -is no read syntax for such objects. For functions written in Lisp, the -name is more convenient to use in a call than an explicit lambda -expression. Also, a function with a name can refer to itself---it can -be recursive. Writing the function's name in its own definition is much -more convenient than making the function definition point to itself -(something that is not impossible but that has various disadvantages in -practice). +their names in Lisp expressions. Also, a named Lisp function can +easily refer to itself---it can be recursive. Furthermore, primitives +can only be referred to textually by their names, since primitive +function objects (@pxref{Primitive Function Type}) have no read +syntax. - We often identify functions with the symbols used to name them. For -example, we often speak of ``the function @code{car},'' not -distinguishing between the symbol @code{car} and the primitive -subr-object that is its function definition. For most purposes, the -distinction is not important. + A function need not have a unique name. A given function object +@emph{usually} appears in the function cell of only one symbol, but +this is just a convention. It is easy to store it in several symbols +using @code{fset}; then each of the symbols is a valid name for the +same function. - Even so, keep in mind that a function need not have a unique name. While -a given function object @emph{usually} appears in the function cell of only -one symbol, this is just a matter of convenience. It is easy to store -it in several symbols using @code{fset}; then each of the symbols is -equally well a name for the same function. - - A symbol used as a function name may also be used as a variable; these -two uses of a symbol are independent and do not conflict. (Some Lisp -dialects, such as Scheme, do not distinguish between a symbol's value -and its function definition; a symbol's value as a variable is also its -function definition.) If you have not given a symbol a function -definition, you cannot use it as a function; whether the symbol has a -value as a variable makes no difference to this. + Note that a symbol used as a function name may also be used as a +variable; these two uses of a symbol are independent and do not +conflict. (This is not the case in some dialects of Lisp, like +Scheme.) @node Defining Functions @section Defining Functions @@ -521,7 +523,7 @@ value as a variable makes no difference to this. is called @dfn{defining a function}, and it is done with the @code{defun} special form. -@defspec defun name argument-list body-forms +@defspec defun name argument-list body-forms... @code{defun} is the usual way to define new Lisp functions. It defines the symbol @var{name} as a function that looks like this: @@ -534,14 +536,9 @@ defines the symbol @var{name} as a function that looks like this: value. As described previously, @var{argument-list} is a list of argument -names and may include the keywords @code{&optional} and @code{&rest} -(@pxref{Lambda Expressions}). Also, the first two of the -@var{body-forms} may be a documentation string and an interactive -declaration. - -There is no conflict if the same symbol @var{name} is also used as a -variable, since the symbol's value cell is independent of the function -cell. @xref{Symbol Components}. +names and may include the keywords @code{&optional} and @code{&rest}. +Also, the first two of the @var{body-forms} may be a documentation +string and an interactive declaration. @xref{Lambda Components}. Here are some examples: @@ -575,7 +572,7 @@ Here are some examples: @group (defun capitalize-backwards () - "Upcase the last letter of a word." + "Upcase the last letter of the word at point." (interactive) (backward-word 1) (forward-word 1) @@ -587,9 +584,10 @@ Here are some examples: Be careful not to redefine existing functions unintentionally. @code{defun} redefines even primitive functions such as @code{car} -without any hesitation or notification. Redefining a function already -defined is often done deliberately, and there is no way to distinguish -deliberate redefinition from unintentional redefinition. +without any hesitation or notification. Emacs does not prevent you +from doing this, because redefining a function is sometimes done +deliberately, and there is no way to distinguish deliberate +redefinition from unintentional redefinition. @end defspec @cindex function aliases @@ -626,7 +624,8 @@ call the primitive's C definition directly, so changing the symbol's definition will have no effect on them. See also @code{defsubst}, which defines a function like @code{defun} -and tells the Lisp compiler to open-code it. @xref{Inline Functions}. +and tells the Lisp compiler to perform inline expansion on it. +@xref{Inline Functions}. @node Calling Functions @section Calling Functions @@ -790,11 +789,10 @@ This function returns @var{arg} and has no side effects. This function ignores any arguments and returns @code{nil}. @end defun - Emacs Lisp functions can also be user-visible @dfn{commands}. A -command is a function that has an @dfn{interactive} specification. -You may want to call these functions as if they were called -interactively. See @ref{Interactive Call} for details on how to do -that. + Some functions are user-visible @dfn{commands}, which can be called +interactively (usually by a key sequence). It is possible to invoke +such a command exactly as though it was called interactively, by using +the @code{call-interactively} function. @xref{Interactive Call}. @node Mapping Functions @section Mapping Functions @@ -802,12 +800,12 @@ that. A @dfn{mapping function} applies a given function (@emph{not} a special form or macro) to each element of a list or other collection. -Emacs Lisp has several such functions; @code{mapcar} and -@code{mapconcat}, which scan a list, are described here. -@xref{Definition of mapatoms}, for the function @code{mapatoms} which -maps over the symbols in an obarray. @xref{Definition of maphash}, -for the function @code{maphash} which maps over key/value associations -in a hash table. +Emacs Lisp has several such functions; this section describes +@code{mapcar}, @code{mapc}, and @code{mapconcat}, which map over a +list. @xref{Definition of mapatoms}, for the function @code{mapatoms} +which maps over the symbols in an obarray. @xref{Definition of +maphash}, for the function @code{maphash} which maps over key/value +associations in a hash table. These mapping functions do not allow char-tables because a char-table is a sparse array whose nominal range of indices is very large. To map @@ -898,47 +896,66 @@ bool-vector, or a string. @section Anonymous Functions @cindex anonymous function - In Lisp, a function is a list that starts with @code{lambda}, a -byte-code function compiled from such a list, or alternatively a -primitive subr-object; names are ``extra.'' Although functions are -usually defined with @code{defun} and given names at the same time, it -is occasionally more concise to use an explicit lambda expression---an -anonymous function. Such a list is valid wherever a function name is. + Although functions are usually defined with @code{defun} and given +names at the same time, it is sometimes convenient to use an explicit +lambda expression---an @dfn{anonymous function}. Anonymous functions +are valid wherever function names are. They are often assigned as +variable values, or as arguments to functions; for instance, you might +pass one as the @var{function} argument to @code{mapcar}, which +applies that function to each element of a list (@pxref{Mapping +Functions}). @xref{describe-symbols example}, for a realistic example +of this. - Any method of creating such a list makes a valid function. Even this: + When defining a lambda expression that is to be used as an anonymous +function, you can in principle use any method to construct the list. +But typically you should use the @code{lambda} macro, or the +@code{function} special form, or the @code{#'} read syntax: -@smallexample -@group -(setq silly (append '(lambda (x)) (list (list '+ (* 3 4) 'x)))) -@result{} (lambda (x) (+ 12 x)) -@end group -@end smallexample - -@noindent -This computes a list that looks like @code{(lambda (x) (+ 12 x))} and -makes it the value (@emph{not} the function definition!) of -@code{silly}. - - Here is how we might call this function: +@defmac lambda args body... +This macro returns an anonymous function with argument list @var{args} +and body forms given by @var{body}. In effect, this macro makes +@code{lambda} forms ``self-quoting'': evaluating a form whose @sc{car} +is @code{lambda} yields the form itself: @example -@group -(funcall silly 1) -@result{} 13 -@end group +(lambda (x) (* x x)) + @result{} (lambda (x) (* x x)) @end example -@noindent -It does @emph{not} work to write @code{(silly 1)}, because this -function is not the @emph{function definition} of @code{silly}. We -have not given @code{silly} any function definition, just a value as a -variable. +The @code{lambda} form has one other effect: it tells the Emacs +evaluator and byte-compiler that its argument is a function, by using +@code{function} as a subroutine (see below). +@end defmac - Most of the time, anonymous functions are constants that appear in -your program. For instance, you might want to pass one as an argument -to the function @code{mapcar}, which applies any given function to -each element of a list (@pxref{Mapping Functions}). -@xref{describe-symbols example}, for a realistic example of this. +@defspec function function-object +@cindex function quoting +This special form returns @var{function-object} without evaluating it. +In this, it is similar to @code{quote} (@pxref{Quoting}). But unlike +@code{quote}, it also serves as a note to the Emacs evaluator and +byte-compiler that @var{function-object} is intended to be used as a +function. Assuming @var{function-object} is a valid lambda +expression, this has two effects: + +@itemize +@item +When the code is byte-compiled, @var{function-object} is compiled into +a byte-code function object (@pxref{Byte Compilation}). + +@item +When lexical binding is enabled, @var{function-object} is converted +into a closure. @xref{Closures}. +@end itemize +@end defspec + +@cindex @samp{#'} syntax +The read syntax @code{#'} is a short-hand for using @code{function}. +The following forms are all equivalent: + +@example +(lambda (x) (* x x)) +(function (lambda (x) (* x x))) +#'(lambda (x) (* x x)) +@end example In the following example, we define a @code{change-property} function that takes a function as its third argument, followed by a @@ -959,15 +976,11 @@ function that takes a function as its third argument, followed by a @end example @noindent -In the @code{double-property} function, we did not quote the -@code{lambda} form. This is permissible, because a @code{lambda} form -is @dfn{self-quoting}: evaluating the form yields the form itself. +Note that we do not quote the @code{lambda} form. -Whether or not you quote a @code{lambda} form makes a difference if -you compile the code (@pxref{Byte Compilation}). If the @code{lambda} -form is unquoted, as in the above example, the anonymous function is -also compiled. Suppose, however, that we quoted the @code{lambda} -form: + If you compile the above code, the anonymous function is also +compiled. This would not happen if, say, you had constructed the +anonymous function by quoting it as a list: @example @group @@ -977,52 +990,10 @@ form: @end example @noindent -If you compile this, the argument passed to @code{change-property} is -the precise list shown: - -@example -(lambda (x) (* x 2)) -@end example - -@noindent -The Lisp compiler cannot assume this list is a function, even though -it looks like one, since it does not know what @code{change-property} -will do with the list. Perhaps it will check whether the @sc{car} of -the third element is the symbol @code{*}! - -@findex function -The @code{function} special form explicitly tells the byte-compiler -that its argument is a function: - -@defspec function function-object -@cindex function quoting -This special form returns @var{function-object} without evaluating it. -In this, it is equivalent to @code{quote}. However, it serves as a -note to the Emacs Lisp compiler that @var{function-object} is intended -to be used only as a function, and therefore can safely be compiled. -Contrast this with @code{quote}, in @ref{Quoting}. -@end defspec - -@cindex @samp{#'} syntax -The read syntax @code{#'} is a short-hand for using @code{function}. -Generally, it is not necessary to use either @code{#'} or -@code{function}; just use an unquoted @code{lambda} form instead. -(Actually, @code{lambda} is a macro defined using @code{function}.) -The following forms are all equivalent: - -@example -#'(lambda (x) (* x x)) -(function (lambda (x) (* x x))) -(lambda (x) (* x x)) -@end example - - We sometimes write @code{function} instead of @code{quote} when -quoting the name of a function, but this usage is just a sort of -comment: - -@example -(function @var{symbol}) @equiv{} (quote @var{symbol}) @equiv{} '@var{symbol} -@end example +In that case, the anonymous function is kept as a lambda expression in +the compiled code. The byte-compiler cannot assume this list is a +function, even though it looks like one, since it does not know that +@code{change-property} intends to use it as a function. @node Function Cells @section Accessing Function Cell Contents @@ -1118,77 +1089,60 @@ This function stores @var{definition} in the function cell of this is not checked. The argument @var{symbol} is an ordinary evaluated argument. -There are three normal uses of this function: - -@itemize @bullet -@item -Copying one symbol's function definition to another---in other words, -making an alternate name for a function. (If you think of this as the -definition of the new name, you should use @code{defalias} instead of -@code{fset}; see @ref{Definition of defalias}.) - -@item -Giving a symbol a function definition that is not a list and therefore -cannot be made with @code{defun}. For example, you can use @code{fset} -to give a symbol @code{s1} a function definition which is another symbol -@code{s2}; then @code{s1} serves as an alias for whatever definition -@code{s2} presently has. (Once again use @code{defalias} instead of -@code{fset} if you think of this as the definition of @code{s1}.) - -@item -In constructs for defining or altering functions. If @code{defun} -were not a primitive, it could be written in Lisp (as a macro) using -@code{fset}. -@end itemize - -Here are examples of these uses: +The primary use of this function is as a subroutine by constructs that +define or alter functions, like @code{defadvice} (@pxref{Advising +Functions}). (If @code{defun} were not a primitive, it could be +written as a Lisp macro using @code{fset}.) You can also use it to +give a symbol a function definition that is not a list, e.g.@: a +keyboard macro (@pxref{Keyboard Macros}): @example -@group -;; @r{Save @code{foo}'s definition in @code{old-foo}.} -(fset 'old-foo (symbol-function 'foo)) -@end group - -@group -;; @r{Make the symbol @code{car} the function definition of @code{xfirst}.} -;; @r{(Most likely, @code{defalias} would be better than @code{fset} here.)} -(fset 'xfirst 'car) - @result{} car -@end group -@group -(xfirst '(1 2 3)) - @result{} 1 -@end group -@group -(symbol-function 'xfirst) - @result{} car -@end group -@group -(symbol-function (symbol-function 'xfirst)) - @result{} # -@end group - -@group ;; @r{Define a named keyboard macro.} (fset 'kill-two-lines "\^u2\^k") @result{} "\^u2\^k" -@end group - -@group -;; @r{Here is a function that alters other functions.} -(defun copy-function-definition (new old) - "Define NEW with the same function definition as OLD." - (fset new (symbol-function old))) -@end group @end example + +It you wish to use @code{fset} to make an alternate name for a +function, consider using @code{defalias} instead. @xref{Definition of +defalias}. @end defun - @code{fset} is sometimes used to save the old definition of a -function before redefining it. That permits the new definition to -invoke the old definition. But it is unmodular and unclean for a Lisp -file to redefine a function defined elsewhere. If you want to modify -a function defined by another package, it is cleaner to use -@code{defadvice} (@pxref{Advising Functions}). +@node Closures +@section Closures + + As explained in @ref{Variable Scoping}, Emacs can optionally enable +lexical binding of variables. When lexical binding is enabled, any +named function that you create (e.g.@: with @code{defun}), as well as +any anonymous function that you create using the @code{lambda} macro +or the @code{function} special form or the @code{#'} syntax +(@pxref{Anonymous Functions}), is automatically converted into a +closure. + + A closure is a function that also carries a record of the lexical +environment that existed when the function was defined. When it is +invoked, any lexical variable references within its definition use the +retained lexical environment. In all other respects, closures behave +much like ordinary functions; in particular, they can be called in the +same way as ordinary functions. + + @xref{Lexical Binding}, for an example of using a closure. + + Currently, an Emacs Lisp closure object is represented by a list +with the symbol @code{closure} as the first element, a list +representing the lexical environment as the second element, and the +argument list and body forms as the remaining elements: + +@example +;; @r{lexical binding is enabled.} +(lambda (x) (* x x)) + @result{} (closure (t) (x) (* x x)) +@end example + +@noindent +However, the fact that the internal structure of a closure is +``exposed'' to the rest of the Lisp world is considered an internal +implementation detail. For this reason, we recommend against directly +examining or altering the structure of closure objects. @node Obsolete Functions @section Declaring Functions Obsolete @@ -1254,41 +1208,46 @@ this: @section Inline Functions @cindex inline functions -@findex defsubst -You can define an @dfn{inline function} by using @code{defsubst} instead -of @code{defun}. An inline function works just like an ordinary -function except for one thing: when you compile a call to the function, -the function's definition is open-coded into the caller. +@defmac defsubst name argument-list body-forms... +Define an inline function. The syntax is exactly the same as +@code{defun} (@pxref{Defining Functions}). +@end defmac -Making a function inline makes explicit calls run faster. But it also -has disadvantages. For one thing, it reduces flexibility; if you -change the definition of the function, calls already inlined still use -the old definition until you recompile them. + You can define an @dfn{inline function} by using @code{defsubst} +instead of @code{defun}. An inline function works just like an +ordinary function except for one thing: when you byte-compile a call +to the function (@pxref{Byte Compilation}), the function's definition +is expanded into the caller. -Another disadvantage is that making a large function inline can increase -the size of compiled code both in files and in memory. Since the speed -advantage of inline functions is greatest for small functions, you -generally should not make large functions inline. + Making a function inline often makes its function calls run faster. +But it also has disadvantages. For one thing, it reduces flexibility; +if you change the definition of the function, calls already inlined +still use the old definition until you recompile them. -Also, inline functions do not behave well with respect to debugging, + Another disadvantage is that making a large function inline can +increase the size of compiled code both in files and in memory. Since +the speed advantage of inline functions is greatest for small +functions, you generally should not make large functions inline. + + Also, inline functions do not behave well with respect to debugging, tracing, and advising (@pxref{Advising Functions}). Since ease of debugging and the flexibility of redefining functions are important features of Emacs, you should not make a function inline, even if it's small, unless its speed is really crucial, and you've timed the code to verify that using @code{defun} actually has performance problems. -It's possible to define a macro to expand into the same code that an -inline function would execute. (@xref{Macros}.) But the macro would be -limited to direct use in expressions---a macro cannot be called with -@code{apply}, @code{mapcar} and so on. Also, it takes some work to -convert an ordinary function into a macro. To convert it into an inline -function is very easy; simply replace @code{defun} with @code{defsubst}. -Since each argument of an inline function is evaluated exactly once, you -needn't worry about how many times the body uses the arguments, as you -do for macros. (@xref{Argument Evaluation}.) + It's possible to define a macro to expand into the same code that an +inline function would execute (@pxref{Macros}). But the macro would +be limited to direct use in expressions---a macro cannot be called +with @code{apply}, @code{mapcar} and so on. Also, it takes some work +to convert an ordinary function into a macro. To convert it into an +inline function is easy; just replace @code{defun} with +@code{defsubst}. Since each argument of an inline function is +evaluated exactly once, you needn't worry about how many times the +body uses the arguments, as you do for macros. -Inline functions can be used and open-coded later on in the same file, -following the definition, just like macros. + After an inline function is defined, its inline expansion can be +performed later on in the same file, just like macros. @node Declaring Functions @section Telling the Compiler that a Function is Defined @@ -1352,12 +1311,10 @@ definition using @code{locate-library}; if that finds no file, they expand the definition file name relative to the directory of the file that contains the @code{declare-function} call. - You can also say that a function is defined by C code by specifying a -file name ending in @samp{.c} or @samp{.m}. @code{check-declare-file} -looks for these files in the C source code directory. This is useful -only when you call a function that is defined only on certain systems. -Most of the primitive functions of Emacs are always defined so they will -never give you a warning. + You can also say that a function is a primitive by specifying a file +name ending in @samp{.c} or @samp{.m}. This is useful only when you +call a primitive that is defined only on certain systems. Most +primitives are always defined, so they will never give you a warning. Sometimes a file will optionally use functions from an external package. If you prefix the filename in the @code{declare-function} statement with diff --git a/doc/lispref/help.texi b/doc/lispref/help.texi index 678ea83465f..f6556639e98 100644 --- a/doc/lispref/help.texi +++ b/doc/lispref/help.texi @@ -582,11 +582,12 @@ If this variable is non-@code{nil}, its value is a form to evaluate whenever the character @code{help-char} is read. If evaluating the form produces a string, that string is displayed. -A command that calls @code{read-event} or @code{read-char} probably -should bind @code{help-form} to a non-@code{nil} expression while it -does input. (The time when you should not do this is when @kbd{C-h} has -some other meaning.) Evaluating this expression should result in a -string that explains what the input is for and how to enter it properly. +A command that calls @code{read-event}, @code{read-char-choice}, or +@code{read-char} probably should bind @code{help-form} to a +non-@code{nil} expression while it does input. (The time when you +should not do this is when @kbd{C-h} has some other meaning.) +Evaluating this expression should result in a string that explains +what the input is for and how to enter it properly. Entry to the minibuffer binds this variable to the value of @code{minibuffer-help-form} (@pxref{Definition of minibuffer-help-form}). diff --git a/doc/lispref/hooks.texi b/doc/lispref/hooks.texi index 95655324ab4..ef3ebc4be35 100644 --- a/doc/lispref/hooks.texi +++ b/doc/lispref/hooks.texi @@ -127,6 +127,9 @@ not exactly a hook, but does a similar job. @xref{Calendar Customizing,,, emacs}. @end ifnottex +@item change-major-mode-after-body-hook +@xref{Mode Hooks}. + @item change-major-mode-hook @xref{Creating Buffer-Local}. @@ -292,9 +295,15 @@ Manual}. @item post-command-hook @xref{Command Overview}. +@item post-self-insert-hook +@xref{Keymaps and Minor Modes}. + @item pre-command-hook @xref{Command Overview}. +@item prog-mode-hook +@xref{Basic Major Modes}. + @item resume-tty-functions @xref{Suspending Emacs}. diff --git a/doc/lispref/intro.texi b/doc/lispref/intro.texi index 64c856d3ed4..a68bcfa0fe7 100644 --- a/doc/lispref/intro.texi +++ b/doc/lispref/intro.texi @@ -162,7 +162,7 @@ being described, are formatted like this: @var{first-number}. @cindex @code{nil} @cindex false - In Lisp, the symbol @code{nil} has three separate meanings: it + In Emacs Lisp, the symbol @code{nil} has three separate meanings: it is a symbol with the name @samp{nil}; it is the logical truth value @var{false}; and it is the empty list---the list of zero elements. When used as a variable, @code{nil} always has the value @code{nil}. @@ -396,13 +396,14 @@ Form', respectively. Commands are simply functions that may be called interactively; macros process their arguments differently from functions (the arguments are not evaluated), but are presented the same way. - Special form descriptions use a more complex notation to specify -optional and repeated arguments because they can break the argument -list down into separate arguments in more complicated ways. -@samp{@r{[}@var{optional-arg}@r{]}} means that @var{optional-arg} is -optional and @samp{@var{repeated-args}@dots{}} stands for zero or more -arguments. Parentheses are used when several arguments are grouped into -additional levels of list structure. Here is an example: + The descriptions of macros and special forms use a more complex +notation to specify optional and repeated arguments, because they can +break the argument list down into separate arguments in more +complicated ways. @samp{@r{[}@var{optional-arg}@r{]}} means that +@var{optional-arg} is optional and @samp{@var{repeated-args}@dots{}} +stands for zero or more arguments. Parentheses are used when several +arguments are grouped into additional levels of list structure. Here +is an example: @defspec count-loop (@var{var} [@var{from} @var{to} [@var{inc}]]) @var{body}@dots{} This imaginary special form implements a loop that executes the @@ -485,9 +486,9 @@ giving a prefix argument makes @var{here} non-@code{nil}. @end deffn @defvar emacs-build-time -The value of this variable indicates the time at which Emacs was built -at the local site. It is a list of three integers, like the value -of @code{current-time} (@pxref{Time of Day}). +The value of this variable indicates the time at which Emacs was +built. It is a list of three integers, like the value of +@code{current-time} (@pxref{Time of Day}). @example @group diff --git a/doc/lispref/keymaps.texi b/doc/lispref/keymaps.texi index 8e03ade285f..a8528a548fc 100644 --- a/doc/lispref/keymaps.texi +++ b/doc/lispref/keymaps.texi @@ -432,6 +432,34 @@ for every numeric character code without modifier bits, even if it is @code{nil}, so these character's bindings are never inherited from the parent keymap. +@cindex keymap inheritance from multiple maps + Sometimes you want to make a keymap that inherits from more than one +map. You can use the function @code{make-composed-keymap} for this. + +@defun make-composed-keymap maps &optional parent +This function returns a new keymap composed of the existing keymap(s) +@var{maps}, and optionally inheriting from a parent keymap +@var{parent}. @var{maps} can be a single keymap or a list of more +than one. When looking up a key in the resulting new map, Emacs +searches in each of the @var{maps}, and then in @var{parent}, stopping +at the first match. A @code{nil} binding in any one of @var{maps} +overrides any binding in @var{parent}, but not a non-@code{nil} binding +in any other of the @var{maps}. +@end defun + +@noindent For example, here is how Emacs sets the parent of +@code{help-mode-map}, such that it inherits from both +@code{button-buffer-map} and @code{special-mode-map}: + +@example +(defvar help-mode-map + (let ((map (make-sparse-keymap))) + (set-keymap-parent map (make-composed-keymap button-buffer-map + special-mode-map)) + ... map) ... ) +@end example + + @node Prefix Keys @section Prefix Keys @cindex prefix key @@ -2318,7 +2346,7 @@ The various toolkits with which you can build Emacs do not all support the same set of features for menus. Some code works as expected with one toolkit, but not under another. -One example is menu actions or buttons in a top-level menu-bar. The +One example is menu actions or buttons in a top-level menu bar. The following works with the Lucid toolkit or on MS Windows, but not with GTK or Nextstep, where clicking on the item has no effect. @@ -2658,6 +2686,15 @@ The @code{:rtl} property specifies an alternative image to use for right-to-left languages. Only the Gtk+ version of Emacs supports this at present. +Like the menu bar, the tool bar can display separators (@pxref{Menu +Separators}). Tool bar separators are vertical rather than +horizontal, though, and only a single style is supported. Separators +are represented in the tool bar keymap in the same way as for the +menu bar, i.e. using a @code{(menu-item "--"}) entry. The Gtk+ and +Nextstep tool bars render separators natively, otherwise Emacs selects +a separator image that is appropriate for the display. Note that tool +bar separators do not support any properties, such as @code{:visible}. + The default tool bar is defined so that items specific to editing do not appear for major modes whose command symbol has a @code{mode-class} property of @code{special} (@pxref{Major Mode Conventions}). Major diff --git a/doc/lispref/lists.texi b/doc/lispref/lists.texi index eb9ddf58603..c8433c79b54 100644 --- a/doc/lispref/lists.texi +++ b/doc/lispref/lists.texi @@ -23,7 +23,6 @@ the whole list. * Modifying Lists:: Storing new pieces into an existing list. * Sets And Lists:: A list can represent a finite mathematical set. * Association Lists:: A list can represent a finite relation or mapping. -* Rings:: Managing a fixed-size ring of objects. @end menu @node Cons Cells @@ -31,61 +30,56 @@ the whole list. @cindex lists and cons cells Lists in Lisp are not a primitive data type; they are built up from -@dfn{cons cells}. A cons cell is a data object that represents an -ordered pair. That is, it has two slots, and each slot @dfn{holds}, or -@dfn{refers to}, some Lisp object. One slot is known as the @sc{car}, -and the other is known as the @sc{cdr}. (These names are traditional; -see @ref{Cons Cell Type}.) @sc{cdr} is pronounced ``could-er.'' +@dfn{cons cells} (@pxref{Cons Cell Type}). A cons cell is a data +object that represents an ordered pair. That is, it has two slots, +and each slot @dfn{holds}, or @dfn{refers to}, some Lisp object. One +slot is known as the @sc{car}, and the other is known as the @sc{cdr}. +(These names are traditional; see @ref{Cons Cell Type}.) @sc{cdr} is +pronounced ``could-er.'' We say that ``the @sc{car} of this cons cell is'' whatever object its @sc{car} slot currently holds, and likewise for the @sc{cdr}. A list is a series of cons cells ``chained together,'' so that each -cell refers to the next one. There is one cons cell for each element of -the list. By convention, the @sc{car}s of the cons cells hold the -elements of the list, and the @sc{cdr}s are used to chain the list: the -@sc{cdr} slot of each cons cell refers to the following cons cell. The -@sc{cdr} of the last cons cell is @code{nil}. This asymmetry between -the @sc{car} and the @sc{cdr} is entirely a matter of convention; at the -level of cons cells, the @sc{car} and @sc{cdr} slots have the same -characteristics. +cell refers to the next one. There is one cons cell for each element +of the list. By convention, the @sc{car}s of the cons cells hold the +elements of the list, and the @sc{cdr}s are used to chain the list +(this asymmetry between @sc{car} and @sc{cdr} is entirely a matter of +convention; at the level of cons cells, the @sc{car} and @sc{cdr} +slots have similar properties). Hence, the @sc{cdr} slot of each cons +cell in a list refers to the following cons cell. @cindex true list - Since @code{nil} is the conventional value to put in the @sc{cdr} of -the last cons cell in the list, we call that case a @dfn{true list}. - - In Lisp, we consider the symbol @code{nil} a list as well as a -symbol; it is the list with no elements. For convenience, the symbol + Also by convention, the @sc{cdr} of the last cons cell in a list is +@code{nil}. We call such a @code{nil}-terminated structure a +@dfn{true list}. In Emacs Lisp, the symbol @code{nil} is both a +symbol and a list with no elements. For convenience, the symbol @code{nil} is considered to have @code{nil} as its @sc{cdr} (and also -as its @sc{car}). Therefore, the @sc{cdr} of a true list is always a -true list. +as its @sc{car}). + + Hence, the @sc{cdr} of a true list is always a true list. The +@sc{cdr} of a nonempty true list is a true list containing all the +elements except the first. @cindex dotted list @cindex circular list - If the @sc{cdr} of a list's last cons cell is some other value, -neither @code{nil} nor another cons cell, we call the structure a -@dfn{dotted list}, since its printed representation would use -@samp{.}. There is one other possibility: some cons cell's @sc{cdr} -could point to one of the previous cons cells in the list. We call -that structure a @dfn{circular list}. + If the @sc{cdr} of a list's last cons cell is some value other than +@code{nil}, we call the structure a @dfn{dotted list}, since its +printed representation would use dotted pair notation (@pxref{Dotted +Pair Notation}). There is one other possibility: some cons cell's +@sc{cdr} could point to one of the previous cons cells in the list. +We call that structure a @dfn{circular list}. For some purposes, it does not matter whether a list is true, -circular or dotted. If the program doesn't look far enough down the +circular or dotted. If a program doesn't look far enough down the list to see the @sc{cdr} of the final cons cell, it won't care. However, some functions that operate on lists demand true lists and signal errors if given a dotted list. Most functions that try to find the end of a list enter infinite loops if given a circular list. @cindex list structure - Because most cons cells are used as part of lists, the phrase -@dfn{list structure} has come to mean any structure made out of cons -cells. - - The @sc{cdr} of any nonempty true list @var{l} is a list containing all the -elements of @var{l} except the first. - - @xref{Cons Cell Type}, for the read and print syntax of cons cells and -lists, and for ``box and arrow'' illustrations of lists. + Because most cons cells are used as part of lists, we refer to any +structure made out of cons cells as a @dfn{list structure}. @node List-related Predicates @section Predicates on Lists @@ -257,6 +251,10 @@ x x @result{} (b c) @end example + +@noindent +For the @code{pop} macro, which removes an element from a list, +@xref{List Variables}. @end defmac @defun nth n list @@ -695,6 +693,10 @@ This macro provides an alternative way to write l @result{} (c a b) @end example + +@noindent +For the @code{pop} macro, which removes the first element from a list, +@xref{List Elements}. @end defmac Two functions modify lists that are the values of variables. @@ -1800,90 +1802,3 @@ often modifies the original list structure of @var{alist}. compares the @sc{cdr} of each @var{alist} association instead of the @sc{car}. @end defun - -@node Rings -@section Managing a Fixed-Size Ring of Objects - -@cindex ring data structure - This section describes functions for operating on rings. A -@dfn{ring} is a fixed-size data structure that supports insertion, -deletion, rotation, and modulo-indexed reference and traversal. - -@defun make-ring size -This returns a new ring capable of holding @var{size} objects. -@var{size} should be an integer. -@end defun - -@defun ring-p object -This returns @code{t} if @var{object} is a ring, @code{nil} otherwise. -@end defun - -@defun ring-size ring -This returns the maximum capacity of the @var{ring}. -@end defun - -@defun ring-length ring -This returns the number of objects that @var{ring} currently contains. -The value will never exceed that returned by @code{ring-size}. -@end defun - -@defun ring-elements ring -This returns a list of the objects in @var{ring}, in order, newest first. -@end defun - -@defun ring-copy ring -This returns a new ring which is a copy of @var{ring}. -The new ring contains the same (@code{eq}) objects as @var{ring}. -@end defun - -@defun ring-empty-p ring -This returns @code{t} if @var{ring} is empty, @code{nil} otherwise. -@end defun - - The newest element in the ring always has index 0. Higher indices -correspond to older elements. Indices are computed modulo the ring -length. Index @minus{}1 corresponds to the oldest element, @minus{}2 -to the next-oldest, and so forth. - -@defun ring-ref ring index -This returns the object in @var{ring} found at index @var{index}. -@var{index} may be negative or greater than the ring length. If -@var{ring} is empty, @code{ring-ref} signals an error. -@end defun - -@defun ring-insert ring object -This inserts @var{object} into @var{ring}, making it the newest -element, and returns @var{object}. - -If the ring is full, insertion removes the oldest element to -make room for the new element. -@end defun - -@defun ring-remove ring &optional index -Remove an object from @var{ring}, and return that object. The -argument @var{index} specifies which item to remove; if it is -@code{nil}, that means to remove the oldest item. If @var{ring} is -empty, @code{ring-remove} signals an error. -@end defun - -@defun ring-insert-at-beginning ring object -This inserts @var{object} into @var{ring}, treating it as the oldest -element. The return value is not significant. - -If the ring is full, this function removes the newest element to make -room for the inserted element. -@end defun - -@cindex fifo data structure - If you are careful not to exceed the ring size, you can -use the ring as a first-in-first-out queue. For example: - -@lisp -(let ((fifo (make-ring 5))) - (mapc (lambda (obj) (ring-insert fifo obj)) - '(0 one "two")) - (list (ring-remove fifo) t - (ring-remove fifo) t - (ring-remove fifo))) - @result{} (0 t one t "two") -@end lisp diff --git a/doc/lispref/loading.texi b/doc/lispref/loading.texi index 8d8fec62e2c..3c2fa60248e 100644 --- a/doc/lispref/loading.texi +++ b/doc/lispref/loading.texi @@ -10,9 +10,10 @@ @cindex library @cindex Lisp library - Loading a file of Lisp code means bringing its contents into the Lisp -environment in the form of Lisp objects. Emacs finds and opens the -file, reads the text, evaluates each form, and then closes the file. + Loading a file of Lisp code means bringing its contents into the +Lisp environment in the form of Lisp objects. Emacs finds and opens +the file, reads the text, evaluates each form, and then closes the +file. Such a file is also called a @dfn{Lisp library}. The load functions evaluate all the expressions in a file just as the @code{eval-buffer} function evaluates all the @@ -29,11 +30,6 @@ into a buffer and evaluated there. (Indeed, most code is tested this way.) Most often, the forms are function definitions and variable definitions. - A file containing Lisp code is often called a @dfn{library}. Thus, -the ``Rmail library'' is a file containing code for Rmail mode. -Similarly, a ``Lisp library directory'' is a directory of files -containing Lisp code. - @menu * How Programs Do Loading:: The @code{load} function and others. * Load Suffixes:: Details about the suffixes that @code{load} tries. @@ -88,8 +84,8 @@ this case, you must specify the precise file name you want, except that, if Auto Compression mode is enabled, @code{load} will still use @code{jka-compr-load-suffixes} to find compressed versions. By specifying the precise file name and using @code{t} for -@var{nosuffix}, you can prevent perverse file names such as -@file{foo.el.el} from being tried. +@var{nosuffix}, you can prevent file names like @file{foo.el.el} from +being tried. If the optional argument @var{must-suffix} is non-@code{nil}, then @code{load} insists that the file name used must end in either @@ -238,73 +234,37 @@ it skips the latter group. When Emacs loads a Lisp library, it searches for the library in a list of directories specified by the variable @code{load-path}. -@defopt load-path +@defvar load-path @cindex @code{EMACSLOADPATH} environment variable The value of this variable is a list of directories to search when loading files with @code{load}. Each element is a string (which must be a directory name) or @code{nil} (which stands for the current working directory). -@end defopt +@end defvar - The value of @code{load-path} is initialized from the environment -variable @code{EMACSLOADPATH}, if that exists; otherwise its default -value is specified in @file{emacs/src/epaths.h} when Emacs is built. -Then the list is expanded by adding subdirectories of the directories -in the list. - - The syntax of @code{EMACSLOADPATH} is the same as used for @code{PATH}; -@samp{:} (or @samp{;}, according to the operating system) separates -directory names, and @samp{.} is used for the current default directory. -Here is an example of how to set your @code{EMACSLOADPATH} variable from -a @code{csh} @file{.login} file: - -@smallexample -setenv EMACSLOADPATH .:/user/bil/emacs:/usr/local/share/emacs/20.3/lisp -@end smallexample - - Here is how to set it using @code{sh}: + Each time Emacs starts up, it sets up the value of @code{load-path} +in several steps. First, it initializes @code{load-path} to the +directories specified by the environment variable @env{EMACSLOADPATH}, +if that exists. The syntax of @env{EMACSLOADPATH} is the same as used +for @code{PATH}; directory names are separated by @samp{:} (or +@samp{;}, on some operating systems), and @samp{.} stands for the +current default directory. Here is an example of how to set +@env{EMACSLOADPATH} variable from @command{sh}: @smallexample export EMACSLOADPATH -EMACSLOADPATH=.:/user/bil/emacs:/usr/local/share/emacs/20.3/lisp +EMACSLOADPATH=/home/foo/.emacs.d/lisp:/opt/emacs/lisp @end smallexample - Here is an example of code you can place in your init file (@pxref{Init -File}) to add several directories to the front of your default -@code{load-path}: +@noindent +Here is how to set it from @code{csh}: @smallexample -@group -(setq load-path - (append (list nil "/user/bil/emacs" - "/usr/local/lisplib" - "~/emacs") - load-path)) -@end group +setenv EMACSLOADPATH /home/foo/.emacs.d/lisp:/opt/emacs/lisp @end smallexample -@c Wordy to rid us of an overfull hbox. --rjc 15mar92 -@noindent -In this example, the path searches the current working directory first, -followed then by the @file{/user/bil/emacs} directory, the -@file{/usr/local/lisplib} directory, and the @file{~/emacs} directory, -which are then followed by the standard directories for Lisp code. - - Dumping Emacs uses a special value of @code{load-path}. If the value of -@code{load-path} at the end of dumping is unchanged (that is, still the -same special value), the dumped Emacs switches to the ordinary -@code{load-path} value when it starts up, as described above. But if -@code{load-path} has any other value at the end of dumping, that value -is used for execution of the dumped Emacs also. - - Therefore, if you want to change @code{load-path} temporarily for -loading a few libraries in @file{site-init.el} or @file{site-load.el}, -you should bind @code{load-path} locally with @code{let} around the -calls to @code{load}. - - The default value of @code{load-path}, when running an Emacs which has -been installed on the system, includes two special directories (and -their subdirectories as well): + If @env{EMACSLOADPATH} is not set (which is usually the case), Emacs +initializes @code{load-path} with the following two directories: @smallexample "/usr/local/share/emacs/@var{version}/site-lisp" @@ -319,33 +279,42 @@ and @noindent The first one is for locally installed packages for a particular Emacs -version; the second is for locally installed packages meant for use with -all installed Emacs versions. - - There are several reasons why a Lisp package that works well in one -Emacs version can cause trouble in another. Sometimes packages need -updating for incompatible changes in Emacs; sometimes they depend on -undocumented internal Emacs data that can change without notice; -sometimes a newer Emacs version incorporates a version of the package, -and should be used only with that version. - - Emacs finds these directories' subdirectories and adds them to -@code{load-path} when it starts up. Both immediate subdirectories and -subdirectories multiple levels down are added to @code{load-path}. - - Not all subdirectories are included, though. Subdirectories whose -names do not start with a letter or digit are excluded. Subdirectories -named @file{RCS} or @file{CVS} are excluded. Also, a subdirectory which -contains a file named @file{.nosearch} is excluded. You can use these -methods to prevent certain subdirectories of the @file{site-lisp} -directories from being searched. +version; the second is for locally installed packages meant for use +with all installed Emacs versions. If you run Emacs from the directory where it was built---that is, an -executable that has not been formally installed---then @code{load-path} -normally contains two additional directories. These are the @code{lisp} -and @code{site-lisp} subdirectories of the main build directory. (Both +executable that has not been formally installed---Emacs puts two more +directories in @code{load-path}. These are the @code{lisp} and +@code{site-lisp} subdirectories of the main build directory. (Both are represented as absolute file names.) + Next, Emacs ``expands'' the initial list of directories in +@code{load-path} by adding the subdirectories of those directories. +Both immediate subdirectories and subdirectories multiple levels down +are added. But it excludes subdirectories whose names do not start +with a letter or digit, and subdirectories named @file{RCS} or +@file{CVS}, and subdirectories containing a file named +@file{.nosearch}. + + Next, Emacs adds any extra load directory that you specify using the +@samp{-L} command-line option (@pxref{Action Arguments,,,emacs, The +GNU Emacs Manual}). It also adds the directories where optional +packages are installed, if any (@pxref{Packaging Basics}). + + It is common to add code to one's init file (@pxref{Init File}) to +add one or more directories to @code{load-path}. For example: + +@smallexample +(push "~/.emacs.d/lisp" load-path) +@end smallexample + + Dumping Emacs uses a special value of @code{load-path}. If the +value of @code{load-path} at the end of dumping is unchanged (that is, +still the same special value), the dumped Emacs switches to the +ordinary @code{load-path} value when it starts up, as described above. +But if @code{load-path} has any other value at the end of dumping, +that value is used for execution of the dumped Emacs also. + @deffn Command locate-library library &optional nosuffix path interactive-call This command finds the precise file name for library @var{library}. It searches for the library in the same way @code{load} does, and the @@ -401,30 +370,26 @@ example) is read without decoding, the text of the program will be unibyte text, and its string constants will be unibyte strings. @xref{Coding Systems}. - The reason Emacs is designed this way is so that Lisp programs give -predictable results, regardless of how Emacs was started. In addition, -this enables programs that depend on using multibyte text to work even -in a unibyte Emacs. - - In most Emacs Lisp programs, the fact that non-@acronym{ASCII} strings are -multibyte strings should not be noticeable, since inserting them in -unibyte buffers converts them to unibyte automatically. However, if -this does make a difference, you can force a particular Lisp file to be -interpreted as unibyte by writing @samp{-*-unibyte: t;-*-} in a -comment on the file's first line. With that designator, the file will -unconditionally be interpreted as unibyte, even in an ordinary -multibyte Emacs session. This can matter when making keybindings to -non-@acronym{ASCII} characters written as @code{?v@var{literal}}. + In most Emacs Lisp programs, the fact that non-@acronym{ASCII} +strings are multibyte strings should not be noticeable, since +inserting them in unibyte buffers converts them to unibyte +automatically. However, if this does make a difference, you can force +a particular Lisp file to be interpreted as unibyte by writing +@samp{-*-unibyte: t;-*-} in a comment on the file's first line. With +that designator, the file will unconditionally be interpreted as +unibyte, even in an ordinary multibyte Emacs session. This can matter +when making keybindings to non-@acronym{ASCII} characters written as +@code{?v@var{literal}}. @node Autoload @section Autoload @cindex autoload - The @dfn{autoload} facility allows you to make a function or macro -known in Lisp, but put off loading the file that defines it. The first -call to the function automatically reads the proper file to install the -real definition and other associated code, then runs the real definition -as if it had been loaded all along. + The @dfn{autoload} facility allows you to register the existence of +a function or macro, but put off loading the file that defines it. +The first call to the function automatically reads the proper file, in +order to install the real definition and other associated code, then +runs the real definition as if it had been loaded all along. There are two ways to set up an autoloaded function: by calling @code{autoload}, and by writing a special ``magic'' comment in the @@ -696,23 +661,29 @@ already. If not, it loads the feature from the appropriate file. This file should call @code{provide} at the top level to add the feature to @code{features}; if it fails to do so, @code{require} signals an error. - For example, in @file{emacs/lisp/prolog.el}, -the definition for @code{run-prolog} includes the following code: + For example, in @file{idlwave.el}, the definition for +@code{idlwave-complete-filename} includes the following code: @smallexample -(defun run-prolog () - "Run an inferior Prolog process, with I/O via buffer *prolog*." - (interactive) - (require 'comint) - (switch-to-buffer (make-comint "prolog" prolog-program-name)) - (inferior-prolog-mode)) +(defun idlwave-complete-filename () + "Use the comint stuff to complete a file name." + (require 'comint) + (let* ((comint-file-name-chars "~/A-Za-z0-9+@:_.$#%=@{@}\\-") + (comint-completion-addsuffix nil) + ...) + (comint-dynamic-complete-filename))) @end smallexample @noindent The expression @code{(require 'comint)} loads the file @file{comint.el} -if it has not yet been loaded. This ensures that @code{make-comint} is -defined. Features are normally named after the files that provide them, -so that @code{require} need not be given the file name. +if it has not yet been loaded, ensuring that +@code{comint-dynamic-complete-filename} is defined. Features are +normally named after the files that provide them, so that +@code{require} need not be given the file name. (Note that it is +important that the @code{require} statement be outside the body of the +@code{let}. Loading a library while its variables are let-bound can +have unintended consequences, namely the variables becoming unbound +after the let exits.) The @file{comint.el} file contains the following top-level expression: diff --git a/doc/lispref/macros.texi b/doc/lispref/macros.texi index a8b941bba89..dca88d2b7c7 100644 --- a/doc/lispref/macros.texi +++ b/doc/lispref/macros.texi @@ -27,7 +27,6 @@ instead. @xref{Inline Functions}. * Expansion:: How, when and why macros are expanded. * Compiling Macros:: How macros are expanded by the compiler. * Defining Macros:: How to write a macro definition. -* Backquote:: Easier construction of list structure. * Problems with Macros:: Don't evaluate the macro arguments too many times. Don't hide the user's variables. * Indenting Macros:: Specifying how to indent macro calls. @@ -78,10 +77,9 @@ to the argument values from the macro call, or to a list of them in the case of a @code{&rest} argument. And the macro body executes and returns its value just as a function body does. - The second crucial difference between macros and functions is that the -value returned by the macro body is not the value of the macro call. -Instead, it is an alternate expression for computing that value, also -known as the @dfn{expansion} of the macro. The Lisp interpreter + The second crucial difference between macros and functions is that +the value returned by the macro body is an alternate Lisp expression, +also known as the @dfn{expansion} of the macro. The Lisp interpreter proceeds to evaluate the expansion as soon as it comes back from the macro. @@ -221,14 +219,33 @@ any @code{interactive} declaration is ignored since macros cannot be called interactively. @end defspec - The body of the macro definition can include a @code{declare} form, + Macros often need to construct large list structures from a mixture +of constants and nonconstant parts. To make this easier, use the +@samp{`} syntax (@pxref{Backquote}). For example: + +@example +@example +@group +(defmacro t-becomes-nil (variable) + `(if (eq ,variable t) + (setq ,variable nil))) +@end group + +@group +(t-becomes-nil foo) + @equiv{} (if (eq foo t) (setq foo nil)) +@end group +@end example +@end example + + The body of a macro definition can include a @code{declare} form, which can specify how @key{TAB} should indent macro calls, and how to step through them for Edebug. @defmac declare @var{specs}@dots{} @anchor{Definition of declare} A @code{declare} form is used in a macro definition to specify various -additional information about it. Two kinds of specification are +additional information about it. The following specifications are currently supported: @table @code @@ -257,109 +274,13 @@ without evaluating any @var{specs}. No macro absolutely needs a @code{declare} form, because that form has no effect on how the macro expands, on what the macro means in the -program. It only affects secondary features: indentation and Edebug. - -@node Backquote -@section Backquote -@cindex backquote (list substitution) -@cindex ` (list substitution) -@findex ` - - Macros often need to construct large list structures from a mixture of -constants and nonconstant parts. To make this easier, use the @samp{`} -syntax (usually called @dfn{backquote}). - - Backquote allows you to quote a list, but selectively evaluate -elements of that list. In the simplest case, it is identical to the -special form @code{quote} (@pxref{Quoting}). For example, these -two forms yield identical results: - -@example -@group -`(a list of (+ 2 3) elements) - @result{} (a list of (+ 2 3) elements) -@end group -@group -'(a list of (+ 2 3) elements) - @result{} (a list of (+ 2 3) elements) -@end group -@end example - -@findex , @r{(with backquote)} -The special marker @samp{,} inside of the argument to backquote -indicates a value that isn't constant. Backquote evaluates the -argument of @samp{,} and puts the value in the list structure: - -@example -@group -(list 'a 'list 'of (+ 2 3) 'elements) - @result{} (a list of 5 elements) -@end group -@group -`(a list of ,(+ 2 3) elements) - @result{} (a list of 5 elements) -@end group -@end example - - Substitution with @samp{,} is allowed at deeper levels of the list -structure also. For example: - -@example -@group -(defmacro t-becomes-nil (variable) - `(if (eq ,variable t) - (setq ,variable nil))) -@end group - -@group -(t-becomes-nil foo) - @equiv{} (if (eq foo t) (setq foo nil)) -@end group -@end example - -@findex ,@@ @r{(with backquote)} -@cindex splicing (with backquote) - You can also @dfn{splice} an evaluated value into the resulting list, -using the special marker @samp{,@@}. The elements of the spliced list -become elements at the same level as the other elements of the resulting -list. The equivalent code without using @samp{`} is often unreadable. -Here are some examples: - -@example -@group -(setq some-list '(2 3)) - @result{} (2 3) -@end group -@group -(cons 1 (append some-list '(4) some-list)) - @result{} (1 2 3 4 2 3) -@end group -@group -`(1 ,@@some-list 4 ,@@some-list) - @result{} (1 2 3 4 2 3) -@end group - -@group -(setq list '(hack foo bar)) - @result{} (hack foo bar) -@end group -@group -(cons 'use - (cons 'the - (cons 'words (append (cdr list) '(as elements))))) - @result{} (use the words foo bar as elements) -@end group -@group -`(use the words ,@@(cdr list) as elements) - @result{} (use the words foo bar as elements) -@end group -@end example +program. It only affects the secondary features listed above. @node Problems with Macros @section Common Problems Using Macros - The basic facts of macro expansion have counterintuitive consequences. -This section describes some important consequences that can lead to + Macro expansion can have counterintuitive consequences. This +section describes some important consequences that can lead to trouble, and rules to follow to avoid trouble. @menu @@ -407,9 +328,8 @@ program is actually run. When defining a macro you must pay attention to the number of times the arguments will be evaluated when the expansion is executed. The -following macro (used to facilitate iteration) illustrates the problem. -This macro allows us to write a simple ``for'' loop such as one might -find in Pascal. +following macro (used to facilitate iteration) illustrates the +problem. This macro allows us to write a ``for'' loop construct. @findex for @smallexample @@ -683,9 +603,9 @@ either. @node Indenting Macros @section Indenting Macros - You can use the @code{declare} form in the macro definition to -specify how to @key{TAB} should indent calls to the macro. You -write it like this: + Within a macro definition, you can use the @code{declare} form +(@pxref{Defining Macros}) to specify how to @key{TAB} should indent +calls to the macro. An indentation specifiction is written like this: @example (declare (indent @var{indent-spec})) @@ -715,6 +635,7 @@ the line uses the standard pattern. @var{symbol} should be a function name; that function is called to calculate the indentation of a line within this expression. The function receives two arguments: + @table @asis @item @var{state} The value returned by @code{parse-partial-sexp} (a Lisp primitive for @@ -723,6 +644,7 @@ beginning of this line. @item @var{pos} The position at which the line being indented begins. @end table + @noindent It should return either a number, which is the number of columns of indentation for that line, or a list whose car is such a number. The diff --git a/doc/lispref/makefile.w32-in b/doc/lispref/makefile.w32-in index 08b176b7593..11b6beab84d 100644 --- a/doc/lispref/makefile.w32-in +++ b/doc/lispref/makefile.w32-in @@ -38,14 +38,9 @@ MAKEINFO_OPTS = --force --enable-encoding -I$(srcdir) -I$(emacsdir) # The environment variable and its value to add $(srcdir) to the path # searched for TeX input files. texinputdir = $(srcdir)\..\..\nt\envadd.bat \ - "TEXINPUTS=$(srcdir);$(texinputdir);$(TEXINPUTS)" \ + "TEXINPUTS=$(srcdir);$(texinfodir);$(emacsdir);$(TEXINPUTS)" \ "MAKEINFO=$(MAKEINFO) $(MAKEINFO_OPTS)" /C -# The name of the manual: -VERSION=2.9 -## FIXME can this be set by configure, as per Makefile.in? -manual = elisp-manual-23-$(VERSION) - # List of all the texinfo files in the manual: srcs = \ diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi index e3008470233..a71138f5268 100644 --- a/doc/lispref/minibuf.texi +++ b/doc/lispref/minibuf.texi @@ -1335,19 +1335,19 @@ but uses the predicate @code{user-variable-p} instead of @deffn Command read-color &optional prompt convert allow-empty display This function reads a string that is a color specification, either the color's name or an RGB hex value such as @code{#RRRGGGBBB}. It -prompts with @var{prompt} (default: @code{"Color (name or #R+G+B+):"}) +prompts with @var{prompt} (default: @code{"Color (name or #RGB triplet):"}) and provides completion for color names, but not for hex RGB values. In addition to names of standard colors, completion candidates include the foreground and background colors at point. Valid RGB values are described in @ref{Color Names}. -The function's return value is the color name typed by the user in the +The function's return value is the string typed by the user in the minibuffer. However, when called interactively or if the optional -argument @var{convert} is non-@code{nil}, it converts the name into -the color's RGB value and returns that value as a string. If an -invalid color name was specified, this function signals an error, -except that empty color names are allowed when @code{allow-empty} is +argument @var{convert} is non-@code{nil}, it converts any input color +name into the corresponding RGB value string and instead returns that. +This function requires a valid color specification to be input. +Empty color names are allowed when @code{allow-empty} is non-@code{nil} and the user enters null input. Interactively, or when @var{display} is non-@code{nil}, the return diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi index 5d09b79748e..0b020bee0b0 100644 --- a/doc/lispref/modes.texi +++ b/doc/lispref/modes.texi @@ -135,23 +135,42 @@ This macro runs the abnormal hook @code{hook} as a series of nested ``wrapper functions'' around the @var{body} forms. The effect is similar to nested @code{around} advices (@pxref{Around-Advice}). -Each hook function must accept an argument list consisting of a function +Each hook function should accept an argument list consisting of a function @var{fun}, followed by the additional arguments listed in @var{args}. -The function @var{fun} passed to the very first hook function in -@var{hook} does the same as @var{body}, if it is called with arguments -@var{args}. The @var{fun} passed to each successive hook function is +The first hook function is passed a function @var{fun} that, if it is +called with arguments @var{args}, performs @var{body} (i.e., the default +operation). The @var{fun} passed to each successive hook function is constructed from all the preceding hook functions (and @var{body}); if this @var{fun} is called with arguments @var{args}, it does what the @code{with-wrapper-hook} call would if the preceding hook functions were the only ones in @var{hook}. -In the function definition of the hook function, @var{fun} can be called -any number of times (including not calling it at all). This function -definition is then used to construct the @var{fun} passed to the next -hook function in @var{hook}, if any. The last or ``outermost'' -@var{fun} is called once to produce the effect. +Each hook function may call its @var{fun} argument as many times as it +wishes, including never. In that case, such a hook function acts to +replace the default definition altogether, and any preceding hook +functions. Of course, a subsequent hook function may do the same thing. + +Each hook function definition is used to construct the @var{fun} passed +to the next hook function in @var{hook}, if any. The last or +``outermost'' @var{fun} is called once to produce the overall effect. + +When might you want to use a wrapper hook? The function +@code{filter-buffer-substring} illustrates a common case. There is a +basic functionality, performed by @var{body}---in this case, to extract +a buffer-substring. Then any number of hook functions can act in +sequence to modify that string, before returning the final result. +A wrapper-hook also allows for a hook function to completely replace the +default definition (by not calling @var{fun}). @end defmac +@defun run-hook-wrapped hook wrap-function &rest args +This function is similar to @code{run-hook-with-args-until-success}. +Like that function, it runs the functions on the abnormal hook +@code{hook}, stopping at the first one that returns non-@code{nil}. +Instead of calling the hook functions directly, though, it actually +calls @code{wrap-function} with arguments @code{fun} and @code{args}. +@end defun + @node Setting Hooks @subsection Setting Hooks @@ -468,8 +487,9 @@ other packages would interfere with them. @cindex major mode hook Each major mode should have a normal @dfn{mode hook} named @code{@var{modename}-mode-hook}. The very last thing the major mode command -should do is to call @code{run-mode-hooks}. This runs the mode hook, -and then runs the normal hook @code{after-change-major-mode-hook}. +should do is to call @code{run-mode-hooks}. This runs the normal +hook @code{change-major-mode-after-body-hook}, the mode hook, +and then the normal hook @code{after-change-major-mode-hook}. @xref{Mode Hooks}. @item @@ -588,6 +608,18 @@ Chosen, emacs, The GNU Emacs Manual}. If @code{enable-local-variables} is @code{nil}, @code{set-auto-mode} does not check the @w{@samp{-*-}} line, or near the end of the file, for any mode tag. +@vindex inhibit-local-variables-regexps +There are some file types where it is not appropriate to scan the file +contents for a mode specifier. For example, a tar archive may happen to +contain, near the end of the file, a member file that has a local +variables section specifying a mode for that particular file. This +should not be applied to the containing tar file. Similarly, a tiff +image file might just happen to contain a first line that seems to +match the @w{@samp{-*-}} pattern. For these reasons, both these file +extensions are members of the list @var{inhibit-local-variables-regexps}. +Add patterns to this list to prevent Emacs searching them for local +variables of any kind (not just mode specifiers). + If @var{keep-mode-if-same} is non-@code{nil}, this function does not call the mode command if the buffer is already in the proper major mode. For instance, @code{set-visited-file-name} sets this to @@ -883,6 +915,20 @@ mode, which is used by the @samp{*Buffer List*} buffer. @xref{List Buffers,,Listing Existing Buffers, emacs, The GNU Emacs Manual}. @end deffn +@cindex tables of data +@deffn Command tabulated-list-mode +Tabulated List mode is another mode that derives from Special mode. It +displays tabulated data, i.e. a series of rows and columns, where each +row represents a particular entry, whose properties are displayed in the +various columns. It provides a general mechanism for sorting on +columns. You can use Tabulated List mode as the basis for other modes +that need to display lists. For example, the @samp{*Packages*} buffer +uses this (@pxref{Packages,,, emacs, The GNU Emacs Manual}). The +documentation of the @code{tabulated-list-mode} function explains what +you need to do to use it. At a minimum, specify the column format via +the @code{tabulated-list-format} variable. +@end deffn + @node Generic Modes @subsection Generic Modes @cindex generic mode @@ -927,8 +973,9 @@ before it runs the mode hook variable @code{@var{mode}-hook}. @node Mode Hooks @subsection Mode Hooks - Every major mode command should finish by running its mode hook and -the mode-independent normal hook @code{after-change-major-mode-hook}. + Every major mode command should finish by running the mode-independent +normal hook @code{change-major-mode-after-body-hook}, its mode hook, +and the normal hook @code{after-change-major-mode-hook}. It does this by calling @code{run-mode-hooks}. If the major mode is a derived mode, that is if it calls another major mode (the parent mode) in its body, it should do this inside @code{delay-mode-hooks} so that @@ -937,11 +984,12 @@ call to @code{run-mode-hooks} runs the parent's mode hook too. @xref{Major Mode Conventions}. Emacs versions before Emacs 22 did not have @code{delay-mode-hooks}. -When user-implemented major modes have not been updated to use it, -they won't entirely follow these conventions: they may run the -parent's mode hook too early, or fail to run -@code{after-change-major-mode-hook}. If you encounter such a major -mode, please correct it to follow these conventions. +Versions before 24 did not have @code{change-major-mode-after-body-hook}. +When user-implemented major modes do not use @code{run-mode-hooks} and +have not been updated to use these newer features, they won't entirely +follow these conventions: they may run the parent's mode hook too early, +or fail to run @code{after-change-major-mode-hook}. If you encounter +such a major mode, please correct it to follow these conventions. When you defined a major mode using @code{define-derived-mode}, it automatically makes sure these conventions are followed. If you @@ -951,6 +999,7 @@ use the following functions to handle these conventions automatically. @defun run-mode-hooks &rest hookvars Major modes should run their mode hook using this function. It is similar to @code{run-hooks} (@pxref{Hooks}), but it also runs +@code{change-major-mode-after-body-hook} and @code{after-change-major-mode-hook}. When this function is called during the execution of a @@ -970,6 +1019,11 @@ The hooks will actually run during the next call to construct. @end defmac +@defvar change-major-mode-after-body-hook +This is a normal hook run by @code{run-mode-hooks}. It is run before +the mode hooks. +@end defvar + @defvar after-change-major-mode-hook This is a normal hook run by @code{run-mode-hooks}. It is run at the very end of every properly-written major mode command. @@ -1000,13 +1054,10 @@ the conventions listed above: (defvar text-mode-map (let ((map (make-sparse-keymap))) (define-key map "\e\t" 'ispell-complete-word) - (define-key map "\es" 'center-line) - (define-key map "\eS" 'center-paragraph) map) "Keymap for `text-mode'. -Many other modes, such as Mail mode, Outline mode -and Indented Text mode, inherit all the commands -defined in this map.") +Many other modes, such as `mail-mode', `outline-mode' and +`indented-text-mode', inherit all the commands defined in this map.") @end group @end smallexample @@ -1024,7 +1075,6 @@ Turning on Text mode runs the normal hook `text-mode-hook'." @end group @group (set (make-local-variable 'text-mode-variant) t) - ;; @r{These two lines are a feature added recently.} (set (make-local-variable 'require-final-newline) mode-require-final-newline) (set (make-local-variable 'indent-line-function) 'indent-relative)) @@ -1035,103 +1085,29 @@ Turning on Text mode runs the normal hook `text-mode-hook'." (The last line is redundant nowadays, since @code{indent-relative} is the default value, and we'll delete it in a future version.) - Here is how it was defined formerly, before -@code{define-derived-mode} existed: - -@smallexample -@group -;; @r{This isn't needed nowadays, since @code{define-derived-mode} does it.} -(define-abbrev-table 'text-mode-abbrev-table () - "Abbrev table used while in text mode.") -@end group - -@group -(defun text-mode () - "Major mode for editing text intended for humans to read... - Special commands: \\@{text-mode-map@} -@end group -@group -Turning on text-mode runs the hook `text-mode-hook'." - (interactive) - (kill-all-local-variables) - (use-local-map text-mode-map) -@end group -@group - (setq local-abbrev-table text-mode-abbrev-table) - (set-syntax-table text-mode-syntax-table) -@end group -@group - ;; @r{These four lines are absent from the current version} - ;; @r{not because this is done some other way, but because} - ;; @r{nowadays Text mode uses the normal definition of paragraphs.} - (set (make-local-variable 'paragraph-start) - (concat "[ \t]*$\\|" page-delimiter)) - (set (make-local-variable 'paragraph-separate) paragraph-start) - (set (make-local-variable 'indent-line-function) 'indent-relative-maybe) -@end group -@group - (setq mode-name "Text") - (setq major-mode 'text-mode) - (run-mode-hooks 'text-mode-hook)) ; @r{Finally, this permits the user to} - ; @r{customize the mode with a hook.} -@end group -@end smallexample - @cindex @file{lisp-mode.el} - The three Lisp modes (Lisp mode, Emacs Lisp mode, and Lisp -Interaction mode) have more features than Text mode and the code is -correspondingly more complicated. Here are excerpts from -@file{lisp-mode.el} that illustrate how these modes are written. + The three Lisp modes (Lisp mode, Emacs Lisp mode, and Lisp Interaction +mode) have more features than Text mode and the code is correspondingly +more complicated. Here are excerpts from @file{lisp-mode.el} that +illustrate how these modes are written. + + Here is how the Lisp mode syntax and abbrev tables are defined: @cindex syntax table example @smallexample @group ;; @r{Create mode-specific table variables.} -(defvar lisp-mode-syntax-table nil "") -(defvar lisp-mode-abbrev-table nil "") -@end group - -@group -(defvar emacs-lisp-mode-syntax-table - (let ((table (make-syntax-table))) - (let ((i 0)) -@end group - -@group - ;; @r{Set syntax of chars up to @samp{0} to say they are} - ;; @r{part of symbol names but not words.} - ;; @r{(The digit @samp{0} is @code{48} in the @acronym{ASCII} character set.)} - (while (< i ?0) - (modify-syntax-entry i "_ " table) - (setq i (1+ i))) - ;; @r{@dots{} similar code follows for other character ranges.} -@end group -@group - ;; @r{Then set the syntax codes for characters that are special in Lisp.} - (modify-syntax-entry ? " " table) - (modify-syntax-entry ?\t " " table) - (modify-syntax-entry ?\f " " table) - (modify-syntax-entry ?\n "> " table) -@end group -@group - ;; @r{Give CR the same syntax as newline, for selective-display.} - (modify-syntax-entry ?\^m "> " table) - (modify-syntax-entry ?\; "< " table) - (modify-syntax-entry ?` "' " table) - (modify-syntax-entry ?' "' " table) - (modify-syntax-entry ?, "' " table) -@end group -@group - ;; @r{@dots{}likewise for many other characters@dots{}} - (modify-syntax-entry ?\( "() " table) - (modify-syntax-entry ?\) ")( " table) - (modify-syntax-entry ?\[ "(] " table) - (modify-syntax-entry ?\] ")[ " table)) - table)) -@end group -@group -;; @r{Create an abbrev table for lisp-mode.} +(defvar lisp-mode-abbrev-table nil) (define-abbrev-table 'lisp-mode-abbrev-table ()) + +(defvar lisp-mode-syntax-table + (let ((table (copy-syntax-table emacs-lisp-mode-syntax-table))) + (modify-syntax-entry ?\[ "_ " table) + (modify-syntax-entry ?\] "_ " table) + (modify-syntax-entry ?# "' 14" table) + (modify-syntax-entry ?| "\" 23bn" table) + table) + "Syntax table used in `lisp-mode'.") @end group @end smallexample @@ -1140,7 +1116,7 @@ each calls the following function to set various variables: @smallexample @group -(defun lisp-mode-variables (lisp-syntax) +(defun lisp-mode-variables (&optional lisp-syntax keywords-case-insensitive) (when lisp-syntax (set-syntax-table lisp-mode-syntax-table)) (setq local-abbrev-table lisp-mode-abbrev-table) @@ -1148,22 +1124,14 @@ each calls the following function to set various variables: @end group @end smallexample - In Lisp and most programming languages, we want the paragraph -commands to treat only blank lines as paragraph separators. And the -modes should understand the Lisp conventions for comments. The rest of -@code{lisp-mode-variables} sets this up: +@noindent +Amongst other things, this function sets up the @code{comment-start} +variable to handle Lisp comments: @smallexample @group - (set (make-local-variable 'paragraph-start) - (concat page-delimiter "\\|$" )) - (set (make-local-variable 'paragraph-separate) - paragraph-start) - @dots{} -@end group -@group - (set (make-local-variable 'comment-indent-function) - 'lisp-comment-indent)) + (make-local-variable 'comment-start) + (setq comment-start ";") @dots{} @end group @end smallexample @@ -1175,11 +1143,10 @@ common. The following code sets up the common commands: @smallexample @group -(defvar shared-lisp-mode-map +(defvar lisp-mode-shared-map (let ((map (make-sparse-keymap))) - (define-key shared-lisp-mode-map "\e\C-q" 'indent-sexp) - (define-key shared-lisp-mode-map "\177" - 'backward-delete-char-untabify) + (define-key map "\e\C-q" 'indent-sexp) + (define-key map "\177" 'backward-delete-char-untabify) map) "Keymap for commands shared by all sorts of Lisp modes.") @end group @@ -1191,25 +1158,29 @@ And here is the code to set up the keymap for Lisp mode: @smallexample @group (defvar lisp-mode-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map shared-lisp-mode-map) + (let ((map (make-sparse-keymap)) + (menu-map (make-sparse-keymap "Lisp"))) + (set-keymap-parent map lisp-mode-shared-map) (define-key map "\e\C-x" 'lisp-eval-defun) (define-key map "\C-c\C-z" 'run-lisp) + @dots{} map) - "Keymap for ordinary Lisp mode...") + "Keymap for ordinary Lisp mode. +All commands in `lisp-mode-shared-map' are inherited by this map.") @end group @end smallexample - Finally, here is the complete major mode command definition for Lisp -mode. +@noindent +Finally, here is the major mode command for Lisp mode: @smallexample @group -(defun lisp-mode () +(define-derived-mode lisp-mode prog-mode "Lisp" "Major mode for editing Lisp code for Lisps other than GNU Emacs Lisp. Commands: Delete converts tabs to spaces as it moves back. Blank lines separate paragraphs. Semicolons start comments. + \\@{lisp-mode-map@} Note that `run-lisp' may be used either to start an inferior Lisp job or to switch back to an existing one. @@ -1218,24 +1189,12 @@ or to switch back to an existing one. @group Entry to this mode calls the value of `lisp-mode-hook' if that value is non-nil." - (interactive) - (kill-all-local-variables) -@end group -@group - (use-local-map lisp-mode-map) ; @r{Select the mode's keymap.} - (setq major-mode 'lisp-mode) ; @r{This is how @code{describe-mode}} - ; @r{finds out what to describe.} - (setq mode-name "Lisp") ; @r{This goes into the mode line.} - (lisp-mode-variables t) ; @r{This defines various variables.} - (set (make-local-variable 'comment-start-skip) + (lisp-mode-variables nil t) + (set (make-local-variable 'find-tag-default-function) 'lisp-find-tag-default) + (make-local-variable 'comment-start-skip) + (setq comment-start-skip "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\)\\(;+\\|#|\\) *") - (set (make-local-variable 'font-lock-keywords-case-fold-search) t) -@end group -@group - (setq imenu-case-fold-search t) - (set-syntax-table lisp-mode-syntax-table) - (run-mode-hooks 'lisp-mode-hook)) ; @r{This permits the user to use a} - ; @r{hook to customize the mode.} + (setq imenu-case-fold-search t)) @end group @end smallexample @@ -1415,11 +1374,12 @@ alist @code{minor-mode-map-alist}. @xref{Definition of minor-mode-map-alist}. @cindex @code{self-insert-command}, minor modes One use of minor mode keymaps is to modify the behavior of certain self-inserting characters so that they do something else as well as -self-insert. In general, this is the only way to do that, since the -facilities for customizing @code{self-insert-command} are limited to -special cases (designed for abbrevs and Auto Fill mode). (Do not try -substituting your own definition of @code{self-insert-command} for the -standard one. The editor command loop handles this function specially.) +self-insert. (Another way to customize @code{self-insert-command} is +through @code{post-self-insert-hook}. Apart from this, the facilities +for customizing @code{self-insert-command} are limited to special cases, +designed for abbrevs and Auto Fill mode. Do not try substituting your +own definition of @code{self-insert-command} for the standard one. The +editor command loop handles this function specially.) The key sequences bound in a minor mode should consist of @kbd{C-c} followed by one of @kbd{.,/?`'"[]\|~!#$%^&*()-_+=}. (The other @@ -1434,11 +1394,21 @@ implementing a mode in one self-contained definition. @defmac define-minor-mode mode doc [init-value [lighter [keymap]]] keyword-args@dots{} body@dots{} This macro defines a new minor mode whose name is @var{mode} (a symbol). It defines a command named @var{mode} to toggle the minor -mode, with @var{doc} as its documentation string. It also defines a -variable named @var{mode}, which is set to @code{t} or @code{nil} by -enabling or disabling the mode. The variable is initialized to -@var{init-value}. Except in unusual circumstances (see below), this -value must be @code{nil}. +mode, with @var{doc} as its documentation string. + +The toggle command takes one optional (prefix) argument. +If called interactively with no argument it toggles the mode on or off. +A positive prefix argument enables the mode, any other prefix argument +disables it. From Lisp, an argument of @code{toggle} toggles the mode, +whereas an omitted or @code{nil} argument enables the mode. +This makes it easy to enable the minor mode in a major mode hook, for example. +If @var{doc} is nil, the macro supplies a default documentation string +explaining the above. + +By default, it also defines a variable named @var{mode}, which is set to +@code{t} or @code{nil} by enabling or disabling the mode. The variable +is initialized to @var{init-value}. Except in unusual circumstances +(see below), this value must be @code{nil}. The string @var{lighter} says what to display in the mode line when the mode is enabled; if it is @code{nil}, the mode is not displayed @@ -1493,6 +1463,17 @@ This is equivalent to specifying @var{lighter} positionally. @item :keymap @var{keymap} This is equivalent to specifying @var{keymap} positionally. + +@item :variable @var{place} +This replaces the default variable @var{mode}, used to store the state +of the mode. If you specify this, the @var{mode} variable is not +defined, and any @var{init-value} argument is unused. @var{place} +can be a different named variable (which you must define yourself), or +anything that can be used with the @code{setf} function +(@pxref{Generalized Variables,,, cl, Common Lisp Extensions}). +@var{place} can also be a cons @code{(@var{get} . @var{set})}, +where @var{get} is an expression that returns the current state, +and @var{set} is a function of one argument (a state) that sets it. @end table Any other keyword arguments are passed directly to the @@ -1521,9 +1502,10 @@ for this macro. @smallexample (define-minor-mode hungry-mode "Toggle Hungry mode. -With no argument, this command toggles the mode. -Non-null prefix argument turns on the mode. -Null prefix argument turns off the mode. +Interactively with no argument, this command toggles the mode. +A positive prefix argument enables the mode, any other prefix +argument disables it. From Lisp, argument omitted or nil enables +the mode, `toggle' toggles the state. When Hungry mode is enabled, the control delete key gobbles all preceding whitespace except the last. @@ -1552,13 +1534,7 @@ minor modes don't need any. @smallexample (define-minor-mode hungry-mode "Toggle Hungry mode. -With no argument, this command toggles the mode. -Non-null prefix argument turns on the mode. -Null prefix argument turns off the mode. - -When Hungry mode is enabled, the control delete key -gobbles all preceding whitespace except the last. -See the command \\[hungry-electric-delete]." +...rest of documentation as before..." ;; The initial value. :init-value nil ;; The indicator for the mode line. @@ -1593,8 +1569,15 @@ starts, for example by providing a @code{:require} keyword. Use @code{:group @var{group}} in @var{keyword-args} to specify the custom group for the mode variable of the global minor mode. + +Generally speaking, when you define a globalized minor mode, you should +also define a non-globalized version, so that people can use (or +disable) it in individual buffers. This also allows them to disable a +globally enabled minor mode in a specific major mode, by using that +mode's hook. @end defmac + @node Mode Line Format @section Mode-Line Format @cindex mode line diff --git a/doc/lispref/numbers.texi b/doc/lispref/numbers.texi index 6768ecece9c..82336aa537f 100644 --- a/doc/lispref/numbers.texi +++ b/doc/lispref/numbers.texi @@ -168,34 +168,37 @@ character codepoint. @node Float Basics @section Floating Point Basics +@cindex @acronym{IEEE} floating point Floating point numbers are useful for representing numbers that are not integral. The precise range of floating point numbers is machine-specific; it is the same as the range of the C data type -@code{double} on the machine you are using. +@code{double} on the machine you are using. Emacs uses the +@acronym{IEEE} floating point standard where possible (the standard is +supported by most modern computers). - The read-syntax for floating point numbers requires either a decimal + The read syntax for floating point numbers requires either a decimal point (with at least one digit following), an exponent, or both. For example, @samp{1500.0}, @samp{15e2}, @samp{15.0e2}, @samp{1.5e3}, and @samp{.15e4} are five ways of writing a floating point number whose -value is 1500. They are all equivalent. You can also use a minus sign -to write negative floating point numbers, as in @samp{-1.0}. +value is 1500. They are all equivalent. You can also use a minus +sign to write negative floating point numbers, as in @samp{-1.0}. + + Emacs Lisp treats @code{-0.0} as equal to ordinary zero (with +respect to @code{equal} and @code{=}), even though the two are +distinguishable in the @acronym{IEEE} floating point standard. -@cindex @acronym{IEEE} floating point @cindex positive infinity @cindex negative infinity @cindex infinity @cindex NaN - Most modern computers support the @acronym{IEEE} floating point standard, -which provides for positive infinity and negative infinity as floating point -values. It also provides for a class of values called NaN or -``not-a-number''; numerical functions return such values in cases where -there is no correct answer. For example, @code{(/ 0.0 0.0)} returns a -NaN. For practical purposes, there's no significant difference between -different NaN values in Emacs Lisp, and there's no rule for precisely -which NaN value should be used in a particular case, so Emacs Lisp -doesn't try to distinguish them (but it does report the sign, if you -print it). Here are the read syntaxes for these special floating -point values: + The @acronym{IEEE} floating point standard supports positive +infinity and negative infinity as floating point values. It also +provides for a class of values called NaN or ``not-a-number''; +numerical functions return such values in cases where there is no +correct answer. For example, @code{(/ 0.0 0.0)} returns a NaN. (NaN +values can also carry a sign, but for practical purposes there's no +significant difference between different NaN values in Emacs Lisp.) +Here are the read syntaxes for these special floating point values: @table @asis @item positive infinity @@ -206,16 +209,37 @@ point values: @samp{0.0e+NaN} or @samp{-0.0e+NaN}. @end table - To test whether a floating point value is a NaN, compare it with -itself using @code{=}. That returns @code{nil} for a NaN, and -@code{t} for any other floating point value. +@defun isnan number +This predicate tests whether its argument is NaN, and returns @code{t} +if so, @code{nil} otherwise. The argument must be a number. +@end defun - The value @code{-0.0} is distinguishable from ordinary zero in -@acronym{IEEE} floating point, but Emacs Lisp @code{equal} and -@code{=} consider them equal values. + The following functions are specialized for handling floating point +numbers: - You can use @code{logb} to extract the binary exponent of a floating -point number (or estimate the logarithm of an integer): +@defun frexp x +This function returns a cons cell @code{(@var{sig} . @var{exp})}, +where @var{sig} and @var{exp} are respectively the significand and +exponent of the floating point number @var{x}: + +@smallexample +@var{x} = @var{sig} * 2^@var{exp} +@end smallexample + +@var{sig} is a floating point number between 0.5 (inclusive) and 1.0 +(exclusive). If @var{x} is zero, the return value is @code{(0 . 0)}. +@end defun + +@defun ldexp sig &optional exp +This function returns a floating point number corresponding to the +significand @var{sig} and exponent @var{exp}. +@end defun + +@defun copysign x1 x2 +This function copies the sign of @var{x2} to the value of @var{x1}, +and returns the result. @var{x1} and @var{x2} must be floating point +numbers. +@end defun @defun logb number This function returns the binary exponent of @var{number}. More @@ -230,14 +254,6 @@ down to an integer. @end example @end defun -@defvar float-e -The mathematical constant @math{e} (2.71828@dots{}). -@end defvar - -@defvar float-pi -The mathematical constant @math{pi} (3.14159@dots{}). -@end defvar - @node Predicates on Numbers @section Type Predicates for Numbers @cindex predicates for numbers @@ -266,15 +282,15 @@ This predicate tests whether its argument is a number (either integer or floating point), and returns @code{t} if so, @code{nil} otherwise. @end defun -@defun wholenump object +@defun natnump object @cindex natural numbers -The @code{wholenump} predicate (whose name comes from the phrase -``whole-number-p'') tests to see whether its argument is a nonnegative -integer, and returns @code{t} if so, @code{nil} otherwise. 0 is -considered non-negative. +This predicate (whose name comes from the phrase ``natural number'') +tests to see whether its argument is a nonnegative integer, and +returns @code{t} if so, @code{nil} otherwise. 0 is considered +non-negative. -@findex natnump -@code{natnump} is an obsolete synonym for @code{wholenump}. +@findex wholenump number +This is a synonym for @code{natnump}. @end defun @defun zerop number @@ -1122,35 +1138,15 @@ angle in radians between the vector @code{[@var{x}, @var{y}]} and the @end defun @defun exp arg -This is the exponential function; it returns -@tex -@math{e} -@end tex -@ifnottex -@i{e} -@end ifnottex -to the power @var{arg}. -@tex -@math{e} -@end tex -@ifnottex -@i{e} -@end ifnottex -is a fundamental mathematical constant also called the base of natural -logarithms. +This is the exponential function; it returns @math{e} to the power +@var{arg}. @end defun @defun log arg &optional base -This function returns the logarithm of @var{arg}, with base @var{base}. -If you don't specify @var{base}, the base -@tex -@math{e} -@end tex -@ifnottex -@i{e} -@end ifnottex -is used. If @var{arg} is negative, it signals a @code{domain-error} -error. +This function returns the logarithm of @var{arg}, with base +@var{base}. If you don't specify @var{base}, the natural base +@math{e} is used. If @var{arg} is negative, it signals a +@code{domain-error} error. @end defun @ignore @@ -1185,6 +1181,17 @@ This returns the square root of @var{arg}. If @var{arg} is negative, it signals a @code{domain-error} error. @end defun +In addition, Emacs defines the following common mathematical +constants: + +@defvar float-e +The mathematical constant @math{e} (2.71828@dots{}). +@end defvar + +@defvar float-pi +The mathematical constant @math{pi} (3.14159@dots{}). +@end defvar + @node Random Numbers @section Random Numbers @cindex random numbers @@ -1218,7 +1225,6 @@ nonnegative and less than @var{limit}. If @var{limit} is @code{t}, it means to choose a new seed based on the current time of day and on Emacs's process @acronym{ID} number. -@c "Emacs'" is incorrect usage! On some machines, any integer representable in Lisp may be the result of @code{random}. On other machines, the result can never be larger diff --git a/doc/lispref/objects.texi b/doc/lispref/objects.texi index 3fb676edcd4..995a4d89352 100644 --- a/doc/lispref/objects.texi +++ b/doc/lispref/objects.texi @@ -427,10 +427,10 @@ codes for these non-@acronym{ASCII} control characters include the @ifnottex 2**26 @end ifnottex -bit as well as the code for the corresponding non-control -character. Ordinary terminals have no way of generating non-@acronym{ASCII} -control characters, but you can generate them straightforwardly using X -and other window systems. +bit as well as the code for the corresponding non-control character. +Ordinary text terminals have no way of generating non-@acronym{ASCII} +control characters, but you can generate them straightforwardly using +X and other window systems. For historical reasons, Emacs treats the @key{DEL} character as the control equivalent of @kbd{?}: @@ -501,10 +501,10 @@ character is upper case or lower case. Emacs uses the @end ifnottex bit to indicate that the shift key was used in typing a control character. This distinction is possible only when you use X terminals -or other special terminals; ordinary terminals do not report the -distinction to the computer in any way. The Lisp syntax for -the shift bit is @samp{\S-}; thus, @samp{?\C-\S-o} or @samp{?\C-\S-O} -represents the shifted-control-o character. +or other special terminals; ordinary text terminals do not report the +distinction. The Lisp syntax for the shift bit is @samp{\S-}; thus, +@samp{?\C-\S-o} or @samp{?\C-\S-O} represents the shifted-control-o +character. @cindex hyper characters @cindex super characters @@ -541,9 +541,9 @@ intended. But you can use one symbol in all of these ways, independently. A symbol whose name starts with a colon (@samp{:}) is called a -@dfn{keyword symbol}. These symbols automatically act as constants, and -are normally used only by comparing an unknown symbol with a few -specific alternatives. +@dfn{keyword symbol}. These symbols automatically act as constants, +and are normally used only by comparing an unknown symbol with a few +specific alternatives. @xref{Constant Variables}. @cindex @samp{\} in symbols @cindex backslash in symbols @@ -617,26 +617,28 @@ all symbols; @pxref{Creating Symbols}.) @subsection Sequence Types A @dfn{sequence} is a Lisp object that represents an ordered set of -elements. There are two kinds of sequence in Emacs Lisp, lists and -arrays. Thus, an object of type list or of type array is also -considered a sequence. +elements. There are two kinds of sequence in Emacs Lisp: @dfn{lists} +and @dfn{arrays}. - Arrays are further subdivided into strings, vectors, char-tables and -bool-vectors. Vectors can hold elements of any type, but string -elements must be characters, and bool-vector elements must be @code{t} -or @code{nil}. Char-tables are like vectors except that they are -indexed by any valid character code. The characters in a string can -have text properties like characters in a buffer (@pxref{Text -Properties}), but vectors do not support text properties, even when -their elements happen to be characters. + Lists are the most commonly-used sequences. A list can hold +elements of any type, and its length can be easily changed by adding +or removing elements. See the next subsection for more about lists. - Lists, strings and the other array types are different, but they have -important similarities. For example, all have a length @var{l}, and all -have elements which can be indexed from zero to @var{l} minus one. -Several functions, called sequence functions, accept any kind of -sequence. For example, the function @code{elt} can be used to extract -an element of a sequence, given its index. @xref{Sequences Arrays -Vectors}. + Arrays are fixed-length sequences. They are further subdivided into +strings, vectors, char-tables and bool-vectors. Vectors can hold +elements of any type, whereas string elements must be characters, and +bool-vector elements must be @code{t} or @code{nil}. Char-tables are +like vectors except that they are indexed by any valid character code. +The characters in a string can have text properties like characters in +a buffer (@pxref{Text Properties}), but vectors do not support text +properties, even when their elements happen to be characters. + + Lists, strings and the other array types also share important +similarities. For example, all have a length @var{l}, and all have +elements which can be indexed from zero to @var{l} minus one. Several +functions, called sequence functions, accept any kind of sequence. +For example, the function @code{length} reports the length of any kind +of sequence. @xref{Sequences Arrays Vectors}. It is generally impossible to read the same sequence twice, since sequences are always created anew upon reading. If you read the read @@ -650,24 +652,27 @@ same object, @code{nil}. @cindex decrement field of register @cindex pointers - A @dfn{cons cell} is an object that consists of two slots, called the -@sc{car} slot and the @sc{cdr} slot. Each slot can @dfn{hold} or -@dfn{refer to} any Lisp object. We also say that ``the @sc{car} of -this cons cell is'' whatever object its @sc{car} slot currently holds, -and likewise for the @sc{cdr}. - -@quotation -A note to C programmers: in Lisp, we do not distinguish between -``holding'' a value and ``pointing to'' the value, because pointers in -Lisp are implicit. -@end quotation + A @dfn{cons cell} is an object that consists of two slots, called +the @sc{car} slot and the @sc{cdr} slot. Each slot can @dfn{hold} any +Lisp object. We also say that ``the @sc{car} of this cons cell is'' +whatever object its @sc{car} slot currently holds, and likewise for +the @sc{cdr}. +@cindex list structure A @dfn{list} is a series of cons cells, linked together so that the @sc{cdr} slot of each cons cell holds either the next cons cell or the empty list. The empty list is actually the symbol @code{nil}. -@xref{Lists}, for functions that work on lists. Because most cons -cells are used as part of lists, the phrase @dfn{list structure} has -come to refer to any structure made out of cons cells. +@xref{Lists}, for details. Because most cons cells are used as part +of lists, we refer to any structure made out of cons cells as a +@dfn{list structure}. + +@cindex linked list +@quotation +A note to C programmers: a Lisp list thus works as a @dfn{linked list} +built up of cons cells. Because pointers in Lisp are implicit, we do +not distinguish between a cons cell slot ``holding'' a value versus +``pointing to'' the value. +@end quotation @cindex atoms Because cons cells are so central to Lisp, we also have a word for @@ -1025,40 +1030,40 @@ but the newline is ignored if escaped." @node Non-ASCII in Strings @subsubsection Non-@acronym{ASCII} Characters in Strings - You can include a non-@acronym{ASCII} international character in a string -constant by writing it literally. There are two text representations -for non-@acronym{ASCII} characters in Emacs strings (and in buffers): unibyte -and multibyte. If the string constant is read from a multibyte source, -such as a multibyte buffer or string, or a file that would be visited as -multibyte, then the character is read as a multibyte character, and that -makes the string multibyte. If the string constant is read from a -unibyte source, then the character is read as unibyte and that makes the -string unibyte. + You can include a non-@acronym{ASCII} international character in a +string constant by writing it literally. There are two text +representations for non-@acronym{ASCII} characters in Emacs strings +(and in buffers): unibyte and multibyte (@pxref{Text +Representations}). If the string constant is read from a multibyte +source, such as a multibyte buffer or string, or a file that would be +visited as multibyte, then Emacs reads the non-@acronym{ASCII} +character as a multibyte character and automatically makes the string +a multibyte string. If the string constant is read from a unibyte +source, then Emacs reads the non-@acronym{ASCII} character as unibyte, +and makes the string unibyte. - You can also represent a multibyte non-@acronym{ASCII} character with its -character code: use a hex escape, @samp{\x@var{nnnnnnn}}, with as many -digits as necessary. (Multibyte non-@acronym{ASCII} character codes are all -greater than 256.) Any character which is not a valid hex digit -terminates this construct. If the next character in the string could be -interpreted as a hex digit, write @w{@samp{\ }} (backslash and space) to -terminate the hex escape---for example, @w{@samp{\xe0\ }} represents -one character, @samp{a} with grave accent. @w{@samp{\ }} in a string -constant is just like backslash-newline; it does not contribute any -character to the string, but it does terminate the preceding hex escape. + Instead of writing a non-@acronym{ASCII} character literally into a +multibyte string, you can write it as its character code using a hex +escape, @samp{\x@var{nnnnnnn}}, with as many digits as necessary. +(Multibyte non-@acronym{ASCII} character codes are all greater than +256.) You can also specify a character in a multibyte string using +the @samp{\u} or @samp{\U} Unicode escape syntax (@pxref{General +Escape Syntax}). In either case, any character which is not a valid +hex digit terminates the construct. If the next character in the +string could be interpreted as a hex digit, write @w{@samp{\ }} +(backslash and space) to terminate the hex escape---for example, +@w{@samp{\xe0\ }} represents one character, @samp{a} with grave +accent. @w{@samp{\ }} in a string constant is just like +backslash-newline; it does not contribute any character to the string, +but it does terminate the preceding hex escape. Using any hex escape +in a string (even for an @acronym{ASCII} character) automatically +forces the string to be multibyte. You can represent a unibyte non-@acronym{ASCII} character with its character code, which must be in the range from 128 (0200 octal) to 255 (0377 octal). If you write all such character codes in octal and the string contains no other characters forcing it to be multibyte, -this produces a unibyte string. However, using any hex escape in a -string (even for an @acronym{ASCII} character) forces the string to be -multibyte. - - You can also specify characters in a string by their numeric values -in Unicode, using @samp{\u} and @samp{\U} (@pxref{Character Type}). - - @xref{Text Representations}, for more information about the two -text representations. +this produces a unibyte string. @node Nonprinting Characters @subsubsection Nonprinting Characters in Strings @@ -1318,11 +1323,11 @@ with the name of the subroutine. @node Byte-Code Type @subsection Byte-Code Function Type -The byte compiler produces @dfn{byte-code function objects}. -Internally, a byte-code function object is much like a vector; however, -the evaluator handles this data type specially when it appears as a -function to be called. @xref{Byte Compilation}, for information about -the byte compiler. +@dfn{Byte-code function objects} are produced by byte-compiling Lisp +code (@pxref{Byte Compilation}). Internally, a byte-code function +object is much like a vector; however, the evaluator handles this data +type specially when it appears in a function call. @xref{Byte-Code +Objects}. The printed representation and read syntax for a byte-code function object is like that for a vector, with an additional @samp{#} before the @@ -1790,6 +1795,9 @@ with references to further information. @item consp @xref{List-related Predicates, consp}. +@item custom-variable-p +@xref{Variable Definitions, custom-variable-p}. + @item display-table-p @xref{Display Tables, display-table-p}. @@ -1865,9 +1873,6 @@ with references to further information. @item syntax-table-p @xref{Syntax Tables, syntax-table-p}. -@item user-variable-p -@xref{Defining Variables, user-variable-p}. - @item vectorp @xref{Vectors, vectorp}. @@ -1922,23 +1927,24 @@ This function returns a symbol naming the primitive type of @section Equality Predicates @cindex equality - Here we describe functions that test for equality between any two -objects. Other functions test equality of contents between objects of specific -types, e.g., strings. For these predicates, see the appropriate chapter -describing the data type. + Here we describe functions that test for equality between two +objects. Other functions test equality of contents between objects of +specific types, e.g.@: strings. For these predicates, see the +appropriate chapter describing the data type. @defun eq object1 object2 This function returns @code{t} if @var{object1} and @var{object2} are -the same object, @code{nil} otherwise. +the same object, and @code{nil} otherwise. -@code{eq} returns @code{t} if @var{object1} and @var{object2} are -integers with the same value. Also, since symbol names are normally -unique, if the arguments are symbols with the same name, they are -@code{eq}. For other types (e.g., lists, vectors, strings), two -arguments with the same contents or elements are not necessarily -@code{eq} to each other: they are @code{eq} only if they are the same -object, meaning that a change in the contents of one will be reflected -by the same change in the contents of the other. +If @var{object1} and @var{object2} are integers with the same value, +they are considered to be the same object (i.e.@: @code{eq} returns +@code{t}). If @var{object1} and @var{object2} are symbols with the +same name, they are normally the same object---but see @ref{Creating +Symbols} for exceptions. For other types (e.g.@: lists, vectors, +strings), two arguments with the same contents or elements are not +necessarily @code{eq} to each other: they are @code{eq} only if they +are the same object, meaning that a change in the contents of one will +be reflected by the same change in the contents of the other. @example @group @@ -1988,6 +1994,7 @@ by the same change in the contents of the other. @end group @end example +@noindent The @code{make-symbol} function returns an uninterned symbol, distinct from the symbol that is used if you write the name in a Lisp expression. Distinct symbols with the same name are not @code{eq}. @xref{Creating @@ -2003,11 +2010,11 @@ Symbols}. @defun equal object1 object2 This function returns @code{t} if @var{object1} and @var{object2} have -equal components, @code{nil} otherwise. Whereas @code{eq} tests if its -arguments are the same object, @code{equal} looks inside nonidentical -arguments to see if their elements or contents are the same. So, if two -objects are @code{eq}, they are @code{equal}, but the converse is not -always true. +equal components, and @code{nil} otherwise. Whereas @code{eq} tests +if its arguments are the same object, @code{equal} looks inside +nonidentical arguments to see if their elements or contents are the +same. So, if two objects are @code{eq}, they are @code{equal}, but +the converse is not always true. @example @group @@ -2059,13 +2066,13 @@ always true. @end example Comparison of strings is case-sensitive, but does not take account of -text properties---it compares only the characters in the strings. Use -@code{equal-including-properties} to also compare text properties. For -technical reasons, a unibyte string and a multibyte string are -@code{equal} if and only if they contain the same sequence of -character codes and all these codes are either in the range 0 through -127 (@acronym{ASCII}) or 160 through 255 (@code{eight-bit-graphic}). -(@pxref{Text Representations}). +text properties---it compares only the characters in the strings. +@xref{Text Properties}. Use @code{equal-including-properties} to also +compare text properties. For technical reasons, a unibyte string and +a multibyte string are @code{equal} if and only if they contain the +same sequence of character codes and all these codes are either in the +range 0 through 127 (@acronym{ASCII}) or 160 through 255 +(@code{eight-bit-graphic}). (@pxref{Text Representations}). @example @group diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi index 38eb5a86471..4cfc954cd1f 100644 --- a/doc/lispref/processes.texi +++ b/doc/lispref/processes.texi @@ -300,7 +300,8 @@ MS-DOS doesn't support asynchronous subprocesses, so this option doesn't work there. @item @code{(:file @var{file-name})} -Send the output to the file name specified. +Send the output to the file name specified, overwriting it if it +already exists. @item @code{(@var{real-destination} @var{error-destination})} Keep the standard output stream separate from the standard error stream; diff --git a/doc/lispref/searching.texi b/doc/lispref/searching.texi index 21481568276..3dc777897c1 100644 --- a/doc/lispref/searching.texi +++ b/doc/lispref/searching.texi @@ -49,7 +49,6 @@ This function searches forward from point for an exact match for @var{string}. If successful, it sets point to the end of the occurrence found, and returns the new value of point. If no match is found, the value and side effects depend on @var{noerror} (see below). -@c Emacs 19 feature In the following example, point is initially at the beginning of the line. Then @code{(search-forward "fox")} moves point after the last @@ -91,18 +90,21 @@ The argument @var{noerror} only affects valid searches which fail to find a match. Invalid arguments cause errors regardless of @var{noerror}. -If @var{repeat} is supplied (it must be a positive number), then the -search is repeated that many times (each time starting at the end of the -previous time's match). If these successive searches succeed, the -function succeeds, moving point and returning its new value. Otherwise -the search fails, with results depending on the value of -@var{noerror}, as described above. +If @var{repeat} is a positive number @var{n}, it serves as a repeat +count: the search is repeated @var{n} times, each time starting at the +end of the previous time's match. If these successive searches +succeed, the function succeeds, moving point and returning its new +value. Otherwise the search fails, with results depending on the +value of @var{noerror}, as described above. If @var{repeat} is a +negative number -@var{n}, it serves as a repeat count of @var{n} for a +search in the opposite (backward) direction. @end deffn @deffn Command search-backward string &optional limit noerror repeat This function searches backward from point for @var{string}. It is -just like @code{search-forward} except that it searches backwards and -leaves point at the beginning of the match. +like @code{search-forward}, except that it searches backwards rather +than forwards. Backward searches leave point at the beginning of the +match. @end deffn @deffn Command word-search-forward string &optional limit noerror repeat diff --git a/doc/lispref/sequences.texi b/doc/lispref/sequences.texi index 0ea32f99e12..94f1bf666d2 100644 --- a/doc/lispref/sequences.texi +++ b/doc/lispref/sequences.texi @@ -8,10 +8,10 @@ @chapter Sequences, Arrays, and Vectors @cindex sequence - Recall that the @dfn{sequence} type is the union of two other Lisp -types: lists and arrays. In other words, any list is a sequence, and -any array is a sequence. The common property that all sequences have is -that each is an ordered collection of elements. + The @dfn{sequence} type is the union of two other Lisp types: lists +and arrays. In other words, any list is a sequence, and any array is +a sequence. The common property that all sequences have is that each +is an ordered collection of elements. An @dfn{array} is a fixed-length object with a slot for each of its elements. All the elements are accessible in constant time. The four @@ -54,19 +54,17 @@ But it is possible to add elements to the list, or remove elements. * Vector Functions:: Functions specifically for vectors. * Char-Tables:: How to work with char-tables. * Bool-Vectors:: How to work with bool-vectors. +* Rings:: Managing a fixed-size ring of objects. @end menu @node Sequence Functions @section Sequences - In Emacs Lisp, a @dfn{sequence} is either a list or an array. The -common property of all sequences is that they are ordered collections of -elements. This section describes functions that accept any kind of -sequence. + This section describes functions that accept any kind of sequence. @defun sequencep object -Returns @code{t} if @var{object} is a list, vector, string, -bool-vector, or char-table, @code{nil} otherwise. +This function returns @code{t} if @var{object} is a list, vector, +string, bool-vector, or char-table, @code{nil} otherwise. @end defun @defun length sequence @@ -149,8 +147,9 @@ This function generalizes @code{aref} (@pxref{Array Functions}) and @defun copy-sequence sequence @cindex copying sequences -Returns a copy of @var{sequence}. The copy is the same type of object -as the original sequence, and it has the same elements in the same order. +This function returns a copy of @var{sequence}. The copy is the same +type of object as the original sequence, and it has the same elements +in the same order. Storing a new element into the copy does not affect the original @var{sequence}, and vice versa. However, the elements of the new @@ -394,8 +393,8 @@ symbol-lookup tables (@pxref{Creating Symbols}), as part of the representation of a byte-compiled function (@pxref{Byte Compilation}), and more. - In Emacs Lisp, the indices of the elements of a vector start from zero -and count up from there. + Like other arrays, vectors use zero-origin indexing: the first +element has index 0. Vectors are printed with square brackets surrounding the elements. Thus, a vector whose elements are the symbols @code{a}, @code{b} and @@ -728,3 +727,96 @@ bv @noindent These results make sense because the binary codes for control-_ and control-W are 11111 and 10111, respectively. + +@node Rings +@section Managing a Fixed-Size Ring of Objects + +@cindex ring data structure + A @dfn{ring} is a fixed-size data structure that supports insertion, +deletion, rotation, and modulo-indexed reference and traversal. An +efficient ring data structure is implemented by the @code{ring} +package. It provides the functions listed in this section. + + Note that several ``rings'' in Emacs, like the kill ring and the +mark ring, are actually implemented as simple lists, @emph{not} using +the @code{ring} package; thus the following functions won't work on +them. + +@defun make-ring size +This returns a new ring capable of holding @var{size} objects. +@var{size} should be an integer. +@end defun + +@defun ring-p object +This returns @code{t} if @var{object} is a ring, @code{nil} otherwise. +@end defun + +@defun ring-size ring +This returns the maximum capacity of the @var{ring}. +@end defun + +@defun ring-length ring +This returns the number of objects that @var{ring} currently contains. +The value will never exceed that returned by @code{ring-size}. +@end defun + +@defun ring-elements ring +This returns a list of the objects in @var{ring}, in order, newest first. +@end defun + +@defun ring-copy ring +This returns a new ring which is a copy of @var{ring}. +The new ring contains the same (@code{eq}) objects as @var{ring}. +@end defun + +@defun ring-empty-p ring +This returns @code{t} if @var{ring} is empty, @code{nil} otherwise. +@end defun + + The newest element in the ring always has index 0. Higher indices +correspond to older elements. Indices are computed modulo the ring +length. Index @minus{}1 corresponds to the oldest element, @minus{}2 +to the next-oldest, and so forth. + +@defun ring-ref ring index +This returns the object in @var{ring} found at index @var{index}. +@var{index} may be negative or greater than the ring length. If +@var{ring} is empty, @code{ring-ref} signals an error. +@end defun + +@defun ring-insert ring object +This inserts @var{object} into @var{ring}, making it the newest +element, and returns @var{object}. + +If the ring is full, insertion removes the oldest element to +make room for the new element. +@end defun + +@defun ring-remove ring &optional index +Remove an object from @var{ring}, and return that object. The +argument @var{index} specifies which item to remove; if it is +@code{nil}, that means to remove the oldest item. If @var{ring} is +empty, @code{ring-remove} signals an error. +@end defun + +@defun ring-insert-at-beginning ring object +This inserts @var{object} into @var{ring}, treating it as the oldest +element. The return value is not significant. + +If the ring is full, this function removes the newest element to make +room for the inserted element. +@end defun + +@cindex fifo data structure + If you are careful not to exceed the ring size, you can +use the ring as a first-in-first-out queue. For example: + +@lisp +(let ((fifo (make-ring 5))) + (mapc (lambda (obj) (ring-insert fifo obj)) + '(0 one "two")) + (list (ring-remove fifo) t + (ring-remove fifo) t + (ring-remove fifo))) + @result{} (0 t one t "two") +@end lisp diff --git a/doc/lispref/strings.texi b/doc/lispref/strings.texi index 49199d3e32f..bbb75f1474d 100644 --- a/doc/lispref/strings.texi +++ b/doc/lispref/strings.texi @@ -410,8 +410,13 @@ in case if @code{case-fold-search} is non-@code{nil}. @defun string= string1 string2 This function returns @code{t} if the characters of the two strings match exactly. Symbols are also allowed as arguments, in which case -their print names are used. -Case is always significant, regardless of @code{case-fold-search}. +the symbol names are used. Case is always significant, regardless of +@code{case-fold-search}. + +This function is equivalent to @code{equal} for comparing two strings +(@pxref{Equality Predicates}). In particular, the text properties of +the two strings are ignored. But if either argument is not a string +or symbol, an error is signaled. @example (string= "abc" "abc") @@ -422,10 +427,6 @@ Case is always significant, regardless of @code{case-fold-search}. @result{} nil @end example -The function @code{string=} ignores the text properties of the two -strings. When @code{equal} (@pxref{Equality Predicates}) compares two -strings, it uses @code{string=}. - For technical reasons, a unibyte and a multibyte string are @code{equal} if and only if they contain the same sequence of character codes and all these codes are either in the range 0 through diff --git a/doc/lispref/symbols.texi b/doc/lispref/symbols.texi index 866a63c4cd9..0ee22b905b6 100644 --- a/doc/lispref/symbols.texi +++ b/doc/lispref/symbols.texi @@ -41,62 +41,58 @@ references another object: @table @asis @item Print name @cindex print name cell -The @dfn{print name cell} holds a string that names the symbol for -reading and printing. See @code{symbol-name} in @ref{Creating Symbols}. +The symbol's name. @item Value @cindex value cell -The @dfn{value cell} holds the current value of the symbol as a -variable. When a symbol is used as a form, the value of the form is the -contents of the symbol's value cell. See @code{symbol-value} in -@ref{Accessing Variables}. +The symbol's current value as a variable. @item Function @cindex function cell -The @dfn{function cell} holds the function definition of the symbol. -When a symbol is used as a function, its function definition is used in -its place. This cell is also used to make a symbol stand for a keymap -or a keyboard macro, for editor command execution. Because each symbol -has separate value and function cells, variables names and function names do -not conflict. See @code{symbol-function} in @ref{Function Cells}. +The symbol's function definition. It can also hold a symbol, a +keymap, or a keyboard macro. @item Property list @cindex property list cell -The @dfn{property list cell} holds the property list of the symbol. See -@code{symbol-plist} in @ref{Property Lists}. +The symbol's property list. @end table - The print name cell always holds a string, and cannot be changed. The -other three cells can be set individually to any specified Lisp object. +@noindent +The print name cell always holds a string, and cannot be changed. +Each of the other three cells can be set to any Lisp object. - The print name cell holds the string that is the name of the symbol. -Since symbols are represented textually by their names, it is important -not to have two symbols with the same name. The Lisp reader ensures -this: every time it reads a symbol, it looks for an existing symbol with -the specified name before it creates a new one. (In GNU Emacs Lisp, -this lookup uses a hashing algorithm and an obarray; see @ref{Creating -Symbols}.) + The print name cell holds the string that is the name of a symbol. +Since symbols are represented textually by their names, it is +important not to have two symbols with the same name. The Lisp reader +ensures this: every time it reads a symbol, it looks for an existing +symbol with the specified name before it creates a new one. To get a +symbol's name, use the function @code{symbol-name} (@pxref{Creating +Symbols}). - The value cell holds the symbol's value as a variable -(@pxref{Variables}). That is what you get if you evaluate the symbol as -a Lisp expression (@pxref{Evaluation}). Any Lisp object is a legitimate -value. Certain symbols have values that cannot be changed; these -include @code{nil} and @code{t}, and any symbol whose name starts with -@samp{:} (those are called @dfn{keywords}). @xref{Constant Variables}. + The value cell holds a symbol's value as a variable, which is what +you get if the symbol itself is evaluated as a Lisp expression. +@xref{Variables}, for details about how values are set and retrieved, +including complications such as @dfn{local bindings} and @dfn{scoping +rules}. Most symbols can have any Lisp object as a value, but certain +special symbols have values that cannot be changed; these include +@code{nil} and @code{t}, and any symbol whose name starts with +@samp{:} (those are called @dfn{keywords}). @xref{Constant +Variables}. - We often refer to ``the function @code{foo}'' when we really mean -the function stored in the function cell of the symbol @code{foo}. We -make the distinction explicit only when necessary. In normal -usage, the function cell usually contains a function -(@pxref{Functions}) or a macro (@pxref{Macros}), as that is what the -Lisp interpreter expects to see there (@pxref{Evaluation}). Keyboard -macros (@pxref{Keyboard Macros}), keymaps (@pxref{Keymaps}) and -autoload objects (@pxref{Autoloading}) are also sometimes stored in -the function cells of symbols. + The function cell holds a symbol's function definition. Often, we +refer to ``the function @code{foo}'' when we really mean the function +stored in the function cell of @code{foo}; we make the distinction +explicit only when necessary. Typically, the function cell is used to +hold a function (@pxref{Functions}) or a macro (@pxref{Macros}). +However, it can also be used to hold a symbol (@pxref{Function +Indirection}), keyboard macro (@pxref{Keyboard Macros}), keymap +(@pxref{Keymaps}), or autoload object (@pxref{Autoloading}). To get +the contents of a symbol's function cell, use the function +@code{symbol-function} (@pxref{Function Cells}). The property list cell normally should hold a correctly formatted -property list (@pxref{Property Lists}), as a number of functions expect -to see a property list there. +property list. To get a symbol's function cell, use the function +@code{symbol-plist}. @xref{Property Lists}. The function cell or the value cell may be @dfn{void}, which means that the cell does not reference any object. (This is not the same @@ -104,57 +100,43 @@ thing as holding the symbol @code{void}, nor the same as holding the symbol @code{nil}.) Examining a function or value cell that is void results in an error, such as @samp{Symbol's value as variable is void}. - The four functions @code{symbol-name}, @code{symbol-value}, -@code{symbol-plist}, and @code{symbol-function} return the contents of -the four cells of a symbol. Here as an example we show the contents of -the four cells of the symbol @code{buffer-file-name}: + Because each symbol has separate value and function cells, variables +names and function names do not conflict. For example, the symbol +@code{buffer-file-name} has a value (the name of the file being +visited in the current buffer) as well as a function definition (a +primitive function that returns the name of the file): @example -(symbol-name 'buffer-file-name) - @result{} "buffer-file-name" -(symbol-value 'buffer-file-name) +buffer-file-name @result{} "/gnu/elisp/symbols.texi" (symbol-function 'buffer-file-name) @result{} # -(symbol-plist 'buffer-file-name) - @result{} (variable-documentation 29529) @end example -@noindent -Because this symbol is the variable which holds the name of the file -being visited in the current buffer, the value cell contents we see are -the name of the source file of this chapter of the Emacs Lisp Manual. -The property list cell contains the list @code{(variable-documentation -29529)} which tells the documentation functions where to find the -documentation string for the variable @code{buffer-file-name} in the -@file{DOC-@var{version}} file. (29529 is the offset from the beginning -of the @file{DOC-@var{version}} file to where that documentation string -begins---see @ref{Documentation Basics}.) The function cell contains -the function for returning the name of the file. -@code{buffer-file-name} names a primitive function, which has no read -syntax and prints in hash notation (@pxref{Primitive Function Type}). A -symbol naming a function written in Lisp would have a lambda expression -(or a byte-code object) in this cell. - @node Definitions, Creating Symbols, Symbol Components, Symbols @section Defining Symbols @cindex definitions of symbols - A @dfn{definition} in Lisp is a special form that announces your -intention to use a certain symbol in a particular way. In Emacs Lisp, -you can define a symbol as a variable, or define it as a function (or -macro), or both independently. - - A definition construct typically specifies a value or meaning for the -symbol for one kind of use, plus documentation for its meaning when used -in this way. Thus, when you define a symbol as a variable, you can -supply an initial value for the variable, plus documentation for the -variable. + A @dfn{definition} is a special kind of Lisp expression that +announces your intention to use a symbol in a particular way. It +typically specifies a value or meaning for the symbol for one kind of +use, plus documentation for its meaning when used in this way. Thus, +when you define a symbol as a variable, you can supply an initial +value for the variable, plus documentation for the variable. @code{defvar} and @code{defconst} are special forms that define a -symbol as a global variable. They are documented in detail in -@ref{Defining Variables}. For defining user option variables that can -be customized, use @code{defcustom} (@pxref{Customization}). +symbol as a @dfn{global variable}---a variable that can be accessed at +any point in a Lisp program. @xref{Variables}, for details about +variables. To define a customizable variable, use the +@code{defcustom} macro, which also calls @code{defvar} as a subroutine +(@pxref{Customization}). + + In principle, you can assign a variable value to any symbol with +@code{setq}, whether not it has first been defined as a variable. +However, you ought to write a variable definition for each global +variable that you want to use; otherwise, your Lisp program may not +act correctly if it is evaluated with lexical scoping enabled +(@pxref{Variable Scoping}). @code{defun} defines a symbol as a function, creating a lambda expression and storing it in the function cell of the symbol. This @@ -171,15 +153,14 @@ both macro and function definitions are kept in the function cell, and that cell can hold only one Lisp object at any given time. @xref{Macros}. - In Emacs Lisp, a definition is not required in order to use a symbol -as a variable or function. Thus, you can make a symbol a global -variable with @code{setq}, whether you define it first or not. The real -purpose of definitions is to guide programmers and programming tools. -They inform programmers who read the code that certain symbols are -@emph{intended} to be used as variables, or as functions. In addition, -utilities such as @file{etags} and @file{make-docfile} recognize -definitions, and add appropriate information to tag tables and the -@file{DOC-@var{version}} file. @xref{Accessing Documentation}. + As previously noted, Emacs Lisp allows the same symbol to be defined +both as a variable (e.g.@: with @code{defvar}) and as a function or +macro (e.g.@: with @code{defun}). Such definitions do not conflict. + + These definition also act as guides for programming tools. For +example, the @kbd{C-h f} and @kbd{C-h v} commands create help buffers +containing links to the relevant variable, function, or macro +definitions. @xref{Name Help,,, emacs, The GNU Emacs Manual}. @node Creating Symbols, Property Lists, Definitions, Symbols @section Creating and Interning Symbols @@ -254,8 +235,8 @@ not work---only @code{intern} can enter a symbol in an obarray properly. @cindex CL note---symbol in obarrays @quotation -@b{Common Lisp note:} In Common Lisp, a single symbol may be interned in -several obarrays. +@b{Common Lisp note:} Unlike Common Lisp, Emacs Lisp does not provide +for interning a single symbol in several obarrays. @end quotation Most of the functions below take a name and sometimes an obarray as @@ -448,12 +429,13 @@ must be distinct. Property lists are better than association lists for attaching information to various Lisp function names or variables. If your -program keeps all of its associations in one association list, it will +program keeps all such information in one association list, it will typically need to search that entire list each time it checks for an -association. This could be slow. By contrast, if you keep the same -information in the property lists of the function names or variables -themselves, each search will scan only the length of one property list, -which is usually short. This is why the documentation for a variable is +association for a particular Lisp function name or variable, which +could be slow. By contrast, if you keep the same information in the +property lists of the function names or variables themselves, each +search will scan only the length of one property list, which is +usually short. This is why the documentation for a variable is recorded in a property named @code{variable-documentation}. The byte compiler likewise uses properties to record those functions needing special treatment. diff --git a/doc/lispref/syntax.texi b/doc/lispref/syntax.texi index dc215b1e0e6..3d153e43b2d 100644 --- a/doc/lispref/syntax.texi +++ b/doc/lispref/syntax.texi @@ -128,10 +128,10 @@ their meanings, and examples of their use. @deffn {Syntax class} @w{whitespace character} @dfn{Whitespace characters} (designated by @w{@samp{@ }} or @samp{-}) separate symbols and words from each other. Typically, whitespace -characters have no other syntactic significance, and multiple whitespace -characters are syntactically equivalent to a single one. Space, tab, -newline and formfeed are classified as whitespace in almost all major -modes. +characters have no other syntactic significance, and multiple +whitespace characters are syntactically equivalent to a single one. +Space, tab, and formfeed are classified as whitespace in almost all +major modes. @end deffn @deffn {Syntax class} @w{word constituent} @@ -606,11 +606,13 @@ expression prefix syntax class, and characters with the @samp{p} flag. @section Parsing Expressions This section describes functions for parsing and scanning balanced -expressions, also known as @dfn{sexps}. Basically, a sexp is either a -balanced parenthetical grouping, a string, or a symbol name (a -sequence of characters whose syntax is either word constituent or -symbol constituent). However, characters whose syntax is expression -prefix are treated as part of the sexp if they appear next to it. +expressions. We will refer to such expressions as @dfn{sexps}, +following the terminology of Lisp, even though these functions can act +on languages other than Lisp. Basically, a sexp is either a balanced +parenthetical grouping, a string, or a ``symbol'' (i.e.@: a sequence +of characters whose syntax is either word constituent or symbol +constituent). However, characters whose syntax is expression prefix +are treated as part of the sexp if they appear next to it. The syntax table controls the interpretation of characters, so these functions can be used for Lisp expressions when in Lisp mode and for C @@ -830,10 +832,6 @@ The value is @code{nil} if @var{state} represents a parse which has arrived at a top level position. @end defun - We have provided this access function rather than document how the -data is represented in the state, because we plan to change the -representation in the future. - @node Low-Level Parsing @subsection Low-Level Parsing diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi index b75c013298f..416bfef4a60 100644 --- a/doc/lispref/text.texi +++ b/doc/lispref/text.texi @@ -56,7 +56,7 @@ the character after point. * Registers:: How registers are implemented. Accessing the text or position stored in a register. * Base 64:: Conversion to or from base 64 encoding. -* MD5 Checksum:: Compute the MD5 "message digest"/"checksum". +* Checksum/Hash:: Computing "message digests"/"checksums"/"hashes". * Parsing HTML:: Parsing HTML and XML. * Atomic Changes:: Installing several buffer changes "atomically". * Change Hooks:: Supplying functions to be run when text is changed. @@ -218,44 +218,46 @@ This is like @code{buffer-substring}, except that it does not copy text properties, just the characters themselves. @xref{Text Properties}. @end defun -@defun filter-buffer-substring start end &optional delete noprops +@defun filter-buffer-substring start end &optional delete This function passes the buffer text between @var{start} and @var{end} -through the filter functions specified by the variable -@code{buffer-substring-filters}, and returns the value from the last -filter function. If @code{buffer-substring-filters} is @code{nil}, -the value is the unaltered text from the buffer, what -@code{buffer-substring} would return. +through the filter functions specified by the wrapper hook +@code{filter-buffer-substring-functions}, and returns the final +result of applying all filters. The obsolete variable +@code{buffer-substring-filters} is also consulted. If both of these +variables are @code{nil}, the value is the unaltered text from the +buffer, as @code{buffer-substring} would return. If @var{delete} is non-@code{nil}, this function deletes the text between @var{start} and @var{end} after copying it, like @code{delete-and-extract-region}. -If @var{noprops} is non-@code{nil}, the final string returned does not -include text properties, while the string passed through the filters -still includes text properties from the buffer text. - Lisp code should use this function instead of @code{buffer-substring}, @code{buffer-substring-no-properties}, or @code{delete-and-extract-region} when copying into user-accessible data structures such as the kill-ring, X clipboard, and registers. Major and minor modes can add functions to -@code{buffer-substring-filters} to alter such text as it is copied out -of the buffer. +@code{filter-buffer-substring-functions} to alter such text as it is +copied out of the buffer. @end defun -@defvar buffer-substring-filters -This variable should be a list of functions that accept a single -argument, a string, and return a string. -@code{filter-buffer-substring} passes the buffer substring to the -first function in this list, and the return value of each function is -passed to the next function. The return value of the last function is -used as the return value of @code{filter-buffer-substring}. +@defvar filter-buffer-substring-functions +This variable is a wrapper hook (@pxref{Running Hooks}), whose members +should be functions that accept four arguments: @var{fun}, +@var{start}, @var{end}, and @var{delete}. @var{fun} is a function +that takes three arguments (@var{start}, @var{end}, and @var{delete}), +and returns a string. In both cases, the @var{start}, @var{end}, and +@var{delete} arguments are the same as those of +@code{filter-buffer-substring}. -As a special convention, point is set to the start of the buffer text -being operated on (i.e., the @var{start} argument for -@code{filter-buffer-substring}) before these functions are called. - -If this variable is @code{nil}, no filtering is performed. +The first hook function is passed a @var{fun} that is equivalent to +the default operation of @code{filter-buffer-substring}, i.e. it +returns the buffer-substring between @var{start} and @var{end} +(processed by any @code{buffer-substring-filters}) and optionally +deletes the original text from the buffer. In most cases, the hook +function will call @var{fun} once, and then do its own processing of +the result. The next hook function receives a @var{fun} equivalent to +this, and so on. The actual return value is the result of all the +hook functions acting in sequence. @end defvar @defun buffer-string @@ -500,6 +502,11 @@ syntax. (@xref{Abbrevs}, and @ref{Syntax Class Table}.) It is also responsible for calling @code{blink-paren-function} when the inserted character has close parenthesis syntax (@pxref{Blinking}). +@vindex post-self-insert-hook +The final thing this command does is to run the hook +@code{post-self-insert-hook}. You could use this to automatically +reindent text as it is typed, for example. + Do not try substituting your own definition of @code{self-insert-command} for the standard one. The editor command loop handles this function specially. @@ -3991,7 +3998,7 @@ changed in the future. @node Transposition @section Transposition of Text - This subroutine is used by the transposition commands. + This function can be used to transpose stretches of text: @defun transpose-regions start1 end1 start2 end2 &optional leave-markers This function exchanges two nonoverlapping portions of the buffer. @@ -4064,9 +4071,11 @@ decoded text. The decoding functions ignore newline characters in the encoded text. @end defun -@node MD5 Checksum -@section MD5 Checksum +@node Checksum/Hash +@section Checksum/Hash @cindex MD5 checksum +@cindex hashing, secure +@cindex SHA-1 @cindex message digest computation MD5 cryptographic checksums, or @dfn{message digests}, are 128-bit @@ -4077,7 +4086,7 @@ RFC@footnote{ For an explanation of what is an RFC, see the footnote in @ref{Base 64}. }1321. This section describes the Emacs facilities for computing -message digests. +message digests and other forms of ``secure hash''. @defun md5 object &optional start end coding-system noerror This function returns the MD5 message digest of @var{object}, which @@ -4112,6 +4121,16 @@ using the specified or chosen coding system. However, if coding instead. @end defun +@defun secure-hash algorithm object &optional start end binary +This function provides a general interface to a variety of secure +hashing algorithms. As well as the MD5 algorithm, it supports SHA-1, +SHA-2, SHA-224, SHA-256, SHA-384 and SHA-512. The argument +@var{algorithm} is a symbol stating which hash to compute. The +arguments @var{object}, @var{start}, and @var{end} are as for the +@code{md5} function. If the optional argument @var{binary} is +non-@code{nil}, returns a string in binary form. +@end defun + @node Parsing HTML @section Parsing HTML @cindex parsing html diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi index b0a6795021b..ab3a4edc0ac 100644 --- a/doc/lispref/variables.texi +++ b/doc/lispref/variables.texi @@ -8,20 +8,20 @@ @cindex variable A @dfn{variable} is a name used in a program to stand for a value. -Nearly all programming languages have variables of some sort. In the -text of a Lisp program, variables are written using the syntax for -symbols. +In Lisp, each variable is represented by a Lisp symbol +(@pxref{Symbols}). The variable name is simply the symbol's name, and +the variable's value is stored in the symbol's value cell@footnote{To +be precise, under the default @dfn{dynamic binding} rules the value +cell always holds the variable's current value, but this is not the +case under @dfn{lexical binding} rules. @xref{Variable Scoping}, for +details.}. @xref{Symbol Components}. In Emacs Lisp, the use of a +symbol as a variable is independent of its use as a function name. - In Lisp, unlike most programming languages, programs are represented -primarily as Lisp objects and only secondarily as text. The Lisp -objects used for variables are symbols: the symbol name is the -variable name, and the variable's value is stored in the value cell of -the symbol. The use of a symbol as a variable is independent of its -use as a function name. @xref{Symbol Components}. - - The textual form of a Lisp program is given by the read syntax of -the Lisp objects that constitute the program. Hence, a variable in a -textual Lisp program is written using the read syntax for the symbol + As previously noted in this manual, a Lisp program is represented +primarily by Lisp objects, and only secondarily as text. The textual +form of a Lisp program is given by the read syntax of the Lisp objects +that constitute the program. Hence, the textual form of a variable in +a Lisp program is written using the read syntax for the symbol representing the variable. @menu @@ -145,63 +145,63 @@ does not raise an error if you actually change it. @cindex global binding Global variables have values that last until explicitly superseded -with new values. Sometimes it is useful to create variable values that -exist temporarily---only until a certain part of the program finishes. -These values are called @dfn{local}, and the variables so used are -called @dfn{local variables}. +with new values. Sometimes it is useful to give a variable a +@dfn{local value}---a value that takes effect only within a certain +part of a Lisp program. When a variable has a local value, we say +that it is @dfn{locally bound} to that value, and that it is a +@dfn{local variable}. - For example, when a function is called, its argument variables receive -new local values that last until the function exits. The @code{let} -special form explicitly establishes new local values for specified -variables; these last until exit from the @code{let} form. - -@cindex shadowing of variables - Establishing a local value saves away the variable's previous value -(or lack of one). We say that the previous value is @dfn{shadowed} -and @dfn{not visible}. Both global and local values may be shadowed -(@pxref{Scope}). After the life span of the local value is over, the -previous value (or lack of one) is restored. - - If you set a variable (such as with @code{setq}) while it is local, -this replaces the local value; it does not alter the global value, or -previous local values, that are shadowed. To model this behavior, we -speak of a @dfn{local binding} of the variable as well as a local value. - - The local binding is a conceptual place that holds a local value. -Entering a function, or a special form such as @code{let}, creates the -local binding; exiting the function or the @code{let} removes the -local binding. While the local binding lasts, the variable's value is -stored within it. Using @code{setq} or @code{set} while there is a -local binding stores a different value into the local binding; it does -not create a new binding. + For example, when a function is called, its argument variables +receive local values, which are the actual arguments supplied to the +function call; these local bindings take effect within the body of the +function. To take another example, the @code{let} special form +explicitly establishes local bindings for specific variables, which +take effect within the body of the @code{let} form. We also speak of the @dfn{global binding}, which is where (conceptually) the global value is kept. -@cindex current binding - A variable can have more than one local binding at a time (for -example, if there are nested @code{let} forms that bind it). In such a -case, the most recently created local binding that still exists is the -@dfn{current binding} of the variable. (This rule is called -@dfn{dynamic scoping}; see @ref{Variable Scoping}.) If there are no -local bindings, the variable's global binding is its current binding. -We sometimes call the current binding the @dfn{most-local existing -binding}, for emphasis. Ordinary evaluation of a symbol always returns -the value of its current binding. +@cindex shadowing of variables + Establishing a local binding saves away the variable's previous +value (or lack of one). We say that the previous value is +@dfn{shadowed}. Both global and local values may be shadowed. If a +local binding is in effect, using @code{setq} on the local variable +stores the specified value in the local binding. When that local +binding is no longer in effect, the previously shadowed value (or lack +of one) comes back. - The special forms @code{let} and @code{let*} exist to create -local bindings. +@cindex current binding + A variable can have more than one local binding at a time (e.g.@: if +there are nested @code{let} forms that bind the variable). The +@dfn{current binding} is the local binding that is actually in effect. +It determines the value returned by evaluating the variable symbol, +and it is the binding acted on by @code{setq}. + + For most purposes, you can think of the current binding as the +``innermost'' local binding, or the global binding if there is no +local binding. To be more precise, a rule called the @dfn{scoping +rule} determines where in a program a local binding takes effect. The +default scoping rule in Emacs Lisp is called @dfn{dynamic scoping}, +which simply states that the current binding at any given point in the +execution of a program is the most recently-created binding for that +variable that still exists. For details about dynamic scoping, and an +alternative scoping rule called @dfn{lexical scoping}, @xref{Variable +Scoping}. + + The special forms @code{let} and @code{let*} exist to create local +bindings: @defspec let (bindings@dots{}) forms@dots{} -This special form binds variables according to @var{bindings} and then -evaluates all of the @var{forms} in textual order. The @code{let}-form -returns the value of the last form in @var{forms}. +This special form sets up local bindings for a certain set of +variables, as specified by @var{bindings}, and then evaluates all of +the @var{forms} in textual order. Its return value is the value of +the last form in @var{forms}. Each of the @var{bindings} is either @w{(i) a} symbol, in which case -that symbol is bound to @code{nil}; or @w{(ii) a} list of the form -@code{(@var{symbol} @var{value-form})}, in which case @var{symbol} is -bound to the result of evaluating @var{value-form}. If @var{value-form} -is omitted, @code{nil} is used. +that symbol is locally bound to @code{nil}; or @w{(ii) a} list of the +form @code{(@var{symbol} @var{value-form})}, in which case +@var{symbol} is locally bound to the result of evaluating +@var{value-form}. If @var{value-form} is omitted, @code{nil} is used. All of the @var{value-form}s in @var{bindings} are evaluated in the order they appear and @emph{before} binding any of the symbols to them. @@ -213,6 +213,7 @@ Here is an example of this: @code{z} is bound to the old value of (setq y 2) @result{} 2 @end group + @group (let ((y 1) (z y)) @@ -226,15 +227,15 @@ Here is an example of this: @code{z} is bound to the old value of This special form is like @code{let}, but it binds each variable right after computing its local value, before computing the local value for the next variable. Therefore, an expression in @var{bindings} can -reasonably refer to the preceding symbols bound in this @code{let*} -form. Compare the following example with the example above for -@code{let}. +refer to the preceding symbols bound in this @code{let*} form. +Compare the following example with the example above for @code{let}. @example @group (setq y 2) @result{} 2 @end group + @group (let* ((y 1) (z y)) ; @r{Use the just-established value of @code{y}.} @@ -262,7 +263,7 @@ Macro calls (@pxref{Macros}). Variables}); a few variables have terminal-local bindings (@pxref{Multiple Terminals}). These kinds of bindings work somewhat like ordinary local bindings, but they are localized depending on -``where'' you are in Emacs, rather than localized in time. +``where'' you are in Emacs. @defopt max-specpdl-size @anchor{Definition of max-specpdl-size} @@ -280,7 +281,7 @@ that Lisp avoids infinite recursion on an ill-defined function. @code{max-lisp-eval-depth} provides another limit on depth of nesting. @xref{Definition of max-lisp-eval-depth,, Eval}. -The default value is 1000. Entry to the Lisp debugger increases the +The default value is 1300. Entry to the Lisp debugger increases the value, if there is little room left, to make sure the debugger itself has room to execute. @end defopt @@ -290,46 +291,33 @@ has room to execute. @cindex @code{void-variable} error @cindex void variable - If you have never given a symbol any value as a global variable, we -say that that symbol's global value is @dfn{void}. In other words, the -symbol's value cell does not have any Lisp object in it. If you try to -evaluate the symbol, you get a @code{void-variable} error rather than -a value. + We say that a variable is void if its symbol has an unassigned value +cell (@pxref{Symbol Components}). Under Emacs Lisp's default dynamic +binding rules (@pxref{Variable Scoping}), the value cell stores the +variable's current (local or global) value. Note that an unassigned +value cell is @emph{not} the same as having @code{nil} in the value +cell. The symbol @code{nil} is a Lisp object and can be the value of +a variable, just as any other object can be; but it is still a value. +If a variable is void, trying to evaluate the variable signals a +@code{void-variable} error rather than a value. - Note that a value of @code{nil} is not the same as void. The symbol -@code{nil} is a Lisp object and can be the value of a variable just as any -other object can be; but it is @emph{a value}. A void variable does not -have any value. - - After you have given a variable a value, you can make it void once more -using @code{makunbound}. + Under lexical binding rules, the value cell only holds the +variable's global value, i.e.@: the value outside of any lexical +binding contruct. When a variable is lexically bound, the local value +is determined by the lexical environment; the variable may have a +local value if its symbol's value cell is unassigned. @defun makunbound symbol -This function makes the current variable binding of @var{symbol} void. -Subsequent attempts to use this symbol's value as a variable will signal -the error @code{void-variable}, unless and until you set it again. +This function empties out the value cell of @var{symbol}, making the +variable void. It returns @var{symbol}. -@code{makunbound} returns @var{symbol}. +If @var{symbol} has a dynamic local binding, @code{makunbound} voids +the current binding, and this voidness lasts only as long as the local +binding is in effect. Afterwards, the previously shadowed local or +global binding is reexposed; then the variable will no longer be void, +unless the reexposed binding is void too. -@example -@group -(makunbound 'x) ; @r{Make the global value of @code{x} void.} - @result{} x -@end group -@group -x -@error{} Symbol's value as variable is void: x -@end group -@end example - -If @var{symbol} is locally bound, @code{makunbound} affects the most -local existing binding. This is the only way a symbol can have a void -local binding, since all the constructs that create local bindings -create them with values. In this case, the voidness lasts at most as -long as the binding does; when the binding is removed due to exit from -the construct that made it, the previous local or global binding is -reexposed as usual, and the variable is no longer void unless the newly -reexposed binding was void all along. +Here are some examples (assuming dynamic binding is in effect): @smallexample @group @@ -361,17 +349,11 @@ x ; @r{The global binding is unchanged.} @end smallexample @end defun - A variable that has been made void with @code{makunbound} is -indistinguishable from one that has never received a value and has -always been void. - - You can use the function @code{boundp} to test whether a variable is -currently void. - @defun boundp variable -@code{boundp} returns @code{t} if @var{variable} (a symbol) is not void; -more precisely, if its current binding is not void. It returns -@code{nil} otherwise. +This function returns @code{t} if @var{variable} (a symbol) is not +void, and @code{nil} if it is void. + +Here are some examples (assuming dynamic binding is in effect): @smallexample @group @@ -402,52 +384,41 @@ more precisely, if its current binding is not void. It returns @section Defining Global Variables @cindex variable definition - You may announce your intention to use a symbol as a global variable -with a @dfn{variable definition}: a special form, either @code{defconst} -or @code{defvar}. + A @dfn{variable definition} is a construct that announces your +intention to use a symbol as a global variable. It uses the special +forms @code{defvar} or @code{defconst}, which are documented below. - In Emacs Lisp, definitions serve three purposes. First, they inform -people who read the code that certain symbols are @emph{intended} to be -used a certain way (as variables). Second, they inform the Lisp system -of these things, supplying a value and documentation. Third, they -provide information to utilities such as @code{etags} and -@code{make-docfile}, which create data bases of the functions and -variables in a program. + A variable definition serves three purposes. First, it informs +people who read the code that the symbol is @emph{intended} to be used +a certain way (as a variable). Second, it informs the Lisp system of +this, optionally supplying an initial value and a documentation +string. Third, it provides information to programming tools such as +@command{etags}, allowing them to find where the variable was defined. - The difference between @code{defconst} and @code{defvar} is primarily -a matter of intent, serving to inform human readers of whether the value -should ever change. Emacs Lisp does not restrict the ways in which a -variable can be used based on @code{defconst} or @code{defvar} -declarations. However, it does make a difference for initialization: -@code{defconst} unconditionally initializes the variable, while -@code{defvar} initializes it only if it is void. + The difference between @code{defconst} and @code{defvar} is mainly a +matter of intent, serving to inform human readers of whether the value +should ever change. Emacs Lisp does not actually prevent you from +changing the value of a variable defined with @code{defconst}. One +notable difference between the two forms is that @code{defconst} +unconditionally initializes the variable, whereas @code{defvar} +initializes it only if it is originally void. -@ignore - One would expect user option variables to be defined with -@code{defconst}, since programs do not change them. Unfortunately, this -has bad results if the definition is in a library that is not preloaded: -@code{defconst} would override any prior value when the library is -loaded. Users would like to be able to set user options in their init -files, and override the default values given in the definitions. For -this reason, user options must be defined with @code{defvar}. -@end ignore + To define a customizable variable, you should use @code{defcustom} +(which calls @code{defvar} as a subroutine). @xref{Customization}. @defspec defvar symbol [value [doc-string]] -This special form defines @var{symbol} as a variable and can also -initialize and document it. The definition informs a person reading -your code that @var{symbol} is used as a variable that might be set or -changed. It also declares this variable as @dfn{special}, meaning that it -should always use dynamic scoping rules. Note that @var{symbol} is not -evaluated; the symbol to be defined must appear explicitly in the -@code{defvar}. +This special form defines @var{symbol} as a variable. Note that +@var{symbol} is not evaluated; the symbol to be defined should appear +explicitly in the @code{defvar} form. The variable is marked as +@dfn{special}, meaning that it should always be dynamically bound +(@pxref{Variable Scoping}). If @var{symbol} is void and @var{value} is specified, @code{defvar} -evaluates it and sets @var{symbol} to the result. But if @var{symbol} -already has a value (i.e., it is not void), @var{value} is not even -evaluated, and @var{symbol}'s value remains unchanged. -If @var{value} is omitted, the value of @var{symbol} is not changed in any -case; instead, the only effect of @code{defvar} is to declare locally that this -variable exists elsewhere and should hence always use dynamic scoping rules. +evaluates @var{value} and sets @var{symbol} to the result. But if +@var{symbol} already has a value (i.e.@: it is not void), @var{value} +is not even evaluated, and @var{symbol}'s value remains unchanged. If +@var{value} is omitted, the value of @var{symbol} is not changed in +any case. If @var{symbol} has a buffer-local binding in the current buffer, @code{defvar} operates on the default value, which is buffer-independent, @@ -459,19 +430,9 @@ Emacs Lisp mode (@code{eval-defun}), a special feature of @code{eval-defun} arranges to set the variable unconditionally, without testing whether its value is void. -If the @var{doc-string} argument appears, it specifies the documentation -for the variable. (This opportunity to specify documentation is one of -the main benefits of defining the variable.) The documentation is -stored in the symbol's @code{variable-documentation} property. The -Emacs help functions (@pxref{Documentation}) look for this property. - -If the documentation string begins with the character @samp{*}, Emacs -allows users to set it interactively using the @code{set-variable} -command. However, you should nearly always use @code{defcustom} -instead of @code{defvar} to define such variables, so that users can -use @kbd{M-x customize} and related commands to set them. In that -case, it is not necessary to begin the documentation string with -@samp{*}. @xref{Customization}. +If the @var{doc-string} argument is supplied, it specifies the +documentation string for the variable (stored in the symbol's +@code{variable-documentation} property). @xref{Documentation}. Here are some examples. This form defines @code{foo} but does not initialize it: @@ -494,38 +455,6 @@ it a documentation string: @end group @end example -The following form changes the documentation string for @code{bar}, -making it a user option, but does not change the value, since @code{bar} -already has a value. (The addition @code{(1+ nil)} would get an error -if it were evaluated, but since it is not evaluated, there is no error.) - -@example -@group -(defvar bar (1+ nil) - "*The normal weight of a bar.") - @result{} bar -@end group -@group -bar - @result{} 23 -@end group -@end example - -Here is an equivalent expression for the @code{defvar} special form: - -@example -@group -(defvar @var{symbol} @var{value} @var{doc-string}) -@equiv{} -(progn - (if (not (boundp '@var{symbol})) - (setq @var{symbol} @var{value})) - (if '@var{doc-string} - (put '@var{symbol} 'variable-documentation '@var{doc-string})) - '@var{symbol}) -@end group -@end example - The @code{defvar} form returns @var{symbol}, but it is normally used at top level in a file where its value does not matter. @end defspec @@ -538,6 +467,11 @@ global value, established here, that should not be changed by the user or by other programs. Note that @var{symbol} is not evaluated; the symbol to be defined must appear explicitly in the @code{defconst}. +The @code{defconst} form, like @code{defvar}, marks the variable as +@dfn{special}, meaning that it should always be dynamically bound +(@pxref{Variable Scoping}). In addition, it marks the variable as +risky (@pxref{File Local Variables}). + @code{defconst} always evaluates @var{value}, and sets the value of @var{symbol} to the result. If @var{symbol} does have a buffer-local binding in the current buffer, @code{defconst} sets the default value, @@ -567,37 +501,13 @@ float-pi @end example @end defspec -@defun user-variable-p variable -@cindex user option -This function returns @code{t} if @var{variable} is a user option---a -variable intended to be set by the user for customization---and -@code{nil} otherwise. (Variables other than user options exist for the -internal purposes of Lisp programs, and users need not know about them.) - -User option variables are distinguished from other variables either -though being declared using @code{defcustom}@footnote{They may also be -declared equivalently in @file{cus-start.el}.} or by the first character -of their @code{variable-documentation} property. If the property exists -and is a string, and its first character is @samp{*}, then the variable -is a user option. Aliases of user options are also user options. -@end defun - -@cindex @code{variable-interactive} property -@findex set-variable - If a user option variable has a @code{variable-interactive} property, -the @code{set-variable} command uses that value to control reading the -new value for the variable. The property's value is used as if it were -specified in @code{interactive} (@pxref{Using Interactive}). However, -this feature is largely obsoleted by @code{defcustom} -(@pxref{Customization}). - - @strong{Warning:} If the @code{defconst} and @code{defvar} special -forms are used while the variable has a local binding (made with -@code{let}, or a function argument), they set the local-binding's -value; the top-level binding is not changed. This is not what you -usually want. To prevent it, use these special forms at top level in -a file, where normally no local binding is in effect, and make sure to -load the file before making a local binding for the variable. + @strong{Warning:} If you use a @code{defconst} or @code{defvar} +special form while the variable has a local binding (made with +@code{let}, or a function argument), it sets the local binding rather +than the global binding. This is not what you usually want. To +prevent this, use these special forms at top level in a file, where +normally no local binding is in effect, and make sure to load the file +before making a local binding for the variable. @node Tips for Defining @section Tips for Defining Variables Robustly @@ -667,9 +577,9 @@ loading the file, the variable is either still uninitialized or initialized properly, never in-between. If it is still uninitialized, reloading the file will initialize it properly. Second, reloading the file once the variable is initialized will not alter it; that is -important if the user has run hooks to alter part of the contents (such -as, to rebind keys). Third, evaluating the @code{defvar} form with -@kbd{C-M-x} @emph{will} reinitialize the map completely. +important if the user has run hooks to alter part of the contents +(such as, to rebind keys). Third, evaluating the @code{defvar} form +with @kbd{C-M-x} will reinitialize the map completely. Putting so much code in the @code{defvar} form has one disadvantage: it puts the documentation string far away from the line which names the @@ -690,37 +600,27 @@ This has all the same advantages as putting the initialization inside the @code{defvar}, except that you must type @kbd{C-M-x} twice, once on each form, if you do want to reinitialize the variable. - But be careful not to write the code like this: - -@example -(defvar my-mode-map nil - @var{docstring}) -(unless my-mode-map - (setq my-mode-map (make-sparse-keymap)) - (define-key my-mode-map "\C-c\C-a" 'my-command) - @dots{}) -@end example - -@noindent -This code sets the variable, then alters it, but it does so in more than -one step. If the user quits just after the @code{setq}, that leaves the -variable neither correctly initialized nor void nor @code{nil}. Once -that happens, reloading the file will not initialize the variable; it -will remain incomplete. - @node Accessing Variables @section Accessing Variable Values The usual way to reference a variable is to write the symbol which -names it (@pxref{Symbol Forms}). This requires you to specify the -variable name when you write the program. Usually that is exactly what -you want to do. Occasionally you need to choose at run time which -variable to reference; then you can use @code{symbol-value}. +names it. @xref{Symbol Forms}. + + Occasionally, you may want to reference a variable which is only +determined at run time. In that case, you cannot specify the variable +name in the text of the program. You can use the @code{symbol-value} +function to extract the value. @defun symbol-value symbol -This function returns the value of @var{symbol}. This is the value in -the innermost local binding of the symbol, or its global value if it -has no local bindings. +This function returns the value stored in @var{symbol}'s value cell. +This is where the variable's current (dynamic) value is stored. If +the variable has no local binding, this is simply its global value. +If the variable is void, a @code{void-variable} error is signaled. + +If the variable is lexically bound, the value reported by +@code{symbol-value} is not necessarily the same as the variable's +lexical value, which is determined by the lexical environment rather +than the symbol's value cell. @xref{Variable Scoping}. @example @group @@ -754,13 +654,10 @@ has no local bindings. @result{} 5 @end group @end example - -A @code{void-variable} error is signaled if the current binding of -@var{symbol} is void. @end defun @node Setting Variables -@section How to Alter a Variable Value +@section Setting Variable Values The usual way to change the value of a variable is with the special form @code{setq}. When you need to compute the choice of variable at @@ -769,8 +666,8 @@ run time, use the function @code{set}. @defspec setq [symbol form]@dots{} This special form is the most common method of changing a variable's value. Each @var{symbol} is given a new value, which is the result of -evaluating the corresponding @var{form}. The most-local existing -binding of the symbol is changed. +evaluating the corresponding @var{form}. The current binding of the +symbol is changed. @code{setq} does not evaluate @var{symbol}; it sets the symbol that you write. We say that this argument is @dfn{automatically quoted}. The @@ -809,12 +706,17 @@ second @var{symbol} is set, and so on: @end defspec @defun set symbol value -This function sets @var{symbol}'s value to @var{value}, then returns -@var{value}. Since @code{set} is a function, the expression written for -@var{symbol} is evaluated to obtain the symbol to set. +This function puts @var{value} in the value cell of @var{symbol}. +Since it is a function rather than a special form, the expression +written for @var{symbol} is evaluated to obtain the symbol to set. +The return value is @var{value}. -The most-local existing binding of the variable is the binding that is -set; shadowed bindings are not affected. +When dynamic variable binding is in effect (the default), @code{set} +has the same effect as @code{setq}, apart from the fact that +@code{set} evaluates its @var{symbol} argument whereas @code{setq} +does not. But when a variable is lexically bound, @code{set} affects +its @emph{dynamic} value, whereas @code{setq} affects its current +(lexical) value. @xref{Variable Scoping}. @example @group @@ -854,327 +756,337 @@ error is signaled. (set '(x y) 'z) @error{} Wrong type argument: symbolp, (x y) @end example - -Logically speaking, @code{set} is a more fundamental primitive than -@code{setq}. Any use of @code{setq} can be trivially rewritten to use -@code{set}; @code{setq} could even be defined as a macro, given the -availability of @code{set}. However, @code{set} itself is rarely used; -beginners hardly need to know about it. It is useful only for choosing -at run time which variable to set. For example, the command -@code{set-variable}, which reads a variable name from the user and then -sets the variable, needs to use @code{set}. - -@cindex CL note---@code{set} local -@quotation -@b{Common Lisp note:} In Common Lisp, @code{set} always changes the -symbol's ``special'' or dynamic value, ignoring any lexical bindings. -In Emacs Lisp, all variables and all bindings are dynamic, so @code{set} -always affects the most local existing binding. -@end quotation @end defun @node Variable Scoping @section Scoping Rules for Variable Bindings - A given symbol @code{foo} can have several local variable bindings, -established at different places in the Lisp program, as well as a global -binding. The most recently established binding takes precedence over -the others. + When you create a local binding for a variable, that binding takes +effect only within a limited portion of the program (@pxref{Local +Variables}). This section describes exactly what this means. @cindex scope @cindex extent -@cindex dynamic scoping -@cindex lexical scoping - By default, local bindings in Emacs Lisp have @dfn{indefinite scope} and -@dfn{dynamic extent}. @dfn{Scope} refers to @emph{where} textually in -the source code the binding can be accessed. ``Indefinite scope'' means -that any part of the program can potentially access the variable -binding. @dfn{Extent} refers to @emph{when}, as the program is -executing, the binding exists. ``Dynamic extent'' means that the binding -lasts as long as the activation of the construct that established it. + Each local binding has a certain @dfn{scope} and @dfn{extent}. +@dfn{Scope} refers to @emph{where} in the textual source code the +binding can be accessed. @dfn{Extent} refers to @emph{when}, as the +program is executing, the binding exists. - The combination of dynamic extent and indefinite scope is called -@dfn{dynamic scoping}. By contrast, most programming languages use -@dfn{lexical scoping}, in which references to a local variable must be -located textually within the function or block that binds the variable. -Emacs can also support lexical scoping, upon request (@pxref{Lexical -Binding}). +@cindex dynamic binding +@cindex indefinite scope +@cindex dynamic extent + By default, the local bindings that Emacs creates are @dfn{dynamic +bindings}. Such a binding has @dfn{indefinite scope}, meaning that +any part of the program can potentially access the variable binding. +It also has @dfn{dynamic extent}, meaning that the binding lasts only +while the binding construct (such as the body of a @code{let} form) is +being executed. -@cindex CL note---special variables -@quotation -@b{Common Lisp note:} Variables declared ``special'' in Common Lisp are -dynamically scoped, like all variables in Emacs Lisp. -@end quotation +@cindex lexical binding +@cindex lexical scope +@cindex indefinite extent + Emacs can optionally create @dfn{lexical bindings}. A lexical +binding has @dfn{lexical scope}, meaning that any reference to the +variable must be located textually within the binding construct. It +also has @dfn{indefinite extent}, meaning that under some +circumstances the binding can live on even after the binding construct +has finished executing, by means of special objects called +@dfn{closures}. + + The following subsections describe dynamic binding and lexical +binding in greater detail, and how to enable lexical binding in Emacs +Lisp programs. @menu -* Scope:: Scope means where in the program a value is visible. - Comparison with other languages. -* Extent:: Extent means how long in time a value exists. -* Impl of Scope:: Two ways to implement dynamic scoping. -* Using Scoping:: How to use dynamic scoping carefully and avoid problems. -* Lexical Binding:: Use of lexical scoping. +* Dynamic Binding:: The default for binding local variables in Emacs. +* Dynamic Binding Tips:: Avoiding problems with dynamic binding. +* Lexical Binding:: A different type of local variable binding. +* Using Lexical Binding:: How to enable lexical binding. @end menu -@node Scope -@subsection Scope +@node Dynamic Binding +@subsection Dynamic Binding - Emacs Lisp uses @dfn{indefinite scope} for local variable bindings. -This means that any function anywhere in the program text might access a -given binding of a variable. Consider the following function -definitions: + By default, the local variable bindings made by Emacs are dynamic +bindings. When a variable is dynamically bound, its current binding +at any point in the execution of the Lisp program is simply the most +recently-created dynamic local binding for that symbol, or the global +binding if there is no such local binding. + + Dynamic bindings have indefinite scope and dynamic extent, as shown +by the following example: @example @group -(defun binder (x) ; @r{@code{x} is bound in @code{binder}.} - (foo 5)) ; @r{@code{foo} is some other function.} +(defvar x -99) ; @r{@code{x} receives an initial value of -99.} + +(defun getx () + x) ; @r{@code{x} is used ``free'' in this function.} + +(let ((x 1)) ; @r{@code{x} is dynamically bound.} + (getx)) + @result{} 1 + +;; @r{After the @code{let} form finishes, @code{x} reverts to its} +;; @r{previous value, which is -99.} + +(getx) + @result{} -99 @end group - -@group -(defun user () ; @r{@code{x} is used ``free'' in @code{user}.} - (list x)) -@end group -@end example - - In a lexically scoped language, the binding of @code{x} in -@code{binder} would never be accessible in @code{user}, because -@code{user} is not textually contained within the function -@code{binder}. However, in dynamically-scoped Emacs Lisp, @code{user} -may or may not refer to the binding of @code{x} established in -@code{binder}, depending on the circumstances: - -@itemize @bullet -@item -If we call @code{user} directly without calling @code{binder} at all, -then whatever binding of @code{x} is found, it cannot come from -@code{binder}. - -@item -If we define @code{foo} as follows and then call @code{binder}, then the -binding made in @code{binder} will be seen in @code{user}: - -@example -@group -(defun foo (lose) - (user)) -@end group -@end example - -@item -However, if we define @code{foo} as follows and then call @code{binder}, -then the binding made in @code{binder} @emph{will not} be seen in -@code{user}: - -@example -(defun foo (x) - (user)) @end example @noindent -Here, when @code{foo} is called by @code{binder}, it binds @code{x}. -(The binding in @code{foo} is said to @dfn{shadow} the one made in -@code{binder}.) Therefore, @code{user} will access the @code{x} bound -by @code{foo} instead of the one bound by @code{binder}. -@end itemize +The function @code{getx} refers to @code{x}. This is a ``free'' +reference, in the sense that there is no binding for @code{x} within +that @code{defun} construct itself. When we call @code{getx} from +within a @code{let} form in which @code{x} is (dynamically) bound, it +retrieves the local value of @code{x} (i.e.@: 1). But when we call +@code{getx} outside the @code{let} form, it retrieves the global value +of @code{x} (i.e.@: -99). -Emacs Lisp used dynamic scoping by default because simple implementations of -lexical scoping are slow. In addition, every Lisp system needs to offer -dynamic scoping at least as an option; if lexical scoping is the norm, there -must be a way to specify dynamic scoping instead for a particular variable. -Nowadays, Emacs offers both, but the default is still to use exclusively -dynamic scoping. - -@node Extent -@subsection Extent - - @dfn{Extent} refers to the time during program execution that a -variable name is valid. In Emacs Lisp, a variable is valid only while -the form that bound it is executing. This is called @dfn{dynamic -extent}. ``Local'' or ``automatic'' variables in most languages, -including C and Pascal, have dynamic extent. - - One alternative to dynamic extent is @dfn{indefinite extent}. This -means that a variable binding can live on past the exit from the form -that made the binding. Common Lisp and Scheme, for example, support -this, but Emacs Lisp does not. - - To illustrate this, the function below, @code{make-add}, returns a -function that purports to add @var{n} to its own argument @var{m}. This -would work in Common Lisp, but it does not do the job in Emacs Lisp, -because after the call to @code{make-add} exits, the variable @code{n} -is no longer bound to the actual argument 2. + Here is another example, which illustrates setting a dynamically +bound variable using @code{setq}: @example -(defun make-add (n) - (function (lambda (m) (+ n m)))) ; @r{Return a function.} - @result{} make-add -(fset 'add2 (make-add 2)) ; @r{Define function @code{add2}} - ; @r{with @code{(make-add 2)}.} - @result{} (lambda (m) (+ n m)) -(add2 4) ; @r{Try to add 2 to 4.} -@error{} Symbol's value as variable is void: n +@group +(defvar x -99) ; @r{@code{x} receives an initial value of -99.} + +(defun addx () + (setq x (1+ x))) ; @r{Add 1 to @code{x} and return its new value.} + +(let ((x 1)) + (addx) + (addx)) + @result{} 3 ; @r{The two @code{addx} calls add to @code{x} twice.} + +;; @r{After the @code{let} form finishes, @code{x} reverts to its} +;; @r{previous value, which is -99.} + +(addx) + @result{} -98 +@end group @end example -@cindex closures not available - Some Lisp dialects have ``closures,'' objects that are like functions -but record additional variable bindings. Emacs Lisp does not have -closures. + Dynamic binding is implemented in Emacs Lisp in a simple way. Each +symbol has a value cell, which specifies its current dynamic value (or +absence of value). @xref{Symbol Components}. When a symbol is given +a dynamic local binding, Emacs records the contents of the value cell +(or absence thereof) in a stack, and stores the new local value in the +value cell. When the binding construct finishes executing, Emacs pops +the old value off the stack, and puts it in the value cell. -@node Impl of Scope -@subsection Implementation of Dynamic Scoping -@cindex deep binding +@node Dynamic Binding Tips +@subsection Proper Use of Dynamic Binding - A simple sample implementation (which is not how Emacs Lisp actually -works) may help you understand dynamic binding. This technique is -called @dfn{deep binding} and was used in early Lisp systems. - - Suppose there is a stack of bindings, which are variable-value pairs. -At entry to a function or to a @code{let} form, we can push bindings -onto the stack for the arguments or local variables created there. We -can pop those bindings from the stack at exit from the binding -construct. - - We can find the value of a variable by searching the stack from top to -bottom for a binding for that variable; the value from that binding is -the value of the variable. To set the variable, we search for the -current binding, then store the new value into that binding. - - As you can see, a function's bindings remain in effect as long as it -continues execution, even during its calls to other functions. That is -why we say the extent of the binding is dynamic. And any other function -can refer to the bindings, if it uses the same variables while the -bindings are in effect. That is why we say the scope is indefinite. - -@cindex shallow binding - The actual implementation of variable scoping in GNU Emacs Lisp uses a -technique called @dfn{shallow binding}. Each variable has a standard -place in which its current value is always found---the value cell of the -symbol. - - In shallow binding, setting the variable works by storing a value in -the value cell. Creating a new binding works by pushing the old value -(belonging to a previous binding) onto a stack, and storing the new -local value in the value cell. Eliminating a binding works by popping -the old value off the stack, into the value cell. - - We use shallow binding because it has the same results as deep -binding, but runs faster, since there is never a need to search for a -binding. - -@node Using Scoping -@subsection Proper Use of Dynamic Scoping - - Binding a variable in one function and using it in another is a -powerful technique, but if used without restraint, it can make programs -hard to understand. There are two clean ways to use this technique: + Dynamic binding is a powerful feature, as it allows programs to +refer to variables that are not defined within their local textual +scope. However, if used without restraint, this can also make +programs hard to understand. There are two clean ways to use this +technique: @itemize @bullet @item -Use or bind the variable only in a few related functions, written close -together in one file. Such a variable is used for communication within -one program. - -You should write comments to inform other programmers that they can see -all uses of the variable before them, and to advise them not to add uses -elsewhere. +If a variable has no global definition, use it as a local variable +only within a binding construct, e.g.@: the body of the @code{let} +form where the variable was bound, or the body of the function for an +argument variable. If this convention is followed consistently +throughout a program, the value of the variable will not affect, nor +be affected by, any uses of the same variable symbol elsewhere in the +program. @item -Give the variable a well-defined, documented meaning, and make all -appropriate functions refer to it (but not bind it or set it) wherever -that meaning is relevant. For example, the variable -@code{case-fold-search} is defined as ``non-@code{nil} means ignore case -when searching''; various search and replace functions refer to it -directly or through their subroutines, but do not bind or set it. +Otherwise, define the variable with @code{defvar}, @code{defconst}, or +@code{defcustom}. @xref{Defining Variables}. Usually, the definition +should be at top-level in an Emacs Lisp file. As far as possible, it +should include a documentation string which explains the meaning and +purpose of the variable. You should also choose the variable's name +to avoid name conflicts (@pxref{Coding Conventions}). -Then you can bind the variable in other programs, knowing reliably what -the effect will be. +Then you can bind the variable anywhere in a program, knowing reliably +what the effect will be. Wherever you encounter the variable, it will +be easy to refer back to the definition, e.g.@: via the @kbd{C-h v} +command (provided the variable definition has been loaded into Emacs). +@xref{Name Help,,, emacs, The GNU Emacs Manual}. + +For example, it is common to use local bindings for customizable +variables like @code{case-fold-search}: + +@example +@group +(defun search-for-abc () + "Search for the string \"abc\", ignoring case differences." + (let ((case-fold-search nil)) + (re-search-forward "abc"))) +@end group +@end example @end itemize - In either case, you should define the variable with @code{defvar}. -This helps other people understand your program by telling them to look -for inter-function usage. It also avoids a warning from the byte -compiler. Choose the variable's name to avoid name conflicts---don't -use short names like @code{x}. - - @node Lexical Binding -@subsection Use of Lexical Scoping +@subsection Lexical Binding -Emacs Lisp can be evaluated in two different modes: in dynamic binding -mode or lexical binding mode. In dynamic binding mode, all local -variables use dynamic scoping, whereas in lexical binding mode -variables that have been declared @dfn{special} (i.e., declared with -@code{defvar}, @code{defcustom} or @code{defconst}) use dynamic -scoping and all others use lexical scoping. +Optionally, you can create lexical bindings in Emacs Lisp. A +lexically bound variable has @dfn{lexical scope}, meaning that any +reference to the variable must be located textually within the binding +construct. + + Here is an example +@iftex +(see the next subsection, for how to actually enable lexical binding): +@end iftex +@ifnottex +(@pxref{Using Lexical Binding}, for how to actually enable lexical binding): +@end ifnottex + +@example +@group +(let ((x 1)) ; @r{@code{x} is lexically bound.} + (+ x 3)) + @result{} 4 + +(defun getx () + x) ; @r{@code{x} is used ``free'' in this function.} + +(let ((x 1)) ; @r{@code{x} is lexically bound.} + (getx)) +@error{} Symbol's value as variable is void: x +@end group +@end example + +@noindent +Here, the variable @code{x} has no global value. When it is lexically +bound within a @code{let} form, it can be used in the textual confines +of that @code{let} form. But it can @emph{not} be used from within a +@code{getx} function called from the @code{let} form, since the +function definition of @code{getx} occurs outside the @code{let} form +itself. + +@cindex lexical environment + Here is how lexical binding works. Each binding construct defines a +@dfn{lexical environment}, specifying the symbols that are bound +within the construct and their local values. When the Lisp evaluator +wants the current value of a variable, it looks first in the lexical +environment; if the variable is not specified in there, it looks in +the symbol's value cell, where the dynamic value is stored. + +@cindex closures + Lexical bindings have indefinite extent. Even after a binding +construct has finished executing, its lexical environment can be +``kept around'' in Lisp objects called @dfn{closures}. A closure is +created when you create a named or anonymous function with lexical +binding enabled. @xref{Closures}, for details. + + When a closure is called as a function, any lexical variable +references within its definition use the retained lexical environment. +Here is an example: + +@example +(defvar my-ticker nil) ; @r{We will use this dynamically bound} + ; @r{variable to store a closure.} + +(let ((x 0)) ; @r{@code{x} is lexically bound.} + (setq my-ticker (lambda () + (setq x (1+ x))))) + @result{} (closure ((x . 0) t) () + (1+ x)) + +(funcall my-ticker) + @result{} 1 + +(funcall my-ticker) + @result{} 2 + +(funcall my-ticker) + @result{} 3 + +x ; @r{Note that @code{x} has no global value.} +@error{} Symbol's value as variable is void: x +@end example + +@noindent +The @code{let} binding defines a lexical environment in which the +variable @code{x} is locally bound to 0. Within this binding +construct, we define a lambda expression which increments @code{x} by +one and returns the incremented value. This lambda expression is +automatically turned into a closure, in which the lexical environment +lives on even after the @code{let} binding construct has exited. Each +time we evaluate the closure, it increments @code{x}, using the +binding of @code{x} in that lexical environment. + + Note that functions like @code{symbol-value}, @code{boundp}, and +@code{set} only retrieve or modify a variable's dynamic binding +(i.e.@: the contents of its symbol's value cell). Also, the code in +the body of a @code{defun} or @code{defmacro} cannot refer to +surrounding lexical variables. + + Currently, lexical binding is not much used within the Emacs +sources. However, we expect its importance to increase in the future. +Lexical binding opens up a lot more opportunities for optimization, so +Emacs Lisp code that makes use of lexical binding is likely to run +faster in future Emacs versions. Such code is also much more friendly +to concurrency, which we want to add to Emacs in the near future. + +@node Using Lexical Binding +@subsection Using Lexical Binding + + When loading an Emacs Lisp file or evaluating a Lisp buffer, lexical +binding is enabled if the buffer-local variable @code{lexical-binding} +is non-@code{nil}: @defvar lexical-binding -When non-nil, evaluation of Lisp code uses lexical scoping for non-special -local variables instead of dynamic scoping. If nil, dynamic scoping is used -for all local variables. This variable is typically set for a whole Elisp file -via file local variables (@pxref{File Local Variables}). +If this buffer-local variable is non-@code{nil}, Emacs Lisp files and +buffers are evaluated using lexical binding instead of dynamic +binding. (However, special variables are still dynamically bound; see +below.) If @code{nil}, dynamic binding is used for all local +variables. This variable is typically set for a whole Emacs Lisp +file, as a file local variable (@pxref{File Local Variables}). +Note that unlike other such variables, this one must be set in the +first line of a file. @end defvar +@noindent +When evaluating Emacs Lisp code directly using an @code{eval} call, +lexical binding is enabled if the @var{lexical} argument to +@code{eval} is non-@code{nil}. @xref{Eval}. + +@cindex special variables + Even when lexical binding is enabled, certain variables will +continue to be dynamically bound. These are called @dfn{special +variables}. Every variable that has been defined with @code{defvar}, +@code{defcustom} or @code{defconst} is a special variable +(@pxref{Defining Variables}). All other variables are subject to +lexical binding. + @defun special-variable-p SYMBOL -Return whether SYMBOL has been declared as a special variable, via -@code{defvar} or @code{defconst}. +This function returns non-@code{nil} if @var{symbol} is a special +variable (i.e.@: it has a @code{defvar}, @code{defcustom}, or +@code{defconst} variable definition). Otherwise, the return value is +@code{nil}. @end defun -The use of a special variable as a formal argument in a function is generally -discouraged and its behavior in lexical binding mode is unspecified (it may use -lexical scoping sometimes and dynamic scoping other times). + The use of a special variable as a formal argument in a function is +discouraged. Doing so gives rise to unspecified behavior when lexical +binding mode is enabled (it may use lexical binding sometimes, and +dynamic binding other times). -Functions like @code{symbol-value}, @code{boundp}, or @code{set} only know -about dynamically scoped variables, so you cannot get the value of a lexical -variable via @code{symbol-value} and neither can you change it via @code{set}. -Another particularity is that code in the body of a @code{defun} or -@code{defmacro} cannot refer to surrounding lexical variables. + Converting an Emacs Lisp program to lexical binding is pretty easy. +First, add a file-local variable setting of @code{lexical-binding} to +@code{t} in the Emacs Lisp source file. Second, check that every +variable in the program which needs to be dynamically bound has a +variable definition, so that it is not inadvertently bound lexically. -Evaluation of a @code{lambda} expression in lexical binding mode will not just -return that lambda expression unchanged, as in the dynamic binding case, but -will instead construct a new object that remembers the current lexical -environment in which that lambda expression was defined, so that the function -body can later be evaluated in the proper context. Those objects are called -@dfn{closures}. They are also functions, in the sense that they are accepted -by @code{funcall}, and they are represented by a cons cell whose @code{car} is -the symbol @code{closure}. + A simple way to find out which variables need a variable definition +is to byte-compile the source file. @xref{Byte Compilation}. If a +non-special variable is used outside of a @code{let} form, the +byte-compiler will warn about reference or assignment to a ``free +variable''. If a non-special variable is bound but not used within a +@code{let} form, the byte-compiler will warn about an ``unused lexical +variable''. The byte-compiler will also issue a warning if you use a +special variable as a function argument. -@menu -* Converting to Lexical Binding:: How to start using lexical scoping -@end menu - -@node Converting to Lexical Binding -@subsubsection Converting a package to use lexical scoping - -Lexical scoping, as currently implemented, does not bring many significant -benefits, unless you are a seasoned functional programmer addicted to -higher-order functions. But its importance will increase in the future: -lexical scoping opens up a lot more opportunities for optimization, so -lexically scoped code is likely to run faster in future Emacs versions, and it -is much more friendly to concurrency, which we want to add in the near future. - -Converting a package to lexical binding is usually pretty easy and should not -break backward compatibility: just add a file-local variable setting -@code{lexical-binding} to @code{t} and add declarations of the form -@code{(defvar @var{VAR})} for every variable which still needs to use -dynamic scoping. - -To find which variables need this declaration, the simplest solution is to -check the byte-compiler's warnings. The byte-compiler will usually find those -variables either because they are used outside of a let-binding (leading to -warnings about reference or assignment to ``free variable @var{VAR}'') or -because they are let-bound but not used within the let-binding (leading to -warnings about ``unused lexical variable @var{VAR}''). - -In cases where a dynamically scoped variable was bound as a function argument, -you will also need to move this binding to a @code{let}. These cases are also -flagged by the byte-compiler. - -To silence byte-compiler warnings about unused variables, just use a variable -name that start with an underscore, which the byte-compiler interpret as an -indication that this is a variable known not to be used. - -In most cases, the resulting code will then work with either setting of -@code{lexical-binding}, so it can still be used with older Emacsen (which will -simply ignore the @code{lexical-binding} variable setting). + (To silence byte-compiler warnings about unused variables, just use +a variable name that start with an underscore. The byte-compiler +interprets this as an indication that this is a variable known not to +be used.) @node Buffer-Local Variables @section Buffer-Local Variables @@ -1279,7 +1191,8 @@ foo @result{} 'a @end group @end example - Note that references to @code{foo} in @var{body} access the +@noindent +Note that references to @code{foo} in @var{body} access the buffer-local binding of buffer @samp{b}. When a file specifies local variable values, these become buffer-local @@ -1404,11 +1317,12 @@ value (@pxref{Default Value}) of @var{variable} instead. @defun buffer-local-variables &optional buffer This function returns a list describing the buffer-local variables in -buffer @var{buffer}. (If @var{buffer} is omitted, the current buffer is -used.) It returns an association list (@pxref{Association Lists}) in -which each element contains one buffer-local variable and its value. -However, when a variable's buffer-local binding in @var{buffer} is void, -then the variable appears directly in the resulting list. +buffer @var{buffer}. (If @var{buffer} is omitted, the current buffer +is used.) Normally, each list element has the form +@w{@code{(@var{sym} . @var{val})}}, where @var{sym} is a buffer-local +variable (a symbol) and @var{val} is its buffer-local value. But when +a variable's buffer-local binding in @var{buffer} is void, its list +element is just @var{sym}. @example @group @@ -1660,6 +1574,13 @@ Query (once) about all the variables. @end table @end defopt +@defvar inhibit-local-variables-regexps +This is a list of regular expressions. If a file has a name +matching an element of this list, then it is not scanned for +any form of file-local variable. For examples of why you might want +to use this, @pxref{Auto Major Mode}. +@end defvar + @defun hack-local-variables &optional mode-only This function parses, and binds or evaluates as appropriate, any local variables specified by the contents of the current buffer. The variable @@ -1715,6 +1636,11 @@ For boolean-valued variables that are safe, use @code{booleanp} as the property value. Lambda expressions should be quoted so that @code{describe-variable} can display the predicate. + When defining a user option using @code{defcustom}, you can set its +@code{safe-local-variable} property by adding the arguments +@code{:safe @var{function}} to @code{defcustom} (@pxref{Variable +Definitions}). + @defopt safe-local-variable-values This variable provides another way to mark some variable values as safe. It is a list of cons cells @code{(@var{var} . @var{val})}, @@ -1734,28 +1660,31 @@ the value @var{val}, based on the above criteria. @end defun @c @cindex risky local variable Duplicates risky-local-variable - Some variables are considered @dfn{risky}. A variable whose name -ends in any of @samp{-command}, @samp{-frame-alist}, @samp{-function}, + Some variables are considered @dfn{risky}. If a variable is risky, +it is never entered automatically into +@code{safe-local-variable-values}; Emacs always queries before setting +a risky variable, unless the user explicitly allows a value by +customizing @code{safe-local-variable-values} directly. + + Any variable whose name has a non-@code{nil} +@code{risky-local-variable} property is considered risky. When you +define a user option using @code{defcustom}, you can set its +@code{risky-local-variable} property by adding the arguments +@code{:risky @var{value}} to @code{defcustom} (@pxref{Variable +Definitions}). In addition, any variable whose name ends in any of +@samp{-command}, @samp{-frame-alist}, @samp{-function}, @samp{-functions}, @samp{-hook}, @samp{-hooks}, @samp{-form}, @samp{-forms}, @samp{-map}, @samp{-map-alist}, @samp{-mode-alist}, -@samp{-program}, or @samp{-predicate} is considered risky. The -variables @samp{font-lock-keywords}, @samp{font-lock-keywords} -followed by a digit, and @samp{font-lock-syntactic-keywords} are also -considered risky. Finally, any variable whose name has a -non-@code{nil} @code{risky-local-variable} property is considered -risky. +@samp{-program}, or @samp{-predicate} is automatically considered +risky. The variables @samp{font-lock-keywords}, +@samp{font-lock-keywords} followed by a digit, and +@samp{font-lock-syntactic-keywords} are also considered risky. @defun risky-local-variable-p sym This function returns non-@code{nil} if @var{sym} is a risky variable, based on the above criteria. @end defun - If a variable is risky, it will not be entered automatically into -@code{safe-local-variable-values} as described above. Therefore, -Emacs will always query before setting a risky variable, unless the -user explicitly allows the setting by customizing -@code{safe-local-variable-values} directly. - @defvar ignored-local-variables This variable holds a list of variables that should not be given local values by files. Any value specified for one of these variables is diff --git a/doc/lispref/vol1.texi b/doc/lispref/vol1.texi index 95f9f7f4d29..31055bd03fe 100644 --- a/doc/lispref/vol1.texi +++ b/doc/lispref/vol1.texi @@ -390,6 +390,7 @@ Evaluation * Forms:: How various sorts of objects are evaluated. * Quoting:: Avoiding evaluation (to put constants in the program). +* Backquote:: Easier construction of list structure. * Eval:: How to invoke the Lisp interpreter explicitly. Kinds of Forms @@ -478,6 +479,7 @@ Functions * Anonymous Functions:: Lambda expressions are functions with no names. * Function Cells:: Accessing or setting the function definition of a symbol. +* Closures:: Functions that enclose a lexical environment. * Obsolete Functions:: Declaring functions obsolete. * Inline Functions:: Defining functions that the compiler will open code. @@ -500,7 +502,6 @@ Macros * Expansion:: How, when and why macros are expanded. * Compiling Macros:: How macros are expanded by the compiler. * Defining Macros:: How to write a macro definition. -* Backquote:: Easier construction of list structure. * Problems with Macros:: Don't evaluate the macro arguments too many times. Don't hide the user's variables. * Indenting Macros:: Specifying how to indent macro calls. @@ -567,7 +568,6 @@ Advising Emacs Lisp Functions * Preactivation:: Preactivation is a way of speeding up the loading of compiled advice. * Argument Access in Advice:: How advice can access the function's arguments. -* Advising Primitives:: Accessing arguments when advising a primitive. * Combined Definition:: How advice is implemented. Debugging Lisp Programs @@ -1081,7 +1081,7 @@ Text * Registers:: How registers are implemented. Accessing the text or position stored in a register. * Base 64:: Conversion to or from base 64 encoding. -* MD5 Checksum:: Compute the MD5 "message digest"/"checksum". +* Checksum/Hash:: Computing "message digests"/"checksums"/"hashes". * Atomic Changes:: Installing several buffer changes "atomically". * Change Hooks:: Supplying functions to be run when text is changed. @@ -1372,6 +1372,7 @@ Images * Defining Images:: Convenient ways to define an image for later use. * Showing Images:: Convenient ways to display an image once it is defined. +* Animated Images:: Some image formats can be animated. * Image Cache:: Internal mechanisms of image display. Buttons diff --git a/doc/lispref/vol2.texi b/doc/lispref/vol2.texi index 08ea022f6a7..92f049135a1 100644 --- a/doc/lispref/vol2.texi +++ b/doc/lispref/vol2.texi @@ -389,6 +389,7 @@ Evaluation * Forms:: How various sorts of objects are evaluated. * Quoting:: Avoiding evaluation (to put constants in the program). +* Backquote:: Easier construction of list structure. * Eval:: How to invoke the Lisp interpreter explicitly. Kinds of Forms @@ -477,6 +478,7 @@ Functions * Anonymous Functions:: Lambda expressions are functions with no names. * Function Cells:: Accessing or setting the function definition of a symbol. +* Closures:: Functions that enclose a lexical environment. * Obsolete Functions:: Declaring functions obsolete. * Inline Functions:: Defining functions that the compiler will open code. @@ -499,7 +501,6 @@ Macros * Expansion:: How, when and why macros are expanded. * Compiling Macros:: How macros are expanded by the compiler. * Defining Macros:: How to write a macro definition. -* Backquote:: Easier construction of list structure. * Problems with Macros:: Don't evaluate the macro arguments too many times. Don't hide the user's variables. * Indenting Macros:: Specifying how to indent macro calls. @@ -566,7 +567,6 @@ Advising Emacs Lisp Functions * Preactivation:: Preactivation is a way of speeding up the loading of compiled advice. * Argument Access in Advice:: How advice can access the function's arguments. -* Advising Primitives:: Accessing arguments when advising a primitive. * Combined Definition:: How advice is implemented. Debugging Lisp Programs @@ -1080,7 +1080,7 @@ Text * Registers:: How registers are implemented. Accessing the text or position stored in a register. * Base 64:: Conversion to or from base 64 encoding. -* MD5 Checksum:: Compute the MD5 "message digest"/"checksum". +* Checksum/Hash:: Computing "message digests"/"checksums"/"hashes". * Atomic Changes:: Installing several buffer changes "atomically". * Change Hooks:: Supplying functions to be run when text is changed. @@ -1371,6 +1371,7 @@ Images * Defining Images:: Convenient ways to define an image for later use. * Showing Images:: Convenient ways to display an image once it is defined. +* Animated Images:: Some image formats can be animated. * Image Cache:: Internal mechanisms of image display. Buttons diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi index 1bff30e45e1..98263f4093c 100644 --- a/doc/lispref/windows.texi +++ b/doc/lispref/windows.texi @@ -479,7 +479,7 @@ partially-visible line at the bottom of the text area is not counted. @end defun For compatibility with previous versions of Emacs, -@code{window-height} is an alias for @code{window-body-height}, and +@code{window-height} is an alias for @code{window-total-height}, and @code{window-width} is an alias for @code{window-body-width}. These aliases are considered obsolete and will be removed in the future. @@ -3104,9 +3104,9 @@ window configuration; see @ref{Frame Configurations}. @defun current-window-configuration &optional frame This function returns a new object representing @var{frame}'s current window configuration. The default for @var{frame} is the selected -frame. This function saves copies of window parameters listed by the -variable @code{window-persistent-parameters}, see @ref{Window -Parameters} for details. +frame. The variable @code{window-persistent-parameters} specifies +whether and which window parameters are saved by this function, see +@ref{Window Parameters} for details. @end defun @defun set-window-configuration configuration @@ -3214,27 +3214,25 @@ to clone the state of a frame into an arbitrary live window (@code{set-window-configuration} effectively clones the windows of a frame into the root window of that very frame only). -@defun window-state-get &optional window ignore +@defun window-state-get &optional window writable This function returns the state of @var{window} as a Lisp object. The argument @var{window} can be any window and defaults to the root window of the selected frame. -If the optional argument @var{ignore} is non-@code{nil}, this means to +If the optional argument @var{writable} is non-@code{nil}, this means to not use markers for sampling positions like @code{window-point} or @code{window-start}. This argument should be non-@code{nil} when the -state shall be written on disk and read back in another session. +state shall be written to disk and read back in another session. -The variable @code{window-persistent-parameters} specifies whether and -which window parameters are saved by this function, see @ref{Window -Parameters} for details. +Together, the argument @var{writable} and the variable +@code{window-persistent-parameters} specify which window parameters are +saved by this function, see @ref{Window Parameters} for details. @end defun -The value returned by @code{window-state-get} can be converted, using -one of the functions defined by Desktop Save Mode (@pxref{Desktop Save -Mode}), to an object that can be written to a file. Such objects can be -read back and converted to a Lisp object representing the state of the -window. That Lisp object can be used as argument for the following -function in order to restore the state window in another window. +The value returned by @code{window-state-get} can be used in the same +session to make a clone of a window in another window. It can be also +written to disk and read back in another session. In either case, use +the function described next 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 @@ -3281,10 +3279,10 @@ states of windows (@pxref{Window Configurations}) do not care about window parameters. This means, that when you change the value of a parameter within the body of a @code{save-window-excursion}, the previous value is not restored upon exit of that macro. It also means -that when you clone via @code{window-state-put} a window state saved -earlier by @code{window-state-get}, the cloned windows come up with no -parameters at all. The following variable allows to override the -standard behavior. +that when you restore via @code{window-state-put} a window state saved +earlier by @code{window-state-get}, all cloned windows have their +parameters reset to @code{nil}. The following variable allows to +override the standard behavior. @defvar window-persistent-parameters This variable is an alist specifying which parameters get saved by @@ -3293,32 +3291,25 @@ subsequently restored by @code{set-window-configuration} and @code{window-state-put}, see @ref{Window Configurations}. The @sc{car} of each entry of this alist is the symbol specifying the -parameter. The @sc{cdr} must be one of the following: +parameter. The @sc{cdr} should be one of the following: @table @asis -@item @code{state} -This value means the parameter is saved by @code{window-state-get} -provided its @var{ignore} argument is @code{nil}. The function -@code{current-window-configuration} does not save this parameter. - @item @code{nil} -This value specifies that the parameter is saved by -@code{current-window-configuration} and, provided its @var{ignore} -argument is @code{nil}, by @code{window-state-get}. +This value means the parameter is neither saved by +@code{window-state-get} nor by @code{current-window-configuration}. @item @code{t} +This value specifies that the parameter is saved by +@code{current-window-configuration} and, provided its @var{writable} +argument is @code{nil}, by @code{window-state-get}. + +@item @code{writable} This means that the parameter is saved unconditionally by both @code{current-window-configuration} and @code{window-state-get}. This value should not be used for parameters whose values do not have a read syntax. Otherwise, invoking @code{window-state-put} in another session may fail with an @code{invalid-read-syntax} error. @end table - -Parameters that have been saved are restored to their previous values by -@code{set-window-configuration} respectively are installed by -@code{window-state-put}. Parameters that have not been saved are left -alone by @code{set-window-configuration} respectively are not installed -by @code{window-state-put}. @end defvar Some functions, notably @code{delete-window}, diff --git a/doc/man/emacs.1 b/doc/man/emacs.1 index 437d8cbad3b..c2408f5e129 100644 --- a/doc/man/emacs.1 +++ b/doc/man/emacs.1 @@ -1,5 +1,5 @@ .\" See section COPYING for copyright and redistribution information. -.TH EMACS 1 "2007 April 13" "GNU Emacs 24.0.92" +.TH EMACS 1 "2007 April 13" "GNU Emacs 24.0.93" . . .SH NAME diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index adb5bbbd669..d287b340542 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,38 @@ +2012-02-10 Glenn Morris + + * url.texi (Retrieving URLs): Update url-retrieve arguments. + Mention url-queue-retrieve. + +2012-02-09 Glenn Morris + + * sem-user.texi (Semantic mode user commands): Typo fix. + + * info.texi (Create Info buffer): Mention info-display-manual. + +2012-02-07 Lars Ingebrigtsen + + * gnus.texi (Mail Source Specifiers): Add a pop3 via an SSH tunnel + example (modified from an example by Michael Albinus). + +2012-01-30 Philipp Haselwarter (tiny change) + + * gnus.texi (Agent Basics): Fix outdated description of + `gnus-agent-auto-agentize-methods'. + +2012-01-28 Andreas Schwab + + * cc-mode.texi: Always @defindex ss. + (Config Basics): Fix argument of @itemize. + (Macro Backslashes): Add @code around index entry. + +2012-01-23 Glenn Morris + + * pcl-cvs.texi (About PCL-CVS): Refer to vc-dir rather than vc-dired. + +2012-01-19 Eric Hanchrow + + * tramp.texi (File): Tweak wording for the `scpc' option. + 2012-01-06 Lars Magne Ingebrigtsen * gnus.texi (Group Parameters): Really note precedence. diff --git a/doc/misc/cc-mode.texi b/doc/misc/cc-mode.texi index e2730cc8b3b..c33bdbde9e4 100644 --- a/doc/misc/cc-mode.texi +++ b/doc/misc/cc-mode.texi @@ -147,10 +147,7 @@ CC Mode @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @comment Define an index for syntactic symbols. -@ifnottex @c In texi2dvi, the @defindex would create an empty cc-mode.ss - @c For Info, unlike tex, @syncodeindex needs a matching @defindex. @defindex ss -@end ifnottex @comment Combine key, syntactic symbol and concept indices into one. @syncodeindex ss cp @@ -2200,7 +2197,7 @@ method, ``Top-level commands or the customization interface''. If you make conflicting settings in several of these ways, the way that takes precedence is the one that appears latest in this list: -@itemize @asis +@itemize @w{} @item @table @asis @item Style @@ -6661,7 +6658,7 @@ these macros properly, see @ref{Macros with ;}. @node Macro Backslashes, Macros with ;, Custom Macros, Custom Macros @comment node-name, next, previous, up @section Customizing Macro Backslashes -@cindex #define +@cindex @code{#define} @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @ccmode{} provides some tools to help keep the line continuation diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi index 7728041c83b..865888a28e4 100644 --- a/doc/misc/gnus.texi +++ b/doc/misc/gnus.texi @@ -14751,6 +14751,18 @@ corresponding keywords. A script to be run before fetching the mail. The syntax is the same as the @code{:program} keyword. This can also be a function to be run. +One popular way to use this is to set up an SSH tunnel to access the +@acronym{POP} server. Here's an example: + +@lisp +(pop :server "127.0.0.1" + :port 1234 + :user "foo" + :password "secret" + :prescript + "nohup ssh -f -L 1234:pop.server:110 remote.host sleep 3600 &") +@end lisp + @item :postscript A script to be run after fetching the mail. The syntax is the same as the @code{:program} keyword. This can also be a function to be run. @@ -18236,8 +18248,7 @@ Agent. Go to the server buffer (@kbd{^} in the group buffer) and press @kbd{J a} on the server (or servers) that you wish to have covered by the Agent (@pxref{Server Agent Commands}), or @kbd{J r} on automatically added servers you do not wish to have covered by the Agent. By default, -all @code{nntp} and @code{nnimap} servers in @code{gnus-select-method} and -@code{gnus-secondary-select-methods} are agentized. +no servers are agentized. @item Decide on download policy. It's fairly simple once you decide whether @@ -19263,7 +19274,7 @@ to agentize remote back ends. The auto-agentizing has the same effect as running @kbd{J a} on the servers (@pxref{Server Agent Commands}). If the file exist, you must manage the servers manually by adding or removing them, this variable is only applicable the first time you -start Gnus. The default is @samp{(nntp nnimap)}. +start Gnus. The default is @samp{nil}. @end table diff --git a/doc/misc/info.texi b/doc/misc/info.texi index 7ce874d2941..3316e9883d8 100644 --- a/doc/misc/info.texi +++ b/doc/misc/info.texi @@ -1142,6 +1142,12 @@ 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. +@findex info-display-manual + If you have created many Info buffers in Emacs, you might find it +difficult to remember which buffer is showing which manual. You can +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 @section Emacs Info-mode Variables diff --git a/doc/misc/pcl-cvs.texi b/doc/misc/pcl-cvs.texi index 32d2114f5a0..92c309f5e98 100644 --- a/doc/misc/pcl-cvs.texi +++ b/doc/misc/pcl-cvs.texi @@ -6,8 +6,7 @@ @c %**end of header @copying -Copyright @copyright{} 1991-2012 -Free Software Foundation, Inc. +Copyright @copyright{} 1991-2012 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document @@ -136,10 +135,9 @@ Customization PCL-CVS is a front-end to CVS versions 1.9 and later. It concisely shows the present status of a checked out module in an Emacs buffer and provides single-key access to the most frequently used CVS -commands. -For Emacs users accustomed to VC, PCL-CVS can be thought of as a replacement -for VC-dired (@pxref{VC Directory Mode, , , emacs, The GNU -Emacs Manual}) specifically designed for CVS. +commands. Note that the @code{vc-dir} command (@pxref{VC Directory +Mode, , , emacs, The GNU Emacs Manual}) provides similar +functionality, but for several version control systems, including CVS. PCL-CVS was originally written many years ago by Per Cederqvist who proudly maintained it until January 1996, at which point he released the diff --git a/doc/misc/sem-user.texi b/doc/misc/sem-user.texi index 1984d69a695..e223f98d46a 100644 --- a/doc/misc/sem-user.texi +++ b/doc/misc/sem-user.texi @@ -176,7 +176,7 @@ Copy the current tag into a register kill it as well. This allows you to insert or jump to that tag with the usual register commands. @xref{Registers,,,emacs,Emacs manual}. -@item \C-c , @kbd{up} +@item C-c , @kbd{up} Transpose the current tag with the previous one (@code{senator-transpose-tags-up}). diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi index 41ba6689f13..7fbd11decd7 100644 --- a/doc/misc/tramp.texi +++ b/doc/misc/tramp.texi @@ -866,13 +866,22 @@ Newer versions of @option{ssh} (for example OpenSSH 4) offer an option @option{ControlMaster}. This allows @option{scp} to reuse an existing @option{ssh} channel, which increases performance. -Before you use this method, you shall check whether your @option{ssh} -implementation does support this option. Try from the command line +Before you use this method, you should check whether your @option{ssh} +implementation supports this option. Try from the command line @example -ssh localhost -o ControlMaster=yes +ssh localhost -o ControlMaster=yes /bin/true @end example +If that command succeeds silently, then you can use @option{scpc}; but +if it fails like + +@example +command-line: line 0: Bad configuration option: ControlMaster +@end example + +then you cannot use it. + This method supports the @samp{-p} argument. diff --git a/doc/misc/url.texi b/doc/misc/url.texi index 6464fba53b4..771430251b6 100644 --- a/doc/misc/url.texi +++ b/doc/misc/url.texi @@ -201,13 +201,25 @@ data. @var{url} is either a string or a parsed URL structure. Return info, or mailto URLs that need no further processing). @end defun -@defun url-retrieve url callback &optional cbargs +@defun url-retrieve url callback &optional cbargs silent no-cookies Retrieve @var{url} asynchronously and call @var{callback} with args @var{cbargs} when finished. The callback is called when the object has been completely retrieved, with the current buffer containing the object and any MIME headers associated with it. @var{url} is either a string or a parsed URL structure. Returns the buffer @var{url} will load into, or @code{nil} if the process has already completed. +If the optional argument @var{silent} is non-@code{nil}, suppress +progress messages. If the optional argument @var{no-cookies} is +non-@code{nil}, do not store or send cookies. +@end defun + +@vindex url-queue-parallel-processes +@vindex url-queue-timeout +@defun url-queue-retrieve url callback &optional cbargs silent no-cookies +This acts like the @code{url-retrieve} function, but with limits on +the degree of parallelism. The option @code{url-queue-parallel-processes} +controls the number of concurrent processes, and the option +@code{url-queue-timeout} sets a timeout in seconds. @end defun @node Supported URL Types diff --git a/etc/AUTHORS b/etc/AUTHORS index 0c86e2b199a..a0a32959420 100644 --- a/etc/AUTHORS +++ b/etc/AUTHORS @@ -90,7 +90,7 @@ Aleksei Gusev: changed progmodes/compile.el Alex Coventry: changed files.el Alex Harsanyi: changed soap-client.el emacs3.py soap-inspect.el - vc-hooks.el vc.el + vc-hooks.el vc.el xml.el Alex Ott: changed TUTORIAL.ru ru-refcard.tex ispell.el ru-refcard.ps @@ -195,9 +195,9 @@ Andreas Politz: changed editfns.c elp.el ido.el term.el Andreas Rottmann: changed emacsclient.1 emacsclient.c misc.texi server.el Andreas Schwab: changed Makefile.in configure.in lisp.h xdisp.c alloc.c - process.c coding.c files.el xterm.c editfns.c keyboard.c fns.c print.c - emacs.c eval.c fileio.c lread.c sysdep.c dired.el xfns.c buffer.c - and 571 other files + process.c coding.c files.el keyboard.c xterm.c editfns.c emacs.c fns.c + print.c eval.c fileio.c lread.c sysdep.c dired.el xfns.c buffer.c + and 573 other files Andreas Seltenreich: changed nnweb.el gnus.texi message.el gnus-sum.el gnus.el nnslashdot.el gnus-srvr.el gnus-util.el mm-url.el mm-uu.el @@ -253,9 +253,9 @@ Anna M. Bigatti: wrote cal-html.el Antoine Levitt: changed gnus-group.el gnus-sum.el message.texi ada-prj.el ange-ftp.el cus-edit.el dired-x.el ebnf2ps.el emerge.el erc-button.el - erc-track.el files.el find-file.el gnus-art.el gnus-uu.el gnus.el - gnus.texi message.el mh-funcs.el mh-mime.el printing.el - and 5 other files + erc-goodies.el erc-track.el files.el find-file.el gnus-art.el + gnus-uu.el gnus.el gnus.texi message.el mh-funcs.el mh-mime.el + and 7 other files Ari Roponen: changed atimer.c doc.c mule.texi startup.el time-date.el @@ -296,11 +296,11 @@ Barry Fishman: changed gnu-linux.h Bastien Guerry: wrote gnus-bookmark.el org-latex.el org-protocol.el and co-wrote org-bibtex.el org-list.el org-src.el -and changed org.el org-html.el org-agenda.el org-clock.el org-exp.el - org-capture.el org-timer.el org-export-latex.el org-table.el - org-publish.el org.texi org-ascii.el bookmark.el info.el ob.el - org-archive.el org-attach.el org-crypt.el org-gnus.el org-mobile.el - rmail.el and 20 other files +and changed org.el org-agenda.el org-html.el org-clock.el org-exp.el + org.texi org-table.el org-capture.el org-publish.el org-timer.el + org-export-latex.el org-archive.el ob.el org-ascii.el org-mobile.el + bookmark.el info.el org-attach.el org-colview.el org-crypt.el + org-eshell.el and 31 other files Ben A. Mesander: co-wrote erc-dcc.el @@ -332,7 +332,7 @@ and changed vc.el gnus-msg.el message.el diff-mode.el ffap.el nnimap.el Bernhard Herzog: changed vc-hg.el menu.c xsmfns.c Bernt Hansen: changed org-agenda.el org-clock.el org.el org-capture.el - org-indent.el + org-html.el org-indent.el org.texi Bill Atkins: changed wdired.el @@ -431,7 +431,7 @@ Brian Preble: changed abbrev.el apropos.el asm-mode.el awk-mode.el compare-w.el compile.el dabbrev.el debug.el diary.el diff.el dired.el doctex.el doctor.el ebuff-menu.el echistory.el and 129 other files -Brian Sniffen: changed gnus-draft.el +Brian Sniffen: changed gnus-draft.el mm-decode.el Brian T. Sniffen: changed imap.el @@ -469,7 +469,7 @@ and changed org-latex.el org.texi org-publish.el orgcard.tex org-export-latex.el org-colview-xemacs.el org-docbook.el org-attach.el org-mouse.el org-protocol.el org-mac-message.el org-wl.el org-crypt.el org-freemind.el idlw-rinfo.el org-exp-blocks.el org-habit.el org-mhe.el - org-plot.el reftex.texi ob.el and 24 other files + org-plot.el org-special-blocks.el reftex.texi and 24 other files Caveh Jalali: changed configure.in intel386.h sol2-4.h @@ -497,16 +497,17 @@ Chip Coldwell: changed font.c Chong Yidong: wrote compile-tests.el dichromacy-theme.el font-parse-tests.el redisplay-testsuite.el tabulated-list.el and co-wrote longlines.el tango-dark-theme.el tango-theme.el -and changed xdisp.c simple.el files.el display.texi frames.texi - cus-edit.el files.texi keyboard.c startup.el package.el custom.el - emacs.texi xterm.c subr.el text.texi faces.el image.c mouse.el - misc.texi progmodes/compile.el xfns.c and 830 other files +and changed xdisp.c simple.el display.texi files.el frames.texi + cus-edit.el files.texi keyboard.c startup.el custom.el package.el + text.texi emacs.texi misc.texi xterm.c faces.el subr.el image.c + mouse.el custom.texi progmodes/compile.el and 837 other files Chris Chase: co-wrote idlw-shell.el idlwave.el Chris Foote: changed progmodes/python.el Chris Gray: wrote org-special-blocks.el +and changed mm-decode.el Chris Hall: changed callproc.c frame.c @@ -544,7 +545,7 @@ Christian Lynbech: changed appt.el emacsserver.c tramp.el Christian Millour: changed shell.el -Christian Moe: changed org-bbdb.el +Christian Moe: changed org-bbdb.el org-html.el org-special-blocks.el Christian Neukirchen: changed mm-util.el @@ -573,10 +574,14 @@ Christoph Wedler: wrote antlr-mode.el and changed format.el gnus-art.el gnus-picon.el message.el register.el smiley.el texinfmt.el +Christophe Rhodes: changed org-exp.el + Christophe de Dinechin: co-wrote ns-win.el Christopher Allan Webber: changed gamegrid.el org-agenda.el tetris.el +Christopher Genovese: changed assoc.el + Christopher J. Madsen: wrote decipher.el and changed replace.el files.el ispell.el time.el @@ -660,7 +665,7 @@ and changed vc.el Makefile.in configure.in vc-hg.el vc-git.el vc-bzr.el Dan Rosenberg: changed movemail.c -Dani Moncayo: changed lists.texi +Dani Moncayo: changed lists.texi buffers.texi text.texi Daniel Brockman: changed cus-start.el format-spec.el ibuffer.el rcirc.el @@ -668,8 +673,8 @@ Daniel Clemente: changed generic-x.el org-html.el Daniel Colascione: co-wrote js.el and changed cmdproxy.c subr.el syntax.el DEBUG cc-engine.el cus-start.el - eval.c fns.c imenu.el keyboard.c lisp.h nxml-mode.el nxml-rap.el - nxml-util.el sh-script.el which-func.el + eval.c fns.c frames.texi imenu.el keyboard.c lisp.h nxml-mode.el + nxml-rap.el nxml-util.el sh-script.el which-func.el Daniel Dehennin: changed mml2015.el gnus-msg.el mm-decode.el @@ -699,7 +704,7 @@ Daniel Ortmann: changed paragraphs.el Daniel Pfeiffer: wrote conf-mode.el copyright.el executable.el sh-script.el skeleton.el two-column.el and co-wrote ada-stmt.el apropos.el progmodes/compile.el wyse50.el -and changed files.el make-mode.el buff-menu.el font-lock.el mpuz.el +and changed make-mode.el files.el buff-menu.el font-lock.el mpuz.el progmodes/grep.el sgml-mode.el autoinsert.el cperl-mode.el facemenu.el gomoku.el help.el imenu.el autoload.el autorevert.el bindings.el button.el cc-fonts.el cc-mode.el compilation.txt compile.el @@ -722,8 +727,8 @@ Darren Stalder: changed gnus-util.el Darrin B. Jewell: changed etags.c lisp.h -Dave Abrahams: changed gnus-registry.el gnus-sum.el gnus.texi nnimap.el - nnir.el nnmairix.el nnregistry.el +Dave Abrahams: changed gnus-sum.el org-agenda.el gnus-registry.el + gnus.texi nnimap.el nnir.el nnmairix.el nnregistry.el org-clock.el Dave Detlefs: co-wrote cc-align.el cc-cmds.el cc-defs.el cc-engine.el cc-langs.el cc-menus.el cc-mode.el cc-styles.el cc-vars.el @@ -749,6 +754,8 @@ David Abrahams: changed coding.c ediff-init.el mairix.el David Bakhash: wrote strokes.el +David Benjamin: changed xfns.c xterm.c xterm.h + David Burger: changed macros.el David Byers: changed minibuf.c @@ -762,11 +769,11 @@ David Edmondson: changed message.el gnus-cite.el imap.el mm-view.el mml2015.el nnfolder.el nnimap.el nnml.el David Engster: wrote mairix.el nnmairix.el -and changed gnus.texi registry.el gnus-msg.el insert.el +and changed gnus.texi insert.el registry.el gnus-msg.el analyze/complete.el base.el bovine-grammar.el cedet/srecode.el cpp-root.el custom.el db-find.el db-typecache.el db.el dictionary.el - display.texi document.el ede-grammar.el files.el generic.el - gnus-registry.el gnus-sum.el and 21 other files + display.texi document.el ede-grammar.el files.el filters.el generic.el + gnus-registry.el and 22 other files David Gillespie: wrote calc-aent.el calc-alg.el calc-arith.el calc-bin.el calc-comb.el calc-cplx.el calc-embed.el calc-ext.el calc-fin.el @@ -824,11 +831,11 @@ David M. Smith: wrote ielm.el and changed imenu.el pgg-def.el xterm.c David Maus: co-wrote org-wl.el -and changed org.el org-feed.el org-html.el org-agenda.el org-exp.el - org-gnus.el org-capture.el org.texi org-protocol.el org-macs.el - ob-haskell.el org-bibtex.el org-footnote.el org-id.el org-latex.el - org-list.el org-mhe.el org-mobile.el org-publish.el org-table.el ob.el - and 13 other files +and changed org.el org-agenda.el org-feed.el org-html.el org-macs.el + org-exp.el org.texi org-gnus.el org-capture.el org-protocol.el + org-publish.el ob-haskell.el ob.el org-bibtex.el org-clock.el + org-compat.el org-footnote.el org-id.el org-latex.el org-list.el + org-mhe.el and 18 other files David McCabe: changed lisp-mode.el @@ -859,9 +866,9 @@ and changed w32menu.c w32term.c close.png close.xpm empty.png empty.xpm David Reitter: wrote mailclient.el and changed nsterm.m nsfns.m ns-win.el nsfont.m Makefile.in cus-start.el - macos.texi menu-bar.el simple.el commands.h cus-edit.el easy-mmode.el - emacsbug.el emacsclient.c faces.el flyspell.el info.el keyboard.c - keymap.c macterm.c menu.c and 12 other files + macos.texi menu-bar.el nsmenu.m simple.el commands.h cus-edit.el + easy-mmode.el emacsbug.el emacsclient.c faces.el flyspell.el info.el + keyboard.c keymap.c macterm.c and 12 other files David Robinow: changed makefile.w32-in w32inevt.c @@ -971,10 +978,10 @@ Drake Wilson: changed emacsclient.c files.el misc.texi Drew Adams: wrote light-blue-theme.el and co-wrote color.el -and changed cus-edit.el dired.el faces.el isearch.el menu-bar.el mouse.el - bindings.el bookmark.el custom.el dired.texi etags.el files.el - finder.el frame.el help-fns.el help.el image-dired.el info.el - modes.texi msdog.texi pp.el and 5 other files +and changed cus-edit.el dired.el faces.el files.el isearch.el menu-bar.el + mouse.el ange-ftp.el bindings.el bookmark.el custom.el descr-text.el + dired.texi etags.el finder.el frame.el help-fns.el help.el + image-dired.el info.el modes.texi and 7 other files E. Jay Berkenbilt: changed b2m.c flyspell.el ispell.el unrmail.el whitespace.el window.h @@ -983,7 +990,7 @@ Ed L. Cashin: changed gnus-sum.el imap.el Ed Swarthout: changed hexl.el textmodes/table.el -Eduard Wiebe: changed browse-url.el dired.el flymake.texi footnote.el +Eduard Wiebe: changed dired.el browse-url.el flymake.texi footnote.el javascript.el korean.el locate.el mule-conf.el nxml-mode.texi objects.texi ps-print.el vc-rcs.el @@ -1022,14 +1029,14 @@ Eli Tziperman: wrote rmail-spam-filter.el Eli Zaretskii: wrote [bidirectional display in xdisp.c] bidi.c rxvt.el tty-colors.el and changed makefile.w32-in msdos.c xdisp.c Makefile.in files.el - config.bat fileio.c msdos.h simple.el mainmake.v2 sed1v2.inp info.el - display.texi rmail.el w32.c process.c pc-win.el startup.el dispextern.h - dispnew.c dired.c and 697 other files + config.bat fileio.c simple.el msdos.h info.el mainmake.v2 rmail.el + sed1v2.inp display.texi w32.c process.c pc-win.el dispnew.c startup.el + dispextern.h dired.c and 697 other files Elias Oltmanns: changed tls.el gnus-agent.el gnus-int.el gnus-srvr.el gnus.el -Elias Pipping: changed XDelAssoc.c XMakeAssoc.c +Elias Pipping: changed XDelAssoc.c XMakeAssoc.c shr.el Emanuele Giaquinta: changed configure.in rxvt.el charset.c etags.c fontset.c frame.el gnus-faq.texi loadup.el lread.c sh-script.el @@ -1060,7 +1067,8 @@ Eric Eide: changed gnus-xmas.el Eric Hanchrow: changed vc-git.el TUTORIAL.es abbrev.el autorevert.el cperl-mode.el delphi.el dired.el emacsclient.c env.el erc.el - frames.texi ibuf-ext.el ispell.el ldap.el make-dist + frames.texi ibuf-ext.el ispell.el ldap.el make-dist tramp.texi + window.el Éric Jacoboni: changed fr-refcard.tex @@ -1120,10 +1128,11 @@ Eric Schulte: wrote ob-C.el ob-asymptote.el ob-awk.el ob-calc.el ob-comint.el ob-css.el ob-ditaa.el ob-dot.el ob-emacs-lisp.el ob-eval.el ob-gnuplot.el ob-haskell.el ob-java.el ob-js.el ob-keys.el ob-latex.el ob-ocaml.el ob-org.el ob-ruby.el ob-sass.el ob-scheme.el - ob-sh.el ob-sql.el ob-sqlite.el ob-table.el ob-tangle.el + ob-sh.el ob-shen.el ob-sql.el ob-sqlite.el ob-table.el ob-tangle.el org-exp-blocks.el org-plot.el -and co-wrote ob-R.el ob-clojure.el ob-exp.el ob-lisp.el ob-lob.el - ob-maxima.el ob-perl.el ob-python.el ob-ref.el ob.el org-bibtex.el +and co-wrote ob-R.el ob-clojure.el ob-exp.el ob-fortran.el ob-lisp.el + ob-lob.el ob-maxima.el ob-perl.el ob-picolisp.el ob-python.el ob-ref.el + ob.el org-bibtex.el and changed org.texi org.el org-exp.el org-latex.el ob-plantuml.el org-table.el org-macs.el org-src.el orgcard.tex ob-lilypond.el ob-mscgen.el ob-octave.el ob-screen.el org-agenda.el org-ascii.el @@ -1327,7 +1336,8 @@ Glenn Morris: wrote check-declare.el f90.el vc-bzr.el and changed Makefile.in configure.in calendar.el diary-lib.el rmail.el files.el cal-menu.el appt.el cal-hebrew.el fortran.el bytecomp.el holidays.el make-dist calendar.texi emacs.texi simple.el sed1v2.inp - cal-islam.el cal-bahai.el startup.el ack.texi and 1208 other files + cal-islam.el cal-bahai.el makefile.w32-in dired-x.el + and 1210 other files Glynn Clements: wrote gamegrid.el snake.el tetris.el @@ -1417,6 +1427,8 @@ Hiroshi Fujishima: changed faq.texi gnus-score.el mail-source.el Hiroshi Nakano: changed ralloc.c unexelf.c +Hiroshi Oota: changed coding.c + Hoan Ton-That: changed erc-log.el Holger Schauer: wrote fortune.el @@ -1517,8 +1529,10 @@ Jacques Duthen: co-wrote ps-print.el ps-samp.el Jaeyoun Chung: changed hangul3.el hanja3.el gnus-mule.el hangul.el -Jambunathan K: changed org.el org-exp.el org.texi indian.el - org-footnote.el org-html.el package-x.el tar-mode.el +Jambunathan K: wrote org-lparse.el org-odt.el +and changed org.el org-exp.el org-inlinetask.el org.texi + OrgOdtContentTemplate.xml OrgOdtStyles.xml indian.el org-footnote.el + org-html.el package-x.el tar-mode.el James Clark: wrote nxml-enc.el nxml-glyph.el nxml-maint.el nxml-mode.el nxml-ns.el nxml-outln.el nxml-parse.el nxml-rap.el nxml-uchnm.el @@ -1556,9 +1570,9 @@ Jan Böker: changed org.el Jan Djärv: wrote dnd.el dynamic-setting.el x-dnd.el and changed gtkutil.c xterm.c xfns.c configure.in xmenu.c xterm.h - gtkutil.h x-win.el keyboard.c Makefile.in nsterm.m frames.texi - xsettings.c frame.c emacs.c xselect.c process.c xlwmenu.c config.in - cus-start.el nsfns.m and 302 other files + gtkutil.h nsterm.m x-win.el keyboard.c Makefile.in frames.texi + xsettings.c emacs.c frame.c nsfns.m xselect.c process.c xlwmenu.c + config.in cus-start.el and 302 other files Jan Moringen: co-wrote srecode/cpp.el tango-dark-theme.el tango-theme.el and changed dbus.el dbus.texi dbusbind.c eieio.el log-edit.el zeroconf.el @@ -1771,7 +1785,7 @@ John Heidemann: wrote mouse-copy.el mouse-drag.el John Hughes: changed term.c -John J Foerch: changed erc-stamp.el progmodes/compile.el +John J Foerch: changed erc-stamp.el org.el progmodes/compile.el John Mongan: changed f90.el @@ -1867,15 +1881,17 @@ Juan Pechiar: wrote ob-mscgen.el and changed ob-octave.el Juanma Barranquero: wrote emacs-lock.el -and changed makefile.w32-in subr.el w32fns.c files.el server.el bs.el - emacsclient.c help-fns.el faces.el org.el simple.el buffer.c xdisp.c - keyboard.c process.c w32term.c window.c desktop.el ido.el allout.el - eval.c and 1084 other files +and changed makefile.w32-in subr.el w32fns.c files.el server.el + emacsclient.c bs.el help-fns.el faces.el org.el simple.el buffer.c + xdisp.c keyboard.c desktop.el process.c w32term.c window.c ido.el w32.c + allout.el and 1086 other files Juergen Kreileder: changed imap.el nnimap.el Juergen Nickelsen: wrote ws-mode.el +Julian Gehring: changed org.texi orgcard.tex + Julian Scheid: changed tramp.el Julien Avarre: changed gnus-fun.el @@ -1887,7 +1903,7 @@ Julien Danjou: wrote gnus-gravatar.el gravatar.el notifications.el and co-wrote color.el and changed shr.el org-agenda.el gnus-art.el gnus-html.el gnus.el mm-decode.el gnus-group.el gnus-util.el message.el org.el gnus-sum.el - gnus.texi mm-view.el mm-uu.el nnimap.el nnir.el sieve-manage.el + gnus.texi mm-view.el nnimap.el mm-uu.el nnir.el sieve-manage.el color-lab.el url-cache.el auth-source.el gnus-ems.el and 82 other files Julien Gilles: wrote gnus-ml.el @@ -1901,7 +1917,7 @@ and changed info.el isearch.el simple.el replace.el progmodes/grep.el dired-aux.el progmodes/compile.el dired.el startup.el faces.el files.el display.texi menu-bar.el descr-text.el bindings.el cus-edit.el image-mode.el ispell.el man.el dired-x.el log-view.el - and 335 other files + and 337 other files Justin Bogner: changed fortune.el @@ -1909,6 +1925,8 @@ Justin Sheehy: changed gnus-sum.el nntp.el Justus Piater: changed smtpmail.el +Jérémy Compostella: changed battery.el windmove.el window.el + Jérôme Marant: changed Makefile.in make-dist bindings.el configure.in emacsclient.c misc.texi @@ -1930,7 +1948,7 @@ and changed message.el gnus-agent.el gnus-sum.el files.el nnmail.el paragraphs.el bindings.el files.texi gnus-art.el gnus-group.el man.el INSTALL crisp.el fileio.c and 45 other files -Kai Tetzlaff: changed url-http.el +Kai Tetzlaff: changed org-publish.el url-http.el Kailash C. Chowksey: changed HELLO Makefile.in ind-util.el kannada.el knd-util.el loadup.el makefile.w32-in @@ -1983,10 +2001,10 @@ Karl Pflästerer: changed gnus-art.el gnus-score.el mml.el spam-stat.el Katsuhiro Hermit Endo: changed gnus-group.el gnus-spec.el Katsumi Yamaoka: wrote canlock.el -and changed gnus-art.el gnus-sum.el message.el gnus.texi mm-decode.el +and changed gnus-art.el message.el gnus-sum.el gnus.texi mm-decode.el mm-util.el mm-view.el gnus-group.el mml.el rfc2047.el gnus-util.el - gnus-start.el gnus-msg.el shr.el gnus.el nntp.el gnus-agent.el nnrss.el - nnmail.el mm-uu.el gnus-html.el and 133 other files + gnus-start.el gnus-msg.el gnus.el shr.el nntp.el gnus-agent.el nnrss.el + mm-uu.el nnmail.el gnus-html.el and 135 other files Kaveh R. Ghazi: changed delta88k.h xterm.c @@ -2007,7 +2025,8 @@ Keith Gabryelski: wrote hexl.c hexl.el Keith Packard: changed font.c Ken Brown: changed configure.in cygwin.h sheap.c browse-url.el gmalloc.c - vm-limit.c dired.c emacs.c gdb-mi.el loadup.el mem-limits.h unexcw.c + vm-limit.c dired.c emacs.c fileio.c gdb-mi.el loadup.el mem-limits.h + unexcw.c Ken Brush: changed emacsclient.c @@ -2111,7 +2130,8 @@ and changed hanja.el hangul.el hangul3.el hanja-jis.el symbol-ksc.el Kobayashi Yasuhiro: changed w32fns.c configure.bat indent.c info.el w32term.c w32term.h window.c xfns.c -Konrad Hinsen: changed ob-python.el +Konrad Hinsen: wrote org-eshell.el +and changed ob-python.el Konstantin Novitsky: changed progmodes/python.el @@ -2148,10 +2168,10 @@ Lars Hansen: changed desktop.el tramp.el info.el mh-e.el dired-x.el url-irc.el url-misc.el url-news.el url-privacy.el and 39 other files Lars Ingebrigtsen: changed nnimap.el gnus-art.el gnus-sum.el shr.el - gnus.texi gnus-start.el auth-source.el message.el nntp.el gnus-draft.el - gnus-group.el gnus-agent.el gnus-html.el gnus-util.el nnfolder.el - nnmail.el proto-stream.el gnus-demon.el gnus-gravatar.el gnus-int.el - gnus-msg.el and 6 other files + gnus.texi gnus-start.el auth-source.el nntp.el message.el gnus-draft.el + gnus-group.el gnus-agent.el gnus-html.el gnus-util.el macros.texi + nnfolder.el nnmail.el proto-stream.el gnus-demon.el gnus-gravatar.el + gnus-int.el and 10 other files Lars Lindberg: wrote msb.el and co-wrote dabbrev.el imenu.el @@ -2173,10 +2193,10 @@ and co-wrote gnus-kill.el gnus-mh.el gnus-msg.el gnus-score.el nnheader.el nnimap.el nnmbox.el nnmh.el nnml.el nnspool.el nnvirtual.el rfc2047.el time-date.el and changed gnus.texi gnus-cite.el pop3.el gnus-xmas.el smtpmail.el - proto-stream.el auth-source.el xml.c dired.el editfns.c nnultimate.el - subr.el gnus-nocem.el gnutls.c imap.el nnkiboze.el nnrss.el + proto-stream.el auth-source.el subr.el xml.c dired.el editfns.c + nnultimate.el gnus-nocem.el gnutls.c imap.el nnkiboze.el nnrss.el nnslashdot.el spam-report.el url-http.el gnus-cus.el - and 206 other files + and 207 other files Lars Rasmusson: changed ebrowse.c @@ -2208,9 +2228,9 @@ and changed nxml-mode.el tutorial.el window.el ada-xref.el buff-menu.el Lennart Staflin: changed dired.el diary-ins.el diary-lib.el tq.el xdisp.c Leo Liu: changed rcirc.el ido.el makefile.w32-in abbrev.el Makefile.in - deps.mk fns.c gl-comp.m4 gnulib.mk minibuffer.el register.el replace.el - subr.el abbrevlist.el ansi-color.el bindings.el bookmark.el cl-macs.el - diff.el editfns.c files.el and 22 other files + deps.mk dnd.el em-hist.el erc.el files.el fns.c footnote.el gl-comp.m4 + gnulib.mk help-mode.el iswitchb.el minibuf.c minibuffer.el register.el + replace.el subr.el and 47 other files Leonard H. Tower Jr.: changed rnews.el rnewspost.el emacsbug.el rmailout.el sendmail.el @@ -2221,6 +2241,8 @@ Lewis Perin: changed emacs.manifest Liam Healy: changed outline.el +Litvinov Sergey: changed ob-maxima.el ob-octave.el + Lloyd Zusman: changed mml.el pgg-gpg.el Luc Teirlinck: wrote help-at-pt.el @@ -2268,6 +2290,8 @@ Manoj Srivastava: wrote manoj-dark-theme.el Manuel Giraud: changed org-html.el org-publish.el org.texi +Manuel Gómez: changed speedbar.el + Manuel Serrano: wrote flyspell.el Marc Fleischeuers: changed files.el @@ -2491,7 +2515,7 @@ and changed tramp.texi dbusbind.c trampver.texi dbus.texi trampver.el Michael Ben-Gershon: changed acorn.h configure.in riscix1-1.h riscix1-2.h unexec.c -Michael Brand: changed org-agenda.el org-table.el org.el +Michael Brand: changed org.el org-agenda.el org-table.el org.texi Michael D. Ernst: wrote reposition.el and changed dired-x.el uniquify.el ispell.el bibtex.el rmail.el dired.el @@ -2555,7 +2579,7 @@ Michael Shields: changed spam.el gnus-art.el gnus-sum.el gnus-cite.el window.c window.el Michael Sperber: changed aix3-1.h aix4-2.h gnus.texi mail-source.el - nnmail.el + nnmail.el org-capture.el Michael Staats: wrote pc-select.el @@ -2568,6 +2592,8 @@ Michal Jankowski: changed insdel.c keyboard.c Michal Nazarewicz: changed frame.c frame.h ispell.el w32term.c xterm.c +Michal Sojka: changed org-icalendar.el + Michaël Cadilhac: changed browse-url.el gnus-sum.el gnus.texi ido.el emacsbug.el files.el fill.el flyspell.el fr-drdref.tex fr-refcard.ps fr-refcard.tex ispell.el meta-mode.el nnrss.el @@ -2592,6 +2618,8 @@ Mike Kazantsev: changed erc-dcc.el Mike Kupfer: changed mh-e.el mh-utils.el +Mike Lamb: changed em-unix.el esh-util.el pcmpl-unix.el + Mike Long: changed b2m.c make-dist make-mode.el netbsd.h view.el vms.h Mike McEwan: changed gnus-agent.el gnus-sum.el gnus-score.el @@ -2610,7 +2638,7 @@ Mikio Nakajima: changed ring.el viper-util.el Milan Zamazal: wrote czech.el glasses.el tildify.el and co-wrote prolog.el slovak.el -and changed abbrev.el filecache.el files.el mm-view.el +and changed abbrev.el filecache.el files.el mm-view.el org.el progmodes/compile.el Miles Bader: wrote button.el face-remap.el image-file.el macroexp.el @@ -2692,7 +2720,9 @@ Nic Ferrier: changed tramp.el Nicholas Maniscalco: changed term.el -Nick Dokos: changed org-exp.el mh-search.el url-cache.el +Nick Alcock: changed gnus.el + +Nick Dokos: changed org-exp.el mh-search.el org.el url-cache.el Nick Roberts: wrote gdb-mi.el t-mouse.el and changed gdb-ui.el gud.el building.texi tooltip.el speedbar.el @@ -2704,13 +2734,14 @@ Nico Francois: changed w32fns.c w32inevt.c w32menu.c Nicolas Avrutin: changed url-http.el -Nicolas Goaziou: changed org-list.el org.el org-latex.el org-exp.el - org-footnote.el org-html.el org-inlinetask.el org-docbook.el - org-timer.el org-capture.el org-ascii.el ob.el org-archive.el - org-clock.el org-macs.el org-indent.el org-mouse.el +Nicolas Goaziou: changed org-list.el org.el org-footnote.el org-exp.el + org-latex.el org-html.el org-inlinetask.el org-indent.el org-docbook.el + org-timer.el ob-asymptote.el org-ascii.el org-capture.el ob.el + org-agenda.el org-archive.el org-clock.el org-macs.el org-mouse.el + ob-exp.el org-colview.el org-table.el -Niels Giesen: changed icalendar.el org-clock.el org-docbook.el - org-icalendar.el +Niels Giesen: changed icalendar.el org-agenda.el org-clock.el + org-docbook.el org-icalendar.el Niimi Satoshi: changed pp.el search.c @@ -2797,7 +2828,7 @@ P. E. Jareth Hein: changed gnus-util.el Pascal Dupuis: changed octave-inf.el -Pascal Rigaux: changed rfc2231.el +Pascal Rigaux: changed image.c rfc2231.el Pat Thoyts: changed xfns.c @@ -2815,7 +2846,7 @@ and co-wrote cal-dst.el and changed lisp.h Makefile.in editfns.c alloc.c xdisp.c configure.in fileio.c image.c process.c fns.c xterm.c dispextern.h keyboard.c data.c lread.c sysdep.c xfns.c eval.c emacs.c config.in print.c - and 564 other files + and 568 other files Paul Fisher: changed fns.c @@ -2905,7 +2936,7 @@ Peter Kleiweg: wrote ps-mode.el Peter Liljenberg: wrote elint.el -Peter Münster: changed gnus.texi +Peter Münster: changed gnus.texi org-agenda.el org.el Peter O'Gorman: changed configure.in frame.h hpux10-20.h termhooks.h @@ -2974,6 +3005,8 @@ Puneeth Chaganti: changed org.texi org-exp.el org-agenda.el R. Bernstein: changed gud.el +Rafael Laboissiere: changed org.el org.texi + Rafael Sepúlveda: changed TUTORIAL.es Raffael Mancini: changed misc.el @@ -3073,10 +3106,10 @@ and changed files.el keyboard.c simple.el xterm.c xdisp.c rmail.el Richard Mlynarik: wrote cl-indent.el ebuff-menu.el ehelp.el rfc822.el terminal.el yow.el -and changed files.el rmail.el sysdep.c info.el keyboard.c bytecomp.el - fileio.c simple.el process.c startup.el window.c editfns.c unexec.c - xfns.c keymap.c minibuf.c sendmail.el buffer.c dispnew.c emacs.c - subr.el and 129 other files +and changed files.el simple.el rmail.el info.el sysdep.c bytecomp.el + startup.el keyboard.c fileio.c process.c sendmail.el window.c editfns.c + unexec.c xfns.c keymap.c lisp-mode.el minibuf.c buffer.c dired.el + dispnew.c and 140 other files Richard Sharman: wrote hilit-chg.el and changed sh-script.el ediff-init.el regexp-opt.el simple.el @@ -3090,6 +3123,8 @@ Rob Browning: changed configure.in Rob Christie: changed nsmenu.m +Rob Giardina: changed org-agenda.el + Rob Kaut: changed vhdl-mode.el Rob Riepel: wrote tpu-edt.el tpu-extras.el tpu-mapper.el vt-control.el @@ -3116,6 +3151,8 @@ Robert Pluim: changed gnus-demon.el org-agenda.el Robert Thorpe: changed cus-start.el indent.el +Roberto Huelga: changed org-clock.el + Roberto Rodríguez: changed ada-mode.texi glossary.texi widget.texi Roderick Schertler: changed dgux.h dgux4.h gud.el sysdep.c @@ -3202,11 +3239,13 @@ Sam Steingold: wrote gulp.el midnight.el and changed progmodes/compile.el cl-indent.el vc-cvs.el vc.el mouse.el simple.el font-lock.el ange-ftp.el vc-hg.el add-log.el bookmark.el bug-reference.el diary-lib.el dired.el pcvs.el tex-mode.el apropos.el - bindings.el emacs-lisp/debug.el etags.el files.el and 124 other files + bindings.el emacs-lisp/debug.el etags.el files.el and 126 other files + +Samuel Bronson: changed custom.el Samuel Tardieu: changed smime.el -Samuel Thibault: changed sysdep.c term.c +Samuel Thibault: changed gnu.h sysdep.c term.c Sanghyuk Suh: changed mac-win.el macterm.c @@ -3266,6 +3305,8 @@ Sebastian Tennant: changed desktop.el Sebastien Kirche: changed mail-extr.el +Sebastien Vauban: changed org-agenda.el org-html.el + Seiji Zenitani: changed nsfns.m frame.c xterm.c Info.plist PkgInfo document.icns find-func.el frame.h help-fns.el macfns.c nsfont.m nsterm.m w32fns.c xdisp.c xfns.c @@ -3278,6 +3319,8 @@ Seppo Sade: changed esh-ext.el Sergei Organov: changed vc.el +Sergey Litvinov: co-wrote ob-fortran.el + Sergey Poznyakoff: changed mh-mime.el rmail.el rmail.texi smtpmail.el Sergio Pokrovskij: changed TUTORIAL.eo @@ -3366,8 +3409,8 @@ Stefan Monnier: wrote bibtex-style.el bzrmerge.el css-mode.el and co-wrote font-lock.el and changed vc.el subr.el simple.el lisp.h keyboard.c files.el bytecomp.el Makefile.in keymap.c progmodes/compile.el xdisp.c pcvs.el - alloc.c newcomment.el vc-hooks.el tex-mode.el buffer.c fileio.c - sh-script.el eval.c fill.el and 1032 other files + alloc.c newcomment.el vc-hooks.el tex-mode.el buffer.c fileio.c eval.c + sh-script.el fill.el and 1032 other files Stefan Reichör: changed gnus-agent.el @@ -3471,7 +3514,7 @@ Sun Yijiang: changed TUTORIAL.cn Sundar Narasimhan: changed rnews.el rnewspost.el -Suvayu Ali: changed org.texi +Suvayu Ali: changed org-exp.el org-inlinetask.el org.texi Sven Joachim: changed files.el de-refcard.tex dired-aux.el emacs.1 arc-mode.el dired-x.el em-cmpl.el em-hist.el em-ls.el esh-cmd.el @@ -3480,9 +3523,11 @@ Sven Joachim: changed files.el de-refcard.tex dired-aux.el emacs.1 Svend Tollak Munkejord: changed deuglify.el +Syver Enstad: changed gud.el + Sébastien Delafond: changed org.el -Sébastien Vauban: changed org-agenda.el org-latex.el org.el +Sébastien Vauban: changed org.el org-agenda.el org-latex.el T. V. Raman: changed completion.el files.el json.el @@ -3517,7 +3562,7 @@ and changed subword.el image-mode.el Makefile.in cc-cmds.el emacsbug.el gnus-art.el gnus.texi nnimap.el files.el gnus-sum.el info.el org-footnote.el org.el reftex-ref.el simple.el tsdh-dark-theme.el tsdh-light-theme.el ack.texi bindings.el bookmark.el cc-mode.el - and 22 other files + and 23 other files Tatsuya Ichikawa: changed gnus-agent.el gnus-cache.el @@ -3531,8 +3576,8 @@ Teodor Zlatanov: wrote auth-source.el gnus-registry.el gnus-sync.el gnus-tests.el gnutls.el registry.el spam-report.el url-future.el and changed spam.el gnus.el nnimap.el gnus.texi gnus-sum.el gnus-util.el auth.texi netrc.el gnus-start.el gnutls.c message.el spam-stat.el - encrypt.el nnir.el nnmail.el imap.el mail-source.el nnmairix.el - Makefile.in gnus-encrypt.el gnus-html.el and 97 other files + encrypt.el nnir.el nnmail.el imap.el mail-source.el nnmairix.el nntp.el + Makefile.in gnus-encrypt.el and 97 other files Terje Rosten: changed xfns.c version.el xterm.c xterm.h @@ -3559,7 +3604,7 @@ Thierry Emery: changed kinsoku.el timezone.el url-http.el wid-edit.el Thierry Volpiatto: changed bookmark.el eshell.el gnus-sum.el image-mode.el info.el man.el woman.el dired-aux.el dired.el doc-view.el - files.el gnus-art.el image-dired.el vc-rcs.el + files.el find-func.el gnus-art.el image-dired.el vc-rcs.el Thomas Baumann: wrote org-mhe.el and co-wrote org-bbdb.el @@ -3570,6 +3615,8 @@ Thomas Deweese: changed x-win.el Thomas Dorner: changed ange-ftp.el +Thomas Dye: changed org.texi ob-R.el + Thomas Horsley: changed cxux-crt0.s cxux.h cxux7.h emacs.c nh3000.h nh4000.h simple.el sysdep.c xterm.c @@ -3591,6 +3638,8 @@ and changed emacs-lock.el subr.el Thor Kristoffersen: changed nntp.el +Thorsten Jolitz: co-wrote ob-picolisp.el + Thorsten Ohl: changed lread.c next.h Tiago Saboga: changed files.el @@ -3628,7 +3677,7 @@ and co-wrote org-wl.el Tom Breton: changed autoinsert.el cus-edit.el gnus-agent.el lread.c -Tom Dye: changed org-bibtex.el org.texi org.el +Tom Dye: changed org.texi org-bibtex.el org.el Tom Hageman: changed etags.c @@ -3712,9 +3761,9 @@ and changed org-gnus.el smime.el Ulrich Leodolter: changed w32proc.c -Ulrich Mueller: changed configure.in Makefile.in files.el gud.el - server.el ChgPane.c ChgSel.c HELLO INSTALL XMakeAssoc.c authors.el - bytecomp.el calc-units.el case-table.el configure doctor.el em-ls.el +Ulrich Mueller: changed configure.in Makefile.in doctor.el files.el + gud.el server.el ChgPane.c ChgSel.c HELLO INSTALL XMakeAssoc.c + authors.el bytecomp.el calc-units.el case-table.el configure em-ls.el emacs.1 emacs.c emacs.desktop emacsclient.c and 26 other files Ulrich Neumerkel: changed xterm.c @@ -3726,6 +3775,8 @@ Vadim Nasardinov: changed allout.el Vagn Johansen: changed gnus-cache.el vc-svn.el +Valentin Wüstholz: changed org.el + Valery Alexeev: changed cyril-util.el cyrillic.el Vasily Korytov: changed cyrillic.el message.el cperl-mode.el gnus-art.el @@ -3733,6 +3784,8 @@ Vasily Korytov: changed cyrillic.el message.el cperl-mode.el gnus-art.el Victor Zandy: wrote zone.el +Vida Gábor: changed gnus-demon.el + Ville Skyttä: changed mh-comp.el pgg.el tcl.el Vincent Belaïche: changed ses.el 5x5.el calc-alg.el calc-vec.el calc.texi @@ -3758,6 +3811,8 @@ Vladimir Alexiev: changed arc-mode.el nnvirtual.el tmm.el Vladimir Volovich: changed smime.el +Volker Sobek: changed programs.texi + W. Martin Borgert: changed files.el schemas.xml Walter C. Pelissero: changed browse-url.el url-methods.el @@ -3809,13 +3864,15 @@ and changed files.el Wim Nieuwenhuizen: changed TUTORIAL.nl +Wj Carpenter: changed feedmail.el + Wlodzimierz Bzyl: co-wrote ogonek.el and changed latin-pre.el pl-refcard.ps pl-refcard.tex refcard-pl.ps refcard-pl.tex survival.tex Wolfgang Glas: changed unexsgi.c -Wolfgang Jenkner: changed conf-mode.el gnus-sum.el lread.c +Wolfgang Jenkner: changed conf-mode.el gnus-agent.el gnus-sum.el lread.c network-stream.el pcvs.el pop3.el Wolfgang Lux: changed nsterm.m keyboard.c diff --git a/etc/ChangeLog b/etc/ChangeLog index b4e22c506a3..1f1190b19d9 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,42 @@ +2012-02-10 Leo Liu + + * NEWS: Change condition-case-no-debug to + condition-case-unless-debug and split the entry in two. + +2012-02-08 Alex Ott + + * tutorials/TUTORIAL.ru: Updated; synchronize with TUTORIAL. + Coding system changed to UTF-8. + +2012-02-06 Juanma Barranquero + + * tutorials/TUTORIAL.es: Updated; synchronize with TUTORIAL. + +2012-02-03 Pieter Schoenmakers + + * tutorials/TUTORIAL.nl: Updated; synchronize with TUTORIAL. + +2012-01-30 Chong Yidong + + * tutorials/TUTORIAL: Delete a repeat sentence. + +2012-01-25 Mats Lidell + + * tutorials/TUTORIAL.sv: Updated; synchronize with TUTORIAL. + +2012-01-21 Ognyan Kulev + + * tutorials/TUTORIAL.bg: Updated; synchronize with TUTORIAL. + +2012-01-19 Werner Lemberg + + * tutorial/TUTORIAL.de: Updated; synchronize with TUTORIAL. + Minor typographical improvements. + +2012-01-17 Primoz PETERLIN + + * tutorials/TUTORIAL.sl: Update. + 2012-01-14 Eli Zaretskii * tutorials/TUTORIAL.he: Update to follow changes to TUTORIAL in diff --git a/etc/NEWS b/etc/NEWS index 0b0e5e571aa..9929f326e44 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -24,8 +24,42 @@ so we will look at it and add it to the manual. * Installation Changes in Emacs 24.1 -** Configure links against libselinux if it is found. -You can disable this by using --without-selinux. +--- +** Emacs can be compiled with Gtk+ 3.0 if you pass --with-x-toolkit=gtk3 +to configure. Note that other libraries used by Emacs, RSVG and GConf, +also depend on Gtk+. You can disable them with --without-rsvg and +--without-gconf. + +--- +** Emacs can be compiled with GnuTLS support. +This happens by default if a suitably recent version of the library is +found at build time. To prevent this, use the configure option +`--without-gnutls'. See below for GnuTLS features. + +--- +** Emacs can be compiled with SELinux support. +This happens by default if a suitably recent version of the library is +found at build time. To prevent this, use the configure option +`--without-selinux'. See below for SELinux features. + +--- +** Emacs can be compiled with ImageMagick support. +This happens by default if a suitably recent version of the library is +found at build time. To prevent this, use the configure option +`--without-imagemagick'. See below for ImageMagick features. +This feature is not available for the Nextstep or MS ports. + +--- +** Emacs can be compiled with libxml2 support. +This happens by default if a suitably recent version of the library is +found at build time. To prevent this, use the configure option +`--without-xml2'. See below for libxml2 features. + +--- +** There is a new configure option --with-wide-int. +With it, Emacs integers typically have 62 bits, even on 32-bit machines. +On 32-bit hosts, this raises the limit on buffer sizes from about 512 MiB +to about 2 GiB. --- ** By default, the installed Info and man pages are compressed. @@ -37,33 +71,11 @@ You can disable this by configuring --without-compress-info. These provide no new functionality, they just remove the need to edit lib-src/Makefile by hand in order to use the associated features. ---- -** Emacs can be compiled against Gtk+ 3.0 if you pass --with-x-toolkit=gtk3 -to configure. Note that other libraries used by Emacs, RSVG and GConf, -also depend on Gtk+. You can disable them with --without-rsvg and ---without-gconf. - --- ** There is a new configure option --enable-use-lisp-union-type. This is only useful for Emacs developers to debug certain types of bugs. This is not a new feature; only the configure flag is new. ---- -** There is a new configure option --with-wide-int. -With it, Emacs integers typically have 62 bits, even on 32-bit machines. -On 32-bit hosts, this raises the limit on buffer sizes from about 512 MiB -to about 2 GiB. - ---- -** New translation of the Emacs Tutorial in Hebrew is available. -Type `C-u C-h t' to choose it in case your language setup doesn't -automatically select it. - -** Emacs can be compiled with ImageMagick support. -Emacs links to ImageMagick if version 6.2.8 or newer of the library is -present at build time. To inhibit ImageMagick, use the configure -option `--without-imagemagick' . - --- ** The standalone programs digest-doc and sorted-doc are removed. Emacs now uses Lisp commands `doc-file-to-man' and `doc-file-to-info'. @@ -82,11 +94,9 @@ longer have any effect. (They were declared obsolete in Emacs 23.) +++ ** New command line option `--no-site-lisp' removes site-lisp directories -from load-path. -Q now implies this. - ---- -** On Windows, Emacs now warns when the obsolete _emacs init file is used, -and also when HOME is set to C:\ by default. +from load-path. -Q now implies this. This option does not affect the +EMACSLOADPATH environment variable (and hence has no effect for +Nextstep builds.) * Changes in Emacs 24.1 @@ -123,7 +133,13 @@ email, or to use the old defaults that rely on external mail facilities (`sendmail-send-it' on GNU/Linux and other Unix-like systems, and `mailclient-send-it' on Windows). -*** smtpmail changes +--- +*** `compose-mail' now accepts an optional 8th arg, RETURN-ACTION, and +passes it to the mail user agent function. This argument specifies an +action for returning to the caller after finishing with the mail. +For example, this is used by Rmail to optionally delete a mail window. + +*** smtpmail **** smtpmail now uses encrypted connections (via STARTTLS) if the mail server supports them. It also uses the auth-source framework for @@ -164,6 +180,12 @@ in your ~/.authinfo file instead. **** The command `mail-attach-file' was renamed to `mail-insert-file'. The old name is now an obsolete alias to the new name. ++++ +*** You can type C-c m from M-x report-emacs-bug if you prefer, and if +your system supports it, to transfer your report to your desktop's +preferred mail client. This uses either the "xdg-email" utility, or +OS X's "open" command. + ** Emacs server and client changes +++ *** New option `server-port' specifies the port on which the Emacs @@ -231,6 +253,11 @@ cannot be encoded by the `terminal-coding-system'. *** `nobreak-char-display' now also highlights Unicode hyphen chars (U+2010 and U+2011). +--- +*** New translation of the Emacs Tutorial in Hebrew is available. +Type `C-u C-h t' to choose it in case your language setup doesn't +automatically select it. + ** Improved GTK integration +++ *** GTK scroll-bars are now placed on the right by default. @@ -265,19 +292,19 @@ Emacs.pane.menubar.font: Courier-12 Also, the first dash (which does not indicate anything) is just displayed as a space. ++++ ** Basic SELinux support has been added. This requires Emacs to be linked with libselinux at build time. ++++ *** Emacs preserves the SELinux file context when backing up, and optionally when copying files. To this end, copy-file has an extra optional argument, and backup-buffer and friends include the SELinux context in their return values. ++++ *** The new functions file-selinux-context and set-file-selinux-context get and set the SELinux context of a file. ---- -*** Tramp offers handlers for file-selinux-context and set-file-selinux-context -for remote machines which support SELinux. ** Changes for exiting Emacs +++ @@ -323,6 +350,7 @@ trashing. This avoids inadvertently trashing temporary files. *** Calling `delete-file' or `delete-directory' with a prefix argument now forces true deletion, regardless of `delete-by-moving-to-trash'. ++++ ** New option `list-colors-sort' defines the color sort order for `list-colors-display'. @@ -354,9 +382,6 @@ If a theme is not in this list, Emacs queries before loading it, and offers to save the theme to `custom-safe-themes' automatically. By default, all themes included in Emacs are treated as safe. -** The user option `remote-file-name-inhibit-cache' controls whether -the remote file-name cache is used for read access. - ** File- and directory-local variable changes +++ *** You can stop directory local vars from applying to subdirectories. @@ -373,13 +398,20 @@ turn on `whitespace-mode' for *vc-diff* buffers. Modes should call *** Using "mode: MINOR-MODE" to enable a minor mode is deprecated. Instead, use "eval: (minor-mode 1)". ++++ +*** The variable `inhibit-first-line-modes-regexps' has been renamed +to `inhibit-local-variables-regexps'. As the name suggests, it now +applies to ALL file local variables, not just -*- mode ones. +The associated `inhibit-first-line-modes-suffixes' has been renamed +in the corresponding way. + +++ ** The variable `focus-follows-mouse' now always defaults to nil. -** New primitive `secure-hash' that supports many secure hash algorithms -including md5, sha-1 and sha-2 (sha-224, sha-256, sha-384 and sha-512). -The elisp implementation sha1.el is removed. Feature sha1 is provided -by default. ++++ +** New primitive `secure-hash' that supports many secure hash algorithms: +md5, sha1, sha2, sha224, sha256, sha384, and sha512. The lisp library +sha1.el has been removed. The `sha1' feature is provided by default. ** Menu-bar changes --- @@ -428,13 +460,9 @@ These functions allow to navigate through the live buffers that have been shown in a specific window. +++ -*** New functions `window-state-get' and `window-state-put'. -These functions allow to save and restore the state of an arbitrary -frame or window as an Elisp object. - ** The inactive minibuffer has its own major mode `minibuffer-inactive-mode'. -This is handy for minibuffer-only frames, and is also used for the "mouse-1 -pops up *Messages*" feature, which can now easily be changed. +This is handy for minibuffer-only frames, and is also used for the feature +where mouse-1 pops up *Messages*"', which can now easily be changed. * Editing Changes in Emacs 24.1 @@ -566,22 +594,16 @@ region (or with the left margin if there is no previous line). +++ ** Archive Mode has basic support for browsing and updating 7z archives. -+++ -** browse-url has a new variable `browse-url-mailto-function' -specifies how mailto: URLs are handled. The default is `browse-url-mail'. - ---- ** BibTeX mode - +--- *** BibTeX mode now supports biblatex. -Use the variable bibtex-dialect to select support for different BibTeX -dialects. bibtex-entry-field-alist is now an obsolete alias for -bibtex-BibTeX-entry-alist. - +Use the variable bibtex-dialect to select different BibTeX dialects. +bibtex-entry-field-alist is now an obsolete alias forbibtex-BibTeX-entry-alist. +--- *** New command `bibtex-search-entries' bound to C-c C-a. - +--- *** New `bibtex-entry-format' option `sort-fields', disabled by default. - +--- *** New variable `bibtex-search-entry-globally'. ** Calendar, Diary, and Appt @@ -619,9 +641,18 @@ appt-visible/appt-msg-window (use the variable appt-display-format) *** Some diary function aliases (obsolete since Emacs 22.1) have been removed: view-diary-entries, list-diary-entries, show-all-diary-entries -** CC Mode (C, C++, etc.) +** Browse-url -*** New feature to "guess" the style in an existing buffer. ++++ +*** New option `browse-url-mailto-function' specifies how to handle "mailto:"s. + +--- +*** The default browser used by the package is now the "xdg-open" program, +on platforms that support it. This calls your desktop's preferred browser. + ++++ +** New CC Mode feature to "guess" the style in an existing buffer. +The main entry is M-x c-guess. ** comint and modes derived from it use the generic completion code. @@ -630,13 +661,16 @@ view-diary-entries, list-diary-entries, show-all-diary-entries *** Compilation mode can be used without font-lock-mode. `compilation-parse-errors-function' is now obsolete. -*** `compilation-filter-start' is let-bound to the start of the text -inserted by the compilation filter function, when calling -compilation-filter-hook. +--- +*** New variable `compilation-filter-start', bound while +compilation-filter-hook runs. It records the start position of the +text inserted by compilation-filter. -*** `compilation-error-screen-columns' is obeyed in the editing buffer. -So programming language modes can set it, whereas previously only the value -in the *compilation* buffer was used. +--- +*** `compilation-error-screen-columns' and `compilation-first-column' +are obeyed in the editing buffer. So programming language modes can +set them, whereas previously only the value in the *compilation* buffer +was used. ** Customize @@ -649,6 +683,7 @@ To turn off the search field, set custom-search-field to nil. *** Custom options now start out hidden if at their default values. Use the arrow to the left of the option name to toggle visibility. +--- *** custom-buffer-sort-alphabetically now defaults to t. +++ @@ -657,14 +692,13 @@ choose a color via list-colors-display. ** D-Bus -*** It is possible now, to access alternative buses than the default -system or session bus. +*** It is now possible to access buses other than the default system +or session bus. -*** dbus-register-{service,method,property} -The -method and -property functions do not automatically register -names anymore. +*** The dbus-register-method and dbus-register-property functions +optionally do not register names. -The new function dbus-register-service registers a service known name +*** The new function dbus-register-service registers a known service name on a D-Bus without simultaneously registering a property or a method. ** Dired-x @@ -678,11 +712,9 @@ The standard directory local variables feature replaces it. ** ERC changes -*** New vars `erc-autojoin-timing' and `erc-autojoin-delay'. -If the value of `erc-autojoin-timing' is 'ident, ERC autojoins after a -successful NickServ identification, or after `erc-autojoin-delay' -seconds. The default value, 'ident, means to autojoin immediately -after connecting. +--- +*** New options `erc-autojoin-timing' and `erc-autojoin-delay', +controlling attempts to autojoin a channel. *** New variable `erc-coding-system-precedence': If we use `undecided' as the server coding system, this variable will then be consulted. @@ -691,36 +723,31 @@ utf-8, and do the normal `undecided' decoding for the rest. ** Eshell changes -*** The default value of eshell-directory-name is a directory named -"eshell" in `user-emacs-directory'. If the old "~/.eshell/" directory -exists, that is used instead. +--- +*** The default value of `eshell-directory-name' has changed +to be an "eshell" directory in `user-emacs-directory'. +The old "~/.eshell/" directory is still used if it exists, though. ** gdb-mi +++ -*** GDB User Interface migrated to GDB Machine Interface and now -supports multithread non-stop debugging and debugging of several -threads simultaneously. - -** In ido-mode, C-v is no longer bound to ido-toggle-vc. -The reason is that this interferes with cua-mode. +*** The GDB User Interface has been migrated to GDB Machine Interface. +It now supports multithread non-stop debugging and simultaneous +debugging of several threads. ** Image mode -*** RET (`image-toggle-animation') toggles animation, if the displayed -image can be animated. - -*** Option `image-animate-loop', if non-nil, loops the animation. -If nil, `image-toggle-animation' plays the animation once. ++++ +*** RET (`image-toggle-animation') toggles animation, if applicable. +Animation plays once, unless the option `image-animate-loop' is non-nil. ** Info -*** New command `info-display-manual' displays an Info manual -specified by its name. If that manual is already visited in some Info -buffer within the current session, the command will display that -buffer. Otherwise, it will load the manual and display it. This is -handy if you have many manuals in many Info buffers, and don't -remember the name of the buffer visiting the manual you want to -consult. ++++ +*** New command `info-display-manual' displays a named Info manual. +If that manual is already visited in some Info buffer, it displays +that buffer. (This is handy if you have many manuals in many *info* +buffers, and don't remember the name of the buffer visiting the manual +you want to consult.) Otherwise, it loads and displays the manual. +++ *** `e' is now bound to `end-of-buffer' rather than to `Info-edit'. @@ -729,21 +756,23 @@ and also because `Info-edit' is a rarely used command that is disabled by default. +++ -** The Landmark game is now invoked with `landmark', not `lm'. - ** MH-E has been upgraded to MH-E version 8.3.1. See MH-E-NEWS for details. +--- ** Modula-2 mode provides auto-indentation. +--- ** mpc.el: Can use pseudo tags of the form tag1|tag2 as a union of two tags. +--- ** Prolog mode has been completely revamped, with lots of additional functionality such as more intelligent indentation, electricity, support for more variants, including Mercury, and a lot more. ** Rmail ++++ *** The command `rmail-epa-decrypt' decrypts OpenPGP data in the Rmail incoming message. @@ -761,67 +790,55 @@ directory is a remote file name and neither the environment variable $ESHELL nor the variable `explicit-shell-file-name' is set. --- -** SQL Mode enhancements. +** SQL mode -*** `sql-dialect' is an alias for `sql-product'. - -*** New variable `sql-port' specifies the port number for connecting -to a MySQL or Postgres server. - -*** The command `sql-product-interactive' now takes a prefix argument, -which causes it to prompt for an SQL product instead of the current -value of `sql-product'. - -*** Product-specific SQL interactive commands now take prefix args. -These commands (`sql-sqlite', `sql-postgres', `sql-mysql', etc.), -given a prefix argument, prompt for a name for the SQL interactive -buffer. This reduces the need for calling `sql-rename-buffer'. - -*** SQL interactive modes suppress command continuation prompts, and -replace tabs with spaces. The first change impacts multiple line SQL -statements entered with C-j between each line, statements yanked into -the buffer and statements sent with `sql-send-*' functions. The -second change prevents the MySQL and Postgres interpreters from -listing object name completions when sent text via `sql-send-*' -functions. +--- +*** New options `sql-port', `sql-connection-alist', `sql-send-terminator', +and `sql-oracle-scan-on'. +--- *** New custom variables control prompting for login parameters. Each supported product has a custom variable `sql-*-login-params', which is a list of the parameters to be prompted for before a connection is established. -*** New variable `sql-connection-alist' for login parameter values. -This can be used to store different username, database and server -values. Connections defined in this variable appear in the submenu -SQL->Start... for making new SQLi sessions. +--- +*** The command `sql-product-interactive' now takes a prefix argument, +which causes it to prompt for an SQL product. +--- +*** Product-specific SQL interactive commands now take prefix arguments. +These commands (`sql-sqlite', `sql-postgres', `sql-mysql', etc.), +given a prefix argument, prompt for a name for the SQL interactive +buffer. This reduces the need for calling `sql-rename-buffer'. + +--- +*** SQL interactive modes suppress command continuation prompts, and +replace tabs with spaces. The first change impacts multiple line SQL +statements entered with C-j between each line, statements yanked into +the buffer and statements sent with `sql-send-*' functions. The +second prevents the MySQL and Postgres interpreters from listing +object name completions when sent text via `sql-send-*' functions. + +--- *** New command `sql-connect' starts a predefined SQLi session, using the login parameters from `sql-connection-alist'. +--- *** New "Save Connection" menu item in SQLi buffers. This gathers the login params specified for the SQLi session, if it was not started by a connection, and saves them as a new connection. -*** Commands for listing database objects and details. -In an SQLi session, you can get a list of objects in the database. -The contents of these lists are product specific. - -**** `C-c C-l a' or the "SQL->List all objects" menu item -lists all the objects in the database. With a prefix argument, it -displays additional details or extend the listing to include other -schemas objects. - -**** `C-c C-l t' or the "SQL->List Table details" menu item -prompts for the name of a database table or view and displays the list -of columns in the relation. With a prefix argument, it displays -additional details about each column. - -*** New options `sql-send-terminator' and `sql-oracle-scan-on'. +--- +*** New commands for listing database objects and details: +sql-list-all and sql-list-table. +--- *** An API for manipulating SQL product definitions has been added. ** TeX modes ++++ *** latex-electric-env-pair-mode keeps \begin..\end matched on the fly. ** Tramp @@ -830,32 +847,39 @@ additional details about each column. --- *** The following access methods are discontinued: "ssh1_old", "ssh2_old", "scp1_old", "scp2_old", "imap", "imaps" and "fish". ++++ +*** The user option `remote-file-name-inhibit-cache' controls whether +remote file attributes are cached for better performance. --- *** The option `ange-ftp-binary-file-name-regexp' has changed its default value to "". +--- +*** Handlers for file-selinux-context and set-file-selinux-context for +remote machines that support SELinux. -** `url-queue-retrieve' downloads web pages asynchronously, but allow -controlling the degree of parallelism. ++++ +** New function, `url-queue-retrieve', which behaves like url-retrieve, +but with limits (`url-queue-parallel-processes', `url-queue-timeout') on +the degree of parallelism. ** VC and related modes +++ *** Support for pulling on distributed version control systems. -`C-x v +' (`vc-pull') runs a "pull" operation, if it is supported, to -update the current branch and working tree. A prefix argument means -to prompt the user for specifics, e.g. a pull location. +`C-x v +' (`vc-pull') runs a "pull" operation, if it is supported +(currently with Bzr, Git, and Mercurial), to update the current branch +and working tree. A prefix argument means to prompt the user for +specifics, e.g. a pull location. -**** `vc-update' is now an alias for `vc-pull'. - -**** Currently supported by Bzr, Git, and Mercurial. +--- +*** `vc-update' is now an alias for `vc-pull'. +++ *** Support for merging on distributed version control systems. -The vc-merge command now runs a "merge" operation, if it is supported, -to merge changes from another branch into the current one. It prompts -for specifics, e.g. a merge source. - -**** Currently supported for Bzr, Git, and Mercurial. +The vc-merge command now runs a "merge" operation, if it is supported +(currently with Bzr, Git, and Mercurial), to merge changes from +another branch into the current one. It prompts for specifics, e.g. a +merge source. +++ *** New option `vc-revert-show-diff' controls whether `vc-revert' @@ -864,14 +888,11 @@ shows a diff while querying the user. It defaults to t. +++ *** Log entries in some Log View buffers can be toggled to display a longer description by typing RET (log-view-toggle-entry-display). +This is currently supported for Bzr, Git, and Mercurial (to support +another backend, define a `log-view-expanded-log-entry-function'). In the Log View buffers made by `C-x v L' (vc-print-root-log), you can use this to display the full log entry for the revision at point. -**** Currently supported for Bzr, Git, and Mercurial. - -**** Packages using Log View mode can enable this functionality by -binding `log-view-expanded-log-entry-function' to a suitable function. - +++ *** New command `vc-ediff' allows visual comparison of two revisions of a file similar to `vc-diff', but using ediff backend. @@ -885,24 +906,44 @@ this was not advertised at the time. Since Emacs 23, it has done the same thing as `toggle-read-only', but this was not advertised at the time. -** FIXME: xdg-open for browse-url and reportbug, 2010/08. - ** Obsolete modes -*** partial-completion-mode is obsolete. +--- +*** abbrevlist.el + +--- +*** erc-hecomplete.el (use erc-pcomplete.el instead) + +*** partial-completion-mode (complete.el) is obsolete. You can get a comparable behavior with: (setq completion-styles '(partial-completion initials)) (setq completion-pcm-complete-word-inserts-delimiters t) -*** pc-mode.el is obsolete. +--- +*** pc-mode.el is obsolete (CUA mode is much more comprehensive). +[FIXME gnus.texi, message.texi need updating] +*** pgg is obsolete (use EasyPG instead) + +--- *** sregex.el is obsolete, since rx.el is a strict superset. -*** s-region.el and pc-select are obsolete. -They are superseded by shift-select-mode enabled by default in 23.1. +--- +*** s-region.el and pc-select.el are obsolete. +They are superseded by shift-select-mode, enabled by default since 23.1. + ++++ +*** vc-mcvs.el is obsolete (for lack of a maintainer) ** Miscellaneous ++++ +*** The Landmark game is now invoked with `landmark', not `lm'. + +--- +*** In `ido-file-completion-map', C-v is no longer bound to ido-toggle-vc. +(This interfered with cua-mode.) + +++ *** f90.el has some support for Fortran 2008 syntax. @@ -919,9 +960,23 @@ They are superseded by shift-select-mode enabled by default in 23.1. ** Occur Edit mode applies edits made in *Occur* buffers to the original buffers. It is bound to "e" in Occur mode. -** New global minor modes electric-pair-mode, electric-indent-mode, -and electric-layout-mode. ++++ +** New global minor mode electric-pair-mode. +When enabled, typing an open parenthesis automatically inserts the +matching closing one. ++++ +** New global minor mode electric-indent-mode. +When enabled, typing certain characters triggers reindentation. +Major modes wishing to use this can set electric-indent-chars or +electric-indent-functions. + ++++ +** New global minor mode electric-layout-mode. +When enabled, typing certain characters automatically inserts newlines. +Major modes wishing to use this can set electric-layout-rules. + ++++ ** tabulated-list.el provides a generic major mode for tabulated data, from which other modes can be derived. @@ -939,14 +994,16 @@ Notifications API. It requires D-Bus for communication. ** soap-client.el supports access to SOAP web services from Emacs. soap-inspect.el is an interactive inspector for SOAP WSDL structures. -** xmodmap-generic-mode for xmodmap files. +--- +** New generic mode, xmodmap-generic-mode, for xmodmap files. +--- ** New emacs-lock.el package. -(The pre-existing one has been renamed to old-emacs-lock.el and moved -to obsolete/.) Now, Emacs Lock is a proper minor mode -`emacs-lock-mode'. Protection against exiting Emacs and killing the -buffer can be set separately. The mechanism for auto turning off -protection for buffers with inferior processes has been generalized. +(The previous version has been moved to obsolete/old-emacs-lock.el.) +Now, there is a proper minor mode `emacs-lock-mode'. +Protection against exiting Emacs and killing the buffer can be set +separately. The mechanism for automatically turning off protection +for buffers with dead inferior processes has been generalized. * Incompatible Lisp Changes in Emacs 24.1 @@ -964,26 +1021,34 @@ of the target directory, if the latter is an existing directory. The new optional arg COPY-CONTENTS, if non-nil, makes the function copy the contents directly into a pre-existing target directory. -** `compose-mail' now accepts an optional 8th arg, RETURN-ACTION, and -passes it to the mail user agent function. This argument specifies an -action for returning to the caller after finishing with the mail. -This is currently used by Rmail to delete a mail window. - ++++ ** For mouse click input events in the text area, the Y pixel coordinate in the POSITION list now counts from the top of the text area, excluding any header line. Previously, it counted from the top of the header line. -** Removed obsolete name `e' (use `float-e' instead). +--- +** Support for "old-style" backquotes, which have been obsolete for +more than 10 years, has been further reduced. Now a backquote not +followed by a space is always treated as a "new-style" backquote. +Please consider completely removing all "old-style" backquotes from +your code as a matter of some urgency. If your code uses backquotes +as documented in the Elisp manual, and compiles without warning, then +you have nothing to do in this regard. Code not following the +appropriate conventions may fail to compile. The most common cause of +trouble seems to be an old-style backquote followed by a newline. -** A backquote not followed by a space is now always treated as new-style. +--- +** view-buffer now treats special mode-class in the same way that +view-file has since Emacs 22 (ie, it won't enable View mode if the +major-mode is special). -** Test for special mode-class was moved from view-file to view-buffer. -FIXME: This only says what was changed, but not what are the -programmer-visible consequences. - -** Passing a nil argument to a minor mode function now turns the mode -ON unconditionally. ++++ +** Passing a nil argument to a minor mode defined by define-minor-mode +now turns the mode ON unconditionally. This is so that you can write, e.g. + (add-hook 'text-mode-hook 'foo-minor-mode) +to enable foo-minor-mode in Text mode buffers, thus removing the need +for `turn-on-foo-minor-mode' style functions. +++ ** During startup, Emacs no longer adds entries for `menu-bar-lines' @@ -999,25 +1064,45 @@ similar to the ones created by shift-selection. In previous Emacs versions, these regions were delineated by `mouse-drag-overlay', which has now been removed. ++++ +** The fourth argument of filter-buffer-substring, which says to remove +text properties from the final result, has been removed. +Eg simply pass the result through substring-no-properties if you need this. + +--- ** cl.el no longer provides `cl-19'. ** The menu bar bindings's caches are not used any more. Use (where-is-internal nil t) instead. -** The following obsolete functions and aliases were removed: -comint-kill-output, decompose-composite-char, outline-visible, -internal-find-face, internal-get-face, frame-update-faces, -frame-update-face-colors, x-frob-font-weight, x-frob-font-slant, -x-make-font-bold, x-make-font-demibold, x-make-font-unbold -x-make-font-italic, x-make-font-oblique, x-make-font-unitalic -x-make-font-bold-italic, mldrag-drag-mode-line, mldrag-drag-vertical-line, -iswitchb-default-keybindings, char-bytes, isearch-return-char, -make-local-hook ++++ +** The following obsolete (mostly since at least 21.1) functions and aliases +have been removed (the appropriate new function is given in parentheses): +comint-kill-output (comint-delete-output), +decompose-composite-char (char-to-string), +outline-visible (outline-invisible-p), +internal-find-face (facep), internal-get-face (facep and check-face), +frame-update-faces (not needed), +frame-update-face-colors (frame-set-background-mode), +x-frob-font-weight and x-frob-font-slant (appropriate make-face-* function), +x-make-font-bold and x-make-font-demibold (make-face-bold), +x-make-font-italic and x-make-font-oblique (make-face-italic), +x-make-font-bold-italic (make-face-bold-italic), +x-make-font-unbold (make-face-unbold), +x-make-font-unitalic (make-face-unitalic), +mldrag-drag-mode-line (mouse-drag-mode-line), +mldrag-drag-vertical-line (mouse-drag-vertical-line), +iswitchb-default-keybindings (iswitchb-mode), char-bytes (== 1), +isearch-return-char (isearch-printing-char), make-local-hook (not needed) -** The following obsolete variables and varaliases were removed: -checkdoc-minor-keymap, vc-header-alist, directory-sep-char, and -font-lock-defaults-alist. ++++ +** The following obsolete (mostly since at least 21.1) variables and varaliases +have been removed (the appropriate new variable is given in parentheses): +checkdoc-minor-keymap (checkdoc-minor-mode-map), +vc-header-alist (vc-BACKEND-header), directory-sep-char (== ?/) +font-lock-defaults-alist (font-lock-defaults), and e (float-e). +--- ** The following obsolete files were removed: sc.el, x-menu.el, rnews.el, rnewspost.el @@ -1026,22 +1111,24 @@ sc.el, x-menu.el, rnews.el, rnewspost.el * Lisp changes in Emacs 24.1 ++++ ** Code can now use lexical scoping by default instead of dynamic scoping. The `lexical-binding' variable lets code use lexical scoping for local -variables. It is typically set via file-local variables, in which case it -applies to all the code in that file. - +variables. It is typically set via a file-local variable in the first +line of the file, in which case it applies to all the code in that file. ++++ *** `eval' takes a new optional argument `lexical' to choose the new lexical binding instead of the old dynamic binding mode. - ++++ *** Lexically scoped interpreted functions are represented with a new form of function value which looks like (closure ENV ARGS &rest BODY). *** New macro `letrec' to define recursive local functions. - ++++ *** New function `special-variable-p' to check whether a variable is declared as dynamically bound. ++++ ** An Emacs Lisp testing tool is now included. Emacs Lisp developers can use this tool to write automated tests for their code. See the ERT info manual for details. @@ -1158,6 +1245,11 @@ state before the last buffer display operation in that window. iconifying or deleting a frame when burying a buffer shown in a dedicated frame or quitting a window showing a buffer in a frame of its own. ++++ +*** New functions `window-state-get' and `window-state-put'. +These functions allow to save and restore the state of an arbitrary +frame or window as an Elisp object. + ** Completion *** New variable completion-extra-properties used to specify extra properties @@ -1201,17 +1293,32 @@ Instead, the offending function is removed. ** New hook types ++++ *** New function `run-hook-wrapped' for running an abnormal hook by passing the hook functions as arguments to a "wrapping" function. +Like `run-hook-with-args-until-success', it stops at the first +non-nil return value. + +++ *** New macro `with-wrapper-hook' for running an abnormal hook as a set of "wrapping" filters, similar to around advice. +(A version of this macro was actually added in Emacs 23.2 but was not +advertised at the time.) -** `server-eval-at' is provided to allow evaluating forms on different -Emacs server instances. ++++ +** New macro `condition-case-unless-debug' (this was actually added in +Emacs 23.1 as condition-case-no-debug, but not advertised) -** `call-process' allows a `(:file "file")' spec to redirect STDOUT to -a file. ++++ +** The macro `with-demoted-errors' was added in Emacs 23.1, but not advertised. + ++++ +** The new function `server-eval-at' allows evaluation of Lisp forms on +named Emacs server instances, using TCP sockets. + ++++ +** `call-process' and `call-process-region' allow a `(:file "file")' spec +to redirect STDOUT to a file. --- ** Variable `stack-trace-on-error' removed. @@ -1223,9 +1330,11 @@ jumping all the way to the top-level. ** The function format-time-string now supports the %N directive, for higher-resolution time stamps. ++++ ** New function `read-char-choice' reads a restricted set of characters, discarding any inputs not inside the set. ++++ ** `image-library-alist' is renamed to `dynamic-library-alist'. The variable is now used to load all kind of supported dynamic libraries, not just image libraries. The previous name is still available as an @@ -1241,11 +1350,13 @@ syntax-propertize-via-font-lock to reuse old font-lock-syntactic-keywords as-is; and syntax-propertize-rules which provides a new way to specify syntactic rules. ++++ ** New hook post-self-insert-hook run at the end of self-insert-command. +++ ** Syntax tables support a new "comment style c" additionally to style b. +--- ** frame-local variables cannot be let-bound any more. ** Major and minor mode changes @@ -1253,16 +1364,21 @@ syntactic rules. *** `prog-mode' is a new major mode from which programming modes should be derived. ++++ **** `prog-mode-hook' can be used to enable features for programming modes, e.g. (add-hook 'prog-mode-hook 'flyspell-prog-mode) to enable on-the-fly spell checking for comments and strings. ++++ *** New hook `change-major-mode-after-body-hook', run by `run-mode-hooks' just before any other mode hooks. -*** Enabled globalized minor modes can be disabled in specific modes, -by running (FOO-mode-hook 0) via a mode hook. ++++ +*** Enabled globalized minor modes can be disabled in specific major modes. +If the global mode is global-FOO-mode, then run (FOO-mode -1) in the +major mode's hook, where FOO-mode toggles the mode on a per-buffer basis. ++++ *** `define-minor-mode' accepts a new keyword :variable. +++ @@ -1271,66 +1387,74 @@ Trashing is performed if TRASH and `delete-by-moving-to-trash' are both non-nil. Interactively, TRASH defaults to t, unless a prefix argument is supplied (see Trash changes, above). +--- ** `facemenu-read-color' is now an alias for `read-color'. -The command `read-color' now requires a match for a color name or RGB -triplet, instead of signaling an error if the user provides a invalid -input. ++++ +** The command `read-color' now requires a match for a color name +or RGB triplet, instead of signaling an error if the user provides +invalid input. + ++++ ** Tool-bars can display separators. Tool-bar separators are handled like menu separators in menu-bar maps, i.e. via menu entries of the form `(menu-item "--")'. ** Image API ++++ *** Animated images support (currently animated gifs only). ++++ **** `image-animated-p' returns non-nil if an image can be animated. ++++ **** `image-animate' animates a supplied image spec. ++++ **** `image-animate-timer' returns the timer object for an image that is being animated. -*** `image-extension-data' is renamed to `image-metadata'. +--- +*** `image-extension-data' has been renamed to `image-metadata'. +The old name is an obsolete alias to the new one. -*** If Emacs is compiled with ImageMagick support (see Startup -Changes), the function `imagemagick-types' returns a list of image -file extensions that your installation of ImageMagick supports. The ++++ +*** Image mode can view any image type that ImageMagick supports. +This requires Emacs to be built with ImageMagick support. +Then the function `imagemagick-types' returns a list of image file +extensions that your installation of ImageMagick supports. The function `imagemagick-register-types' enables ImageMagick support for these image types, minus those listed in `imagemagick-types-inhibit'. +Visiting one of these file types will then use Image mode. -See the Emacs Lisp Reference Manual for more information. +--- +*** New commands to resize and rotate images in Image mode. +These require Emacs to be built with ImageMagick support. +image-transform-fit-to-height, image-transform-fit-to-width, +image-transform-set-rotation, image-transform-set-scale. ** XML and HTML parsing - -*** If Emacs is compiled with libxml2 support (which is the default), -two new Emacs Lisp-level functions are defined: -`libxml-parse-html-region' (which will parse "real world" HTML) -and `libxml-parse-xml-region' (which parses XML). Both return an -Emacs Lisp parse tree. +If Emacs is compiled with libxml2 support, there are two new functions: +`libxml-parse-html-region' (which parses "real world" HTML) and +`libxml-parse-xml-region' (which parses XML). Both return an Emacs +Lisp parse tree. FIXME: These should be front-ended by xml.el. ** GnuTLS -*** Emacs can be compiled with libgnutls support -This is the default. You will then be able to use the functionality -in gnutls.el, namely the `open-gnutls-stream' and `gnutls-negotiate' -functions. It's easiest to use these functions through -`open-network-stream' because it can upgrade connections through -STARTTLS opportunistically or use plain SSL, depending on your needs. - -Only versions 2.8.x and higher or GnuTLS have been tested. -[FIXME: this statement needs clarifying, given that GnuTLS >= 2.6.6 -is the test used by configure.] - -*** gnutls-log-level -Set `gnutls-log-level' higher than 0 to get debug output. 1 is for -important messages, 2 is for debug data, and higher numbers are as per -the GnuTLS logging conventions. The output is in *Messages*. +*** New library `gnutls.el'. +This requires Emacs to have been built with GnuTLS support. +The main functions are `open-gnutls-stream' and `gnutls-negotiate'. +It's easiest to use these functions through `open-network-stream' +because it can upgrade connections through STARTTLS opportunistically +or use plain SSL, depending on your needs. For debugging, set +`gnutls-log-level' greater than 0. ** Isearch +--- *** New hook `isearch-update-post-hook' that runs in `isearch-update'. +++ @@ -1341,11 +1465,18 @@ time you call `progress-reporter-update' on that progress reporter, with a nil or omitted VALUE argument, the reporter message is displayed with a "spinning bar". ++++ ** New variable `revert-buffer-in-progress-p' is true while a buffer is being reverted, even if the buffer has a local `revert-buffer-function'. -** New variables `delayed-warnings-list' and `delayed-warnings-hook' allow -deferring warnings until the main command loop is executed. +--- +** New variables `delayed-warnings-list' and `delayed-warnings-hook'. +If delayed-warnings-list is non-nil, the command loop calls +delayed-warnings-hook after post-command-hook. At present, this is +only used by Emacs on some platforms to display warnings during +startup, which might otherwise not be noticed. This uses the functions +display-delayed-warnings and collapse-delayed-warnings. + +++ ** `set-auto-mode' now respects mode: local variables at the end of files, @@ -1354,48 +1485,76 @@ as well as those in the -*- line. --- ** rx.el has a new `group-n' construct for explicitly numbered groups. -** keymaps can inherit from multiple parents. - -** `debug-on-event' lets you debug Emacs when stuck because of inhibit-quit. ++++ +** New function `make-composed-keymap' that constructs a new keymap +from multiple input maps. You can use this to make a keymap that +inherits from multiple maps, eg: + (set-keymap-parent newmap (make-composed-keymap othermap parent)) +++ -** New reader macro ## which stands for the empty symbol. +** Set `debug-on-event' to make Emacs enter the debugger e.g. on receipt +of SIGUSR1. This can be useful when `inhibit-quit' is set. + ++++ +** New reader macro ## that stands for the empty symbol. This means that the empty symbol can now be read back. Also, #: by itself (when not immediately followed by a possible symbol character) stands for an empty uninterned symbol. ++++ +** New math functions `isnan', `copysign', `frexp', `ldexp'. + ** Obsolete functions and variables +--- +*** `tooltip-use-echo-area' is obsolete. +Rather than setting this to t, disable Tooltip mode instead. + ++++ *** buffer-substring-filters is obsolete. Use `filter-buffer-substring-functions' instead. +--- *** `byte-compile-disable-print-circle' is obsolete. +--- *** `deferred-action-list' and `deferred-action-function' are obsolete. +Use `post-command-hook' instead. + +++ *** `font-lock-maximum-size' is obsolete. * Changes in Emacs 24.1 on non-free operating systems -** New configure.bat option --enable-checking builds Emacs with extra -runtime checks. +--- +** On MS Windows, Emacs warns when using the obsolete init file _emacs, +and also when HOME is set to C:\ by default. -** New configure.bat option --distfiles to specify files to be -included in binary distribution. +** New configure.bat options -** New configure.bat option --without-gnutls to disable automatic -GnuTLS detection. ++++ +*** --enable-checking builds Emacs with extra runtime checks. -** New configure.bat option --lib for general library linkage, works -with the USER_LIBS build variable. ++++ +*** --distfiles specifies files to be included in binary distribution. ++++ +*** --without-gnutls disables automatic GnuTLS detection. + ++++ +*** --lib for general library linkage, works with the USER_LIBS build variable. + ++++ ** New make target `dist' to create binary distribution for MS Windows. -** Function `w32-default-color-map' is now obsolete. +--- +** The Lisp function `w32-default-color-map' is now obsolete. +(It is only used internally in the Emacs C code.) -** On Nextstep/OSX, the menu bar can be hidden by customizing -ns-auto-hide-menu-bar. ++++ +** Customize ns-auto-hide-menu-bar to have the menu-bar hidden, but +reappear on mouse-over. (Requires OS X 10.6 or later.) ---------------------------------------------------------------------- diff --git a/etc/NEWS.23 b/etc/NEWS.23 index f9dbfa8adef..77ba82c15ad 100644 --- a/etc/NEWS.23 +++ b/etc/NEWS.23 @@ -24,12 +24,22 @@ require version 1.14 or later. See README.W32 and nt/INSTALL for details and pointers to URLs where the latest libpng can be downloaded. - +* Changes in Specialized Modes and Packages in Emacs 23.4 + +** EDE + +*** New variable `ede-project-directories'. +EDE now refuses to automatically load a project file (Project.ede) +unless the file is in one of the directories specified by this +variable. This reduces the risk of inadvertently loading malicious +project files. The commands `M-x ede-new' and `M-x ede' now offer to +save directories to `ede-project-directories'. + * Changes in Emacs 23.4 on non-free operating systems ** The MS-Windows port can now use more than 500MB of heap. Depending on the available virtual memory, Emacs on Windows can now -have up to 2GB of heap space. This allows, e.g., to visit several +have up to 2GB of heap space. This allows, e.g., visiting several large (> 256MB) files in the same session. diff --git a/etc/PROBLEMS b/etc/PROBLEMS index 78cb24b427d..675644f5654 100644 --- a/etc/PROBLEMS +++ b/etc/PROBLEMS @@ -352,7 +352,7 @@ There are two different protocols in general use. One of them uses the `flock' system call. The other involves creating a lock file; `movemail' must be able to write in /usr/spool/mail in order to do this. You control which one is used by defining, or not defining, -the macro MAIL_USE_FLOCK in config.h or the m- or s- file it includes. +the macro MAIL_USE_FLOCK in config.h or the m/ or s/ file it includes. IF YOU DON'T USE THE FORM OF INTERLOCKING THAT IS NORMAL ON YOUR SYSTEM, YOU CAN LOSE MAIL! @@ -2744,7 +2744,7 @@ value in the man page for a.out (5). initialized variables. Emacs makes all initialized variables in most of its files pure after dumping, but the variables declared static and not initialized are not supposed to be pure. On these systems you -may need to add "#define static" to the m- or the s- file. +may need to add "#define static" to config.h. * Runtime problems on legacy systems diff --git a/etc/TODO b/etc/TODO index 411581673e3..db1d50192f2 100644 --- a/etc/TODO +++ b/etc/TODO @@ -71,6 +71,12 @@ things in their .emacs. ** See if other files can use generated-autoload-file (see eg ps-print). +** Write more tests. Pick a fixed bug from the database, write a test +case to make sure it stays fixed. Or pick your favorite programming +major-mode, and write a test for its indentation. Or a version +control backend, and write a test for its status parser. Etc. +See test/automated for examples. + * Small but important fixes needed in existing features: ** Flymake's customization mechanism needs to be both simpler (fewer diff --git a/etc/tutorials/TUTORIAL b/etc/tutorials/TUTORIAL index 12b22f83245..ccd438ad629 100644 --- a/etc/tutorials/TUTORIAL +++ b/etc/tutorials/TUTORIAL @@ -379,7 +379,7 @@ Reinsertion of killed text is called "yanking". Generally, the commands that can remove a lot of text kill the text (they are set up so that you can yank the text), while the commands that remove just one character, or only remove blank lines and spaces, do deletion (so you -cannot yank that text). and C-d do deletion in the simplest +cannot yank that text). and C-d do deletion in the simplest case, with no argument. When given an argument, they kill instead. >> Move the cursor to the beginning of a line which is not empty. @@ -577,7 +577,6 @@ Most of the time, the buffer's name is the same as the file name The buffer list you make with C-x C-b shows you both the buffer name and the file name of every buffer. -ANY text you see in an Emacs window is always part of some buffer. Some buffers do not correspond to files. The buffer named "*Buffer List*", which contains the buffer list that you made with C-x C-b, does not have any file. This TUTORIAL buffer initially did diff --git a/etc/tutorials/TUTORIAL.bg b/etc/tutorials/TUTORIAL.bg index 22f96f169b9..91198961bff 100644 --- a/etc/tutorials/TUTORIAL.bg +++ b/etc/tutorials/TUTORIAL.bg @@ -1,4 +1,4 @@ -Âúâåäåíèåòî íà Åìàêñ. Óñëîâèÿòà çà êîïèðàíå ñà â êðàÿ íà òåêñòà. +Âúâåäåíèå â Åìàêñ. Óñëîâèÿòà çà êîïèðàíå ñà â êðàÿ íà òåêñòà. Êîìàíäèòå íà Åìàêñ íàé-÷åñòî âêëþ÷âàò êëàâèøèòå CONTROL (ïîíÿêîãà îòáåëÿçâàí ñ CTRL èëè CTL) è META (ïîíÿêîãà îòáåëÿçâàí ñ EDIT èëè @@ -14,14 +14,14 @@ ALT). êëàâèøà ESC è ñëåä òîâà âúâåäåòå <çíàê>. Íèå çàïèñâàìå , çà äà îòáåëåæèì êëàâèøà ESC. -Âàæíà áåëåæêà: â êðàÿ íà Åìàêñ ñåñèÿòà âúâåäåòå äâàòà çíàêà C-x C-c. -Çíàöèòå ">>" îòëÿâî âè äàâàò óêàçàíèå äà èçïúëíèòå êîìàíäà. Íàïðèìåð: +Âàæíà áåëåæêà: â êðàÿ íà Åìàêñ ñåñèÿòà âúâåäåòå C-x C-c. (Äâà çíàêà.) +Çà äà ïðåêúñíåòå ÷àñòè÷íî âúâåäåíà êîìàíäà, èçïîëçâàéòå C-g. +Çíàöèòå „>>“ îòëÿâî âè äàâàò óêàçàíèå äà èçïúëíèòå êîìàíäà. Íàïðèìåð: <> ->> Ñåãà âúâåäåòå C-v (Ïîêàæè ñëåäâàùèÿ åêðàí), çà äà ñå ïðèäâèæèòå êúì -ñëåäâàùèÿ åêðàí. - (Íàïðàâåòå ãî ñåãà, çàäðúæòå CONTROL, äîêàòî íàòèñêàòå v). - Îòñåãà íàòàòúê âèå ùå ïðàâèòå òîâà âèíàãè, êîãàòî ïðî÷åòåòå - åêðàíà. +>> Ñåãà âúâåäåòå C-v (Ïîêàçâàíå íà ñëåäâàùèÿ åêðàí), çà äà ñå ïðèäâèæèòå + êúì ñëåäâàùèÿ åêðàí. (Íàïðàâåòå ãî ñåãà, çàäðúæòå CONTROL, + äîêàòî íàòèñêàòå „v“). Îòñåãà íàòàòúê âèå ùå ïðàâèòå òîâà âèíàãè, + êîãàòî ïðî÷åòåòå åêðàíà. Çàáåëåæåòå, ÷å èìà ïðèïîêðèâàíå íà äâà ðåäà, êîãàòî ñå ïðèäâèæâàòå îò åêðàí â åêðàí; òîâà îñèãóðÿâà íÿêàêâà ïðèåìñòâåíîñò, òàêà ÷å äà ìîæåòå @@ -30,8 +30,8 @@ ALT). Ïúðâîòî íåùî, êîåòî òðÿáâà äà çíàåòå, å êàê äà ñå ïðèäâèæâàòå îò åäíî ìÿñòî íà òåêñòà êúì äðóãî. Âèå âå÷å çíàåòå êàê äà ñå ïðèäâèæâàòå åêðàí íàïðåä, ñ C-v. Çà äà ñå ïðèäâèæèòå åêðàí íàçàä, âúâåäåòå M-v -(çàäðúæòå êëàâèøà META è íàòèñíåòå v, èëè âúâåäåòå v, àêî íÿìàòå -êëàâèø META, EDIT èëè ALT). +(çàäðúæòå êëàâèøà META è íàòèñíåòå „v“, èëè âúâåäåòå è ïîñëå „v“, +àêî íÿìàòå êëàâèø META, EDIT èëè ALT). >> Îïèòàéòå ñå äà âúâåäåòå M-v è ñëåä òîâà C-v íÿêîëêî ïúòè. @@ -49,7 +49,11 @@ ALT). >> Íàìåðåòå êóðñîðà è ñè çàïîìíåòå êàêúâ å òåêñòúò îêîëî íåãî. Ñëåä òîâà âúâåäåòå C-l. - Íàìåðåòå ïàê êóðñîðà è âèæòå, ÷å ñúùèÿò òåêñò å ïàê îêîëî êóðñîðà. + Íàìåðåòå ïàê êóðñîðà è âèæòå, ÷å ñúùèÿò òåêñò å ïàê îêîëî êóðñîðà, + íî ñåãà âå÷å â ñðåäàòà íà åêðàíà. + Àêî ïàê íàòèñíåòå C-l, òàçè ÷àñò îò òåêñòà ùå ñå ïðèäâèæè â ãîðíèÿ + êðàé íà åêðàíà. Íàòèñíåòå îòíîâî C-l è òîçè òåêñò ùå îòèäå â äîëíèÿ + êðàé íà åêðàíà. Ìîæå ñúùî äà èçïîëçâàòå êëàâèøèòå PageUp è PageDown çà ïðèäâèæâàíå ïî åêðàíè, àêî âàøèÿò òåðìèíàë ãè ïðèòåæàâà, íî âèå ìîæåòå äà ðåäàêòèðàòå @@ -65,7 +69,7 @@ ALT). Èìà íÿêîëêî íà÷èíà äà ãî íàïðàâèòå. Ìîæå äà èçïîëçâàòå êëàâèøèòå ñòðåëêè, íî å ïî-åôåêòèâíî äà äúðæèòå ðúöåòå ñè â ñòàíäàðòíî ïîëîæåíèå è äà èçïîëçâàòå êîìàíäèòå C-p, C-b, C-f è C-n. Òåçè çíàöè ñà -åêâèâàëåíòíè íà ÷åòèðèòå êëàâèøè ñòðåëêè, åòî òàêà: +åêâèâàëåíòíè íà ÷åòèðèòå êëàâèøè ñòðåëêè ïî ñëåäíèÿ íà÷èí: Ïðåäèøåí ðåä (Previous), C-p : @@ -76,38 +80,37 @@ ALT). Ñëåäâàù ðåä (Next), C-n >> Ïðèäâèæåòå êóðñîðà äî ðåäà â ñðåäàòà íà òàçè äèàãðàìà, èçïîëçâàéêè - C-n è C-p. Ñëåä òîâà íàòèñíåòå C-l, çà äà âèäèòå öÿëàòà äèàãðàìà, + C-n è C-p. Ñëåä òîâà íàòèñíåòå C-l è ùå âèäèòå öÿëàòà äèàãðàìà, öåíòðèðàíà íà åêðàíà. Ùå íàìåðèòå, ÷å çàïîìíÿíåòî íà òåçè áóêâè ïî äóìèòå íà àíãëèéñêè íà -äåéñòâèÿòà, êîèòî èçâúðøâàò, å ëåñíî: P çà Previous (ïðåäèøåí), N çà -Next (ñëåäâàù), B çà Backward (íàçàä) è F çà Forward (íàïðåä). Âèå ùå -èçïîëçâàòå òåçè îñíîâíè êîìàíäè çà ïðèäâèæâàíå íà êóðñîðà ïðåç öÿëîòî -âðåìå. +äåéñòâèÿòà, êîèòî èçâúðøâàò, å ëåñíî: „P“ çà Previous (ïðåäèøåí), „N“ +çà Next (ñëåäâàù), „B“ çà Backward (íàçàä) è „F“ çà Forward (íàïðåä). +Âèå ùå èçïîëçâàòå òåçè îñíîâíè êîìàíäè çà ïðèäâèæâàíå íà êóðñîðà ïðåç +öÿëîòî âðåìå. ->> Âúâåäåòå íÿêîëêî C-n, çà äà äîâåäåòå êóðñîðà äî òîçè ðåä. +>> Âúâåäåòå íÿêîëêî ïúòè C-n, çà äà äîâåäåòå êóðñîðà äî òîçè ðåä. ->> Ïðèäâèæåòå ñå â ðåäà ñ íÿêîëêî C-f è ñëåä òîâà ñ íÿêîëêî C-p. +>> Ïðèäâèæåòå ñå âúòðå â ðåäà ñ íÿêîëêî C-f è ñëåä òîâà ñ íÿêîëêî C-p. Âèæòå êàêâî ïðàâè C-p, êîãàòî êóðñîðúò å â ñðåäàòà íà ðåäà. Âñåêè ðåä îò òåêñò çàâúðøâà ñúñ çíàê çà íîâ ðåä, êîéòî ñëóæè çà -îòäåëÿíåòî íà ðåäà îò ñëåäâàùèÿ ðåä. Ïîñëåäíèÿò ðåä âúâ âàøèÿ ôàéë -òðÿáâà äà èìà çíàê çà íîâ ðåä â êðàÿ (íî Åìàêñ íå èçèñêâà òàêúâ, -êîãàòî ïðî÷èòà ôàéëà). +îòäåëÿíåòî íà ðåäà îò ñëåäâàùèÿ ðåä. (Ïîñëåäíèÿò ðåä âúâ âàøèÿ ôàéë +òðÿáâà äà èìà çíàê çà íîâ ðåä â êðàÿ, íî Åìàêñ íå èçèñêâà òàêúâ.) >> Îïèòàéòå C-b â íà÷àëîòî íà ðåä. Òîâà òðÿáâà äà âè ïðèäâèæè â êðàÿ íà ïðåäèøíèÿ ðåä. Òîâà å òàêà, çàùîòî êóðñîðúò ñå ïðèäâèæâà êúì çíàêà çà íîâ ðåä íà ïðåäèøíèÿ ðåä. -C-f ìîæå äà ïðèäâèæâà ïðåç çíàê çà íîâ ðåä òî÷íî êàêòî C-b. +C-f ìîæå äà ïðèäâèæâà ïðåç çíàê çà íîâ ðåä, òî÷íî êàêòî C-b. ->> Íàïðàâåòå íÿêîëêî C-b ïðèäâèæâàíèÿ, òàêà ÷å äà äîáèåòå óñåùàíå êúäå - ñå íàìèðà êóðñîðúò. Ñëåä òîâà íÿêîëêî C-f, çà äà ñå âúðíåòå â êðàÿ - íà ðåäà. Ñëåä òîâà îùå íÿêîëêî C-f, çà äà ñå ïðèäâèæèòå äî +>> Íàïðàâåòå íÿêîëêî ïðèäâèæâàíèÿ ñ C-b, òàêà ÷å äà äîáèåòå óñåùàíå + êúäå ñå íàìèðà êóðñîðúò. Ñëåä òîâà íÿêîëêî C-f, äîêàòî ñå âúðíåòå + â êðàÿ íà ðåäà. Ñëåä òîâà îùå íÿêîëêî C-f, çà äà ñå ïðèäâèæèòå äî ñëåäâàùèÿ ðåä. Êîãàòî ñå ïðèäâèæâàòå ñëåä ãîðíèÿ èëè äîëíèÿ êðàé íà åêðàíà, òåêñòúò -îòâúä êðàÿ ñå èçìåñòâà êúì åêðàíà. Òîâà ñå íàðè÷à "ñêðîëèðàíå". Òî +îòâúä êðàÿ ñå èçìåñòâà êúì åêðàíà. Òîâà ñå íàðè÷à „ñêðîëèðàíå“. Òî ïîçâîëÿâà íà Åìàêñ äà ïðèäâèæâà êóðñîðà êúì çàäàäåíîòî ìÿñòî â òåêñòà, áåç äà ãî èçêàðâà èçâúí åêðàíà. @@ -146,9 +149,8 @@ Control- êëàâèøíè êîìáèíàöèè íå ñà òî÷íî àíàëîãè÷íè, âñÿêà åäíà îò òÿõ èçãëåæäà åñòåñòâåíà. -Ïîëîæåíèåòî íà êóðñîðà â òåêñòà ñå íàðè÷à ñúùî "òî÷êà". -Ïåðåôðàçèðàíî, êóðñîðúò ïîêàçâà íà åêðàíà êúäå å ðàçïîëîæåíà òî÷êàòà â -òåêñòà. +Ïîëîæåíèåòî íà êóðñîðà â òåêñòà ñå íàðè÷à „òî÷êà“. Ïåðåôðàçèðàíî, +êóðñîðúò ïîêàçâà íà åêðàíà êúäå å ðàçïîëîæåíà òî÷êàòà â òåêñòà. Åòî îáîáùåíèå íà ïðîñòèòå äåéñòâèÿ, äâèæåùè êóðñîðà, âêëþ÷èòåëíî ïðèäâèæâàùèòå ïî äóìà è èçðå÷åíèå: @@ -175,7 +177,7 @@ Control- êîÿòî ïðèäâèæâà äî íà÷àëîòî íà öåëèÿ òåêñò, è M-> (Meta ïî-ãîëÿìî), êîÿòî ïðåìåñòâà äî êðàÿ íà öåëèÿ òåêñò. -Ïðè ïîâå÷åòî òåðìèíàëè çíàêúò "<" å îòáåëÿçàí íàä çàïåòàÿòà, òàêà ÷å +Ïðè ïîâå÷åòî òåðìèíàëè çíàêúò „<“ å îòáåëÿçàí íàä çàïåòàÿòà, òàêà ÷å òðÿáâà äà èçïîëçâàòå êëàâèøà Shift, çà äà ãî íàïèøåòå. Íà òåçè òåðìèíàëè òðÿáâà äà èçïîëçâàòå Shift, çà äà âúâåäåòå è M-<; áåç êëàâèøà Shift áèõòå âúâåëè M-çàïåòàÿ. @@ -206,17 +208,17 @@ Shift (èëè EDIT èëè ALT), èìà äðóã, àëòåðíàòèâåí íà÷èí äà âúâåäåòå ÷èñëîâ àðãóìåíò: âúâåäåòå öèôðèòå, äîêàòî çàäúðæàòå êëàâèøà META. Íèå ïðåïîðú÷âàìå äà íàó÷èòå íà÷èíà ñ C-u, çàùîòî òîé ðàáîòè íà êîéòî è äà -å òåðìèíàë. ×èñëîâèÿò àðãóìåíò ñå íàðè÷à ñúùî "ïðåôèêñåí àðãóìåíò", +å òåðìèíàë. ×èñëîâèÿò àðãóìåíò ñå íàðè÷à ñúùî „ïðåôèêñåí àðãóìåíò“, çàùîòî ãî âúâåæäàòå ïðåäè êîìàíäàòà, çà êîÿòî å ïðåäíàçíà÷åí. -Íàïðèìåð, C-u 8 C-f ïðèäâèæâà îñåì çíàêà íàïðåä. +Íàïðèìåð C-u 8 C-f ïðèäâèæâà îñåì çíàêà íàïðåä. >> Îïèòàéòå èçïîëçâàíåòî íà C-n èëè C-p ñ ÷èñëîâ àðãóìåíò, çà äà ïðèäâèæèòå êóðñîðà äî ðåä, áëèçúê äî òîçè, ñàìî ñ åäíà êîìàíäà. Ïîâå÷åòî êîìàíäè èçïîëçâàò ÷èñëîâèÿ àðãóìåíò êàòî áðîÿ÷ íà ïîâòîðåíèÿòà, íî íÿêîè ãî èçïîëçâàò çà äðóãè öåëè. Íÿêîëêî êîìàíäè -(íî íèêîÿ îò òåçè, êîèòî ñòå íàó÷èëè äîñåãà) ãî èçïîëçâàò êàòî ôëàã -- +(íî íèêîÿ îò òåçè, êîèòî ñòå íàó÷èëè äîñåãà) ãî èçïîëçâàò êàòî ôëàã – ïðèñúñòâèåòî íà ÷èñëîâ àðãóìåíò, íåçàâèñèìî îò ñòîéíîñòà ìó, êàðà êîìàíäàòà äà âúðøè íåùî ðàçëè÷íî. @@ -234,13 +236,8 @@ C-v bar), â ëÿâàòà ñòðàíà íà ïðîçîðåöà íà Åìàêñ. Âèå ìîæåòå äà ñêðîëèðàòå òåêñòà, ùðàêàéêè ñ ìèøêàòà â ïëúçãà÷à. ->> Îïèòàéòå äà íàòèñíåòå ñðåäíèÿ áóòîí íà âúðõà íà îñâåòåíàòà îáëàñò - âúòðå â ïëúçãà÷à. Òîâà áè òðÿáâàëî äà ñêðîëèðà òåêñòà êúì - ïîëîæåíèå, îïðåäåëåíî îò òîâà êîëêî âèñîêî èëè íèñêî ñòå ùðàêíàëè. - ->> Îïèòàéòå ñå äà äâèæèòå ìèøêàòà íàãîðå è íàäîëó, äîêàòî ñòå - çàäúðæàëè äåñíèÿ áóòîí íàòèñíàò. Ùå âèäèòå, ÷å òåêñòúò ñå ñêðîëèðà - íàãîðå è íàäîëó, êàòî äâèæèòå ìèøêàòà. +Àêî âàøàòà ìèøêà èìà òúðêàëöå, ìîæåòå è íåãî äà èçïîëçâàòå çà +ñêðîëèðàíå. * ÊÎÃÀÒÎ ÅÌÀÊÑ Å ÁËÎÊÈÐÀË @@ -263,7 +260,7 @@ bar), * ÇÀÁÐÀÍÅÍÈ ÊÎÌÀÍÄÈ ------------------- -Íÿêîè êîìàíäè íà Åìàêñ ñà "çàáðàíåíè", òàêà ÷å íà÷èíàåùèòå ïîòðåáèòåëè +Íÿêîè êîìàíäè íà Åìàêñ ñà „çàáðàíåíè“, òàêà ÷å íà÷èíàåùèòå ïîòðåáèòåëè äà íå ìîãàò äà ãè óïîòðåáÿò ïî ïîãðåøêà. Àêî âúâåäåòå íÿêîÿ îò çàáðàíåíèòå êîìàíäè, Åìàêñ èçâåæäà ñúîáùåíèå, @@ -272,16 +269,16 @@ bar), Àêî íàèñòèíà èñêàòå äà èçïðîáâàòå êîìàíäàòà, âúâåäåòå êëàâèøà èíòåðâàë â îòãîâîð íà âúïðîñà. Îáèêíîâåíî àêî íå èñêàòå äà èçïúëíèòå -çàáðàíåíàòà êîìàíäà, îòãîâàðÿòå íà âúïðîñà ñ "n". +çàáðàíåíàòà êîìàíäà, îòãîâàðÿòå íà âúïðîñà ñ „n“. >> Âúâåäåòå C-x C-l (êîÿòî å çàáðàíåíà êîìàíäà), è ñëåä òîâà âúâåäåòå - "n" â îòãîâîð íà âúïðîñà. + „n“ â îòãîâîð íà âúïðîñà. * ÏÐÎÇÎÐÖÈ ---------- -Åìàêñ ìîæå äà óïðàâëÿâà íÿêîëêî ïðîçîðåöà, âñåêè èçâåæäàéêè ñâîé +Åìàêñ ìîæå äà óïðàâëÿâà íÿêîëêî „ïðîçîðåöà“, âñåêè èçâåæäàéêè ñâîé ñîáñòâåí òåêñò. Íèå ùå îáÿñíèì ïî-êúñíî êàê äà èçïîëçâàòå íÿêîëêî ïðîçîðåöà. Òî÷íî ñåãà íèå èñêàìå äà îáÿñíèì êàê äà ñå îòúðâåòå îò äîïúëíèòåëíè ïðîçîðöè è äà ñå âúðíåòå êúì îñíîâíîòî ðåäàêòèðàíå ñ åäèí @@ -301,57 +298,52 @@ bar), >> Âúâåäåòå C-x 1 è âèæòå êàê ïðîçîðåöúò ñ äîêóìåíòàöèÿòà èç÷åçâà. Òàçè êîìàíäà íå å êàòî äðóãèòå êîìàíäè, êîèòî ñòå íàó÷èëè, â òîâà -îòíîøåíèå, ÷å ñå ñúñòîè îò äâà çíàêà. Çàïî÷âà ñúñ çíàêà C-x. Èìà -öÿëà ðåäèöà îò êîìàíäè, êîèòî çàïî÷âàò ñ C-x; ìíîãî îò òÿõ èìàò íåùî -îáùî ñ ïðîçîðöè, ôàéëîâå, áóôåðè è ñâúðçàíèòå ñ òÿõ íåùà. Òåçè -êîìàíäè ñà îò äâà, òðè èëè ÷åòèðè çíàêà. +îòíîøåíèå, ÷å ñå ñúñòîè îò äâà çíàêà. Çàïî÷âà ñúñ çíàêà CONTROL-x. +Èìà öÿëà ðåäèöà îò êîìàíäè, êîèòî çàïî÷âàò ñ CONTROL-x; ìíîãî îò òÿõ +èìàò íåùî îáùî ñ ïðîçîðöè, ôàéëîâå, áóôåðè è ñâúðçàíèòå ñ òÿõ íåùà. +Òåçè êîìàíäè ñà îò äâà, òðè èëè ÷åòèðè çíàêà. * ÂÌÚÊÂÀÍÅ È ÈÇÒÐÈÂÀÍÅ ---------------------- Àêî èñêàòå äà âìúêíåòå òåêñò, ïðîñòî ãî âúâåäåòå. Çíàöèòå, êîèòî -ìîãàò äà ñå âèæäàò, êàòî À, 7, * è ò.í., ñå âúçïðèåìàò îò Åìàêñ êàòî -òåêñò è ñå âìúêâàò âåäíàãà. Âúâåäåòå (êëàâèøúò çà âðúùàíå â -íà÷àëîòî íà ðåäà), çà äà âìúêíåòå çíàê çà íîâ ðåä. +ìîãàò äà ñå âèæäàò, êàòî À, 7, * è ò.í., ñå âìúêâàò âåäíàãà. Çà äà +âìúêíåòå çíàê çà íîâ ðåä, íàòèñíåòå (òîâà å êëàâèøúò, êîéòî +ïîíÿêîãà å îòáåëÿçâàí êàòî „Enter“). -Ìîæå äà èçòðèåòå ïîñëåäíèÿ çíàê, êîéòî ñòå âúâåëè, ñ âúâåæäàíå íà -. å êëàâèø îò êëàâèàòóðàòà -- ñúùèÿò, êîéòî -îáèêíîâåíî èçïîëçâàòå èçâúí Åìàêñ, çà äà èçòðèåòå ïîñëåäíèÿ âúâåäåí îò -âàñ çíàê. Îáèêíîâåíî å ãîëÿì êëàâèø, íà íÿêîëêî ðåäà ðàçñòîÿíèå îò -êëàâèøà , è îáèêíîâåíî å îòáåëÿçàí ñ "Delete", "Del" èëè -"Backspace". +Çà äà èçòðèåòå çíàêà íåïîñðåäñòâåíî ïðåäè òåêóùîòî ïîëîæåíèå íà +êóðñîðà, âúâåäåòå . Îáèêíîâåíî òîâà å êëàâèøúò, îòáåëÿçâàí êàòî +„Backspace“ – íîðìàëíèÿò çà òîâà äåéñòâèå è èçâúí Åìàêñ. -Àêî ãîëåìèÿò êëàâèø òàì å ñ åòèêåò "Backspace", òîãàâà òîé å òîçè, -êîéòî ùå èçïîëçâàòå çà . Ìîæå äà èìà îùå åäèí êëàâèø ñ -åòèêåò "Delete" íÿêúäå äðóãàäå, íî òîé íå å . +Ìîæå äà èìà îùå åäèí êëàâèø ñ åòèêåò íÿêúäå äðóãàäå, íî òîé +íå å , çà êîéòî ñòàâà âúïðîñ òóê. -Ïî-îáùî êàçàíî, èçòðèâà çíàêà òî÷íî ïðåäè òåêóùîòî ìÿñòî íà -êóðñîðà. - ->> Íàïðàâåòå òîâà ñåãà -- íàïèøåòå íÿêîëêî çíàêà, ïîñëå ãè èçòðèéòå ñ - âúâåæäàíå íà íÿêîëêî ïúòè. Íå ñå áåçïîêîéòå, ÷å òîçè - ôàéë ùå áúäå ïðîìåíåí; âèå íÿìà äà ïðîìåíèòå ïúðâîíà÷àëíîòî - âúâåäåíèå. Òîâà å âàøå ëè÷íî êîïèå. +>> Íàïðàâåòå òîâà ñåãà – íàïèøåòå íÿêîëêî çíàêà, ïîñëå ãè èçòðèéòå ñ + âúâåæäàíå íà íÿêîëêî ïúòè. Íå ñå áåçïîêîéòå, ÷å òîçè ôàéë ùå + áúäå ïðîìåíåí; âèå íÿìà äà ïðîìåíèòå ïúðâîíà÷àëíîòî âúâåäåíèå. + Òîâà å âàøå ëè÷íî êîïèå. Êîãàòî ðåä îò òåêñòà ñòàíå òâúðäå äúëúã, çà äà ñå ñúáåðå â ðåä îò -åêðàíà, ðåäúò îò òåêñòà ñå "ïðîäúëæàâà" íà ñëåäâàùèÿ ðåä. Îáðàòíà -íàêëîíåíà ÷åðòà ("\") (èëè, àêî èçïîëçâàòå ãðàôè÷åí èíòåðôåéñ, ìàëêà -èçêðèâåíà ñòðåëêà) â äÿñíàòà ãðàíèöà îòáåëÿçâà ðåä, êîéòî å áèë -ïðîäúëæåí. +åêðàíà, ðåäúò îò òåêñòà ñå „ïðîäúëæàâà“ íà ñëåäâàùèÿ ðåä. Àêî +èçïîëçâàòå ãðàôè÷åí äèñïëåé, â ìàëêîòî ïðîñòðàíñòâî îòñòðàíè íà òåêñòà +(ëåâèÿò è äåñíèÿò „ðúá“) ùå ñå ïîÿâÿò ìàëêè èçâèòè ñòðåëêè çà +îòáåëÿçâàíå êúäå ðåäúò ïðîäúëæàâà. Àêî èçïîëçâàòå òåêñòîâ òåðìèíàë, +ïðîäúëæåíèòå ðåäîâå ñå îòáåëÿçâàò ñ îáðàòíà íàêëîíåíà ÷åðòà („\“) â +íàé-äÿñíàòà êîëîíà íà ïðîçîðåöà. >> Âúâåäåòå òåêñò, äîêàòî ñòèãíåòå äÿñíàòà ãðàíèöà, è ïðîäúëæåòå ñ âìúêâàíåòî. Ùå âèäèòå ïðîäúëæåíèåòî íà ðåäà äà ñå ïîêàçâà. ->> Èçïîëçâàéòå íÿêîëêî , çà äà èçòðèåòå òåêñòà, äîêàòî ðåäúò - ñå âìåñòè â åäèí åêðàíåí ðåä. Ïðîäúëæåíèåòî íà ðåäà èç÷åçâà. +>> Èçïîëçâàéòå íÿêîëêî , çà äà èçòðèåòå òåêñòà, äîêàòî ðåäúò ñå + âìåñòè â åäèí åêðàíåí ðåä. Ïðîäúëæåíèåòî íà ðåäà èç÷åçâà. Ìîæå äà èçòðèåòå çíàêà çà íîâ ðåä òî÷íî êàêòî âñåêè äðóã çíàê. Èçòðèâàíåòî íà çíàêà çà íîâ ðåä ìåæäó äâà ðåäà ãè ñëèâà â åäèí ðåä. Àêî ïîëó÷åíèÿò êîìáèíèðàí ðåä å òâúðäå äúëúã, çà äà ñå âìåñòè â øèðèíàòà íà åêðàíà, òîé ùå áúäå ïîêàçàí êàòî ïðîäúëæåí ðåä. ->> Ïðèäâèæåòå êóðñîðà â íà÷àëîòî íà ðåä è âúâåäåòå . Òîâà ùå +>> Ïðèäâèæåòå êóðñîðà â íà÷àëîòî íà ðåä è âúâåäåòå . Òîâà ùå ñëåå òîçè ðåä ñ ïðåäèøíèÿ. >> Âúâåäåòå , çà äà âìúêíåòå íàíîâî çíàêà çà íîâ ðåä, êîéòî @@ -361,48 +353,52 @@ bar), íà ïîâòîðåíèÿòà; òîâà âêëþ÷âà âìúêâàíåòî íà òåêñòîâè çíàöè. Ïîâòàðÿíåòî íà òåêñòîâ çíàê ãî âìúêâà íÿêîëêî ïúòè. ->> Îïèòàéòå òîâà ñåãà -- âúâåäåòå C-u 8 *, çà äà âìúêíåòå ********. +>> Îïèòàéòå òîâà ñåãà – âúâåäåòå C-u 8 *, çà äà âìúêíåòå ********. Ñåãà âèå ñòå íàó÷èëè íàé-îñíîâíèòå íà÷èíè çà âúâåæäàíå íà íåùî â Åìàêñ è ïîïðàâÿíå íà ãðåøêè. Ìîæåòå ñúùî òàêà äà èçòðèâàòå äóìè èëè ðåäîâå. Åòî îáîáùåíèå íà èçòðèâàùèòå äåéñòâèÿ: - èçòðèâàíå íà çíàêà òî÷íî ïðåäè êóðñîðà - C-d èçòðèâàíå íà çíàêà òî÷íî ñëåä êóðñîðà + Èçòðèâàíå íà çíàêà òî÷íî ïðåäè êóðñîðà + C-d Èçòðèâàíå íà çíàêà òî÷íî ñëåä êóðñîðà - M- èçòðèâàíå íà äóìàòà íåïîñðåäñòâåíî ïðåäè êóðñîðà - M-d èçòðèâàíå íà äóìàòà ñëåä êóðñîðà + M- Èçòðèâàíå íà äóìàòà íåïîñðåäñòâåíî ïðåäè êóðñîðà + M-d Èçòðèâàíå íà äóìàòà ñëåä êóðñîðà - C-k èçòðèâàíå îò ìÿñòîòî íà êóðñîðà äî êðàÿ íà ðåäà - M-k èçòðèâàíå äî êðàÿ íà òåêóùîòî èçðå÷åíèå + C-k Èçòðèâàíå îò ìÿñòîòî íà êóðñîðà äî êðàÿ íà ðåäà + M-k Èçòðèâàíå äî êðàÿ íà òåêóùîòî èçðå÷åíèå -Çàáåëåæåòå, ÷å è C-d, ñðàâíåíè ñ M- è M-d, -ðàçøèðÿâàò ïîäîáèåòî, çàïî÷íàòî îò C-f è M-f (äîáðå, íå å -íàèñòèíà êîíòðîëèðàù çíàê, íî íåêà íå ñå áåçïîêîèì çà òîâà). C-k è -M-k ñà ïîäîáíè íà C-e è M-e â ñìèñúë, ÷å åäíèòå ñà çà ðåäîâå, à -äðóãèòå -- çà èçðå÷åíèÿ. +Çàáåëåæåòå, ÷å è C-d, ñðàâíåíè ñ M- è M-d, ðàçøèðÿâàò +ïîäîáèåòî, çàïî÷íàòî îò C-f è M-f (äîáðå, íå å íàèñòèíà +êîíòðîëèðàù çíàê, íî íåêà íå ñå áåçïîêîèì çà òîâà). C-k è M-k ñà +ïîäîáíè íà C-e è M-e â ñìèñúë, ÷å åäíèòå ñà çà ðåäîâå, à äðóãèòå – çà +èçðå÷åíèÿ. -Ìîæåòå ñúùî äà ïðåìàõíåòå âñÿêà ÷àñò îò áóôåðà ñ åäèí óíèâåðñàëåí -íà÷èí. Ïðèäâèæåòå ñå äî åäèíèÿ êðàé íà ÷àñòòà è âúâåäåòå C-@ èëè -C-èíòåðâàë (êîåòî è äà å îò äâåòå). Ïðèäâèæåòå ñå äî äðóãèÿ êðàé íà -÷àñòòà è âúâåäåòå C-w. Òîâà ùå èçðåæå öåëèÿ òåêñò ìåæäó òåçè äâà -êðàÿ. +Ìîæåòå ñúùî äà ïðåìàõíåòå âñÿêà ÷àñò îò òåêñòà ïî åäèí óíèâåðñàëåí +íà÷èí. Ïðèäâèæåòå ñå äî åäèíèÿ êðàé è âúâåäåòå C- ( å +èíòåðâàëúò).. Ïðèäâèæåòå ñå äî äðóãèÿ êðàé íà òåêñòà, êîéòî èñêàòå äà +èçòðèåòå. Äîêàòî ãî ïðàâèòå, Åìàêñ îñâåòÿâà òåêñòúò ìåæäó êóðñîðà è +ìÿñòîòî, êúäåòî ñå âúâåëè C-. Íàêðàÿ âúâåäåòå C-w. Òîâà ùå +èçðåæå öåëèÿ òåêñò ìåæäó òåçè äâà êðàÿ. ->> Ïðèäâèæåòå êóðñîðà äî çíàêà "Ì" â íà÷àëîòî íà ïðåäèøíèÿ àáçàö. ->> Âúâåäåòå C-èíòåðâàë. Åìàêñ òðÿáâà äà èçâåäå ñúîáùåíèå "Mark set" â +>> Ïðèäâèæåòå êóðñîðà äî çíàêà „Ì“ â íà÷àëîòî íà ïðåäèøíèÿ àáçàö. +>> Âúâåäåòå C-. Åìàêñ òðÿáâà äà èçâåäå ñúîáùåíèå „Mark set“ â äîëíèÿ êðàé íà åêðàíà. ->> Ïðèäâèæåòå êóðñîðà äî áóêâàòà "ð" â "êðàé" íà âòîðèÿ ðåä îò àáçàöà. ->> Âúâåäåòå C-w. Òîâà ùå èçðåæå òåêñòà, çàïî÷âàù îò "Ì" è çàâúðøâàù - òî÷íî ïðåäè "ð". +>> Ïðèäâèæåòå êóðñîðà äî áóêâàòà „ð“ â „êðàé“ íà âòîðèÿ ðåä îò àáçàöà. +>> Âúâåäåòå C-w. Òîâà ùå èçðåæå òåêñòà, çàïî÷âàù îò „Ì“ è çàâúðøâàù + òî÷íî ïðåäè „ð“. -Ðàçëèêàòà ìåæäó "èçðÿçâàíå" (kill, cut) è "èçòðèâàíå" (delete) å, ÷å -"èçðÿçàíèÿò" òåêñò ìîæå äà áúäå âìúêíàò íàíîâî, äîêàòî "èçòðèòèòå" -íåùà íå ìîãàò äà ñå âìúêíàò íàíîâî. Ïîñòàâÿíåòî íàíîâî íà èçðÿçàí -òåêñò ñå íàðè÷à "âìúêâàíå" (yank, paste). Îáùî êàçàíî, êîìàíäèòå, -êîèòî îòñòðàíÿâàò ìíîãî òåêñò, ãî èçðÿçâàò (òàêà ÷å òîé äà ìîæå äà -áúäå âìúêíàò), äîêàòî êîìàíäèòå, êîèòî îòñòðàíÿâàò ñàìî åäèí çíàê èëè +Ðàçëèêàòà ìåæäó „èçðÿçâàíå“ (kill, cut) è „èçòðèâàíå“ (delete) å, ÷å +„èçðÿçàíèÿò“ òåêñò ìîæå äà áúäå âìúêíàò íàíîâî, äîêàòî „èçòðèòèòå“ +íåùà íå ìîãàò äà ñå âìúêíàò íàíîâî (îáà÷å ìîæåòå äà îòìåíèòå +èçòðèâàíåòî – âæ. ïî-äîëó). Ïîñòàâÿíåòî íàíîâî íà èçðÿçàí òåêñò ñå +íàðè÷à „âìúêâàíå“ (yank, paste). Îáùî êàçàíî, êîìàíäèòå, êîèòî +îòñòðàíÿâàò ìíîãî òåêñò, ãî èçðÿçâàò (òàêà ÷å òîé äà ìîæå äà áúäå +âìúêíàò), äîêàòî êîìàíäèòå, êîèòî îòñòðàíÿâàò ñàìî åäèí çíàê èëè èçòðèâàò ñàìî ïðàçíè ðåäîâå è çíàöè, èçâúðøâàò èçòðèâàíå (òàêà ÷å íå -ìîæåòå äà âìúêíåòå íàíîâî òîçè òåêñò). +ìîæåòå äà âìúêíåòå íàíîâî òîçè òåêñò). è C-d èçòðèâàò â +îáèêíîâåíèÿ ñëó÷àé, êîãàòî íÿìà ïðåôèêñåí àðãóìåíò. Ïðè íàëè÷èå íà +àðãóìåíò òå îòðÿçâàò. >> Ïðèäâèæåòå êóðñîðà äî íà÷àëîòî íà ðåä, êîéòî íå å ïðàçåí. Òîãàâà âúâåäåòå C-k, çà äà èçðåæåòå òåêñòà íà òîçè ðåä. @@ -414,14 +410,16 @@ C-k C-k îáðàáîòâà ÷èñëîâèòå àðãóìåíòè ïî ñïåöèàëåí íà÷èí: ïðåìàõâàò ñå òîëêîâà íà áðîé ðåäîâå È òÿõíîòî ñúäúðæàíèå. Òîâà íå å ïðîñòî ïîâòîðåíèå. C-u 2 C-k èçðÿçâà äâà ðåäà è òåõíèòå çíàöè çà íîâ ðåä; -âúâåæäàíåòî íà C-k äâà ïúòè íå ïðàâè òîâà. +âúâåæäàíåòî äâà ïúòè íà C-k íå ïðàâè òîâà. -Âðúùàíåòî îáðàòíî íà òåêñò ñå íàðè÷à "âìúêâàíå". (Ìèñëåòå çà íåãî +Âðúùàíåòî îáðàòíî íà òåêñò ñå íàðè÷à „âìúêâàíå“. (Ìèñëåòå çà íåãî êàòî çà èçâàæäàíå îáðàòíî, èëè äðúïâàíå îáðàòíî, íà òåêñò, êîéòî å áèë èçðÿçàí.) Ìîæåòå äà âìúêâàòå èçðÿçàíèÿ òåêñò èëè íà ñúùîòî ìÿñòî, -îòêúäåòî å áèë ïðåìàõíàò, èëè íà äðóãî ìÿñòî â áóôåðà, äàæå è â +îòêúäåòî å áèë ïðåìàõíàò, èëè íà äðóãî ìÿñòî â áóôåðà, èëè äàæå â ðàçëè÷åí ôàéë. Ìîæåòå äà âìúêâàòå åäèí è ñúù òåêñò íÿêîëêî ïúòè; òîâà -ïðàâè íÿêîëêî êîïèÿ îò íåãî. +ïðàâè íÿêîëêî êîïèÿ îò íåãî. Íÿêîè äðóãè ðåäàêòîðè íàðè÷àò +èçðÿçâàíåòî (kill) è âìúêâàíåòî (yank) ñúîòâåòíî èçðÿçâàíå (cut) è +ïîñòàâÿíå (paste) (âæ. Ðå÷íèêà íà Ðúêîâîäñòâîòî íà Åìàêñ). Êîìàíäàòà çà âìúêâàíå å C-y. Òÿ âìúêâà íàíîâî ïîñëåäíèÿ èçðÿçàí òåêñò â òåêóùîòî ìÿñòî íà êóðñîðà. @@ -466,31 +464,30 @@ C-k -------- Àêî íàïðàâèòå ïðîìÿíà â òåêñòà è ñëåä òîâà ðåøèòå, ÷å òîâà å áèëî -ãðåøêà, âèå ìîæåòå äà îòìåíèòå ïðîìÿíàòà ñ êîìàíäàòà çà îòìåíÿíå, C-x -u. +ãðåøêà, âèå ìîæåòå äà îòìåíèòå ïðîìÿíàòà ñ êîìàíäàòà çà îòìåíÿíå, C-/. -Îáèêíîâåíî C-x u îòìåíÿ ïðîìåíèòå, íàïðàâåíè îò åäíà êîìàíäà; àêî -ïîâòàðÿòå C-x u íÿêîëêî ïúòè ïîñëåäîâàòåëíî, âñÿêî ïîâòîðåíèå îòìåíÿ -îùå åäíà êîìàíäà. +Îáèêíîâåíî C-/ îòìåíÿ ïðîìåíèòå, íàïðàâåíè îò åäíà êîìàíäà; àêî +ïîâòàðÿòå C-/ íÿêîëêî ïúòè ïîñëåäîâàòåëíî, âñÿêî ïîâòîðåíèå îòìåíÿ îùå +åäíà êîìàíäà. Íî èìà äâå èçêëþ÷åíèÿ: êîìàíäèòå, êîèòî íå ïðîìåíÿò òåêñòà, íå ñå áðîÿò (òîâà âêëþ÷âà ïðèäâèæâàíåòî íà êóðñîðà è ñêðîëèðàùèòå êîìàíäè), è ñàìîâìúêâàùèòå ñå çíàöè îáèêíîâåíî ñå îáðàáîòâàò íà ãðóïè, âñÿêà äî -20 çíàêà. (Òîâà íàìàëÿâà áðîÿ íà C-x u, êîèòî òðÿáâà äà âúâåäåòå, çà -äà îòìåíèòå âúâåäåí òåêñò.) +20 çíàêà. (Òîâà íàìàëÿâà áðîÿ íà C-/, êîèòî òðÿáâà äà âúâåäåòå, çà äà +îòìåíèòå âúâåäåí òåêñò.) ->> Èçðåæåòå òîçè ðåä ñ C-k, ñëåä òîâà âúâåäåòå C-x u è òîé òðÿáâà äà - ñå ïîÿâè îòíîâî. +>> Èçðåæåòå òîçè ðåä ñ C-k, ñëåä òîâà âúâåäåòå C-/ è òîé òðÿáâà äà ñå + ïîÿâè îòíîâî. -C-_ å àëòåðíàòèâíà îòìåíÿùà êîìàíäà; òÿ ðàáîòè òî÷íî êàòî C-x u, íî å -ïî-ëåñíà çà âúâåæäàíå íÿêîëêî ïúòè ïîñëåäîâàòåëíî. Íåäîñòàòúêúò íà -C_- å, ÷å íà íÿêîè êëàâèàòóðè íå å î÷åâèäíî êàê òðÿáâà äà ñå âúâåäå. -Çàòîâà îñèãóðÿâàìå è C-x u. Íà íÿêîè òåðìèíàëè ìîæå äà âúâåäåòå C-_ ñ -âúâåæäàíå íà /, äîêàòî çàäúðæàòå CONTROL. +C-_ å àëòåðíàòèâíà îòìåíÿùà êîìàíäà; òÿ ðàáîòè òî÷íî êàòî C-/. Íà +íÿêîè òåðìèíàëè âúâåæäàíåòî íà C-/ âñúùíîñò èçïðàùà C-_ íà Åìàêñ. +Êàòî àëòåðíàòèâà, C-x u ðàáîòè òî÷íî êàòî C-/, íî å ïî-íåóäîáíà çà +âúâåæäàíå. -×èñëîâ àðãóìåíò êúì C-_ èëè C-x u äåéñòâà êàòî áðîÿ÷ íà ïîâòîðåíèÿòà. +×èñëîâ àðãóìåíò êúì C-/, C-_ èëè C-x u äåéñòâà êàòî áðîÿ÷ íà +ïîâòîðåíèÿ. -Ìîæå äà îòìåíÿòà èçòðèâàíå íà òåêñò òî÷íî êàêòî îòìåíÿòå èçðÿçâàíå íà +Ìîæå äà îòìåíÿòå èçòðèâàíå íà òåêñò òî÷íî êàêòî îòìåíÿòå èçðÿçâàíå íà òåêñò. Ðàçëè÷èåòî ìåæäó èçðÿçâàíåòî íà íåùî è èçòðèâàíåòî ìó âúçäåéñòâà äàëè ùå ìîæå äà ãî èçâàäèòå ñ C-y; çà îòìåíÿíåòî íÿìà ðàçëèêà ìåæäó äâàòà âèäà. @@ -501,35 +498,35 @@ C_- Çà äà íàïðàâèòå òåêñòà, êîéòî ðåäàêòèðàòå, ïîñòîÿíåí, òðÿáâà äà ãî ñëîæèòå âúâ ôàéë.  ïðîòèâåí ñëó÷àé òîé ùå èç÷åçíå, êîãàòî Åìàêñ -ïðèêëþ÷è. Çà äà ñëîæèòå âàøèÿ òåêñò âúâ ôàéë, òðÿáâà äà "íàìåðèòå" -ôàéëà ïðåäè äà âúâåæäàòå òåêñò. (Òîâà ñúùî ñå íàðè÷à "ïîñåùàâàíå" íà -ôàéëà.) +ïðèêëþ÷è. Çà äà ñëîæèòå âàøèÿ òåêñò âúâ ôàéë, òðÿáâà äà „íàìåðèòå“ +(find) ôàéëà ïðåäè äà âúâåæäàòå òåêñò. (Òîâà ñúùî ñå íàðè÷à +„ïîñåùàâàíå“ (visit) íà ôàéë.) Íàìèðàíå íà ôàéë îçíà÷àâà, ÷å âèæäàòå ñúäúðæàíèåòî ìó â Åìàêñ.  ìíîãî ñëó÷àè òîâà å êàòî äà ðåäàêòèðàòå ñàìèÿ ôàéë. Îáà÷å ïðîìåíèòå, êîèòî ïðàâèòå, èçïîëçâàéêè Åìàêñ, íå îñòàâàò ïîñòîÿííè, äîêàòî íå -"çàïèøåòå" ôàéëà. Òîâà å òàêà, çà äà ñå ïðåäîòâðàòè îñòàâÿíåòî íà -ïîëóïðîìåíåí ôàéë â ñèñòåìàòà, êîãàòî íå èñêàòå òîâà. Äîðè êîãàòî +„çàïèøåòå“ (save) ôàéëà. Òîâà å òàêà, çà äà ñå ïðåäîòâðàòè îñòàâÿíåòî +íà ïîëóïðîìåíåí ôàéë â ñèñòåìàòà, êîãàòî íå èñêàòå òîâà. Äîðè êîãàòî çàïèñâàòå, Åìàêñ îñòàâÿ íà÷àëíèÿ ôàéë ïîä ïðîìåíåíî èìå, â ñëó÷àé, ÷å ïî-êúñíî ðåøèòå, ÷å âàøèòå ïðîìåíè ñà áèëè ãðåøêà. -Àêî ïîãëåäíåòå â äúíîòî íà åêðàíà, ùå âèäèòå ðåä, êîéòî çàïî÷âà è -çàâúðøâà ñ òèðåòà è çàïî÷âà ñ "-b:-- TUTORIAL.bg" èëè íåùî ïîäîáíî. -Òàçè ÷àñò îò åêðàíà ïîêàçâà èìåòî íà ôàéëà, êîéòî ñòå ïîñåòèëè. Òî÷íî -ñåãà âèå ñòå ïîñåòèëè ôàéë, íàðå÷åí "TUTORIAL.bg", êîéòî å âàøåòî -ëè÷íî êîïèå-÷åðíîâà íà Åìàêñ âúâåäåíèåòî. Êîãàòî íàìåðèòå ôàéë â -Åìàêñ, èìåòî íà òîçè ôàéë ùå ñå ïîÿâè íà ñúùîòî ìÿñòî. +Àêî ïîãëåäíåòå â äúíîòî íà åêðàíà, ùå âèäèòå ðåä, êîéòî çàïî÷âà ñ +òèðåòà – „ b:--- TUTORIAL.bg“ èëè íåùî ïîäîáíî. Òàçè ÷àñò îò åêðàíà +ïîêàçâà èìåòî íà ôàéëà, êîéòî ñòå ïîñåòèëè. Òî÷íî ñåãà âèå ñòå +ïîñåòèëè ôàéë, íàðå÷åí „TUTORIAL.bg“, êîéòî å âàøåòî ëè÷íî +êîïèå-÷åðíîâà íà Åìàêñ âúâåäåíèåòî. Êîãàòî íàìåðèòå ôàéë â Åìàêñ, +èìåòî íà òîçè ôàéë ùå ñå ïîÿâè íà òîâà ìÿñòî. Îñîáåíîñò íà êîìàíäàòà çà íàìèðàíå íà ôàéë å, ÷å òðÿáâà äà êàæåòå -èìåòî íà ôàéëà, êîéòî èñêàòå. Íèå ãî íàðè÷àìå "÷åòåíå íà àðãóìåíò îò -òåðìèíàëà" (â òîçè ñëó÷àé àðãóìåíòúò å èìåòî íà ôàéëà). Ñëåä êàòî +èìåòî íà ôàéëà, êîéòî èñêàòå. Êàçâàìå, ÷å êîìàíäàòà „÷åòå íà +àðãóìåíò“ (â òîçè ñëó÷àé àðãóìåíòúò å èìåòî íà ôàéëà). Ñëåä êàòî âúâåäåòå êîìàíäàòà C-x C-f Íàìèðàíå íà ôàéë Åìàêñ âè ïîäêàíÿ äà âúâåäåòå èìåòî íà ôàéëà. Èìåòî íà ôàéëà, êîåòî íàïèøåòå, ñå ïîÿâÿâà â äúíîòî íà åêðàíà. Ðåäúò â äúíîòî íà åêðàíà ñå -íàðè÷à ìèíèáóôåð, êîãàòî ñå èçïîëçâà çà òîçè âèä âõîä. Ìîæåòå äà +íàðè÷à ìèíèáóôåð, êîãàòî ñå èçïîëçâà çà òîçè âèä âúâåæäàíå. Ìîæåòå äà èçïîëçâàòå îáèêíîâåíèòå êîìàíäè çà ðåäàêòèðàíå íà Åìàêñ, çà äà ðåäàêòèðàòå èìåòî íà ôàéëà. @@ -541,35 +538,36 @@ C_- Òàêà ÷å íå íàìèðàòå ôàéë. Êîãàòî ïðèêëþ÷èòå ñ âúâåæäàíåòî íà èìåòî íà ôàéëà, âúâåäåòå , -çà äà ïîêàæåòå òîâà. Òîãàâà C-x C-f òðúãâà äà ðàáîòè è íàìèðà ôàéëà, -êîéòî ñòå èçáðàëè. Ìèíèáóôåðúò èç÷åçâà, êîãàòî êîìàíäàòà C-x C-f -ñâúðøè. +çà äà çàâúðøèòå. Ìèíèáóôåðúò èç÷åçâà è êîìàíäàòà C-x C-f òðúãâà äà +ðàáîòè è íàìèðà ôàéëà, êîéòî ñòå èçáðàëè. Ñëåä ìàëêî ñúäúðæàíèåòî íà ôàéëà ñå ïîÿâÿâà íà åêðàíà è âèå ìîæåòå äà ðåäàêòèðàòå ñúäúðæàíèåòî ìó. Êîãàòî ïîæåëàåòå äà çàïàçèòå âàøèòå ïðîìåíè çà ïîñòîÿííî, âúâåäåòå êîìàíäàòà - C-x C-s Çàïàçâàíå íà ôàéëà + C-x C-s Çàïèñ (save) íà ôàéëà Òîâà êîïèðà òåêñòà îò Åìàêñ âúâ ôàéëà. Ïúðâèÿ ïúò, êîãàòî òîâà ñå íàïðàâè, Åìàêñ ïðåèìåíóâà íà÷àëíèÿ ôàéë ñ íîâî èìå, òàêà ÷å òîé äà íå -ñå èçãóáè. Íîâîòî èìå ñå ïîñòðîÿâà ñ äîáàâÿíå íà "~" â êðàÿ íà èìåòî +ñå èçãóáè. Íîâîòî èìå ñå ïîñòðîÿâà ñ äîáàâÿíå íà „~“ â êðàÿ íà èìåòî íà íà÷àëíèÿ ôàéë. Êîãàòî çàïàçâàíåòî å ñâúðøèëî, Åìàêñ èçâåæäà èìåòî íà ôàéëà, êîéòî å áèë çàïèñàí. Òðÿáâà äà çàïèñâàòå äîñòàòú÷íî ÷åñòî, òàêà ÷å äà íå -èçãóáèòå ìíîãî ðàáîòà, àêî ñèñòåìàòà ñå ñðèíå ïî íÿêàêâà ïðè÷èíà. +èçãóáèòå ìíîãî ðàáîòà, àêî ñèñòåìàòà ñå ñðèíå ïî íÿêàêâà ïðè÷èíà +(âæ. ðàçäåëà „Àâòîìàòè÷åí çàïèñ“ ïî-äîëó). ->> Âúâåäåòå C-x C-s, çàïàçâàéêè âàøåòî êîïèå îò âúâåäåíèåòî. - Òîâà òðÿáâà äà èçâåäå "Wrote ...TUTORIAL.bg" â äúíîòî íà åêðàíà. +>> Âúâåäåòå C-x C-s TUTORIAL.bg . + Òîâà ùå çàïèøå âúâåäåíèåòî âúâ ôàéë ñ èìå TUTORIAL.bg è ùå ïîêàæå + „Wrote ...TUTORIAL.bg“ â äúíîòî íà åêðàíà. Ìîæå äà íàìåðèòå ñúùåñòâóâàù ôàéë, äà ãî ðàçãëåäàòå è äà ãî ðåäàêòèðàòå. Ìîæåòå ñúùî äà íàìåðèòå ôàéë, êîéòî íå ñúùåñòâóâà. Òîâà å íà÷èíúò çà ñúçäàâàíå íà íîâè ôàéëîâå â Åìàêñ: íàìèðàòå ôàéëà, êîéòî ùå áúäå â íà÷àëîòî ïðàçåí, è òîãàâà çàïî÷âàòå âìúêâàíåòî íà òåêñòà çà -ôàéëà. Êîãàòî ãîâîðèòå çà "çàïèñâàíå" íà ôàéë, Åìàêñ âñúùíîñò ùå -ñúçäàäå ôàéëà ñ òåêñòà, êîéòî ñòå âúâåëè. Îòòàì íàòàòúê ìîæå äà -ñ÷èòàòå, ÷å ðåäàêòèðàòå âå÷å ñúùåñòâóâàù ôàéë. +ôàéëà. Êîãàòî èñêàòå „çàïèñ“ íà ôàéë, Åìàêñ âñúùíîñò ùå ñúçäàäå ôàéëà +ñ òåêñòà, êîéòî ñòå âúâåëè. Îòòàì íàòàòúê ìîæå äà ñ÷èòàòå, ÷å +ðåäàêòèðàòå âå÷å ñúùåñòâóâàù ôàéë. * ÁÓÔÅÐÈ @@ -579,53 +577,50 @@ C_- Ìîæåòå äà ïðåâêëþ÷èòå îáðàòíî êúì íåãî, êàòî ãî íàìåðèòå ïàê ñ C-x C-f. Ïî òîçè íà÷èí ìîæå äà ïîëó÷èòå äîñòà íà áðîé ôàéëîâå â Åìàêñ. ->> Ñúçäàéòå ôàéë ñ èìå "foo", âúâåæäàéêè C-x C-f foo . - Âìúêíåòå ìàëêî òåêñò, ðåäàêòèðàéòå ãî è çàïàçåòå "foo" ñ âúâåæäàíå - íà C-x C-s. - Íàêðàÿ âúâåäåòå C-x C-f TUTORIAL.bg , çà äà ñå âúðíåòå - îáðàòíî âúâ âúâåäåíèåòî. +Åìàêñ ñúõðàíÿâà òåêñòà íà âñåêè ôàéëà â îáåêò, íàðè÷àí „áóôåð“. +Íàìèðàíåòî íà ôàéë ñúçäàâà íîâ áóôåð âúòðå â Åìàêñ. Çà äà âèäèòå +ñïèñúê ñ âñè÷êè ñúùåñòâóâàùè áóôåðè, âúâåäåòå -Åìàêñ çàïàçâà òåêñòà íà âñåêè ôàéë â îáåêò, íàðè÷àí "áóôåð". -Íàìèðàíåòî íà ôàéë ïðàâè íîâ áóôåð â Åìàêñ. Çà äà âèäèòå ñïèñúê íà -áóôåðèòå, êîèòî â ìîìåíòà ñúùåñòâóâàò âúâ âàøèÿ Åìàêñ, âúâåäåòå + C-x C-b Ñïèñúê íà áóôåðèòå - C-x C-b Ïîêàçâàíå íà áóôåðèòå +>> Îïèòàéòå C-x C-b îùå ñåãà. ->> Îïèòàéòå C-x C-b ñåãà. +Çàáåëåæåòå, ÷å âñåêè áóôåð èìà èìå, à ñúùî ìîæå äà èìà è èìå íà ôàéë, +÷èåòî ñúäúðæàíèå ñå ïàçè â áóôåðà. ÂÑÅÊÈ òåêñò, êîéòî âèæäàòå â +ïðîçîðåö íà Åìàêñ, âèíàãè å ÷àñò îò íÿêîé áóôåð. -Âèæòå êàê âñåêè áóôåð èìà èìå, à ïîíÿêîãà è èìå íà ôàéë çà ôàéëà, -÷èåòî ñúäúðæàíèå äúðæè. ÂÑÅÊÈ òåêñò, êîéòî âèæäàòå â Åìàêñ ïðîçîðåö, -å âèíàãè ÷àñò îò íÿêàêúâ áóôåð. +>> Âúâåäåòå C-x 1, çà äà ìàõíåòå ñïèñúêà íà áóôåðè. ->> Âúâåäåòå C-x 1, çà äà ìàõíåòå ñïèñúêà ñ áóôåðèòå. - -Êîãàòî èìàòå íÿêîëêî áóôåðà, ñàìî åäèí îò òÿõ å "òåêóù" â äàäåí ìîìåíò +Êîãàòî èìàòå íÿêîëêî áóôåðà, ñàìî åäèí îò òÿõ å „òåêóù“ â äàäåí ìîìåíò îò âðåìå. Òîâà å áóôåðúò, êîéòî ðåäàêòèðàòå. Àêî èñêàòå äà -ðåäàêòèðàòå äðóã áóôåð, ñå íóæäàåòå îò "ïðåâêëþ÷âàíå" êúì íåãî. Àêî +ðåäàêòèðàòå äðóã áóôåð, ñå íóæäàåòå îò „ïðåâêëþ÷âàíå“ êúì íåãî. Àêî èñêàòå äà ñå ïðåâêëþ÷èòå êúì áóôåð, êîéòî ñúîòâåòñòâà íà ôàéë, ìîæåòå äà ãî íàïðàâèòå, êàòî ïðîñòî ïîñåòèòå ôàéëà îòíîâî ñ C-x C-f. Íî èìà è ïî-ëåñåí íà÷èí: èçïîëçâàíåòî íà êîìàíäàòà C-x b.  òàçè êîìàíäà òðÿáâà äà âúâåäåòå èìåòî íà áóôåðà. ->> Âúâåäåòå C-x b foo , çà äà ñå âúðíåòå êúì áóôåðà "foo", - êîéòî äúðæè òåêñòà íà ôàéëà "foo". Òîãàâà âúâåäåòå C-x b TUTORIAL - , çà äà ñå âúðíåòå â òîâà âúâåäåíèå. +>> Ñóçäàéòå ôàéë ñ èìå „foo“ ÷ðåç âúâåæäàíå íà C-x C-f foo . + Òîãàâà âúâåäåòå C-x b TUTORIAL.bg , çà äà ñå âúðíåòå â òîâà + âúâåäåíèå.  ïîâå÷åòî ñëó÷àè èìåòî íà áóôåðà å ñúùîòî êàòî èìåòî íà ôàéëà (áåç ÷àñòòà â êîÿ äèðåêòîðèÿ ñå íàìèðà). Îáà÷å òîâà íå âèíàãè å âÿðíî. -Ñïèñúêúò ñ áóôåðèòå, êîéòî ïðàâèòå ñ C-x C-b, âèíàãè âè ïîêàçâà èìåòî -íà âñåêè áóôåð. +Ñïèñúêúò ñ áóôåðèòå, êîéòî ïðàâèòå ñ C-x C-b, âèíàãè âè ïîêàçâà è +èìåòî íà áóôåðà, è èìåòî íà ôàéëà. ÂÑÅÊÈ òåêñò, êîéòî âèæäàòå â Åìàêñ ïðîçîðåö, å âèíàãè ÷àñò îò íÿêàêúâ -áóôåð. Íÿêîè áóôåðè íå ñúîòâåòñòâàò íà ôàéëîâå. Íàïðèìåð áóôåðúò, -èìåíóâàí "*Buffer List*", íå ñúîòâåòñòâà íà ôàéë. Òîâà å áóôåðúò, -êîéòî ñúäúðæà ñïèñúêà ñ áóôåðèòå, êîèòî ñòå íàïðàâèëè ñ C-x C-b. -Áóôåðúò, èìåíóâàí "*Messages*", ñúùî íå ñúîòâåòñòâà íà ôàéë; òîé +áóôåð. Íÿêîè áóôåðè íå ñúîòâåòñòâàò íà ôàéëîâå. Áóôåðúò, èìåíóâàí +„*Buffer List*“, êîèòî ñòå íàïðàâèëè ñ C-x C-b, íå ñúîòâåòñòâà íà +ôàéë. Òîâà å áóôåðúò, êîéòî ñúäúðæà ñïèñúêà ñ áóôåðèòå. Òîçè áóôåð +TUTORIAL.bg îòíà÷àëî íå å áèë êúì ôàéë, íî âå÷å å, çàùîòî â ïðåäèøíèÿ +ðàçäåë âúâåäîõòå C-x C-s è ãî çàïèñàõòå âúâ ôàéë. + +Áóôåðúò, èìåíóâàí „*Messages*“, ñúùî íå ñúîòâåòñòâà íà ôàéë; òîé ñúäúðæà ñúîáùåíèÿòà, êîèòî ñå ïîÿâÿâàò â äúíîòî íà åêðàíà ïî âðåìå íà Åìàêñ ñåñèÿòà. >> Âúâåäåòå C-x b *Messages* , çà äà âèäèòå áóôåðà ñúñ - ñúîáùåíèÿòà. Ñëåä òîâà âúâåäåòå C-x b TUTORIAL , çà äà + ñúîáùåíèÿòà. Ñëåä òîâà âúâåäåòå C-x b TUTORIAL.bg , çà äà ñå âúðíåòå êúì òîâà âúâåäåíèå. Àêî íàïðàâèòå ïðîìåíè â òåêñòà íà åäèí ôàéë è òîãàâà íàìåðèòå äðóã @@ -636,14 +631,15 @@ C-f. áóôåðà íà ïúðâèÿ ôàéë. Ùå å íåóäîáíî äà ïðåâêëþ÷èòå îáðàòíî ñ C-x C-f, çà äà ãî çàïàçèòå ñ C-x C-s. Òàêà ÷å èìàìå - C-x s Çàïàçâà íÿêîè áóôåðè + C-x s Çàïèñ íà íÿêîè (some) áóôåðè C-x s ïèòà çà âñåêè áóôåð, êîéòî ñúäúðæà ïðîìåíè, êîèòî íå ñòå -çàïàçèëè. Âúïðîñúò çà âñåêè òàêúâ áóôåð å äàëè äà áúäå çàïàçåí. +çàïàçèëè. Êîìàíäàòà çàäàâà âúïðîñ çà âñåêè òàêúâ áóôåð äàëè äà áúäå +çàïàçåí. ->> Âìúêíåòå ðåä â òåêñòà, ñëåä òîâà âúâåäåòå C-x s. - Òðÿáâà äà áúäåòå ïîïèòàí äàëè äà çàïàçèòå áóôåðà, èìåíóâàí "TUTORIAL". - Îòãîâîðåòå ñ "äà" íà âúïðîñà, êàòî âúâåäåòå "y". +>> Âìúêíåòå ðåä ñ òåêñò, ñëåä òîâà âúâåäåòå C-x s. + Òðÿáâà äà áúäåòå ïîïèòàí äàëè äà çàïàçèòå áóôåðà, èìåíóâàí „TUTORIAL.bg“. + Îòãîâîðåòå ñ „äà“ íà âúïðîñà, êàòî âúâåäåòå „y“ (yes). * ÐÀÇØÈÐßÂÀÍÅ ÍÀ ÍÀÁÎÐÀ ÊÎÌÀÍÄÈ @@ -659,53 +655,47 @@ C-x s Òåçè êîìàíäè ñà îáùî âçåòî ïîëåçíè, íî ïî-ìàëêî, îòêîëêîòî êîìàíäèòå, êîèòî äîñåãà ñòå íàó÷èëè. Âå÷å âèäÿõòå äâå îò òÿõ: êîìàíäèòå âúðõó -ôàéëîâå C-x C-f çà íàìèðàíå (Find) è C-x C-s çà çàïàçâàíå (Save). -Äðóã ïðèìåð å êîìàíäàòà çà êðàé íà Åìàêñ ñåñèÿòà -- òîâà å êîìàíäàòà -C-x C-c. (Íå ñå áåçïîêîéòå, ÷å ìîæå äà èçãóáèòå âñè÷êè ïðîìåíè, êîèòî -ñòå íàïðàâèëè; C-x C-c ïðåäëàãà äà çàïàçè âñåêè ïðîìåíåí ôàéë, ïðåäè -äà ïðåìàõíå Åìàêñ.) +ôàéëîâå C-x C-f çà íàìèðàíå (Find) è C-x C-s çà çàïèñ (Save). Äðóã +ïðèìåð å êîìàíäàòà çà êðàé íà Åìàêñ ñåñèÿòà -- òîâà å êîìàíäàòà C-x +C-c. (Íå ñå áåçïîêîéòå, ÷å ìîæå äà èçãóáèòå âñè÷êè ïðîìåíè, êîèòî ñòå +íàïðàâèëè; C-x C-c ïðåäëàãà äà çàïàçè âñåêè ïðîìåíåí ôàéë, ïðåäè äà +ïðåìàõíå Åìàêñ.) -C-z å êîìàíäàòà çà èçëèçàíå îò Åìàêñ *âðåìåííî* -- òàêà ÷å äà ìîæåòå -äà ñå âúðíåòå êúì ñúùàòà Åìàêñ ñåñèÿ ïî-êúñíî. +Àêî ñòå íà ãðàôè÷åí äèñïëåé, íå å íóæíà ñïåöèàëíà êîìàíäà çà +ïðèäâèæâàíå îò Åìàêñ êúì äðóãî ðàáîòåùî ïðèëîæåíèå. Ìîæåòå äà +èçâúðøèòå òîâà ñ ìèøêàòà èëè ñ êîìàíäè êúì óïðàâëåíèåòî íà ïðîçîðöè. +Íî àêî ñòå íà òåêñòîâ òåðìèíàë, êîéòî ìîæå äà ïîêàçâà ñàìî åäíî +ïðèëîæåíèå â äàäåí ìîìåíò, ñå íóæäàåòå îò íà÷èí çà „èçîñòàâÿíå“ +(suspend) íà Åìàêñ è ïðèäâèæâàíå êúì äðóãè ïðîãðàìè. -Íà ñèñòåìè, êîèòî ïîçâîëÿâàò òîâà, C-z "èçîñòàâÿ" (suspend) Åìàêñ, -ò.å. âðúùà êúì îáâèâêàòà, íî íå ðàçðóøàâà Åìàêñ.  ïîâå÷åòî îáâèâêè -ìîæåòå äà ïðîäúëæèòå Åìàêñ ñåñèÿòà ñ êîìàíäàòà "fg" èëè ñ "%emacs". - -Íà ñèñòåìè, êîèòî íå ïîçâîëÿâàò èçîñòàâÿíå, C-z ñúçäàâà íîâà -ïîäîáâèâêà, êîÿòî âúðâè ïîä Åìàêñ, çà äà âè äàäå øàíñ äà ñòàðòèðàòå -äðóãè ïðîãðàìè è äà ñå âúðíåòå êúì Åìàêñ ñëåä òîâà; òîâà íå å èñòèíñêî -"èçëèçàíå" îò Åìàêñ.  òîçè ñëó÷àé êîìàíäàòà íà îáâèâêàòà "exit" å -îáèêíîâåíèÿò íà÷èí äà ñå âúðíåòå îáðàòíî êúì Åìàêñ îò ïîäîáâèâêàòà. - -Ìîìåíòúò äà èçïîëçâàòå C-x C-c å, êîãàòî èñêàòå äà èçëåçåòå îò -ñèñòåìàòà. Òîâà å è ïðàâèëíàòà êîìàíäà çà èçëèçàíå, êîãàòî Åìàêñ å -èçâèêàí îò ïîùåíñêà ïðîãðàìà èëè äðóãè ñòðàíè÷íè ïðîãðàìè, òúé êàòî òå -ìîæå è äà íå çíàÿò êàê äà ñå ñïðàâÿò ñ èçîñòàâÿíåòî íà Åìàêñ. Ïðè -îáèêíîâåíè îáñòîÿòåëñòâà, îáà÷å, àêî íå ñòå òðúãíàëè äà èçëèçàòå îò -ñèñòåìàòà, ïî-äîáðå å äà èçîñòàâèòå Åìàêñ ñ C-z, âìåñòî äà èçëèçàòå îò -Åìàêñ. +C-z å êîìàíäàòà çà èçëèçàíå îò Åìàêñ *âðåìåííî* – òàêà ÷å äà ìîæåòå äà +ñå âúðíåòå êúì ñúùàòà Åìàêñ ñåñèÿ ïî-êúñíî. Êîãàòî Åìàêñ âúðâè íà +òåêñòîâ òåðìèíàë, C-z „èçîñòàâÿ“ Åìàêñ, ò.å. âðúùà ñå êúì îáâèâêàòà, +íî íå óíèùîæàâà çàäà÷àòà (job) íà Åìàêñ.  ïîâå÷åòî ïîïóëÿðíè îáâèâêè +ìîæåòå äà ïðîäúëæèòå Åìàêñ ñ êîìàíäàòà „fg“ èëè ñ „%emacs“. Èìà ìíîãî êîìàíäè C-x. Åòî ñïèñúê íà òåçè, êîèòî ñòå íàó÷èëè: - C-x C-f Íàìèðàíå íà ôàéë. - C-x C-s Çàïàçâàíå íà ôàéë. - C-x C-b Ñïèñúê íà áóôåðèòå. - C-x C-c Èçëèçàíå îò Åìàêñ. - C-x 1 Èçòðèâàíå íà âñè÷êè ïðîçîðöè îñâåí åäèí. - C-x u Îòìÿíà. + C-x C-f Íàìèðàíå íà ôàéë + C-x C-s Çàïèñ íà ôàéë + C-x s Çàïèñ íà íÿêîè áóôåðè + C-x C-b Ñïèñúê íà áóôåðèòå + C-x b Ïðåâêëþ÷âàíå êúì áóôåð + C-x C-c Èçëèçàíå îò Åìàêñ + C-x 1 Èçòðèâàíå íà âñè÷êè ïðîçîðöè îñâåí åäèí + C-x u Îòìÿíà -Èìåíóâàíèòå ðàçøèðåíè êîìàíäè ñà êîìàíäè, êîèòî ñå èçïîëçâàò äàæå îùå -ïî-ðÿäêî, èëè êîìàíäè, êîèòî ñå èçïîëçâàò ñàìî â îïðåäåëåíè ðåæèìè. -Ïðèìåð å êîìàíäàòà replace-string, êîÿòî çàìåíÿ ãëîáàëíî åäèí íèç ñ -äðóã. Êîãàòî âúâåäåòå M-x, Åìàêñ âè ïîäñêàçâà â äúíîòî íà åêðàíà ñ -M-x è âèå òðÿáâà äà âúâåäåòå èìåòî íà êîìàíäàòà, â òîçè ñëó÷àé -"replace-string". Ïðîñòî âúâåäåòå "repl s" è Åìàêñ ùå çàâúðøè -èìåòî. ( å êëàâèøúò Tab, îáèêíîâåíî íàìèðàù ñå íàä êëàâèøà -CapsLock èëè êëàâèøà Shift áëèçî äî ëåâèÿ êðàé íà êëàâèàòóðàòà.) -Çàâúðøåòå èìåòî íà êîìàíäàòà ñ . +Èìåíóâàíèòå ðàçøèðåíè (X) êîìàíäè ñà êîìàíäè, êîèòî ñå èçïîëçâàò äàæå +îùå ïî-ðÿäêî, èëè êîìàíäè, êîèòî ñå èçïîëçâàò ñàìî â îïðåäåëåíè +ðåæèìè. Ïðèìåð å êîìàíäàòà replace-string, êîÿòî çàìåíÿ ãëîáàëíî åäèí +íèç ñ äðóã. Êîãàòî âúâåäåòå M-x, Åìàêñ âè ïîäñêàçâà â äúíîòî íà +åêðàíà ñ M-x è âèå òðÿáâà äà âúâåäåòå èìåòî íà êîìàíäàòà, â òîçè +ñëó÷àé „replace-string“. Ïðîñòî âúâåäåòå „repl s“ è Åìàêñ ùå +çàâúðøè èìåòî. ( å êëàâèøúò Tab, îáèêíîâåíî íàìèðàù ñå íàä +êëàâèøà CapsLock èëè êëàâèøà Shift áëèçî äî ëåâèÿ êðàé íà +êëàâèàòóðàòà.) Çàâúðøåòå èìåòî íà êîìàíäàòà ñ . -Êîìàíäàòà replace-string èçèñêâà äâà àðãóìåíòà -- íèçúò, êîéòî ùå áúäå +Êîìàíäàòà replace-string èçèñêâà äâà àðãóìåíòà – íèçúò, êîéòî ùå áúäå çàìåíÿí, è íèçúò, êîéòî ùå ãî çàìåíè. Òðÿáâà äà çàâúðøèòå âúâåæäàíåòî íà âñåêè àðãóìåíò ñ . @@ -713,28 +703,26 @@ CapsLock Òîãàâà âúâåäåòå M-x repl sïðîìåíÿèçìåíÿ Çàáåëåæåòå êàê òîçè ðåä ñå ïðîìåíÿ: âèå çàìåíèõòå äóìàòà - ï-ð-î-ì-å-í-ÿ ñ "èçìåíÿ", êúäåòî è äà ñå íàìèðà ñëåä íà÷àëíîòî + ï-ð-î-ì-å-í-ÿ ñ „èçìåíÿ“, êúäåòî è äà ñå íàìèðà ñëåä íà÷àëíîòî ìÿñòî íà êóðñîðà. -ÇÀÁÅËÅÆÊÀ: Ïðåâêëþ÷âàíåòî êúì âúâåæäàíå íà êèðèëñêè áóêâà ñòàâà ñ C-\. - * ÀÂÒÎÌÀÒÈ×ÍÎ ÇÀÏÀÇÂÀÍÅ ----------------------- Êîãàòî ñòå íàïðàâèëè ïðîìåíè âúâ ôàéë, íî îùå íå ñòå ãî çàïàçèëè, òå ìîãàò äà áúäàò çàãóáåíè, àêî êîìïþòúðúò âíåçàïíî ñå èçêëþ÷è. Çà äà âè -ïðåäïàçè îò òàêèâà ñèòóàöèè, Åìàêñ ïåðèîäè÷íî çàïàçâà "àâòîìàòè÷íî -çàïàçâàí" ôàéë çà âñåêè ôàéë, êîéòî ðåäàêòèðàòå. Èìåòî íà àâòîìàòè÷íî +ïðåäïàçè îò òàêèâà ñèòóàöèè, Åìàêñ ïåðèîäè÷íî çàïàçâà „àâòîìàòè÷íî +çàïàçâàí“ ôàéë çà âñåêè ôàéë, êîéòî ðåäàêòèðàòå. Èìåòî íà àâòîìàòè÷íî çàïàçâàíèÿ ôàéë èìà # â íà÷àëîòî è â êðàÿ; íàïðèìåð, àêî âàøèÿò ôàéë å -ñ èìå "hello.c", èìåòî íà íåãîâèÿ àâòîìàòè÷íî çàïàçâàí ôàéë ùå áúäå +ñ èìå „hello.c“, èìåòî íà íåãîâèÿ àâòîìàòè÷íî çàïàçâàí ôàéë ùå áúäå "#hello.c#". Êîãàòî çàïàçâàòå ôàéë ïî îáèêíîâåíèÿ íà÷èí, Åìàêñ èçòðèâà íåãîâèÿ àâòîìàòè÷íî çàïèñâàí ôàéë. Àêî êîìïþòúðúò çàâèñíå, ìîæå äà âúçñòàíîâèòå âàøàòà àâòîìàòè÷íî çàïàçâàíà ðåäàêöèÿ, êàòî íàìåðèòå ôàéëà êàêòî îáèêíîâåíî (ôàéëúò, êîéòî ñòå ðåäàêòèðàëè, íå àâòîìàòè÷íî çàïàçâàíèÿ) è ñëåä òîâà âúâåäåòå -M-x recover file. Êîãàòî êîìàíäàòà èçèñêà ïîòâúðæäåíèå, +M-x recover-file . Êîãàòî êîìàíäàòà èçèñêà ïîòâúðæäåíèå, âúâåäåòå yes, çà äà ïðîäúëæèòå è äà âúçñòàíîâèòå àâòîìàòè÷íî çàïàçâàíèòå äàííè. @@ -743,28 +731,28 @@ M-x recover file. -------------- Àêî Åìàêñ âèäè, ÷å âúâåæäàòå ìíîãîçíàêîâè êîìàíäè áàâíî, ùå âè ãè -ïîêàæå â äúíîòî íà åêðàíà, â îáëàñò, íàðè÷àíà "åõî îáëàñò". Åõî +ïîêàæå â äúíîòî íà åêðàíà, â îáëàñò, íàðè÷àíà „åõî îáëàñò“. Åõî îáëàñòòà îáõâàùà ïîñëåäíèÿ ðåä îò åêðàíà. * ÐÅÄ ÍÀ ÐÅÆÈÌÀ ---------------- -Ðåäúò òî÷íî íàä åõî îáëàñòòà ñå íàðè÷à "ðåä íà ðåæèìà" (mode line). +Ðåäúò òî÷íî íàä åõî îáëàñòòà ñå íàðè÷à „ðåä íà ðåæèìà“ (mode line). Òîé ïîêàçâà íåùî êàòî: --b:** TUTORIAL.bg (Fundamental)--L670--58%---------------- + b:**- TUTORIAL.bg 63% L744 (Fundamental) Òîçè ðåä äàâà ïîëåçíà èíôîðìàöèÿ çà ñúñòîÿíèåòî íà Åìàêñ è òåêñòà, êîéòî ðåäàêòèðàòå. -Âå÷å çíàåòå êàêâî îçíà÷àâà èìåòî íà ôàéëà -- òîâà å ôàéëúò, êîéòî ñòå -íàìåðèëè. -NN%-- ïîêàçâà âàøàòà òåêóùà ïîçèöèÿ â òåêñòà; òîâà -îçíà÷àâà, ÷å NN ïðîöåíòà îò òåêñòà å íàä âúðõà íà åêðàíà. Àêî -íà÷àëîòî íà ôàéëà å íà åêðàíà, ùå ñå ïîêàçâà --Top-- (âðúõ) âìåñòî ---00%--. Àêî êðàÿ íà ôàéëà å íà åêðàíà, ùå ñå ïîêàçâà --Bot-- (äúíî). -Àêî ãëåäàòå òåêñò, êîéòî å òîëêîâà ìàëúê, ÷å ñå ïîêàçâà èçöÿëî íà -åêðàíà, ðåäúò íà ðåæèìà ùå èçâåäå --All--. +Âå÷å çíàåòå êàêâî îçíà÷àâà èìåòî íà ôàéëà – òîâà å ôàéëúò, êîéòî ñòå +íàìåðèëè. NN% ïîêàçâà âàøàòà òåêóùà ïîçèöèÿ â òåêñòà; òîâà îçíà÷àâà, +÷å NN ïðîöåíòà îò òåêñòà å íàä âúðõà íà åêðàíà. Àêî íà÷àëîòî íà ôàéëà +å íà åêðàíà, ùå ñå ïîêàçâà „Top“ (âðúõ) âìåñòî „ 0%“. Àêî êðàÿ íà +ôàéëà å íà åêðàíà, ùå ñå ïîêàçâà „Bot“ (bottom – äúíî). Àêî ãëåäàòå +òåêñò, êîéòî å òîëêîâà ìàëúê, ÷å ñå ïîêàçâà èçöÿëî íà åêðàíà, ðåäúò íà +ðåæèìà ùå èçâåäå „All“ (âñè÷êî). Çíàêúò L è öèôðèòå ïîêàçâàò ìÿñòîòî ïî äðóã íà÷èí: òîâà å íîìåðúò íà òåêóùèÿ ðåä íà òî÷êàòà. @@ -776,13 +764,13 @@ M-x recover file. ×àñòòà îò ðåäà íà ðåæèìà âúòðå â ñêîáèòå å, çà äà âè ïîêàæå â êàêúâ ðåæèì íà ðåäàêòèðàíå ñå íàìèðàòå. Ïîäðàçáèðàùèÿò ñå ðåæèì å Fundamental (Îñíîâåí), êîéòî èçïîëçâàòå â ìîìåíòà. Òîâà å ïðèìåð çà -"ãëàâåí ðåæèì" (major mode). +„ãëàâåí ðåæèì“ (major mode). Åìàêñ èìà ìíîãî ãëàâíè ðåæèìè. Íÿêîè îò òÿõ ñà ïðåäâèäåíè çà ðåäàêòèðàíå íà ðàçëè÷íè åçèöè è/èëè âèäîâå òåêñò, êàòî íàïðèìåð ðåæèì -Ëèñï, ðåæèì Òåêñò è äðóãè. Âúâ âñåêè åäèí ìîìåíò îò âðåìå òî÷íî åäèí -ãëàâåí ðåæèì å àêòèâåí è íåãîâîòî èìå ìîæå âèíàãè äà áúäå íàìåðåíî â -ðåäà íà ðåæèìà, òî÷íî êàêòî "Fundamental" ñåãà. +Lisp (Ëèñï), ðåæèì Text (òåêñò) è äðóãè. Âúâ âñåêè åäèí ìîìåíò îò +âðåìå òî÷íî åäèí ãëàâåí ðåæèì å àêòèâåí è íåãîâîòî èìå ìîæå âèíàãè äà +áúäå íàìåðåíî â ðåäà íà ðåæèìà, òî÷íî êàêòî „Fundamental“ ñåãà. Âñåêè ãëàâåí ðåæèì ïðàâè íÿêîè êîìàíäè äà ñå äúðæàò ïî ðàçëè÷åí íà÷èí. Íàïðèìåð, èìà êîìàíäè çà ðåäàêòèðàíå íà êîìåíòàðè â ïðîãðàìè, è òúé @@ -793,9 +781,9 @@ Fundamental ( êîìàíäà çà ïðåâêëþ÷âàíå êúì ðåæèì Fundamental. Êîãàòî ðåäàêòèðàòå òåêñò íà åñòåñòâåí åçèê, êàòî òîçè ôàéë, -íàé-âåðîÿòíî òðÿáâà äà èçïîëçâàòå ðåæèì Òåêñò (text). +íàé-âåðîÿòíî òðÿáâà äà èçïîëçâàòå ðåæèì Text (òåêñò). ->> Âúâåäåòå M-x text mode. +>> Âúâåäåòå M-x text-mode . Íå ñå áåçïîêîéòå, íèêîÿ îò Åìàêñ êîìàíäèòå, êîèòî ñòå íàó÷èëè, íÿìà äà ñå ïðîìåíè ïî íÿêàêúâ ñúùåñòâåí íà÷èí. Íî ìîæå äà çàáåëåæèòå, ÷å M-f @@ -804,13 +792,13 @@ Fundamental ( ðàçäåëèòåëè íà äóìè. Ãëàâíèòå ðåæèìè îáèêíîâåíî ïðàâÿò ìàëêè ïðîìåíè êàòî òàçè: ïîâå÷åòî -êîìàíäè âúðøàò "ñúùàòà ðàáîòà" âúâ âñåêè ãëàâåí ðåæèì, íî ðàáîòÿò ïî +êîìàíäè âúðøàò „ñúùàòà ðàáîòà“ âúâ âñåêè ãëàâåí ðåæèì, íî ðàáîòÿò ïî ìàëêî ïî-ðàçëè÷åí íà÷èí. Çà äà âèäèòå äîêóìåíòàöèÿòà íà âàøèÿ òåêóù ãëàâåí ðåæèì, âúâåäåòå C-h m. ->> Óïîòðåáåòå C-u C-v âåäíúæ èëè ïîâå÷å ïúòè, çà äà äîêàðàòå òîçè ðåä +>> Óïîòðåáåòå C-l C-l âåäíúæ èëè ïîâå÷å ïúòè, çà äà äîêàðàòå òîçè ðåä áëèçî äî âúðõà íà åêðàíà. >> Âúâåäåòå C-h m, çà äà âèäèòå êàê òåêñòîâèÿò ðåæèì ñå ðàçëè÷àâà îò îñíîâíèÿ ðåæèì. @@ -824,20 +812,20 @@ m. ìàëêè ðåæèìè, äà èçïîëçâàòå åäèí ìàëúê ðåæèì, èëè äà èçïîëçâàòå íÿêàêâà êîìáèíàöèÿ îò íÿêîëêî ìàëêè ðåæèìà. -Åäèí ãëàâåí ðåæèì, êîéòî å ìíîãî ïîëåçåí, îñîáåíî çà ðåäàêòèðàíå íà +Åäèí ìàëúê ðåæèì, êîéòî å ìíîãî ïîëåçåí, îñîáåíî çà ðåäàêòèðàíå íà òåêñò íà åñòåñòâåí åçèê, å ðåæèìúò íà àâòîìàòè÷íî çàïúëâàíå (Auto Fill mode). Êîãàòî òîçè ðåæèì å âêëþ÷åí, Åìàêñ àâòîìàòè÷íî ðàçäåëÿ ðåäà ïðè ìÿñòîòî ìåæäó äóìèòå, êîãàòî âìúêâàòå òåêñò è íàïðàâèòå ðåä, êîéòî å òâúðäå äúëúã. Ìîæå äà âêëþ÷èòå ðåæèìà íà àâòîìàòè÷íî çàïúëâàíå, êàòî èçïúëíèòå M-x -auto fill mode. Êîãàòî ðåæèìúò å âêëþ÷åí, ìîæå äà ãî -èçêëþ÷èòå ñ M-x auto fill mode. Àêî ðåæèìúò å èçêëþ÷åí, òàçè +auto-fill-mode . Êîãàòî ðåæèìúò å âêëþ÷åí, ìîæå äà ãî +èçêëþ÷èòå ñ M-x auto-fill-mode. Àêî ðåæèìúò å èçêëþ÷åí, òàçè êîìàíäà ãî âêëþ÷âà, à àêî å âêëþ÷åí, ãî èçêëþ÷âà. Êàçâàìå, ÷å -êîìàíäàòà "îáðúùà ðåæèìà". +êîìàíäàòà „ïðåâêëþ÷âà (toggle) ðåæèìà“. ->> Âúâåäåòå M-x auto fill mode ñåãà. Ñëåä òîâà âìúêíåòå ðåä - îò "asdf " îòíîâî è îòíîâî, äîêàòî íå âèäèòå, ÷å òåêñòúò ñå ðàçäåëÿ +>> Âúâåäåòå M-x auto-fill-mode ñåãà. Ñëåä òîâà âìúêíåòå ðåä + îò „asdf “ îòíîâî è îòíîâî, äîêàòî íå âèäèòå, ÷å òåêñòúò ñå ðàçäåëÿ íà äâà ðåäà. Òðÿáâà äà ñëàãàòå èíòåðâàëè ìåæäó äóìèòå, çàùîòî àâòîìàòè÷íîòî çàïúëâàíå ðàçäåëÿ ðåäîâåòå ñàìî ïðè èíòåðâàëèòå. @@ -866,51 +854,42 @@ auto fill mode. íà íèç å ïðèäâèæâàùà êóðñîðà êîìàíäà; òÿ ïðåìåñòâà êóðñîðà íà ñëåäâàùîòî ìÿñòî, êúäåòî ñå ñðåùà íèçúò. -Êîìàíäàòà çà òúðñåíå íà Åìàêñ ñå ðàçëè÷àâà îò êîìàíäàòà çà òúðñåíå íà -ïîâå÷åòî ðåäàêòîðè ïî òîâà, ÷å òÿ å "ïîñòúïêîâà". Òîâà îçíà÷àâà, ÷å +Êîìàíäàòà çà òúðñåíå íà Åìàêñ å „ïîñòúïêîâà“. Òîâà îçíà÷àâà, ÷å òúðñåíåòî ñå èçâúðøâà îùå äîêàòî âúâåæäàòå òåêñòà, êîéòî òúðñèòå. Êîìàíäàòà çà çàïî÷âàíå íà òúðñåíå å C-s çà òúðñåíå íàïðåä, è C-r çà òúðñåíå íàçàä. ÍÎ ÏÎ×ÀÊÀÉÒÅ! Íå ãè ïðîáâàéòå ñåãà. -Êîãàòî âúâåäåòå C-s, ùå çàáåëåæèòå, ÷å íèçúò "I-search" ñå ïîÿâÿâà +Êîãàòî âúâåäåòå C-s, ùå çàáåëåæèòå, ÷å íèçúò „I-search“ ñå ïîÿâÿâà êàòî ïîäñêàçêà â åõî îáëàñòòà. Òîâà âè êàçâà, ÷å Åìàêñ å â òîâà, êîåòî ñå íàðè÷à ïîñòúïêîâî òúðñåíå, ÷àêàéêè âè äà âúâåæäàòå òåêñòà, êîéòî èñêàòå äà òúðñèòå. ïðèêëþ÷âà òúðñåíåòî. >> Ñåãà âúâåäåòå C-s, çà äà çàïî÷íåòå òúðñåíåòî. ÁÀÂÍÎ, áóêâà ïî - áóêâà, âúâåäåòå äóìàòà "òúðñåíå", èç÷àêâàéêè ñëåä âúâåæäàíåòî íà + áóêâà, âúâåäåòå äóìàòà „êóðñîð“, èç÷àêâàéêè ñëåä âúâåæäàíåòî íà âñåêè çíàê, çà äà ìîæå äà çàáåëåæèòå êàêâî ñòàâà ñ êóðñîðà. Ñåãà - èçâúðøèõòå òúðñåíå íà "òúðñåíå" âåäíúæ. ->> Âúâåäåòå îòíîâî C-s, çà äà òúðñèòå äðóãî ñúâïàäåíèå ñ "òúðñåíå". ->> Ñåãà âúâåäåòå òðè ïúòè è âèæòå êàê ñå ïðèäâèæâà êóðñîðà. + èçâúðøèõòå òúðñåíå íà „êóðñîð“ âåäíúæ. +>> Âúâåäåòå îòíîâî C-s, çà äà òúðñèòå äðóãî ñúâïàäåíèå ñ „êóðñîð“. +>> Ñåãà âúâåäåòå ÷åòèðè ïúòè è âèæòå êàê ñå ïðèäâèæâà êóðñîðà. >> Âúâåäåòå , çà äà ïðåêðàòèòå òúðñåíåòî. Çàáåëÿçàõòå ëè êàêâî ñòàíà? Åìàêñ, êîãàòî òúðñè ïîñòúïêîâî, ñå îïèòâà äà íàìåðè ñëåäâàùîòî ñúâïàäåíèå íà íèçà, êîéòî ñå âúâåæäà. Çà äà -îòèäåòå íà ñëåäâàùîòî ñúâïàäåíèå íà "òúðñíå", ïðîñòî îòíîâî âúâåäåòå +îòèäåòå íà ñëåäâàùîòî ñúâïàäåíèå íà „êóðñîð“, ïðîñòî îòíîâî âúâåäåòå C-s. Àêî íÿìà òàêîâà ñúâïàäåíèå, Åìàêñ áèáèïâà è âè êàçâà, ÷å -òúðñåíåòî å "ïðîâàëåíî" (failing). C-g ñúùî ïðåêðàòÿâà òúðñåíåòî. +òúðñåíåòî å „ïðîâàëåíî“ (failing). C-g ñúùî òàêà ïðåêðàòÿâà +òúðñåíåòî. -ÇÀÁÅËÅÆÊÀ: Íà íÿêîè ñèñòåìè âúâåæäàíåòî íà C-s ùå çàìðàçè åêðàíà è âèå -íÿìà äà ìîæå äà âèäèòå ïîâå÷å ðåàêöèÿ îò Åìàêñ. Òîâà ïîêàçâà, ÷å -"ñïîñîáíîñò" íà îïåðàöèîííàòà ñèñòåìà, íàðå÷åíà "óïðàâëåíèå íà ïîòîêà" -(flow control), å ïðèõâàíàëà C-s è íå ãî ïðîïóñêà äî Åìàêñ. Çà äà -ðàçìðàçèòå åêðàíà, âúâåäåòå C-q. Òîãàâà âèæòå ñåêöèÿòà "Ñïîíòàííî -âêëþ÷âàíå íà ïîñòúïêîâîòî òúðñåíå" (Spontaneous Entry to Incremental -Search) â ðúêîâîäñòâîòî íà Åìàêñ çà ñúâåò êàê äà ñå ñïðàâèòå ñ òàçè -"ñïîñîáíîñò". - -Àêî ñòå â ñðåäàòà íà ïîñòúïêîâî òúðñåíå è âúâåäåòå , ùå +Àêî ñòå â ñðåäàòà íà ïîñòúïêîâî òúðñåíå è âúâåäåòå , ùå çàáåëåæèòå, ÷å ïîñëåäíèÿò çíàê â òúðñåíèÿ íèç ñå èçòðèâà è òúðñåíåòî ñå âðúùà êúì ïîñëåäíîòî ìÿñòî íà òúðñåíå. Íàïðèìåð, ïðåäïîëîæåòå, ÷å -ñòå âúâåëè "ò", çà äà íàìåðèòå ïúðâîòî ñúâïàäåíèå ñ "ò". Ñåãà, àêî -âúâåäåòå "ú", êóðñîðúò ùå ñå ïðèäâèæè êúì ïúðâîòî ñúâïàäåíèå íà "òú". -Ñåãà âúâåäåòå . Òîâà èçòðèâà çíàêà "ú" îò íèçà çà òúðñåíå è -êóðñîðúò ñå ïðåìåñòâà íàçàä, äî ïúðâîòî ñúâïàäåíèå ñ "ò". +ñòå âúâåëè „ê“, çà äà íàìåðèòå ïúðâîòî ñúâïàäåíèå ñ „ê“. Ñåãà, àêî +âúâåäåòå „ó“, êóðñîðúò ùå ñå ïðèäâèæè êúì ïúðâîòî ñúâïàäåíèå íà „êó“. +Ñåãà âúâåäåòå . Òîâà èçòðèâà çíàêà „ó“ îò íèçà çà òúðñåíå è +êóðñîðúò ñå ïðåìåñòâà íàçàä, äî ïúðâîòî ñúâïàäåíèå ñ „ê“. Àêî ñòå â ñðåäàòà íà òúðñåíå è âúâåäåòå êîíòðîëåí èëè ìåòà çíàê (ñ -íÿêîëêî èçêëþ÷åíèÿ -- çíàöèòå, êîèòî ñà ñïåöèàëíè ïî âðåìå íà òúðñåíå, +íÿêîëêî èçêëþ÷åíèÿ – çíàöèòå, êîèòî ñà ñïåöèàëíè ïî âðåìå íà òúðñåíå, êàòî C-s è C-r), òúðñåíåòî ñå ïðåêðàòÿâà. C-s çàïî÷âà òúðñåíå, êîåòî ãëåäà çà ñúâïàäåíèå ñ íèçà, äàäåí çà @@ -924,9 +903,11 @@ C-s Åäíà îò ïðèâëåêàòåëíèòå ñïîñîáíîñòè íà Åìàêñ å òàçè, ÷å ìîæå äà ãëåäàòå ïîâå÷å îò åäèí ïðîçîðåö íà åêðàíà â äàäåí ìîìåíò îò âðåìå. +(Îáúðíåòå âíèìàíèå, ÷å Åìàêñ èçïîëçâà äóìàòà „ðàìêè“, îïèñàíà â +ñëåäâàùèÿ ðàçäåë, çà òîâà, êîåòî äðóãè ïðèëîæåíèÿ íàðè÷àò „ïðîçîðåö“. +Ðúêîâîäñòâîòî íà Åìàê ñúäúðæà ðå÷íèêà íà òåðìèíèòå íà Åìàêñ.) ->> Ïðèäâèæåòå êóðñîðà äî òîçè ðåä è âúâåäåòå C-u 0 C-l (òîâà å - CONTROL-L, íå CONTROL-1). +>> Ïðèäâèæåòå êóðñîðà äî òîçè ðåä è âúâåäåòå C-l C-l. >> Ñåãà âúâåäåòå C-x 2, êîåòî ùå ðàçäåëè åêðàíà íà äâà îòäåëíè ïðîçîðåöà. Äâàòà ïðîçîðåöà ïîêàçâàò òîâà âúâåäåíèå. Êóðñîðúò @@ -935,7 +916,7 @@ C-s >> Âúâåäåòå C-M-v, çà äà ñêðîëèðàòå äîëíèÿ ïðîçîðåö. (Àêî íÿìàòå èñòèíñêè êëàâèø META, âúâåäåòå ESC C-v.) ->> Âúâåäåòå C-x o ("o" îò "other" -- "äðóã"), çà äà ïðèäâèæèòå +>> Âúâåäåòå C-x o („o“ îò „other“ – „äðóã“), çà äà ïðèäâèæèòå êóðñîðà â äîëíèÿ ïðîçîðåö. >> Èçïîëçâàéòå C-v è M-v â äîëíèÿ ïðîçîðåö, çà äà ãî ñêðîëèðàòå. Ïðîäúëæåòå ÷åòåíåòî íà òåçè íàñîêè îò âúâåäåíèåòî â ãîðíèÿ @@ -946,32 +927,32 @@ C-s ïðåäè. Ìîæå äà ïðîäúëæèòå äà èçïîëçâàòå C-x o, çà äà ïðåâêëþ÷âàòå ìåæäó -ïðîçîðöèòå. Âñåêè ïðîçîðåö èìà ñîáñòâåíî ìÿñòî íà êóðñîðà, íî ñàìî -åäèí ïðîçîðåö ïîêàçâà êóðñîð. Âñè÷êè îáèêíîâåíè êîìàíäè çà -ðåäàêòèðàíå ñå ïðèëàãàò â ïðîçîðåöà, â êîéòî å êóðñîðúò. Íèå íàðè÷àìå -òîçè ïðîçîðåö "òåêóù ïðîçîðåö". +ïðîçîðöèòå. „Òåêóùèÿò ïðîçîðåö“, êúäåòî ñå èçâúðøâà ðåäàêòèðàíåòî, å +òîçè ñ ÿâåí êóðñîð, êîéòî ìèãà, êîãàòî íå âúâåæäàòå. Äðóãèòå ïðîçîðöè +èìàò ñîáñòâåíè ïîëîæåíèÿ íà êóðñîðà. Àêî Åìàêñ å íà ãðàôè÷åí äèñïëåé, +òåçè êóðñîðè ùå ñà èç÷åðòàíè êàòî íåìèãàùè ïðàçíè êóòèè. Êîìàíäàòà C-M-v å ìíîãî ïîëåçíà, êîãàòî ðåäàêòèðàòå òåêñò â åäèí ïðîçîðåö è èçïîëçâàòå äðóãèÿ ïðîçîðåö ïðîñòî çà ñïðàâêà. Ìîæå äà äúðæèòå êóðñîðà âèíàãè â ïðîçîðåöà, êúäåòî ðåäàêòèðàòå, è äà íàïðåäâàòå ïîñëåäîâàòåëíî â äðóãèÿ ïðîçîðåö ÷ðåç C-M-v. -C-M-v å ïðèìåð çà çíàê CONTROL-META. Àêî èìàòå èñòèíñêè êëàâèø META, -ìîæå äà âúâåæäàòå C-M-v, çàäúðæàéêè åäíîâðåìåííî CONTROL è META, -äîêàòî âúâåæäàòå v. Íÿìà çíà÷åíèå äàëè CONTROL èëè META "å íàòèñíàò -ïúðâè", çàùîòî è äâàòà êëàâèøà äåéñòâàò, ìîäèôèöèðàéêè çíàêà, êîéòî -ñòå âúâåëè. +C-M-v å ïðèìåð çà çíàê CONTROL-META. Àêî èìàòå èñòèíñêè êëàâèø META +(èëè Alt), ìîæå äà âúâåæäàòå C-M-v, çàäúðæàéêè åäíîâðåìåííî CONTROL è +META, äîêàòî âúâåæäàòå „v“. Íÿìà çíà÷åíèå äàëè CONTROL èëè META „å +íàòèñíàò ïúðâè“, çàùîòî è äâàòà êëàâèøà äåéñòâàò, ìîäèôèöèðàéêè çíàêà, +êîéòî íàòèñêàòå. -Àêî íÿìàòå èñòèíñêè êëàâèø META è èçïîëçâàòå ESC âìåñòî òîâà, ðåäúò -èìà çíà÷åíèå: òðÿáâà äà âúâåæäàòå ESC, ïîñëåäâàí îò CONTROL-v, çàùîòî -CONTROL-ESC v íÿìà äà ðàáîòè. Òîâà å òàêà, çàùîòî ESC å ñîáñòâåí -çíàê, à íå ìîäèôèêàòîð. +Àêî íÿìàòå èñòèíñêè êëàâèø META è èçïîëçâàòå âìåñòî òîâà, ðåäúò +âå÷å èìà çíà÷åíèå: òðÿáâà äà âúâåæäàòå , ïîñëåäâàí îò CONTROL-v, +çàùîòî CONTROL- v íÿìà äà ðàáîòè. Òîâà å òàêà, çàùîòî å +ñîáñòâåí çíàê, à íå ìîäèôèêàòîð. >> Âúâåäåòå C-x 1 (â ãîðíèÿ ïðîçîðåö), çà äà ìàõíåòå äîëíèÿ ïðîçîðåö. (Àêî ñòå âúâåëè C-x 1 â äîëíèÿ ïðîçîðåö, òîâà ùå ìàõíå ãîðíèÿ. -Ìèñëåòå çà òàçè êîìàíäà êàòî "Çàäðúæ òî÷íî åäèí ïðîçîðåö -- òîçè, â -êîéòî ñúì ñåãà".) +Ìèñëåòå çà òàçè êîìàíäà êàòî „Çàäðúæ òî÷íî åäèí ïðîçîðåö – òîçè, â +êîéòî ñúì ñåãà“.) Íÿìà íóæäà äà èçâåæäàòå åäèí è ñúùè áóôåð â äâàòà ïðîçîðåöà. Àêî èçïîëçâàòå C-x C-f, çà äà íàìåðèòå ôàéë â åäèíèÿ ïðîçîðåö, äðóãèÿò @@ -989,22 +970,47 @@ CONTROL-ESC v èçòðèåòå äîëíèÿ. +* ÌÍÎÆÅÑÒÂÎ ÐÀÌÊÈ +----------------- + +Åìàêñ ìîæå äà ñúçäàâà è „ðàìêè“. Ðàìêàòà (frame) å òîâà, êîåòî +íàðè÷àìå åäèí íàáîð îò ïðîçîðöè, çàåäíî ñ òåõíèòå ìåíþòà, ïëúçãà÷è, +åõî îáëàñòè è ò.í.  ãðàôè÷åí äèñïëåé Åìàêñ íàðè÷à „ðàìêà“ òîâà, +êîåòî ïîâå÷åòî äðóãè ïðèëîæåíèÿ íàðè÷àò „ïðîçîðåö“. Íà åêðàíà ìîãàò +äà áúäàò ïîêàçâàíè íÿêîëêî ãðàôè÷íè ðàìêè åäíîâðåìåííî.  òåêñòîâ +òåðìèíàë ìîæå äà ñå ïîêàçâà ñàìî åäíà ðàìêà â äàäåí ìîìåíò îò âðåìå. + +>> Âúâåäåòå M-x make-frame . + Âèæòå êàê ñå ïîÿâÿâà íîâà ðàìêà íà åêðàíà. + + íîâàòà ðàìêà ìîæåòå äà ïðàâèòå âñè÷êî, êîåòî ïðàâèòå è â +îðèãèíàëíàòà ðàìêà. Íÿìà íèùî ñïåöèàëíî â ïúðâàòà ðàìêà. + +>> Âúâåäåòå M-x delete-frame + Èçáðàíàòà ðàìêà ñå ïðåìàõâà. + +Ìîæåòå äà ïðåìàõâàòå ðàìêè è ïî íîðìàëíèÿ çà òîâà íà÷èí â ãðàôè÷íàòà +ñèñòåìà, íàé-÷åñòî ñ íàòèñêàíå íà áóòîíà, îòáåëÿçàí êàòî „X“ â ãîðåí +úãúë íà ðàìêàòà. Àêî ïðåìàõíåòå è ïîñëåäíàòà ðàìêà íà ðàáîòåù Åìàêñ, +òîâà ùå èçëåçå îò Åìàêñ. + + * ÂËÎÆÅÍÈ ÍÈÂÀ ÍÀ ÐÅÄÀÊÒÈÐÀÍÅ ----------------------------- -Ïîíÿêîãà ùå ñå îçîâåòå â òîâà, êîåòî ñå íàðè÷à "âëîæåíî íèâî íà -ðåäàêòèðàíå" (recursive editing level). Òîâà ñå îòáåëÿçâà îò +Ïîíÿêîãà ùå ñå îçîâåòå â òîâà, êîåòî ñå íàðè÷à „âëîæåíî íèâî íà +ðåäàêòèðàíå“ (recursive editing level). Òîâà ñå îòáåëÿçâà îò êâàäðàòíè ñêîáè â ðåäà íà ðåæèìà, êîèòî îãðàæäàò ñêîáèòå îêîëî èìåòî íà ãëàâíèÿ ðåæèì. Íàïðèìåð, ìîæå äà âèäèòå [(Fundamental)] âìåñòî (Fundamental). -Çà äà ñå ìàõíåòå îò âëîæåíîòî íèâî íà ðåäàêòèðàíå, âúâåäåòå ESC ESC -ESC. Òîâà å îáùà êîìàíäà çà "èçëèçàíå". Ìîæå è äà ÿ èçïîëçâàòå çà -ìàõàíå (ñêðèâàíå) íà äîïúëíèòåëíè ïðîçîðöè, êàêòî è çà äà ñå ìàõíåòå -îò ìèíèáóôåðà. +Çà äà ñå ìàõíåòå îò âëîæåíîòî íèâî íà ðåäàêòèðàíå, âúâåäåòå + . Òîâà å îáùà êîìàíäà çà „èçëèçàíå“. Ìîæå è äà ÿ +èçïîëçâàòå çà ìàõàíå (ñêðèâàíå) íà äîïúëíèòåëíè ïðîçîðöè, êàêòî è çà +äà ñå ìàõíåòå îò ìèíèáóôåðà. ->> Âúâåäåòå M-x, çà äà âëåçåòå â ìèíèáóôåð; òîãàâà âúâåäåòå ESC ESC - ESC, çà äà èçëåçåòå. +>> Âúâåäåòå M-x, çà äà âëåçåòå â ìèíèáóôåð; òîãàâà âúâåäåòå + , çà äà èçëåçåòå. Íå ìîæåòå äà èçïîëçâàòå C-g, çà äà èçëåçåòå îò âëîæåíî íèâî íà ðåäàêòèðàíå. Òîâà å òàêà, çàùîòî C-g ñå èçïîëçâà çà ïðåêðàòÿâàíå íà @@ -1028,13 +1034,10 @@ CONTROL-h, ïîìîãíå. Àêî ñòå âúâåëè C-h è ðåøèòå, ÷å íå ñå íóæäàåòå îò ïîìîù, ïðîñòî âúâåäåòå C-g, çà äà ÿ ïðåêðàòèòå. -(Íÿêîè êîìïþòðè ïðîìåíÿò çíà÷åíèåòî íà çíàêà C-h. Òå íàèñòèíà íå -òðÿáâà äà ïðàâÿò òîâà êàòî ñëÿïà ìÿðêà çà âñè÷êè ïîòðåáèòåëè, òàêà ÷å -èìàòå îñíîâàíèå äà ñå îïëà÷åòå íà ñèñòåìíèÿ àäìèíèñòðàòîð. Ìåæäó -äðóãîòî, àêî C-h íå èçâåæäà ñúîáùåíèå çà ïîìîù â äúíîòî íà åêðàíà, -îïèòàéòå êëàâèøà F1 èëè M-x help âìåñòî òîâà.) +(Àêî C-h íå èçâåæäà ñúîáùåíèå çà ïîìîù â äúíîòî íà åêðàíà, îïèòàéòå +êëàâèøà F1 èëè M-x help âìåñòî òîâà.) -Íàé-îñíîâíîòî ïîìîùíî ñðåäñòâî å C-h c. Âúâåäåòå C-h, çíàêà c è +Íàé-îñíîâíîòî ïîìîùíî ñðåäñòâî å C-h c. Âúâåäåòå C-h, çíàêà „c“ è êîìàíäåí çíàê èëè ïîñëåäîâàòåëíîñò îò çíàöè, îáðàçóâàùè êîìàíäà; òîãàâà Åìàêñ ùå èçâåäå ìíîãî êðàòêî îïèñàíèå íà êîìàíäàòà. @@ -1045,10 +1048,10 @@ CONTROL-h, C-p runs the command previous-line (C-p èçïúëíÿâà êîìàíäàòà ïðåäèøåí-ðåä) -Òîâà âè êàçâà "èìåòî íà ôóíêöèÿòà". Èìåíàòà íà ôóíêöèèòå ñå èçïîëçâàò +Òîâà âè êàçâà „èìåòî íà ôóíêöèÿòà“. Èìåíàòà íà ôóíêöèèòå ñå èçïîëçâàò íàé-âå÷å çà íàñòðîéâàíå è ðàçøèðÿâàíå íà Åìàêñ. Íî òúé êàòî èìåíàòà íà ôóíêöèèòå ñà èçáðàíè òàêà, ÷å äà ïîêàçâàò êàêâî ïðàâè êîìàíäàòà, òå -ìîãàò äà ñëóæàò è çà ìíîãî êðàòêà äîêóìåíòàöèÿ -- äîñòàòú÷íà, çà äà âè +ìîãàò äà ñëóæàò è çà ìíîãî êðàòêà äîêóìåíòàöèÿ – äîñòàòú÷íà, çà äà âè ïðèïîìíè êîìàíäè, êîèòî âå÷å ñòå ó÷èëè. Ìíîãîçíàêîâè êîìàíäè, êàòî C-x C-s è (àêî íÿìàòå êëàâèø META èëè EDIT @@ -1070,7 +1073,7 @@ c. C-h f Îïèñâà ôóíêöèÿ. Òðÿáâà äà âúâåäåòå èìåòî íà ôóíêöèÿòà. ->> Îïèòàéòå ñ âúâåæäàíå íà C-h f previous-line. +>> Îïèòàéòå ñ âúâåæäàíå íà C-h f previous-line . Òîâà èçâåæäà öÿëàòà èíôîðìàöèÿ, êîÿòî Åìàêñ çíàå çà ôóíêöèÿòà, êîÿòî îñúùåñòâÿâà êîìàíäàòà C-p. @@ -1086,11 +1089,12 @@ c. äâóçíàêîâà ïîñëåäîâàòåëíîñò îò êëàâèøè, êîÿòî ïóñêà ñúùàòà êîìàíäà. ->> Âúâåäåòå C-h a file. +>> Âúâåäåòå C-h a file . Òîâà èçâåæäà â äðóã ïðîçîðåö ñïèñúê íà âñè÷êè M-x êîìàíäè, êîèòî -ñúäúðæàò "file" â òÿõíîòî èìå. Ùå âèäèòå çíàêîâè êîìàíäè êàòî C-x -C-f, èçáðîåíè èçìåæäó ñúîòâåòíèòå èìåíà íà êîìàíäè, êàòî find-file. +ñúäúðæàò „file“ (ôàéë) â òÿõíîòî èìå. Ùå âèäèòå çíàêîâè êîìàíäè êàòî +C-x C-f, èçáðîåíè èçìåæäó ñúîòâåòíèòå èìåíà íà êîìàíäè, êàòî +find-file. >> Âúâåäåòå C-M-v, çà äà ñêðîëèðàòå ïîìîùíèÿ ïðîçîðåö. Íàïðàâåòå ãî íÿêîëêî ïúòè. @@ -1098,7 +1102,7 @@ C-f, >> Âúâåäåòå C-x 1, çà äà èçòðèåòå ïîìîùíèÿ ïðîçîðåö. C-h i ×åòåíå íà ðúêîâîäñòâà (Info). Òàçè êîìàíäà âè ïðàùà â - ñïåöèàëåí áóôåð, íàðè÷àí "*info*", êúäåòî ìîæå äà + ñïåöèàëåí áóôåð, íàðè÷àí „*info*“, êúäåòî ìîæå äà ÷åòåòå ðúêîâîäñòâàòà íà èíñòàëèðàíèòå âúâ âàøàòà ñèñòåìà ïàêåòè. Âúâåäåòå m emacs , çà äà ÷åòåòå ðúêîâîäñòâîòî íà Åìàêñ. Àêî íèêîãà ïðåäè òîâà @@ -1113,8 +1117,8 @@ C-f, ----------------- Ìîæå äà íàó÷èòå ïîâå÷å çà Åìàêñ ñ ÷åòåíå íà íåãîâîòî ðúêîâîäñòâî, èëè -êàòî êíèãà, èëè â Èíôî (èçïîëçâàéòå ìåíþòî ïîìîù (Help) èëè âúâåäåòå -F10 h r). Äâå âúçìîæíîñòè, êîèòî ìîæå äà æåëàåòå â íà÷àëîòî, ñà +êàòî êíèãà, èëè â Èíôî (èçïîëçâàéòå ìåíþòî Ïîìîù (Help) èëè âúâåäåòå +C-h r). Äâå âúçìîæíîñòè, êîèòî ìîæå äà æåëàåòå â íà÷àëîòî, ñà äîâúðøâàíå (completion), êîåòî ñïåñòÿâà ïèñàíå, è dired, êîéòî îïðîñòÿâà áîðàâåíåòî ñ ôàéëîâå. @@ -1122,8 +1126,8 @@ F10 h r). èñêàòå äà ïðåâêëþ÷èòå êúì áóôåðà *Messages*, ìîæå äà âúâåäåòå C-x b *M è Åìàêñ ùå çàïúëíè îñòàíàëàòà ÷àñò îò èìåòî íà áóôåðà, äîêîëêîòî ìîæå äà ñå îïðåäåëè îò òîâà, êîåòî ñòå âúâåëè. Äîâúðøâàíåòî -å îïèñàíî â Èíôî-ðúêîâîäñòâîòî íà Åìàêñ â ñòðàíèöàòà "Äîâúðøâàíå" -("Completion"). +å îïèñàíî â Èíôî-ðúêîâîäñòâîòî íà Åìàêñ â ñòðàíèöàòà „Äîâúðøâàíå“ +(„Completion“). Dired âè ïîçâîëÿâà äà ãëåäàòå ñïèñúêà îò ôàéëîâå â äèðåêòîðèÿ (è êàòî âúçìîæíîñò: íåéíèòå ïîääèðåêòîðèè), äà ñå ïðèäâèæâàòå â òîçè ñïèñúê, @@ -1138,13 +1142,11 @@ Dired * ÇÀÊËÞ×ÅÍÈÅ ------------ -Çàïîìíåòå: çà äà èçëåçåòå áåçâúçâðàòíî îò Åìàêñ, èçïîëçâàéòå C-x C-c. -Çà äà èçëåçåòå âðåìåííî â îáâèâêà, òàêà ÷å äà ñå âúðíåòå â Åìàêñ -ïî-êúñíî, èçïîëçâàéòå C-z. +Çà äà èçëåçåòå áåçâúçâðàòíî îò Åìàêñ, èçïîëçâàéòå C-x C-c. Òîâà âúâåäåíèå å ïðåäâèäåíî äà áúäå ðàçáèðàåìî çà âñè÷êè íîâè -ïîòðåáèòåëè, òàêà ÷å àêî íàìèðàòå íåùî íåÿñíî, íå ñå ñàìîîáâèíÿâàéòå --- îïëà÷åòå ñå! +ïîòðåáèòåëè, òàêà ÷å àêî íàìèðàòå íåùî íåÿñíî, íå ñå ñàìîîáâèíÿâàéòå – +îïëà÷åòå ñå! * ÊÎÏÈÐÀÍÅ @@ -1160,26 +1162,28 @@ Dired This version of the tutorial, like GNU Emacs, is copyrighted, and comes with permission to distribute copies on certain conditions: -Copyright (C) 1985, 1996, 1998, 2001-2012 Free Software Foundation, Inc. + Copyright (C) 1985, 1996, 1998, 2001-2012 Free Software Foundation, Inc. - Permission is granted to anyone to make or distribute verbatim copies - of this document as received, in any medium, provided that the - copyright notice and permission notice are preserved, - and that the distributor grants the recipient permission - for further redistribution as permitted by this notice. + This file is part of GNU Emacs. - Permission is granted to distribute modified versions - of this document, or of portions of it, - under the above conditions, provided also that they - carry prominent notices stating who last altered them. + GNU Emacs is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + GNU Emacs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU Emacs. If not, see . -Óñëîâèÿòà çà êîïèðàíå íà ñàìèÿ Åìàêñ ñà ïî-ñëîæíè, íî â ñúùèÿ äóõ. Ìîëÿ, ïðî÷åòåòå ôàéëà COPYING è òîãàâà äàâàéòå êîïèÿ íà ÃÍÓ Åìàêñ íà ñâîè ïðèÿòåëè. Ïîìîãíåòå äà ñïðåì çàòâîðåíîñòòà íà ïðîãðàìèòå -("ïðèòåæàíèåòî"), êàòî èçïîëçâàìå, ïèøåì è ñïîäåëÿìå ñâîáîäåí ñîôòóåð! +(„ïðèòåæàíèåòî“), êàòî èçïîëçâàìå, ïèøåì è ñïîäåëÿìå ñâîáîäåí ñîôòóåð! -Ïðåâîäúò íà áúëãàðñêè å èçâúðøåí îò Îãíÿí Êóëåâ -. +Ïðåâîäúò íà áúëãàðñêè å èçâúðøåí îò Îãíÿí Êóëåâ . ;;; Local Variables: ;;; coding: windows-1251 diff --git a/etc/tutorials/TUTORIAL.de b/etc/tutorials/TUTORIAL.de index 2908203b391..3e6927441c8 100644 --- a/etc/tutorials/TUTORIAL.de +++ b/etc/tutorials/TUTORIAL.de @@ -15,7 +15,7 @@ EDIT oder ALT genannt). Folgende Abk M-f Halten Sie die META-Taste gedrückt und geben Sie den Buchstaben (klein) f ein. -`>>' am linken Rand ist ein Hinweis, einen Befehl auszuprobieren: +»>>« am linken Rand ist ein Hinweis, einen Befehl auszuprobieren: <> [Leerzeilen befinden sich hier aus didaktischen Gründen. Fortsetzung unten.] >> Drücken Sie C-v, um zur nächsten Bildschirmseite vorzublättern. @@ -32,7 +32,7 @@ Wichtig: Sie k Im weiteren wird die ESC-Taste mit bezeichnet. [Falls die deutschen Umlaute nicht korrekt auf dem Bildschirm -erscheinen, lesen Sie bitte den Abschnitt `MULE' kurz vor Ende dieser +erscheinen, lesen Sie bitte den Abschnitt »MULE« kurz vor Ende dieser Einführung.] Zunächst müssen Sie wissen, wie man sich innerhalb eines Dokuments @@ -43,9 +43,9 @@ Sie zuerst und anschlie >> Probieren Sie einige Male M-v und C-v aus. -[Auf den meisten Tastaturen bewirkt die PgUp-Taste (`page up', auch -mit `Bild' und einem Aufwärtspfeil beschriftet) dasselbe wie M-v bzw. -die PgDn-Taste (`page down', `Bild' mit Abwärtspfeil) dasselbe wie +[Auf den meisten Tastaturen bewirkt die PgUp-Taste (»page up«, auch +mit »Bild« und einem Aufwärtspfeil beschriftet) dasselbe wie M-v bzw. +die PgDn-Taste (»page down«, »Bild« mit Abwärtspfeil) dasselbe wie C-v.] @@ -60,13 +60,14 @@ betrachten: C-l lösche den Bildschirm und stelle den ganzen Text erneut dar, wobei der Text rund um den Cursor zur Mitte des Bildschirms bewegt wird. - (`l' ist der Buchstabe `klein L', nicht die Ziffer 1.) + (»l« ist der Buchstabe »klein L«, nicht die Ziffer 1.) ->> Lokalisieren Sie den Cursor und merken sich den Text in dessen - Umgebung. Drücken Sie C-l. Der Cursor ist jetzt ungefähr in der - (vertikalen) Bildschirmmitte, und er hat seine Position relativ zum - Text nicht geändert. +>> Finden Sie den Cursor und merken sich den Text in dessen Umgebung. + Drücken Sie C-l. Der Cursor ist jetzt ungefähr in der (vertikalen) + Bildschirmmitte, und er hat seine Position relativ zum Text nicht + geändert. Wiederholtes Drücken von C-l bewegt den Text zum oberen + Bildschirmrand, dann zum unteren, und dann wieder zur Mitte. * KONTROLLE DES CURSORS @@ -91,7 +92,7 @@ Befehl den Cursor wohin bewegt: [Die Buchstaben p, b, f und n stehen für die englischen Wörter -`previous', `backward', `forward' und `next'.] +»previous«, »backward«, »forward« und »next«.] >> Bewegen Sie den Cursor zur Zeile in der Mitte des Diagramms mittels C-n oder C-p. Geben Sie dann C-l ein, und das ganze Diagramm ist @@ -113,8 +114,10 @@ unterst Beobachten Sie, was C-p tut, wenn der Cursor sich in der Zeilenmitte befindet. -Jede Textzeile endet mit einem Zeilenvorschub-Zeichen (`newline'), das -sie von der folgenden Zeile trennt. +Jede Textzeile endet mit einem Zeilenvorschub-Zeichen (»newline«), das +sie von der folgenden Zeile trennt. Die letzte Zeile in einer Datei +hat normalerweise ebenfalls einen Zeilenvorschub am Schluss, Emacs +benötigt ihn aber nicht. >> Probieren Sie C-b am Anfang einer Zeile. Der Cursor sollte zum Ende der vorigen Zeile springen: C-b überspringt @@ -132,7 +135,7 @@ C-f Wenn Sie den Cursor entweder nach oben oder nach unten über den Bildschirmrand hinaus bewegen wollen, dann wird statt dessen Text in -den Bildschirm hineingeschoben. Dies nennt man `scrolling'. Auf +den Bildschirm hineingeschoben. Dies nennt man »scrolling«. Auf diese Weise verhindert Emacs, dass der Cursor je den sichtbaren Bereich verlässt. @@ -155,7 +158,7 @@ analog, aber in die entgegengesetzte Richtung. zwischen Wörtern zu beobachten. Beachten Sie die Parallele zwischen C-f und C-b einerseits und M-f und -M-b andererseits. Sehr oft werden mit `META-' beginnende Befehle für +M-b andererseits. Sehr oft werden mit »META-« beginnende Befehle für Operationen verwendet, die mit Sprache zu tun haben (Wörter, Sätze, Absätze), während CONTROL-Befehle mit den Text-Basiseinheiten operieren, unabhängig davon, was Sie gerade editieren (Zeichen, @@ -181,26 +184,26 @@ lassen. Dadurch erm Abkürzungspunkten und dem Satzende unterscheiden kann, was für Textsuche in wissenschaftlichen Texten oft vorteilhaft ist.] -[Anmerkung 2: Die Tasten `Home' (Pos1) und `End' (Ende) verhalten sich +[Anmerkung 2: Die Tasten »Home« (Pos1) und »End« (Ende) verhalten sich standardmäßig wie C-a und C-e, wie wohl die meisten Benutzer annehmen.] -Die aktuelle Position des Cursors wird im Englischen auch `point' -(Punkt) genannt. Beachten Sie bitte, dass sich `point' stets +Die aktuelle Position des Cursors wird im Englischen auch »point« +(Punkt) genannt. Beachten Sie bitte, dass sich »point« stets *zwischen* zwei Zeichen befindet, nämlich genau vor dem Cursor-Kästchen. Hier ist eine Zusammenfassung von einfachen Bewegungsbefehlen für den Cursor einschließlich der Wort- und Satzbewegungsbefehle: - C-f ein Zeichen vorwärts (auch `Pfeil rechts'-Taste) - C-b ein Zeichen zurück (auch `Pfeil links'-Taste) + C-f ein Zeichen vorwärts (auch »Pfeil rechts«-Taste) + C-b ein Zeichen zurück (auch »Pfeil links«-Taste) M-f ein Wort vorwärts M-b ein Wort zurück - C-n eine Zeile vorwärts (auch `Pfeil hinunter'-Taste) - C-p eine Zeile zurück (auch `Pfeil hinauf'-Taste) + C-n eine Zeile vorwärts (auch »Pfeil hinunter«-Taste) + C-p eine Zeile zurück (auch »Pfeil hinauf«-Taste) C-a zum Zeilenanfang C-e zum Zeilenende @@ -215,7 +218,7 @@ Zwei weitere wichtige Befehle f Kleiner-als) und M-> (META Größer-als), welche zum Anfang bzw. zum Ende des ganzen Textes springen. -Bei den meisten Terminal-Tastaturen befindet sich `<' über dem Komma, +Bei den meisten Terminal-Tastaturen befindet sich »<« über dem Komma, d.h., Sie müssen zusätzlich die SHIFT-Taste verwenden (der Umschalter ist auf deutschen Tastaturen normalerweise mit einem dicken Aufwärtspfeil markiert). Ohne SHIFT-Taste würden Sie M-Komma @@ -224,17 +227,17 @@ eingeben. >> Testen Sie nun M-<, um an den Anfang der Einführung zu gelangen. Verwenden Sie dann C-v, um wieder hierher zu kommen. -[Anmerkung: Die Tastenkombinationen `C-Home' (Pos1) und `C-End' (Ende) +[Anmerkung: Die Tastenkombinationen »C-Home« (Pos1) und »C-End« (Ende) verhalten sich standardmäßig wie M-< und M->.] Ein weiteres, oft benütztes Konzept in Emacs ist die Markierung -(`mark'). Der Grundbefehl dazu ist C-SPC (oder gleichwertig C-@, -`SPC' bezeichnet die Leertaste, engl. `space key'); mit ihm kann eine +(»mark«). Der Grundbefehl dazu ist C-SPC (oder gleichwertig C-@, +»SPC« bezeichnet die Leertaste, engl. »space key«); mit ihm kann eine Markierung gesetzt werden. Mit C-u C-SPC kommt man zu dieser Markierung zurück, falls man den Cursor inzwischen weiterbewegt hat. Viele Befehle, die große Sprünge in einem Text ausführen (so auch M-> und M-<) setzen eine Markierung implizit, was in der untersten Zeile -(dem Echobereich, s.u.) als `Mark set' angezeigt wird. +(dem Echobereich, s.u.) als »Mark set« angezeigt wird. >> Verwenden Sie jetzt M->, um zum Ende der Einführung zu springen und benützen Sie C-u C-SPC, um hierher zurückzukehren. @@ -257,7 +260,7 @@ Ziffern und dann der Befehl selbst. Alternativ k META-Taste (bzw. EDIT- oder ALT-Taste) gedrückt halten und dann die Ziffern des Wiederholungszählers eingeben. Wir empfehlen allerdings, die C-u-Methode zu lernen, da sie mit jedem Terminal funktioniert. -Das numerische Argument wird auch `Präfix-Argument' genannt, da man es +Das numerische Argument wird auch »Präfix-Argument« genannt, da man es vor dem zugehörigen Befehl eingibt. Beispiel: C-u 8 C-f bewegt den Cursor acht Zeichen vorwärts. @@ -268,7 +271,7 @@ Beispiel: C-u 8 C-f bewegt den Cursor acht Zeichen vorw Wie gesagt, die meisten Befehle verwenden das numerische Argument als Wiederholungszähler, jedoch nicht alle. Einige davon, die allerdings -noch nicht besprochen wurden, benützen es als Flag (`Flagge'), d.h., +noch nicht besprochen wurden, benützen es als Flag (»Flagge«), d.h., allein das Vorhandensein eines Präfix-Arguments, unabhängig von seinem Wert, signalisiert dem Befehl, etwas anderes zu tun. @@ -283,27 +286,20 @@ Der Bildschirminhalt sollte jetzt um acht Zeilen nach oben verschoben sein. Wollen Sie ihn nach unten verschieben, dann geben Sie M-v mit einem numerischen Argument ein. -Wenn Sie eine graphische Oberfläche wie X11 oder MS-Windows verwenden, -dann befindet sich ein schmaler, langgezogener rechteckiger Bereich auf -der linken oder rechten Seite des Emacs-Fensters. Dieser Bereich -wird Scrollbar genannt (`Verschiebungsbalken'). Sie können Text +Wenn Sie eine graphische Oberfläche wie X oder MS-Windows verwenden, +dann befindet sich ein schmaler, langgezogener rechteckiger Bereich +auf der linken oder rechten Seite des Emacs-Fensters. Dieser Bereich +wird Scrollbar genannt (»Verschiebungsbalken«). Sie können Text verschieben, indem Sie mit der Maus auf den Scrollbar klicken. ->> Drücken Sie die mittlere Taste (oder die linke und rechte Taste - gleichzeitig, falls Sie eine Zwei-Tasten-Maus verwenden) innerhalb - des Scrollbar-Bereichs. Das sollte den Text zu einer Position - verschieben, die davon abhängt, wie weit oben oder unten Sie - geklickt haben. - ->> Bewegen Sie nun die Maus auf und ab, während Sie die mittlere Taste - gedrückt halten. Sie werden sehen, dass der Text entsprechend der - Mausbewegungen nach oben oder unter verschoben wird. +Hat Ihre Maus ein Mausrad, können Sie damit ebenfalls Text +verschieben. * WENN EMACS NICHT MEHR REAGIERT -------------------------------- -Wenn Emacs `hängt', also auf keine Ihrer Eingaben reagiert, drücken +Wenn Emacs »hängt«, also auf keine Ihrer Eingaben reagiert, drücken Sie C-g. Sie können C-g auch dazu benützen, einen Befehl zu stoppen, der zu lange braucht. @@ -323,13 +319,13 @@ mit C-g r * DEAKTIVIERTE BEFEHLE ---------------------- -Ein paar Befehle von Emacs sind deaktiviert (`disabled'), damit +Ein paar Befehle von Emacs sind deaktiviert (»disabled«), damit Anfänger sie nicht unabsichtlich benutzen. Wenn Sie einen solchen Befehl eingeben, dann gibt Emacs eine Meldung aus und fragt Sie, ob Sie ihn wirklich ausführen wollen. -Antworten Sie mit y (für `yes') oder drücken Sie die Leertaste, wenn +Antworten Sie mit y (für »yes«) oder drücken Sie die Leertaste, wenn Sie den Befehl ausführen wollen, sonst mit n. >> Geben Sie C-x C-l ein (das ist ein deaktivierter Befehl) und @@ -339,7 +335,7 @@ Sie den Befehl ausf * FENSTER --------- -Emacs kann mehrere Fenster (`windows') haben, von denen jedes seinen +Emacs kann mehrere Fenster (»windows«) haben, von denen jedes seinen eigenen Text darstellt. Später erklären wir, wie man mit Fenstern umgeht. Hier wollen wir nur erklären, wie man ein (vielleicht irrtümlich erzeugtes) Fenster wieder entfernt und zum normalen @@ -351,14 +347,14 @@ Das ist C-x gefolgt von der Ziffer 1. C-x 1 expandiert das Fenster, in dem der Cursor sich befindet, sodass es den ganzen Bildschirm erfasst. Alle anderen Fenster werden gelöscht. -[Anmerkung: Emacs verwendet das Wort Fenster (`windows') in einem +[Anmerkung: Emacs verwendet das Wort Fenster (»windows«) in einem anderen Sinn, als Sie es vielleicht gewöhnt sind. Wenn Sie einen Textbildschirm vor sich haben, dann ist die Terminologie eindeutig. Wenn Sie allerdings eine graphische Oberfläche benutzen, dann bezeichnet ein Emacs-Fenster einen Teilbereich des Fensters (von Ihrer graphischen Oberfläche erzeugt), in dem Emacs läuft, in völliger Analogie zum Textmodus. Für (graphische) Fenster im herkömmlichen -Sinn verwenden die Emacs-Entwickler den Ausdruck Rahmen (`frame').] +Sinn verwenden die Emacs-Entwickler den Ausdruck »Rahmen« (»frame«).] >> Bewegen Sie den Cursor zu dieser Zeile und geben Sie C-u 0 C-l ein. @@ -376,38 +372,32 @@ Sinn verwenden die Emacs-Entwickler den Ausdruck Rahmen (`frame').] Wenn Sie Text einfügen wollen, dann geben Sie ihn einfach ein. Sichtbare Zeichen, z.B. A, 7, * usw. werden als Text von Emacs sofort eingefügt. Drücken Sie (die Zeilenvorschubtaste, meistens -mit `Enter' oder nur mit einem Rückwärts-Hakenpfeil beschriftet), um +mit »Enter« oder nur mit einem Rückwärts-Hakenpfeil beschriftet), um ein Zeilenvorschubzeichen einzufügen. -Sie können das zuletzt eingegebene Zeichen löschen, indem Sie -drücken. ist einer Taste auf der Tastatur zugeordnet, die -mit `Del' oder `Entf' beschriftet ist. In manchen Fällen dient die -Backspace-Taste (oft auch nur als Rückwärtspfeil beschriftet) als -, aber nicht immer! +Sie können das zuletzt eingegebene Zeichen löschen, indem Sie +drücken. ist der Backspace-Taste zugeordnet (oft auch nur als +Rückwärtspfeil beschriftet). -Allgemein gesprochen löscht das Zeichen unmittelbar vor der +Allgemein gesprochen löscht das Zeichen unmittelbar vor der aktuellen Cursorposition. -[Beachten Sie, dass ein logischer Befehlsname ist, der auf -die jeweilige Tastatur abgebildet wird. Lesen Sie im Abschnitt `Init -Rebinding' des Emacs-Handbuches nach, wie Sie gegebenenfalls die -Tastaturbelegung verändern können.] - >> Probieren Sie das jetzt aus: Geben Sie ein paar Zeichen ein und - löschen Sie sie wieder mit . Sie brauchen sich keine - Sorgen zu machen, dieses Dokument zu verändern: Was Sie hier lesen, - ist nur eine (persönliche) Kopie des originalen Dokuments. + löschen Sie sie wieder mit . Sie brauchen sich keine Sorgen + zu machen, dieses Dokument zu verändern: Was Sie hier lesen, ist + nur eine (persönliche) Kopie des originalen Dokuments. -Wenn eine Textzeile zu lang wird für eine Bildschirmzeile, dann wird -sie auf einer zweiten Bildschirmzeile `fortgesetzt'. Ein -`Backslash'-Zeichen (`\') bzw. ein kleiner gebogener Pfeil (bei -graphischen Oberflächen) am rechten Rand verdeutlicht das. +Wenn eine Textzeile zu lang für eine Bildschirmzeile ist, wird sie auf +einer zweiten Bildschirmzeile »fortgesetzt«: Bei graphischen +Oberflächen erscheinen zwei kleine gebogene Pfeile links und rechts +vom Textbereich (diese schmalen Spalten werden »fringe« genannt), bei +Terminals ein »Backslash«-Zeichen (»\«) am rechten Rand. >> Fügen Sie Text ein, bis Sie den rechten Rand erreicht haben. Fügen Sie weiter Text ein. Beobachten Sie, wie eine Fortsetzungszeile erscheint. ->> Verwenden Sie so oft, bis die Textzeile wieder auf eine +>> Verwenden Sie so oft, bis die Textzeile wieder auf eine Bildschirmzeile passt. Die Fortsetzungszeile verschwindet wieder. Sie können das Zeilenvorschubzeichen wie jedes andere Zeichen löschen: @@ -415,7 +405,7 @@ Die Zeilen vor und nach ihm werden dann zu einer zusammengeh diese länger als die Bildschirmbreite, erscheint eine Fortsetzungszeile. ->> Bewegen Sie den Cursor zum Anfang der Zeile und geben Sie +>> Bewegen Sie den Cursor zum Anfang der Zeile und geben Sie ein: Die momentane Zeile wird an die vorige angehängt. >> Geben Sie ein, um wieder ein Zeilenvorschubzeichen @@ -432,10 +422,10 @@ Bis jetzt kennen Sie die Grundbefehle, um Text in Emacs einzugeben und Fehler zu korrigieren -- fast analog zu den Bewegungsbefehlen ist es möglich, ganze Wörter, Sätze oder Zeilen zu löschen: - lösche ein Zeichen vor dem Cursor + lösche ein Zeichen vor dem Cursor C-d lösche das Zeichen unter dem Cursor - M- lösche bis zum (nächsten) Wortanfang unmittelbar + M- lösche bis zum (nächsten) Wortanfang unmittelbar vor dem Cursor M-d lösche bis zum (nächsten) Wortende nach (bzw. unter) dem Cursor @@ -445,42 +435,40 @@ m M-k lösche bis zum nächsten Satzende nach (bzw. unter) dem Cursor -Beachten Sie bitte, dass je nach Tastaturbelegung die Del- -(Entf-) oder die Backspace- (Rückwärtspfeil-) Taste sein kann. - Eine andere, einheitliche Methode zum Löschen von Text ist das Befehlspaar C-@ (oder C-SPC) und C-w. Gehen sie zum Anfang des zu löschenden Textes und drücken Sie C-@ oder C-SPC. Gehen Sie dann zum Ende des zu löschenden Textes und drücken Sie C-w, um ihn zu entfernen. ->> Bewegen Sie den Cursor zum Buchstaben `E' am Anfang des letzten +>> Bewegen Sie den Cursor zum Buchstaben »E« am Anfang des letzten Absatzes. ->> Drücken Sie C-SPC. Emacs sollte die Meldung `Mark set' am unteren +>> Drücken Sie C-SPC. Emacs sollte die Meldung »Mark set« am unteren Bildschirmrand zeigen. ->> Bewegen Sie den Cursor zum Buchstaben `A' in der zweiten Zeile des +>> Bewegen Sie den Cursor zum Buchstaben »A« in der zweiten Zeile des letzten Absatzes. ->> Geben Sie C-w ein. Der ganze Text, beginnend mit dem `E' und - endend vor dem `A', ist nun gelöscht. +>> Geben Sie C-w ein. Der ganze Text, beginnend mit dem »E« und + endend vor dem »A«, ist nun gelöscht. Löschen Sie mehr als ein Zeichen auf einmal, speichert Emacs den gelöschten Text, damit Sie ihn bei Bedarf wieder zurückholen können. Einfügen von bereits gelöschtem Text wird im englischen Dokumentation -von Emacs als `yanking' (wörtlich `herausreißen') bezeichnet. Sie +von Emacs als »yanking« (wörtlich »herausreißen«) bezeichnet. Sie können den gelöschten Text an einer beliebigen Stelle wieder einzufügen. Solange Sie nichts neues löschen, steht Ihnen dieser gelöschte Textteil immer wieder zu Verfügung. Der Befehl dazu ist C-y -(das Ypsilon steht für `yank'). +(das Ypsilon steht für »yank«). Emacs unterscheidet zwei Klassen von Löschbefehlen (was man im -Deutschen leider nicht gut wiedergeben kann): `killing' (umbringen) -und `deleting' (löschen). Wenn man sich vorstellt, dass `yanking' den -Begriff `von den Toten erwecken' darstellt, dann hat man ungefähr eine -Vorstellung von der Metapher -- Von einem `kill'-Befehl gelöschter -Text wird gespeichert und kann bei Bedarf mit C-y zurückgeholt -werden. Von einem `delete'-Befehl entfernter Text (in der Regel -einzelne Zeichen, leere Zeilen und Zwischenräume) wird nicht extra -gespeichert und kann daher auch nicht zurückgeholt werden. +Deutschen leider nicht gut wiedergeben kann): »killing« (umbringen) +und »deleting« (löschen). Wenn man sich vorstellt, dass »yanking« den +Begriff »von den Toten erwecken« darstellt, dann hat man ungefähr eine +Vorstellung von der Metapher -- Von einem »kill«-Befehl gelöschter +Text wird gespeichert und kann bei Bedarf mit C-y zurückgeholt werden. +Von einem »delete«-Befehl entfernter Text (in der Regel einzelne +Zeichen, leere Zeilen und Zwischenräume) wird nicht extra gespeichert +und kann daher auch nicht zurückgeholt werden. Allerdings besteht die +Möglichkeit zum »Undo«, siehe weiter unten. >> Bringen Sie den Cursor an den Anfang einer nicht-leeren Zeile und geben Sie C-k ein, um die Zeile zu löschen. @@ -495,12 +483,16 @@ behandelt: es l Zeilenvorschübe: C-u 2 C-k löscht zwei Zeilen komplett; zweimal C-k löscht dagegen nur eine Zeile. -Wie schon erwähnt, bringt C-y den zuletzt gelöschten (`gekillten') +Wie schon erwähnt, bringt C-y den zuletzt gelöschten (»gekillten«) Text zurück -- man kann diesen Text einfügen, wo man will: an der ursprünglichen Stelle, an einer anderen Stelle, oder sogar in einer anderen Datei. Mehrmaliges Ausführen von C-y fügt den Text mehrmals ein. +In anderen Editoren wird »kill« und »yank« oft als »cut« +(ausschneiden) und »paste« (einfügen) bezeichnet. Näheres dazu findet +sich im Abschnitt »Glossary« des Emacs-Handbuchs. + >> Probieren Sie jetzt C-y, um diesen Effekt zu sehen. Führen Sie C-k mehrmals hintereinander aus, dann wird der so @@ -509,14 +501,14 @@ Text zur >> Drücken Sie mehrmals C-k. -Holen Sie jetzt den Text `von den Toten' zurück: +Holen Sie jetzt den Text »von den Toten« zurück: >> Drücken Sie C-y. Bewegen Sie dann den Cursor ein paar Zeilen nach unten und drücken Sie C-y erneut. Der eben eingefügte Text wird noch einmal an anderer Stelle kopiert. Wie können Sie gelöschten Text wieder einfügen, wenn Sie in der -Zwischenzeit noch etwas anderes `gekillt' haben? C-y würde das +Zwischenzeit noch etwas anderes »gekillt« haben? C-y würde das zuletzt gelöschte Textstück zurückholen, was aber nicht das gewünschte ist. Verwenden Sie nun M-y (unmittelbar nach der erstmaligen Ausführung von C-y), um den gerade mit C-y eingefügten Textteil durch @@ -546,7 +538,7 @@ durchgesehen. Die meisten graphischen Oberflächen bieten auch die Möglichkeit, mit der linken Maustaste einen Textteil zu markieren (er erscheint dann normalerweise grau unterlegt). Der Befehl C-w löscht diesen -markierten Textteil (in Emacs auch `Region' genannt) und fügt ihn in +markierten Textteil (in Emacs auch »Region« genannt) und fügt ihn in den Löschring ein. Dasselbe geht auch ohne Maus: Bewegen Sie den Cursor zum Beginn des zu @@ -562,54 +554,48 @@ man Befehle mit langen Namen ausf ------ Wenn Sie etwas am Text geändert haben und nachträglich bemerken, dass -das ein Fehler war, so können Sie den Fehler mit dem Befehl C-x u -ungeschehen machen (`undo'). +das ein Fehler war, so können Sie den Fehler mit dem Befehl C-/ +ungeschehen machen (»undo«). -Normalerweise macht C-x u das Verhalten von einem Befehl ungeschehen; -führen Sie C-x u mehrmals hintereinander aus, werden die jeweiligen +Normalerweise macht C-/ das Verhalten von einem Befehl ungeschehen; +führen Sie C-/ mehrmals hintereinander aus, werden die jeweiligen vorigen Befehle widerrufen. Es gibt jedoch zwei Ausnahmen: Befehle, die den Text nicht ändern, werden nicht gezählt (z.B. Cursorbewegungen und Blättern im Text). -Und Befehle, die sich selbst einfügen (`self-inserting': Drücken Sie -zum Beispiel die `u'-Taste, dann wird der Buchstabe u eingefügt) +Und Befehle, die sich selbst einfügen (»self-inserting«: Drücken Sie +zum Beispiel die »u«-Taste, dann wird der Buchstabe u eingefügt) werden in Gruppen von bis zu 20 Zeichen wiederhergestellt, um die -Anzahl der notwendigen C-x u-Befehle zu reduzieren. +Anzahl der notwendigen C-/-Befehle zu reduzieren. >> Löschen Sie diese Zeilen mit C-k und drücken Sie anschließend - mehrmals C-x u, und die Zeilen erscheinen wieder. + mehrmals C-/, und die Zeilen erscheinen wieder. -C-_ ist ein alternativer Undo-Befehl; er arbeitet genauso wie C-x u, -ist jedoch einfacher zu tippen, wenn Sie den Befehl mehrmals -hintereinander ausführen möchten. Der Nachteil von C-_ ist, dass bei -manchen Tastaturen nicht sofort einsichtig ist, wie man das eingibt. - -Eine weitere Eingabemöglichkeit bei vielen Terminals ist C-/. - -Ein numerisches Argument für C-_, C-x u oder C-/ wird als +Alternative Tastenkombinationen für C-/ sind C-_ und C-x u. Ein +numerisches Argument für C-/, C-_ oder C-x u wird als Wiederholungszähler interpretiert. Der Unterschied zwischen der Undo-Funktion und dem oben erklärten C-y ist, dass erstere gelöschten Text an exakt der gleichen Position wie vorher wiederherstellt, wohingegen C-y den gelöschten Text an der -momentanen Cursorposition einfügt. Im übrigen kann auch `gekillter' -Text wieder hergestellt werden; der Unterschied zwischen `killing' und -`yanking' betrifft nur C-y, aber nicht die Undo-Funktion. +momentanen Cursorposition einfügt. Im übrigen kann auch »gekillter« +Text wieder hergestellt werden; der Unterschied zwischen »killing« und +»yanking« betrifft nur C-y, aber nicht die Undo-Funktion. * DATEIEN --------- -Um editierten Text zu sichern, muss man ihn in einer Datei (`file') -speichern (`save'). Wird Emacs beendet, ohne dass man vorher den Text +Um editierten Text zu sichern, muss man ihn in einer Datei (»file«) +speichern (»save«). Wird Emacs beendet, ohne dass man vorher den Text gespeichert hat, dann ist der Text verloren. Will man andererseits bereits gesicherten Text mit Emacs editieren, so muss die entsprechende Datei in Emacs geladen werden (im Englischen -wird das als `finding' (finden) bzw. als `visiting' (besuchen) +wird das als »finding« (finden) bzw. als »visiting« (besuchen) bezeichnet). -Eine Datei `finden' bedeutet, dass man den Inhalt dieser Datei mit +Eine Datei »finden« bedeutet, dass man den Inhalt dieser Datei mit Emacs bearbeitet -- es ist fast so, als ob man die Datei selbst editiert. Jedoch werden Änderungen an dieser Datei erst dann dauerhaft, wenn man sie speichert; auf diese Weise wird vermieden, @@ -621,9 +607,9 @@ die Wenn Sie die untere Bildschirmkante genauer betrachten, dann werden Sie eine Zeile finden, die mit einem oder mehreren Bindestrichen beginnt und endet; sie enthält unter anderem die Zeichenkette -`TUTORIAL.de'. An dieser Position befindet sich immer der Name der -Datei, die Sie momentan bearbeiten (`visit'). Gerade in diesem -Augenblick bearbeiten Sie eine Datei mit dem Namen `TUTORIAL.de' +»TUTORIAL.de«. An dieser Position befindet sich immer der Name der +Datei, die Sie momentan bearbeiten (»visit«). Gerade in diesem +Augenblick bearbeiten Sie eine Datei mit dem Namen »TUTORIAL.de« (genauer gesagt, Emacs hat eine identische Kopie geladen). Die Befehle für das Laden und Speichern von Dateien bestehen aus zwei @@ -634,14 +620,14 @@ drei oder vier Zeichen lang -- Sie haben bereits C-x u und C-x 1 kennengelernt. Um eine Datei in Emacs laden zu können, muss man dem Lade-Befehl den -Namen der Datei mitteilen. Der Befehl `liest ein Argument vom -Terminal' (in diesem Fall ist das der Name der Datei). Nachdem Sie +Namen der Datei mitteilen. Der Befehl »liest ein Argument« (in diesem +Fall ist das der Name der Datei). Nachdem Sie C-x C-f (lade Datei) eingegeben haben, werden Sie von Emacs nach dem Dateinamen gefragt. Die Zeichen, die Sie eingeben, werden in der untersten Bildschirmzeile -dargestellt, dem sogenannten Minipuffer (`minibuffer'). Sie können +dargestellt, dem sogenannten Minipuffer (»minibuffer«). Sie können ganz normale Emacs-Editierfunktionen verwenden, um den Dateinamen zu ändern. @@ -653,39 +639,42 @@ Minipuffer benutzen) mit C-g abbrechen. ab (Sie haben also keine Datei geladen). Wenn Sie den Dateinamen fertig eingegeben haben, drücken Sie , -um den Befehl abzuschließen; C-x C-f wird ausgeführt und lädt die von -Ihnen ausgesuchte Datei. Der Minipuffer verschwindet wieder, sobald -C-x C-f beendet ist. +um den Befehl abzuschließen. Der Minipuffer verschwindet wieder, und +C-x C-f lädt die von Ihnen ausgesuchte Datei. -Ein paar Augenblicke später erscheint der Dateiinhalt auf dem -Bildschirm, und Sie können den Text editieren. Wenn Sie Ihre -Änderungen permanent speichern wollen, dann drücken Sie +Der Dateiinhalt erscheint jetzt auf dem Bildschirm, und Sie können den +Text editieren. Wenn Sie Ihre Änderungen permanent speichern wollen, +dann drücken Sie C-x C-s (sichere Datei) und Emacs kopiert den Text in die Datei. Beim ersten Mal benennt Emacs die Originaldatei um, damit sie nicht verloren ist. Der neue -Name besteht aus dem Originalnamen plus einer angehängten Tilde `~' +Name besteht aus dem Originalnamen plus einer angehängten Tilde »~« [unter einigen Betriebssystemen wird statt dessen die -Namenserweiterung durch `.bak' ersetzt]. +Namenserweiterung durch ».bak« ersetzt]. Emacs schreibt den Namen der gesicherten Datei in die unterste Zeile, sobald C-x C-s fertig ausgeführt ist. Sie sollten den editierten Text oft speichern, damit nicht allzuviel bei einem etwaigen Systemabsturz -verloren geht. +verloren geht (siehe auch den Abschnitt »AUTOMATISCHES SPEICHERN« +weiter unten). ->> Geben Sie C-x C-s ein, um Ihre Kopie der Einführung zu sichern. - Die Ausgabe am unteren Bildschirmrand sollte `Wrote ...TUTORIAL.de' - sein. +>> Geben Sie + + C-x C-s TUTORIAL.de + + ein, um Ihre Kopie der Einführung zu sichern. Die Ausgabe am + unteren Bildschirmrand sollte »Wrote ...TUTORIAL.de« sein. [Manche Terminals werden durch C-s angehalten und müssen durch C-q -wieder `entsperrt' werden. Eine erste Abhilfe zur Umschiffung dieses -C-s-Problems schafft die Befehlsfolge `M-x save-buffer', welche exakt +wieder »entsperrt« werden. Eine erste Abhilfe zur Umschiffung dieses +C-s-Problems schafft die Befehlsfolge »M-x save-buffer«, welche exakt das gleiche wie C-x C-s bewirkt. Mehr Hilfe dazu finden Sie im -Abschnitt `Spontaneous Entry to Incremental Search' im +Abschnitt »Spontaneous Entry to Incremental Search« im Emacs-Handbuch.] -Sie können eine existierende Datei anschauen (`view') oder editieren. +Sie können eine existierende Datei anschauen (»view«) oder editieren. Sie können aber auch eine Datei laden, die noch gar nicht existiert, um so eine neue Datei zu erzeugen: Sie öffnen dazu die (nicht-existente) Datei, die natürlich leer ist, und beginnen dann @@ -703,18 +692,8 @@ laden, dann bleibt die erste in Emacs. Sie k zurückschalten, indem Sie noch einmal C-x C-f eingeben. Auf diese Weise lassen sich eine ganze Reihe von Dateien laden und bearbeiten. ->> Erzeugen Sie eine Datei mit dem Namen `foo', indem Sie - - C-x C-f foo - - eingeben. Tippen Sie etwas Text ein, editieren Sie ihn und - speichern Sie ihn abschließend mit C-x C-s. Kehren Sie - anschließend zu dieser Einführung zurück mit - - C-x C-f TUTORIAL.de - Emacs speichert jeden Text, der aus einer Datei in Emacs geladen wird, -in einem `Puffer'-Objekt. Um eine Liste der momentan existierenden +in einem »Puffer«-Objekt. Um eine Liste der momentan existierenden Puffer zu sehen, geben Sie C-x C-b (liste Puffer auf) @@ -726,7 +705,7 @@ ein. Beachten Sie, dass jeder Puffer einen Namen hat und manche auch mit dem Namen einer Datei assoziiert sind, dessen Inhalt sie enthalten. Manche Puffer aber haben keinen zugehörige Datei, z.B. der mit dem -Namen `*Buffer List*'. Er wurde von dem Befehl C-x C-b erzeugt, um +Namen »*Buffer List*«. Er wurde von dem Befehl C-x C-b erzeugt, um die Pufferliste darzustellen. JEDER Text, den Sie innerhalb Emacs in einem Fenster sehen, ist immer ein Ausschnitt eines Puffers. @@ -734,28 +713,39 @@ einem Fenster sehen, ist immer ein Ausschnitt eines Puffers. zu lassen. Wieviele Puffer auch in Emacs geladen sind, nur ein einziger ist der -`momentane' Puffer, nämlich derjenige, den Sie gerade editieren. Will +»momentane« Puffer, nämlich derjenige, den Sie gerade editieren. Will man einen anderen Puffer editieren, muss man zuerst zu diesem Puffer -wechseln (`switch'). Wie schon weiter oben erklärt, kann man mittels +wechseln (»switch«). Wie schon weiter oben erklärt, kann man mittels C-x C-f zu einem Puffer wechseln, der zu einer Datei gehört. Emacs hat jedoch einen einfacheren Befehl, C-x b, um einen beliebigen Puffer namentlich auszuwählen. ->> Geben Sie C-x b foo ein, um zurück zum Puffer `foo' zu - schalten, der den Text der Datei `foo' enthält. Anschließend geben - Sie C-x b TUTORIAL.de ein, um wieder zu dieser Einführung - zu gelangen. +>> Geben Sie + + C-x C-f foo + + ein, um eine Datei mit dem Namen »foo« zu erzeugen. Mittels + + C-x b TUTORIAL.de + + gelangen Sie wieder zu dieser Einführung. In der Regel ist der Puffername identisch zu einem Dateinamen (ohne den Verzeichnispräfix), jedoch nicht immer. Die von C-x C-b erzeugte -Pufferliste zeigt stets die Namen aller Puffer. +Pufferliste zeigt stets die Namen aller Puffer mit den +korrespondierenden Dateinamen. JEDER Text in Emacs ist Teil eines Puffers, aber nicht jeder Puffer -entspricht einer Datei. So ist z.B. der Puffer `*Buffer List*' mit +entspricht einer Datei. So ist z.B. der Puffer »*Buffer List*« mit keiner Datei assoziiert -- er wurde direkt von dem Befehl C-x C-b -erzeugt. Genauso hat der Puffer `*Messages*' keine Entsprechung als -Datei; er enthält alle Mitteilungen, die in der untersten Zeile -während des Arbeitens mit Emacs erscheinen. +erzeugt. Auch dieser »TUTORIAL.de«-Puffer war anfangs keiner Datei +zugeordnet, jetzt allerdings schon, denn Sie haben im letzten +Abschnitt den Befehl C-x C-s eingegeben und so den Pufferinhalt als +Datei gespeichert. + +Der Puffer »*Messages*« hat ebenfalls keine Entsprechung als Datei; er +enthält alle Mitteilungen, die in der untersten Zeile während des +Arbeitens mit Emacs erscheinen. >> Geben Sie C-x b *Messages* ein, um sich den Mitteilungspuffer anzuschauen. @@ -778,7 +768,7 @@ Sie ihn speichern wollen. >> Fügen Sie eine Textzeile ein und drücken Sie dann C-x s. Emacs fragt Sie jetzt, ob Sie einen Puffer mit dem Namen - TUTORIAL.de speichern wollen. Bejahen Sie, indem Sie `y' drücken. + TUTORIAL.de speichern wollen. Bejahen Sie, indem Sie »y« drücken. [Anmerkung: Sie verändern nicht die Originaldatei, sondern eine persönliche Kopie.] @@ -793,7 +783,7 @@ sie trotzdem alle benutzen zu k C-x Zeichenerweiterung. Gefolgt von einem Zeichen. M-x Befehlserweiterung. Gefolgt von einem (langen) Namen. -[Das `x' steht für das englische Wort `extension'.] Diese beiden +[Das »x« steht für das englische Wort »extension«.] Diese beiden Befehle sind prinzipiell sehr nützlich, werden aber weniger oft benötigt als die bisher vorgestellten. Sie haben bereits mehrere Befehle aus der ersten Kategorie kennengelernt; unter anderem C-x C-f, @@ -804,31 +794,25 @@ vielleicht vergessen haben, Daten oder Text zu sichern -- Emacs fragt bei jedem geändertem Puffer (bzw. Datei), ob er gespeichert werden soll. -C-z ist der Befehl um Emacs *zeitweise* zu verlassen; es ist also -möglich, später an der unterbrochenen Stelle nahtlos weiterzuarbeiten. - -Auf den meisten Systemen wie Linux oder FreeBSD wird Emacs -`suspendiert', wenn Sie C-z drücken, d.h., Sie kehren zurück zur -Eingabezeile des Betriebssystems, ohne Emacs zu beenden. In der Regel -können Sie dann mittels des Befehls `fg' bzw. `%emacs' wieder zu Emacs -umschalten. Unter graphischen Oberflächen wie X11 bewirkt C-z in der -Regel, dass Emacs ikonofiziert wird, also als Ikone (`Icon') darauf -wartet, mit einem Mausklick bei Bedarf wieder vergrößert zu werden. +Unter graphischen Oberflächen wie X bewirkt C-z in der Regel, dass +Emacs ikonofiziert wird, also als Ikone (»Icon«) darauf wartet, mit +einem Mausklick bei Bedarf wieder vergrößert zu werden. Auf einem +Textterminal dagegen wird Emacs »suspendiert«, wenn Sie C-z drücken, +d.h., Sie kehren zurück zur Eingabezeile des Terminals, ohne Emacs zu +beenden, und können beliebige andere Befehle ausführen. In der Regel +können Sie später mittels des Befehls »fg« bzw. »%emacs« wieder zu +Emacs umschalten. Bei Betriebssystemen bzw. Shells, die Suspension von Programmen nicht implementiert haben (z.B. MS-DOS), startet C-z einen -System-Befehlsinterpreter innerhalb von Emacs (`subshell'). -Normalerweise müssen Sie dann `exit' in die Befehlszeile schreiben, um +System-Befehlsinterpreter innerhalb von Emacs (»subshell«). +Normalerweise müssen Sie dann »exit« in die Befehlszeile schreiben, um zu Emacs zurückzukehren. Der beste Zeitpunkt für C-x C-c ist, wenn Sie sich ausloggen (bzw. Ihren Computer ausschalten); Sie sollten Emacs ebenfalls beenden, wenn Sie Emacs von einem anderen Programm aus aufgerufen -haben (z.B. einem Programm, das E-mails liest), da solche Programme -oft nicht wissen, wie sie mit Emacs im Suspend-Modus umgehen sollen. -In allen anderen Fällen ist es meistens günstiger, C-z zu benutzen und -Emacs nicht zu beenden, damit man im Bedarfsfalle sofort an der -gleichen Stelle weiterarbeiten kann. +haben (z.B. einem Programm, das E-mails liest). Hier ist eine Liste aller C-x-Befehle, die Sie bereits kennengelernt haben: @@ -846,19 +830,19 @@ Ein Beispiel f global (also in der ganzen Datei bzw. Puffer) eine Zeichenkette durch eine andere ersetzt. Wenn Sie M-x drücken, dann fragt Sie Emacs in der untersten Bildschirmzeile nach dem Namen des Befehls (in diesem -Fall `replace-string'). Geben Sie jetzt `repl s' ein und Emacs +Fall »replace-string«). Geben Sie jetzt »repl s« ein und Emacs vervollständigt den Namen. Schließen Sie die Eingabe mit ab. [ bezeichnet die Tabulatortaste.] >> Bewegen Sie den Cursor zu der leeren Zeile sechs Zeilen unter dieser. Geben Sie dann - M-x repl sBildschirmText + M-x repl s Bildschirm Text ein und kehren Sie mit C-u C-SPC an diese Position zurück. Beachten Sie wie diese Bildschirmzeile jetzt aussieht: Sie haben - den Wortteil B-i-l-d-s-c-h-i-r-m durch `Text' ersetzt (und zwar im + den Wortteil B-i-l-d-s-c-h-i-r-m durch »Text« ersetzt (und zwar im ganzen Dokument beginnend von der Cursorposition). >> Drücken Sie jetzt C-x u, um diese Änderungen auf einmal rückgängig @@ -872,17 +856,17 @@ Haben Sie gespeichert, dann können sie verloren gehen, falls der Computer abstürzt. Um Sie davor zu schützen, sichert Emacs in bestimmten Zeitintervallen jede von Ihnen editierte Datei in sogenannten -`auto save'-Dateien. Sie sind daran zu erkennen, dass sie mit einem # -beginnen und enden; z.B. ist `#hello.c#' der Name der Auto-Save-Datei -von `hello.c'. Wenn Sie Ihren Text auf normalem Wege speichern, wird +»auto save«-Dateien. Sie sind daran zu erkennen, dass sie mit einem # +beginnen und enden; z.B. ist »#hello.c#« der Name der Auto-Save-Datei +von »hello.c«. Wenn Sie Ihren Text auf normalem Wege speichern, wird die Auto-Save-Datei gelöscht. Stürzt der Rechner einmal wirklich ab, können Sie die Änderungen, die beim letzten Auto-Save gespeichert worden sind, folgendermaßen wiederherstellen: Laden Sie die Datei auf normalem Wege (die Datei, die Sie bearbeitet haben, nicht die Auto-Save-Datei) und geben Sie -dann `M-x recover-file' ein. Wenn Emacs Sie um Bestätigung -fragt, antworten Sie mit `yes', um den Inhalt der +dann »M-x recover-file « ein. Wenn Emacs Sie um Bestätigung +fragt, antworten Sie mit »yes «, um den Inhalt der Auto-Save-Datei zu übernehmen. @@ -890,8 +874,8 @@ Auto-Save-Datei zu ------------------ Geben Sie Befehle langsam ein, dann zeigt Ihnen Emacs Ihre eigene -Eingabe am unteren Bildschirmrand im sogenannten Echo-Bereich (`echo -area'). Der Echo-Bereich enthält die unterste Bildschirmzeile. +Eingabe am unteren Bildschirmrand im sogenannten Echo-Bereich (»echo +area«). Der Echo-Bereich enthält die unterste Bildschirmzeile. [Mini-Puffer und Echo-Bereich fallen normalerweise zusammen, sind aber nicht das gleiche, da innerhalb des Echo-Bereiches nichts eingegeben @@ -902,30 +886,30 @@ werden kann.] ------------------ Die Bildschirmzeile unmittelbar über dem Echo-Bereich ist die -Statuszeile (`mode line'). Sie schaut ungefähr so aus: +Statuszeile (»mode line«). Sie schaut ungefähr so aus: --1:** TUTORIAL.de 59% L905 (Fundamental)---------------------- +-1:**- TUTORIAL.de 58% L891 (Fundamental) Diese Zeile gibt nützliche Hinweise über den momentanen Zustand von Emacs und den Text, den Sie gerade editieren. -Sie wissen bereits, was der Dateiname bedeutet. `--NN%--' zeigt die -momentane Position innerhalb des Textes an: NN Prozent davon sind -oberhalb des Bildschirms. Ist der Dateianfang zu sehen, dann -erscheint `Top' anstelle von `00%'. Analog dazu erscheint `Bot' (für -das englische Wort `bottom'), wenn das Dateiende sichtbar ist. Wenn -Sie einen Text betrachten, der komplett auf den Bildschirm passt, dann -erscheint `All'. +Sie wissen bereits, was der Dateiname bedeutet. »NN%« zeigt die +momentane Position innerhalb des Puffertextes an: NN Prozent davon +sind oberhalb des Bildschirms. Ist der Dateianfang zu sehen, dann +erscheint »Top« anstelle von »00%«. Analog dazu erscheint »Bot« (für +das englische Wort »bottom«), wenn das Dateiende sichtbar ist. Wenn +Sie einen Puffer betrachten, der komplett auf den Bildschirm passt, +dann erscheint »All«. -Das `L' und die nachfolgenden Ziffern geben die aktuelle Zeilennummer +Das »L« und die nachfolgenden Ziffern geben die aktuelle Zeilennummer an, in der sich der Cursor befindet. -Am Anfang der Zeile sehen Sie `-1:**'. Die Zeichen vor dem +Am Anfang der Zeile sehen Sie »-1:**-«. Die Zeichen vor dem Doppelpunkt geben an, in welcher Kodierung der Text ist und welche Eingabemethode verwendet wird. Dazu mehr weiter unten im Abschnitt -`MULE'. +»MULE«. -[Anstelle des Doppelpunktes können auch ein `\' und `/' stehen, falls +[Anstelle des Doppelpunktes können auch ein »\« und »/« stehen, falls Sie Dateien editieren, die der MS-DOS- bzw. der Macintosh-Textkonvention folgen: MS-DOS verwendet als Zeilenvorschubzeichen CR-LF (Carriage Return gefolgt von Linefeed), @@ -938,24 +922,24 @@ Prozentzeichen nach dem Doppelpunkt stehen f gelesen, aber nicht editiert werden kann. Der eingeklammerte Teil gibt an, in welchem Editiermodus Sie sich -befinden. Der Standardmodus heißt `Fundamental' (Sie verwenden ihn -gerade); er ist ein Beispiel für einen Hauptmodus (`major mode'). +befinden. Der Standardmodus heißt »Fundamental« (Sie verwenden ihn +gerade); er ist ein Beispiel für einen Hauptmodus (»major mode«). Emacs hat viele Hauptmodi implementiert. Manche davon werden für verschiedene (Computer-)Sprachen und/oder Textarten verwendet, z.B. Lisp-Modus, Text-Modus usw. Es kann immer nur ein Hauptmodus aktiviert sein, und der Name befindet sich dort, wo jetzt gerade -`Fundamental' steht. +»Fundamental« steht. Einige Befehle verhalten sich jeweils in verschiedenen Hauptmodi anders. Es gibt zum Beispiel einen Befehl, um einen Kommentar in den Quellcode eines Computerprogramm einzufügen -- die Tastenfolge dafür ist zwar (in der Regel) die gleiche, doch wird ein Kommentar mit der für die aktuelle Programmiersprache gültigen Syntax eingefügt -(z.B. `// ...' für ein Programm in C++ oder `; ...' für Lisp). Um in +(z.B. »// ...« für ein Programm in C++ oder »; ...« für Lisp). Um in einen Hauptmodus zu schalten, hängen Sie einfach das englische Wort -`-mode' an den (kleingeschriebenen) Namen des Modus an und führen den -Befehl mittels M-x aus. Beispiel: `M-x fundamental-mode' schaltet in +»-mode« an den (kleingeschriebenen) Namen des Modus an und führen den +Befehl mittels M-x aus. Beispiel: »M-x fundamental-mode« schaltet in den Fundamental-Modus. Weitere wichtige Modi sind c-mode, perl-mode, lisp-mode, text-mode u.a. Die meisten davon werden automatisch aktiviert, und zwar entsprechend der Namenserweiterung der zu ladenden @@ -965,30 +949,30 @@ C-Modus aktiviert. Wenn Sie deutschen oder englischen Text bearbeiten, dann sollten Sie den Textmodus verwenden. [Falls Ihre Tastatur keine Umlaut-Tasten hat, müssen Sie noch einen weiteren Nebenmodus aktivieren. Lesen Sie -dazu den Abschnitt `MULE' weiter unten.] +dazu den Abschnitt »MULE« weiter unten.] ->> Geben Sie `M-x text mode' ein. +>> Geben Sie »M-x text-mode « ein. Sie brauchen keine Angst zu haben, dass sich die bisher dargestellte Tastaturbelegung von Emacs stark ändert. Beobachten Sie z.B. die Befehle M-f und M-b: Apostrophe werden nun als Teil eines Wortes betrachtet (wie man's leicht an diesem Beispiel ausprobieren kann), wohingegen im Fundamentalmodus Apostrophe als Worttrenner -(`word-separator') behandelt werden. +(»word-separator«) behandelt werden. Normalerweise ist das eben genannte Beispiel die Methode von -Hauptmodi: Die meisten Befehle tun `das gleiche', arbeiten aber +Hauptmodi: Die meisten Befehle tun »das gleiche«, arbeiten aber jeweils ein bisschen anders. Dokumentation zum derzeit aktuellen Hauptmodus bekommen Sie mit C-h m. ->> Drücken Sie C-u C-v ein- oder mehrmals, um diese Zeile in die Nähe - des oberen Bildschirmrands zu bringen. +>> Drücken Sie C-l C-l, um diese Zeile an den oberen Bildschirmrand zu + bringen. >> Lesen Sie nun mittels C-h m die englische Dokumentation zum Textmodus. >> Entfernen Sie schließlich das Dokumentationsfenster mit C-x 1. -Neben den Hauptmodi gibt es auch Nebenmodi (`minor modes'). Nebenmodi +Neben den Hauptmodi gibt es auch Nebenmodi (»minor modes«). Nebenmodi sind keine Alternativen zu Hauptmodi, sondern stellen Ergänzungen zur Verfügung, die (normalerweise) in allen Hauptmodi funktionieren (z.B. der Überschreibmodus: Zeichen werden nicht eingefügt, sondern @@ -998,20 +982,20 @@ Sie k Nebenmodi haben. Ein Nebenmodus, welcher äußerst nützlich ist, besonders für das -Editieren von Text, ist der automatische Zeilenumbruch (`Auto Fill -mode'). Ist dieser Modus aktiviert, dann bricht Emacs die laufende +Editieren von Text, ist der automatische Zeilenumbruch (»Auto Fill +mode«). Ist dieser Modus aktiviert, dann bricht Emacs die laufende Zeile selbsttätig zwischen Wörtern um, sobald sie zu lang wird. -Sie können den Zeilenumbruchmodus einschalten mittels `M-x auto fill -mode'. Wenn der Modus aktiviert ist, können Sie ihn mit dem -gleichen Befehl wieder ausschalten. Mit anderen Worten, der Befehl -verhält sich wie ein Lichttaster, der bei Betätigung entweder das -Licht ein- oder ausschaltet, je nachdem, ob das Licht vorher +Sie können den Zeilenumbruchmodus mittels »M-x auto-fill-mode +« einschalten. Wenn der Modus aktiviert ist, können Sie ihn +mit dem gleichen Befehl wieder ausschalten. Mit anderen Worten, der +Befehl verhält sich wie ein Lichttaster, der bei Betätigung entweder +das Licht ein- oder ausschaltet, je nachdem, ob das Licht vorher ausgeschaltet bzw. eingeschaltet war. Wir sagen, dass dieser Befehl -den Modus umschaltet (`toggle'). +den Modus umschaltet (»toggle«). ->> Geben Sie nun M-x auto fill mode ein. Fügen Sie - anschließend eine Zeile ein, die aus lauter `asdf ' besteht, und +>> Geben Sie nun M-x auto-fill-mode ein. Fügen Sie + anschließend eine Zeile ein, die aus lauter »asdf « besteht, und zwar so lange, bis die Zeile automatisch umgebrochen wird. Vergessen Sie nicht, Leerzeichen einzugeben, da nur dort ein Umbruch erfolgt. @@ -1038,56 +1022,56 @@ Absatzes stehen muss. * SUCHEN -------- -Emacs kann Zeichenketten (`strings') entweder in Richtung Pufferende -(vorwärts, `forward') oder in Richtung Pufferanfang (rückwärts, -`backward') suchen. Gleichzeitig wird der Cursor an die nächste -Stelle bewegt, wo diese Zeichenkette erscheint. +Emacs kann Zeichenketten (»strings«, eine Folge von zusammenhängenden +Zeichen) entweder in Richtung Pufferende (vorwärts, »forward«) oder in +Richtung Pufferanfang (rückwärts, »backward«) suchen. Gleichzeitig +wird der Cursor an die nächste Stelle bewegt, wo diese Zeichenkette +erscheint. -Hier unterscheidet sich Emacs von vielen anderen Editoren, da nämlich -die Standard-Suchoperation inkrementelles Suchen ist, d.h., die Suche -beginnt dann, wenn Sie die Zeichen eingeben. +Die Standard-Suchoperation von Emacs ist inkrementelles Suchen, d.h., +die Suche beginnt dann, wenn Sie die Zeichen eingeben. Der Befehl für Vorwärtssuchen ist C-s und C-r für Rückwärtssuchen. ABER HALT! Probieren Sie bitte diese Befehle noch nicht. -Wenn Sie C-s eingeben, dann erscheint die Zeichenkette `I-search:' als +Wenn Sie C-s eingeben, dann erscheint die Zeichenkette »I-search:« als Eingabeaufforderung im Echobereich. Das bedeutet, dass Emacs jetzt eine inkrementellen Suche ausführt und darauf wartet, dass Sie die zu suchende Zeichenkette eingeben. beendet die Suche. >> Geben Sie jetzt C-s ein, um einen Suchvorgang zu starten. Schreiben - Sie LANGSAM, einen Buchstaben nach dem anderen, das Wort `Cursor', + Sie LANGSAM, einen Buchstaben nach dem anderen, das Wort »Cursor«, und warten Sie jeweils ab, was mit dem Cursor passiert. Sie haben - jetzt das Wort `Cursor' einmal gefunden. + jetzt das Wort »Cursor« einmal gefunden. >> Drücken Sie C-s noch einmal, um die nächste Stelle zu suchen, wo das - Wort `Cursor' vorkommt. ->> Drücken Sie nun viermal und beobachten Sie, wie der Cursor + Wort »Cursor« vorkommt. +>> Drücken Sie nun viermal und beobachten Sie, wie der Cursor zurückspringt. >> Beenden Sie die Suche mit . Verstehen Sie, was gerade vorgegangen ist? Emacs versucht während einer inkrementellen Suche zu der Stelle zu gehen, wo die Zeichenkette steht, die Sie bis jetzt eingegeben haben. Um die darauffolgende -Position zu suchen, wo `Cursor' steht, genügt es, noch einmal C-s zu +Position zu suchen, wo »Cursor« steht, genügt es, noch einmal C-s zu betätigen. Wenn es keine nächste Position gibt, dann ertönt ein kurzer Ton, und Emacs sagt Ihnen, dass die Suche im Augenblick -fehlschlägt (`failing'). C-g beendet ebenfalls einen Suchvorgang. +fehlschlägt (»failing«). C-g beendet ebenfalls einen Suchvorgang. Wenn Sie sich mitten in einer inkrementellen Suche befinden und - drücken, wird das letzte Zeichen im Suchstring gelöscht, und + drücken, wird das letzte Zeichen im Suchstring gelöscht, und der Cursor springt zurück auf die letzte Suchposition. Angenommen, -Sie haben `c' eingegeben, um das erste Auftreten von `c' zu suchen. -Geben Sie jetzt `u' ein, dann springt der Cursor zu dem ersten -Auftreten der Zeichenkette `cu'. Wenn Sie jetzt mit das `u' -vom Suchstring löschen, dann springt der Cursor zurück zum ersten `c'. -Drücken Sie dagegen ein paar mal C-s, um weitere `cu'-Zeichenketten zu -finden, dann bewirkt , dass Sie zum letzten Auftreten von `cu' -zurückspringen, und erst wenn es kein weiteres `cu' mehr gibt, springt -der Cursor zum ersten `c' zurück. +Sie haben »c« eingegeben, um das erste Auftreten von »c« zu suchen. +Geben Sie jetzt »u« ein, dann springt der Cursor zu dem ersten +Auftreten der Zeichenkette »cu«. Wenn Sie jetzt mit das »u« +vom Suchstring löschen, dann springt der Cursor zurück zum ersten »c«. +Drücken Sie dagegen ein paar mal C-s, um weitere »cu«-Zeichenketten zu +finden, dann bewirkt , dass Sie zum letzten Auftreten von »cu« +zurückspringen, und erst wenn es kein weiteres »cu« mehr gibt, springt +der Cursor zum ersten »c« zurück. Die Suche wird ebenfalls beendet, wenn Sie ein CONTROL- oder -META-Zeichen eingeben (mit ein paar Ausnahmen -- Zeichen, die -bei einer Suche speziell gehandhabt werden wie C-s oder C-r). +META-Zeichen eingeben (mit ein paar Ausnahmen -- Zeichen, die bei +einer Suche speziell gehandhabt werden wie C-s oder C-r). C-s versucht, die Zeichenkette NACH der aktuellen Cursorposition zu finden. Wollen Sie etwas davor suchen, müssen Sie C-r verwenden. Das @@ -1101,7 +1085,11 @@ Suchrichtung. Eine weitere, nützliche Fähigkeit von Emacs ist die Möglichkeit, mehr als ein Fenster zur gleichen Zeit auf dem Bildschirm darzustellen. ->> Bewegen Sie den Cursor zu dieser Zeile und geben Sie C-u 0 C-l ein. +[Der Unterschied zu graphischen Fenstern im herkömmlichen Sinn +(»frame« in der Emacs-Terminologie) wurde bereits weiter oben +besprochen.] + +>> Bewegen Sie den Cursor zu dieser Zeile und geben Sie C-l C-l ein. >> Drücken Sie nun C-x 2, um den Bildschirm in zwei Fenster zu teilen. Beide Fenster zeigen diese Einführung an, und der Cursor bleibt im @@ -1111,8 +1099,8 @@ als ein Fenster zur gleichen Zeit auf dem Bildschirm darzustellen. statt dessen auch ESC C-v verwenden, falls Sie keine META-Taste haben; siehe auch weiter unten). ->> Mittels C-x o (das `o' steht für das englische Wort `other', `das - andere') können Sie den Cursor in das untere Fenster bewegen. +>> Mittels C-x o (das »o« steht für das englische Wort »other«, »das + andere«) können Sie den Cursor in das untere Fenster bewegen. >> Benützen Sie C-v und M-v, um im unteren Fenster zu blättern. Lesen Sie die Emacs-Einführung jedoch im oberen Fenster weiter. @@ -1122,16 +1110,16 @@ als ein Fenster zur gleichen Zeit auf dem Bildschirm darzustellen. C-x o ist der Befehl, um zwischen (Emacs-)Fenstern hin- und herzuschalten. Jedes Fenster hat eine eigene Cursorposition, aber nur -das aktuelle Fenster zeigt den Cursor an (unter X11 wird die -nicht-aktuelle Cursorposition durch ein leeres Rechteck dargestellt). -Alle normalen Editierbefehle betreffen das Fenster, in dem sich der -Cursor befindet. Wir nennen dieses Fenster `ausgewählt' (`selected -window'). +das aktuelle Fenster zeigt den Cursor an (auf einer graphischen +Oberfläche wird die nicht-aktuelle Cursorposition durch ein leeres +Rechteck dargestellt). Alle normalen Editierbefehle betreffen das +Fenster, in dem sich der Cursor befindet. Wir nennen dieses Fenster +»ausgewählt« (»selected window«). Der Befehl M-C-v ist sehr nützlich, wenn man Text in einem Fenster -editiert und das andere Fenster als Referenz verwendet. Der Cursor -bleibt stets im gleichen Arbeitsfenster, und mit M-C-v kann man bequem -vorwärtsblättern. +editiert und das andere Fenster als Referenz verwendet. Ohne das +momentante Arbeitsfenster verlassen zu müssen, kann man mit M-C-v im +anderen Fenster bequem vorwärtsblättern. M-C-v ist ein Beispiel eines CONTROL-META-Zeichens. Haben Sie eine META-Taste, dann kann man M-C-v erzeugen, indem man CTRL und META @@ -1147,24 +1135,24 @@ META oder CTRL. Der umgekehrte Befehl zu M-C-v ist M-C-S-v, um im anderen Fenster rückwärts zu blättern (d.h., Sie müssen die META-Taste sowie die -CONTROL- und SHIFT-Taste zusammen mit `v' betätigen) -- jetzt werden +CONTROL- und SHIFT-Taste zusammen mit »v« betätigen) -- jetzt werden Sie wahrscheinlich verstehen, warum manche Kritiker das Wort Emacs als Abkürzung von Escape-Meta-Alt-Control-Shift betrachten. Leider funktioniert diese Befehlsfolge normalerweise nur mit graphischen -Oberflächen wie X11, da C-v von C-S-v auf den meisten Textterminals -nicht unterschieden werden kann. +Oberflächen, da C-v von C-S-v auf den meisten Textterminals nicht +unterschieden werden kann. -[Unter X11 kann man außerdem in der Regel mit den bequemeren -Tastenkombinationen META-`Bild mit Aufwärtspfeil' bzw. META-`Bild mit -Abwärtspfeil' ebenfalls im anderen Fenster rück- bzw. vorwärts -blättern.] +[Auf graphischen Oberflächen kann man außerdem in der Regel mit den +bequemeren Tastenkombinationen META-»Bild mit Aufwärtspfeil« +bzw. META-»Bild mit Abwärtspfeil« ebenfalls im anderen Fenster rück- +bzw. vorwärts blättern.] >> Entfernen Sie mit C-x 1 (eingegeben im oberen Fenster) das untere Fenster. (Hätten Sie C-x 1 im unteren Fenster eingegeben, dann wäre das obere -Fenster geschlossen worden -- eine Eselsbrücke für C-x 1 ist `ich will -nur das *eine* Fenster, in dem ich mich gerade befinde.') +Fenster geschlossen worden -- eine Eselsbrücke für C-x 1 ist »ich will +nur das *eine* Fenster, in dem ich mich gerade befinde.«) Sie müssen nicht den gleichen Puffer in beiden Fenstern darstellen. Wenn Sie C-x C-f verwenden, um in einem Fenster eine Datei zu laden, @@ -1184,11 +1172,42 @@ Texte darzustellen: Sie C-x 1 ein, um das untere Fenster zu schließen. +* MEHRFACHE RAHMEN +------------------ + +Emacs kann auch mehrfache Rahmen erzeugen, sobald das Programm auf +einer graphischen Oberfläche ausgeführt wird. In der +Emacs-Terminologie bezeichnet ein »Rahmen« eine Gruppe von Fenstern, +gemeinsam mit deren Menus, Scrollbars, Echo-Bereichen, usw. Auf einem +Textterminal kann genau ein Rahmen dargestellt werden. + +>> Geben Sie + + M-x make-frame + + ein, um einen neuen Rahmen zu erzeugen. + +Alles, was Sie im ursprünglichen, ersten Rahmen tun können, +funktioniert genauso im neuen Rahmen. Beide Rahmen sind also völlig +gleichwertig. + +>> Geben Sie + + M-x delete-frame + + ein, um den ausgewählten Rahmen zu entfernen. + +Ein Rahmen kann auch mit der normalen Methode der graphischen +Oberfläche entfernt werden; meistens gibt es dafür einen Knopf mit +einem »X« in der linken oder rechten oberen Ecke des Rahmens. Wird +der letzte Rahmen geschlossen, beendet man Emacs, wie erwartet. + + * REKURSIVE EDITIER-EBENEN -------------------------- Manchmal kann es passieren, dass Sie in eine sogenannte rekursive -Editier-Ebene geraten (`recursive editing level'). Sie können das an +Editier-Ebene geraten (»recursive editing level«). Sie können das an den eckigen Klammern in der Statuszeile erkennen, welche den derzeitigen Hauptmodus zusätzlich umschließen, z.B. [(Fundamental)] anstelle von (Fundamental). @@ -1211,91 +1230,49 @@ dargestellt. Details finden Sie im Emacs-Handbuch beschrieben. * MULE ------ -Mule ist die Abkürzung für `Multi-lingual Enhancement to GNU Emacs'. +Mule ist die Abkürzung für »Multi-lingual Enhancement to GNU Emacs«. Früher wurde damit eine spezielle Emacs-Variante bezeichnet, die allerdings seit der Version 20 mit Emacs verschmolzen ist. Emacs unterstützt eine große Anzahl von internationalen Zeichensätzen, z.B. verschiedene europäische Varianten des lateinischen Alphabets, Chinesisch, Russisch oder Thai, um nur einige zu nennen. In dieser -Einführung wird jedoch nur auf den deutschen Zeichensatz sowie +Einführung wird jedoch nur auf Unicode und Latin-1 sowie Eingabemöglichkeiten für Deutsch näher eingegangen. -Der Standard-Zeichensatz für Deutsch ist Latin-1 (auch bekannt unter -dem Namen ISO-8859-1), obwohl Unicode -- und da besonders die -Kodierungsvariante UTF-8 -- sich immer mehr durchzusetzt. Wenn -anstelle der deutschen Umlaute unansehnliche Konstrukte wie `\201ä' -dargestellt werden, dann ist die sogenannte -Multibyte-Zeichenunterstützung deaktiviert (intern werden in Emacs -Nicht-ASCII-Zeichensätze durch mehr als ein Byte repräsentiert). Der -Befehl `M-x toggle-enable-multibyte-characters' aktiviert die -Multibyte-Zeichenunterstützung. Denken Sie daran, die Tabulatortaste -zur Vervollständigung von Befehlsnamen zu benützen, z.B. `M-x -toggle-e'. - -Wenn anstelle der Umlaute `ä', `ö' oder `ü' die Zeichen `d', `v' und -`|' erscheinen (also `kleines D', `kleines V' und ein senkrechter -Strich), dann wird das achte Bit von jedem Byte abgeschnitten, sodass -nur ASCII-Zeichen dargestellt werden können. In der Regel gibt es -zwei Ursachen für dieses Problem: Sie haben sich nicht `8-bit clean' -(z.B. mittels `telnet -8 ...') eingeloggt oder Ihr -Telekommunikationsprogramm ist nicht für 8-bit konfiguriert. Beides -ist heutzutage eher unwahrscheinlich, daher wird hier nicht weiter -darauf eingegangen. - ->> Geben Sie `M-x toggle-enable-multibyte-characters' ein. Die - deutschen Umlaute (so sie von Ihrem Terminal darstellbar sind) - verschwinden und werden durch Zahlenkonstrukte ersetzt. So wird - zum Beispiel Umlaut a (`ä') dargestellt als `\201ä'. - ->> Aktivieren Sie wieder die Multibyte-Zeichenunterstützung mittels - `M-x toggle-enable-multibyte-characters'. - -Sehen Sie anstelle der Umlaute leere Kästchen (unter X11 oder anderen -graphischen Oberflächen), sollten Sie Emacs mit C-x C-c beenden und -folgendermaßen neu starten: - - emacs -fn fontset-standard - -Sie können auch probieren, Emacs mit der `--unibyte'-Option zu -starten, um Latin-1-Zeichen direkt darzustellen. - -Falls das alles nichts nützt oder Sie Fragezeichen anstelle der -Umlaute auf ihrem Textterminal sehen, sollten Sie sich an Ihren -Systemadministrator wenden und sich beschweren, dass kein -Latin-1-Zeichensatz installiert ist (was heutzutage eigentlich eine -Selbstverständlichkeit sein sollte). Falls statt der Umlaute andere -Zeichen auf ihrem Textterminal erscheinen (z.B. kyrillische -Buchstaben), dann erkundigen Sie sich, wie sie auf Latin-1 umschalten -können. - -Lesen Sie im Emacs-Handbuch nach unter dem Stichwort `International', +Lesen Sie im Emacs-Handbuch unter dem Stichwort »International« nach, welche weitere Optionen es bezüglich Zeichensätze gibt. -Ist die Sprachumgebung (`locale') Ihres Betriebssystems korrekt auf -Deutsch gesetzt, verwendet Emacs diese Einstellungen automatisch. -Anderenfalls empfiehlt es sich, Latin-1 als Standardkodierung zu -aktivieren, wenn Sie primär Deutsch verwenden. Benutzen Sie zu diesem -Zweck die Befehlsfolge +Die Standard-Zeichensätze für Deutsch sind Latin-1 (auch bekannt unter +dem Namen ISO-8859-1) und Unicode -- und da besonders dessen +Kodierungsvariante UTF-8. Werden anstelle der deutschen Umlaute +unansehnliche Konstrukte wie »\374« dargestellt, hat Emacs die +Kodierung nicht richtig erkannt. Sie können die Anwendung einer +Kodierung auf einen Befehl erzwingen, indem Sie diesen mit der Sequenz +»C-x c KODIERUNG« einleiten. Das Laden einer Datei »foo« mit +der Kodierung »UTF-8« ist beispielsweise - C-x l latin-1 + C-x c utf-8 C-x C-f foo -(C-x l führt die Funktion set-language-environment aus), um -in einer laufenden Emacs-Sitzung auf Latin-1 umzuschalten. Dadurch -wird erreicht, dass Emacs beim Laden einer Datei (und Speichern -derselben) standardmäßig die Latin-1-Zeichenkodierung verwendet. Sie -können an der Ziffer 1 unmittelbar vor dem Doppelpunkt links unten in -der Statuszeile erkennen, dass Sie Latin-1 aktiviert haben. Beachten -Sie allerdings, dass set-language-environment keinen Einfluss auf die -Kodierung bereits existierender Puffer hat! Haben Sie eine Datei mit -deutschem Text in Latin-1-Kodierung irrtümlicherweise in einer -falschen Kodierung geladen, dann müssen Sie diesen Puffer aus Emacs -mit dem Befehl C-x k (kill-buffer) entfernen und die Datei erneut -laden, nachdem Sie mit set-language-environment auf Latin-1 -umgeschaltet haben. +Ist die Sprachumgebung (»locale«) Ihres Betriebssystems korrekt auf +Deutsch gesetzt, verwendet Emacs diese Einstellungen automatisch +(inklusive einer Standard-Kodierung). Wollen Sie andere Einstellungen +verwenden, geben Sie »C-x l« ein (ein Tastenkürzel für die +Funktion set-language-environment). Mittels + + C-x l latin-1 + +können Sie z.B. in einer laufenden Emacs-Sitzung auf Latin-1 +umzuschalten. Dadurch wird erreicht, dass Emacs beim Laden einer +Datei (und Speichern derselben) standardmäßig die +Latin-1-Zeichenkodierung verwendet. Sie können an der Ziffer 1 +unmittelbar vor dem Doppelpunkt links unten in der Statuszeile +erkennen, dass Sie Latin-1 aktiviert haben. Beachten Sie allerdings, +dass set-language-environment keinen Einfluss auf die Kodierung +bereits existierender Puffer hat! >> Führen Sie jetzt C-x l latin-1 aus und öffnen Sie - anschließend eine (neue) Datei mit dem Namen `bar' in einem anderen + anschließend eine (neue) Datei mit dem Namen »bar« in einem anderen Fenster mittels C-x 4 C-f bar . In der Statuszeile des zweiten Fensters sehen Sie die Ziffer 1 unmittelbar vor dem Doppelpunkt. @@ -1305,10 +1282,10 @@ umgeschaltet haben. Wie können Sie nun deutsche Umlaute eingeben? Es gibt prinzipiell zwei unterschiedliche Fälle: Sie besitzen eine deutsche Tastatur mit Tasten für die Umlaute oder Sie haben eine nicht-deutsche Tastatur. -Im ersteren Fall sollten Sie die Eingabemethode `german' auswählen, +Im ersteren Fall sollten Sie die Eingabemethode »german« auswählen, welche direkt die Umlaute auf die entsprechenden Tasten abbildet. Im letzteren Fall gibt es mehrere Möglichkeiten, wovon zwei hier erklärt -werden sollen, nämlich `latin-1-prefix' und `latin-1-postfix'. Die +werden sollen, nämlich »latin-1-prefix« und »latin-1-postfix«. Die Präfix-Methode erwartet zuerst den Akzent und dann den Basisbuchstaben ('a wird zu á, "s zu ß etc.), während bei der Postfix-Methode zuerst der Basisbuchstabe und dann der Akzent einzugeben ist (a" wird zu ä, @@ -1326,8 +1303,8 @@ angezeigt. Ist der Eingabemodus einmal gew ein- und ausschalten. >> Geben Sie C-u C-\ latin-1-postfix ein. Beobachten Sie, - wie links unten in der Statuszeile die Anzeige von `1:**' auf - `1<1:**' springt. Probieren Sie ä einzugeben mittels a". + wie links unten in der Statuszeile die Anzeige von »1:**-« auf + »1<1:**-« springt. Probieren Sie ä einzugeben mittels a". >> Deaktivieren Sie den Eingabemodus wieder mit C-\. @@ -1338,9 +1315,9 @@ beschriebenen Eingabemethoden: 1< latin-1-postfix 1> latin-1-prefix -So bedeutet die Angabe `DE@1:**', dass Sie die Eingabemethode `german' -in einem Puffer mit Latin-1-Kodierung verwenden, und dass die Datei -bereits modifiziert wurde. +So bedeutet die Angabe »DE@1:**-«, dass Sie die Eingabemethode +»german« in einem Puffer mit Latin-1-Kodierung verwenden, und dass die +Datei bereits modifiziert wurde. [Arbeitet Emacs in einem Terminal, werden noch zwei zusätzliche Spalten zwischen Eingabemethode und Pufferkodierung eingefügt, und @@ -1356,7 +1333,7 @@ jedoch so m spränge, an dieser Stelle mehr zu erklären. Um Sie im weiteren Lernverlauf zu unterstützen, stellt Emacs eine Reihe von Hilfe-Funktionen zu Verfügung, die alle mit dem Präfix C-h (dem -Hilfe-Zeichen, `Help character') beginnen. +Hilfe-Zeichen, »Help character«) beginnen. Nach dem Drücken von C-h geben Sie ein weiteres Zeichen ein, um Emacs zu sagen, worüber Sie mehr Informationen brauchen. Sollten Sie @@ -1364,11 +1341,7 @@ WIRKLICH verloren sein, geben Sie C-h ? ein, und Emacs sagt Ihnen, welche Art von Hilfe er Ihnen zu Verfügung stellen kann. Haben Sie C-h versehentlich gedrückt, können Sie mit C-g sofort abbrechen. -(Es kann vorkommen, dass bei manchen Computern bzw. Terminals C-h -etwas anderes bedeutet. Da erfahrungsgemäß C-h eine der -meistbenötigten Emacs-Befehle ist, haben Sie einen wirklichen Grund, -sich in diesem Fall beim Systemadministrator zu beschweren. -Alternativen zu C-h sind die F1-Taste und der lange Befehl M-x help +(Alternativen zu C-h sind die F1-Taste und der lange Befehl M-x help .) Die elementarste Hilfestellung gibt C-h c. Drücken Sie C-h, dann das @@ -1380,11 +1353,10 @@ Beschreibung des Befehls an. C-p runs the command previous-line -Somit wissen Sie den `Namen der Funktion'. Funktionsnamen werden -hauptsächlich benutzt, um Emacs anzupassen bzw. zu erweitern. Aber da -Namen in der Regel beschreiben, was die jeweilige Funktion tut, können -sie auch als sehr kurze Beschreibung dienen -- ausreichend, um Sie an -Befehle zu erinnern, die Sie bereits gelernt haben. +Somit wissen Sie den »Namen der Funktion«. Da Namen in der Regel +beschreiben, was die jeweilige Funktion tut, können sie auch als sehr +kurze Beschreibung dienen -- ausreichend, um Sie an Befehle zu +erinnern, die Sie bereits gelernt haben. Aus mehr als einem Zeichen bestehende Befehle, z.B. C-x C-s oder v, sind ebenfalls erlaubt nach C-h c. @@ -1406,20 +1378,20 @@ Hier einige weitere n C-h f Beschreibt eine Funktion. Sie müssen den Namen der Funktion eingeben. ->> Probieren Sie C-h f previous-line. +>> Probieren Sie C-h f previous-line . Alle Information über den C-p-Befehl wird angezeigt. Sie können die Tabulator-Taste stets benützen, um den Namen des -jeweiligen Befehls zu vervollständigen. Geben Sie z.B. `C-h f -previous' ein, dann werden alle Befehle angezeigt, deren Namen -mit `previous-' beginnen. Ergänzen Sie die Zeichenkette auf -`previous-l' und drücken Sie dann , bleibt nur noch der Befehl -`previous-line' übrig, und Sie können mit abschließen. +jeweiligen Befehls zu vervollständigen. Geben Sie z.B. »C-h f +previous« ein, dann werden alle Befehle angezeigt, deren Namen +mit »previous-« beginnen. Ergänzen Sie die Zeichenkette auf +»previous-l« und drücken Sie dann , bleibt nur noch der Befehl +»previous-line« übrig, und Sie können mit abschließen. Ein ähnlicher Befehl ist C-h v. Er zeigt den Wert und die -Dokumentation von Variablen, deren Werte man ändern kann (um Emacs an -persönliche Bedürfnisse anzupassen). Auch hier kann man die -Tabulator-Taste zur Vervollständigung benutzen. +Dokumentation von Variablen, deren Werte man ändern kann (um +beispielsweise Emacs an persönliche Bedürfnisse anzupassen). Auch +hier kann man die Tabulator-Taste zur Vervollständigung benutzen. C-h a Ein Befehls-Apropos. Gibt man ein Schlüsselwort ein, zeigt Emacs alle Befehle, die dieses Schlüsselwort @@ -1429,9 +1401,9 @@ Tabulator-Taste zur Vervollst einem oder zwei Zeichen) aufgelistet, welche den gleichen Befehl startet. ->> Geben Sie C-h a file ein. +>> Geben Sie C-h a file ein. -Alle M-x-Befehle, die das Wort `file' in ihrem Namen enthalten, werden +Alle M-x-Befehle, die das Wort »file« in ihrem Namen enthalten, werden angezeigt. Beachten Sie, dass auch C-x C-f aufgelistet wird neben dem zugehörigen langen Namen, find-file. @@ -1440,30 +1412,26 @@ zugeh >> Schließen Sie das Hilfefenster mit C-x 1. C-h i Dieser Befehl öffnet einen speziellen Puffer, um - Online-Handbücher zu lesen (im `Info'-Format), die auf - dem verwendeten Computersystem installiert sind. - Geben Sie z.B. m emacs ein, um das - Emacs-Handbuch zu lesen. Haben Sie `Info' noch nie - benutzt, tippen Sie ?, und Emacs führt Sie Schritt für - Schritt durch die Möglichkeiten des Info-Modus. Wenn - Sie diese Einführung fertiggelesen haben, sollten Sie - das Info-Handbuch für Emacs als primäre Dokumentation + Handbücher zu lesen (im »Info«-Format), die auf dem + verwendeten Computersystem installiert sind. Geben + Sie z.B. m emacs ein, um das Emacs-Handbuch + zu lesen. Haben Sie »Info« noch nie benutzt, tippen + Sie ?, und Emacs führt Sie Schritt für Schritt durch + die Möglichkeiten des Info-Modus. Wenn Sie diese + Einführung fertiggelesen haben, sollten Sie das + Info-Handbuch für Emacs als primäre Dokumentation benutzen. * SCHLUSSBEMERKUNG ------------------ -Das Wichtigste: Emacs wird mit C-x C-c beendet und mit C-z temporär -unterbrochen. +Das Wichtigste: Emacs wird mit C-x C-c beendet. Diese Einführung soll für alle neuen Benutzer von Emacs verständlich sein. Wenn daher etwas unklar sein sollte, hadern Sie nicht mit sich -selbst. Schreiben Sie an die Free Software Foundation oder an den -Autor und erläutern Sie, was für Sie unklar geblieben ist. Eine -weitere Kontaktadresse ist die Mailing-Liste `de@li.org', in der -Probleme mit der Adaption von GNU-Programmen an das Deutsche -diskutiert werden. +selbst. Schreiben Sie an die Free Software Foundation, den Autor oder +den Übersetzer und erläutern Sie, was für Sie unklar geblieben ist. * RECHTLICHES diff --git a/etc/tutorials/TUTORIAL.es b/etc/tutorials/TUTORIAL.es index 2597f00e95f..fe8c223551a 100644 --- a/etc/tutorials/TUTORIAL.es +++ b/etc/tutorials/TUTORIAL.es @@ -14,8 +14,10 @@ ocasi . Escribimos para referirnos a la tecla ESC. Nota importante: para terminar la sesión de Emacs teclee C-x C-c (dos -caracteres). Los caracteres ">>" en el margen izquierdo indican -instrucciones para que usted trate de usar un comando. Por ejemplo: +caracteres). Para cancelar un comando parcialmente introducido, +teclee C-g. +Los caracteres ">>" en el margen izquierdo indican instrucciones para +que usted trate de usar un comando. Por ejemplo: <> [Mitad de página en blanco para propósitos didácticos. El texto continúa abajo] >> Ahora teclee C-v (ver la próxima pantalla) para desplazarse a la @@ -47,9 +49,12 @@ Los siguientes comandos son pantalla (Esto es CONTROL-L, no CONTROL-1.) >> Encuentre el cursor, y fíjese qué texto hay cerca de éste. - Luego teclee C-l. - Encuentre el cursor otra vez y note que el mismo texto está cerca - del cursor ahora. + 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 + pantalla. Al teclear C-l otra vez, se moverá al final de la + pantalla. Si su terminal las soporta, también puede usar las teclas AvPág o RegPág para moverse por pantallas completas, pero puede editar más @@ -89,9 +94,9 @@ comandos de posicionamiento b lo que hace C-p cuando el cursor está en medio de la línea. Cada línea de texto termina con un carácter de nueva línea (Newline), -que sirve para separarla de la línea siguiente. La última línea de su -archivo debe de tener un carácter de nueva línea al final (pero Emacs -no requiere que ésta lo tenga). +que sirve para separarla de la línea siguiente. (Normalmente, la +última línea de un archivo termina con un carácter de nueva línea, +pero Emacs no requiere que sea así.) >> Intente usar C-b al comienzo de una línea. Debería moverse al final de la línea previa. Esto sucede porque retrocede a través @@ -227,24 +232,17 @@ Esto debi quisiera desplazarla hacia abajo de nuevo, puede dar un argumento a M-v. -Si está usando un sistema de ventanas, como X11 o MS-Windows, debe +Si está usando un entorno gráfico, como X o MS-Windows, debe haber una larga área rectangular llamada una barra de desplazamiento en el lado izquierdo de la ventana de Emacs. Puede desplazar el texto al oprimir el botón del ratón en la barra de desplazamiento. ->> Pruebe presionando el botón del medio en la parte superior del área - resaltada en la barra de desplazamiento. Éste debe desplazar el - texto a una posición determinada según cuan alto o bajo oprima el - botón. - ->> Intente mover el ratón arriba y abajo, mientras mantiene el botón - del medio presionado. Verá que el texto se desplaza arriba y abajo - a medida que mueve el ratón. +Si su ratón tiene un botón de rueda, también puede utilizarlo para +desplazar el texto. - -* CUANDO EMACS ESTÁ BLOQUEADO ------------------------------ +* SI EMACS DEJA DE RESPONDER +---------------------------- Si Emacs dejara de responder a sus comandos, puede detenerlo con seguridad al teclear C-g. Puede usar C-g para detener un comando que @@ -253,7 +251,7 @@ est También puede usar C-g para descartar un argumento numérico o el comienzo de un comando que no quiere finalizar. ->> Escriba C-u 100 para hacer un argumento numérico de 100, entonces +>> Escriba C-u 100 para hacer un argumento numérico de 100, y luego pruebe C-g. Ahora pruebe C-f. Esto deberá mover sólo un carácter, ya que canceló el argumento con C-g. @@ -282,7 +280,7 @@ desactivado, conteste la pregunta con "n". * VENTANAS ---------- -Emacs puede tener varias ventanas, cada una mostrando su propio texto. +Emacs puede tener varias "ventanas", cada una mostrando su propio texto. Explicaremos después como 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: @@ -294,9 +292,9 @@ contiene el cursor, para ocupar toda la pantalla. Esto borra todas las demás ventanas. >> Mueva el cursor a esta línea y escriba C-u 0 C-l. ->> Escriba Control-h k Control-f. +>> Escriba C-h k C-f. Vea como esta ventana se encoge, mientras una nueva aparece y - muestra documentación sobre el comando Control-f. + muestra documentación sobre el comando C-f. >> Escriba C-x 1 y vea que la ventana de listado de documentación desaparece. @@ -312,41 +310,36 @@ cuatro caracteres. * INSERTAR Y BORRAR ------------------- -Si quiere insertar un texto, basta con que lo teclee. Emacs -interpreta los caracteres que usted puede ver, tales como A, 7, *, -etc. como texto y los inserta inmediatamente. Teclee (la -tecla Enter) para insertar un carácter de nueva línea. +Si quiere insertar un texto, basta con que lo teclee. Los caracteres +normales, como A, 7, *, etc. se insertan nada más teclearlos. Teclee + (la tecla "Enter" o "Intro") para insertar un carácter de +nueva línea. -Puede borrar el último carácter que escribió oprimiendo . - es una tecla en el teclado--la misma que normalmente usa -fuera de emacs para borrar el último carácter que escribió. -Normalmente es una tecla una o dos filas arriba de la tecla , -y que está usualmente rotulada como "Backspace", "Del" o simplemente -con una flecha en dirección izquierda que no es parte de las teclas de -flecha. +Para borrar el carácter que precede al cursor, oprima . Es una +tecla alargada, normalmente etiquetada como "Backspace" o "Del", o con +una flecha apuntando a la izquierda; la misma que suele utilizar fuera +de Emacs para borrar el último carácter introducido. -Si la tecla larga está rotulada "Backspace", entonces ésa es la que -debe de usar para . Puede haber otra tecla llamada "Del" en -otra parte, pero ésa no es . - -Generalmente, borra el carácter inmediatamente anterior a la -posición actual del cursor. +Puede haber otra tecla llamada "Del" o "Supr" en otra parte, pero ésa +no es . >> Haga esto ahora: teclee unos pocos caracteres, después bórrelos - tecleando varias veces. No se preocupe si este archivo + tecleando varias veces. No se preocupe si este archivo cambia, no alterará el tutorial principal. Ésta es su copia personal de él. -Cuando una línea de texto se hace muy grande para una sola línea en la +Cuando una línea de texto se hace muy grande para una sola línea de la pantalla, la línea de texto "continúa" en una segunda línea en la -pantalla. Un backslash ("\") (o, si está usando un sistema de -ventanas, una pequeña flecha curva) en el margen derecho indica que la -línea "continúa". +pantalla. Si está usando un entorno gráfico, se mostrarán pequeñas +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. >> Inserte texto hasta que llegue al margen derecho, y siga insertando. Verá aparecer una línea de continuación. ->> Use para borrar el texto hasta que la línea de nuevo +>> Use para borrar el texto hasta que la línea de nuevo quepa en la pantalla. La línea de continuación se pierde. Puede borrar un carácter de nueva línea como cualquier otro carácter. @@ -355,7 +348,7 @@ sola l largo para caber en el ancho de la pantalla, se mostrará con una línea de continuación. ->> Mueva el cursor al comienzo de una línea y teclee . Esto +>> Mueva el cursor al comienzo de una línea y teclee . Esto juntará esa línea con la línea anterior. >> Teclee para reinsertar la nueva línea que borró. @@ -370,27 +363,29 @@ Ya ha aprendido la manera m corregir errores. Puede borrar por palabras o por líneas. He aquí un resumen de las operaciones de borrado: - borra el carácter justo antes que el cursor + borra el carácter justo antes que el cursor C-d borra el siguiente carácter después del cursor - M- Elimina la palabra inmediatamente antes del + M- Elimina la palabra inmediatamente antes del cursor M-d Elimina la siguiente palabra después del cursor C-k Elimina desde el cursor hasta el fin de la línea M-k Elimina hasta el final de la oración actual -Note que y C-d, comparados con M- y M-d, extienden -el paralelismo iniciado por C-f y M-f (bien, no es realmente -una tecla de control, pero no nos preocuparemos de eso ahora). C-k y -M-k, en ciertas forma, son como C-e y M-e, en que las líneas son -oraciones opuestas. +Note que y C-d, comparados con M- y M-d, extienden el +paralelismo iniciado por C-f y M-f (bien, no es realmente una +tecla de control, pero no nos preocuparemos de eso ahora). C-k y M-k, +en ciertas forma, son como C-e y M-e, en que las líneas de unos +corresponden a sentencias en los otros. -También puede eliminar cualquier parte del buffer con un método -uniforme. Muévase a un extremo de esa parte, y teclee C-@ o C-SPC -(cualquiera de los dos). (SPC es la barra espaciadora.) Muévase al -otro extremo de esa parte, y teclee C-w. Eso elimina todo el texto -entre las dos posiciones. +También puede eliminar un segmento contiguo de texto con un método +uniforme. Muévase a un extremo de ese segmento de texto, y teclee C-@ +o C-SPC (cualquiera de los dos). (SPC es la barra espaciadora.) +Luego, mueva el cursor al otro extremo del texto que desea eliminar. +Al hacerlo, Emacs resaltará el texto situado entre el cursor y la +posición en la que tecleó C-SPC. Finalmente, teclee C-w. Eso elimina +todo el texto entre las dos posiciones. >> Mueva el cursor a la letra T del inicio del párrafo anterior. >> Teclee C-SPC. Emacs debe mostrar el mensaje "Mark set" en la parte @@ -401,12 +396,15 @@ entre las dos posiciones. termina justo antes de la x. La diferencia entre "eliminar" y "borrar" es que el texto "eliminado" -puede ser reinsertado, mientras que las cosas "borradas" no pueden ser -reinsertadas. La reinserción de texto eliminado se llama "yanking" o -"pegar". Generalmente, los comandos que pueden quitar mucho texto lo -eliminan, mientras que los comandos que quitan solo un carácter, o -solo líneas en blanco y espacios, borran (para que no pueda pegar ese -texto). +puede ser reinsertado (en cualquier posición), mientras que las cosas +"borradas" no pueden ser reinsertadas (sin embargo, es posible +deshacer el borrado; ver más abajo). La reinserción de texto +eliminado se llama "yanking" o "pegar". Generalmente, los comandos +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, y C-d +borran. Con un argumento, eliminan. >> Mueva el cursor al comienzo de una línea que no esté vacía. Luego teclee C-k para eliminar el texto de esa línea. @@ -420,12 +418,13 @@ especialmente: Elimina ese n contenidos. Esto no es una simple repetición. C-u 2 C-k elimina dos líneas y sus nuevas líneas, tecleando C-k dos veces no hace esto. -Traer texto eliminado de regreso es llamado "yanking" o "pegar". -(Piense en ello como pegar de nuevo, o traer de vuelta, algún texto -que le fue quitado.) Puede pegar el texto eliminado en, ya sea el -lugar en que fue eliminado, o en otra parte del buffer, o hasta en un -archivo diferente. Puede pegar el texto varias veces, lo que hace -varias copias de él. +Reinsertar texto eliminado se denomina "yanking" o "pegar". (Piense +en ello como pegar de nuevo, o traer de vuelta, algún texto que le fue +quitado.) Puede pegar el texto eliminado, ya sea el lugar en que fue +eliminado, o en otra parte del buffer, o hasta en un archivo +diferente. Puede pegar el texto varias veces, lo que hace varias +copias de él. Algunos editores se refieren a eliminar y reinsertar +como "cortar" y "pegar" (consulte el Glosario en el manual de Emacs). El comando para pegar es C-y. Reinserta el último texto eliminado, en la posición actual del cursor. @@ -468,32 +467,31 @@ eliminaci ---------- Si hace un cambio al texto, y luego decide que fue un error, -puede deshacer el cambio con el comando deshacer, C-x u. +puede deshacer el cambio con el comando deshacer, C-/. -Normalmente, C-x u deshace los cambios hechos por un comando; si repite -varias veces seguidas C-x u, cada repetición deshará un comando +Normalmente, C-/ deshace los cambios hechos por un comando; si repite +varias veces seguidas C-/, cada repetición deshará un comando adicional. Pero hay dos excepciones: los comandos que no cambian el texto no -cuentan (esto incluye los comandos de movimiento del cursor y el -comando de desplazamiento), y los caracteres de autoinserción se -manejan usualmente en grupos de hasta 20. (Esto es para reducir el -numero de C-x u que tenga que teclear para deshacer una inserción en +cuentan (esto incluye los comandos de movimiento del cursor y de +desplazamiento), y los caracteres de autoinserción se manejan +usualmente en grupos de hasta 20 caracteres. (Esto es para reducir el +numero de C-/ que tenga que teclear para deshacer una inserción en el texto.) ->> Elimine esta línea con C-k, después teclee C-x u y debería +>> Elimine esta línea con C-k, después teclee C-/ y debería reaparecer. -C-_ es un comando alternativo para deshacer; funciona igual que C-x u, -pero es más fácil de teclear varias veces seguidas. La desventaja de -C-_ es que en algunos teclados no es obvio cómo se teclea. Por esto -existe también C-x u. En algunas terminales, puede teclear C-_ al -teclear / mientras oprime CONTROL. +C-_ es un comando alternativo para deshacer; funciona igual que C-/. +En algunas terminales, al teclear C-/ en realidad envía C-_ a Emacs. +También existe la alternativa de usar C-x u, que funciona exactamente +igual que C-/, pero es menos cómodo de teclear. -Un argumento numérico para C-_ o C-x u actúa como un factor de +Un argumento numérico para C-/, C-_ o C-x u actúa como un factor de repetición. -Uuede deshacer un texto borrado justo como puede deshacer el texto +Puede deshacer un texto borrado justo como puede deshacer el texto eliminado. La distinción entre eliminar algo y borrar algo afecta en si puede pegarlo con C-y; no hay diferencia alguna para deshacer. @@ -516,17 +514,17 @@ cuando guarde, Emacs dejar cambiado en caso de que luego decida que sus cambios fueron un error. Si mira cerca del final de la pantalla podrá ver una línea que -comienza y termina con guiones, y comienza con "--:-- TUTORIAL.es" o -algo así. Esta parte de la pantalla normalmente muestra el nombre del -archivo que está visitando. En este momento está visitando un archivo -llamado "TUTORIAL.es" que es su borrador personal del tutorial de -Emacs. Cuando encuentre un archivo con Emacs, el nombre de ese -archivo aparecerá en ese mismo punto. +comienza con guiones, y empieza con " -:--- TUTORIAL.es" o algo así. +Esta parte de la pantalla normalmente muestra el nombre del archivo +que está visitando. En este momento está visitando su propia copia +del tutorial de Emacs, que se llama "TUTORIAL.es". Cuando encuentre +un archivo con Emacs, el nombre de ese archivo aparecerá en ese mismo +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 -"lee un argumento desde la terminal" (en este caso, el argumento es el -nombre del archivo). Después de teclear el comando: +"lee un argumento" (en este caso, el argumento es el nombre del +archivo). Después de teclear el comando: C-x C-f Encontrar un archivo @@ -544,13 +542,12 @@ entrada al minibuffer) puede cancelar el comando con C-g. Así que no encontrará archivo alguno. Cuando haya finalizado de ingresar el nombre del archivo, teclee - para terminarlo. Entonces el comando C-x C-f trabaja, y -encuentra el archivo que escogió. El minibuffer desaparece cuando el -comando C-x C-f termina. + para terminarlo. El minibuffer desaparece, y el comando C-x +C-f trabaja para encontrar el archivo que escogió. -Poco tiempo después aparecerá el contenido del archivo en la pantalla, -y puede editarlo. Cuando quiera que sus cambios sean permanentes, -teclee el comando +En seguida aparecerá el contenido del archivo en la pantalla, y puede +editarlo. Cuando quiera que sus cambios sean permanentes, teclee el +comando C-x C-s Guardar el archivo @@ -561,11 +558,12 @@ final del nombre del archivo original. Cuando guardar haya terminado, Emacs mostrará el nombre del archivo escrito. Deberá guardar frecuentemente, para que no pierda mucho -trabajo si el sistema falla. +trabajo si el sistema falla (vea la sección "AUTO GUARDADO", más +adelante). ->> Teclee C-x C-s, guardando la copia del tutorial. - Esto debería mostrar "Wrote ...TUTORIAL.es" al final de la - pantalla. +>> Teclee C-x C-s TUTORIAL.es + Esto guardará el tutorial en un archivo llamado TUTORIAL.es, y + mostrará "Wrote ...TUTORIAL.es" al final de la pantalla. Puede encontrar un archivo existente, para verlo o editarlo. También puede hacerlo con un archivo que no exista. Ésta es la forma de crear @@ -584,16 +582,10 @@ dentro de Emacs. Puede volver a el encontr C-f. De esta forma puede mantener un gran número de archivos dentro de Emacs. ->> Cree un archivo llamado "foo" tecleando C-x C-f foo . - Luego inserte algún texto, edítelo, y guarde "foo" tecleando C-x - C-s. - Finalmente teclee C-x C-f TUTORIAL.es - para regresar al tutorial. - Emacs almacena cada texto del archivo dentro de un objeto llamado "buffer". Al encontrar un archivo se crea un nuevo buffer dentro de -Emacs. Para mirar la lista de los buffers que existen actualmente en -su sesión de Emacs, teclee: +Emacs. Para mirar la lista de los buffers que existen actualmente, +teclee: C-x C-b Lista de buffers @@ -612,22 +604,24 @@ que corresponde a un archivo, puede hacerlo visitando el archivo de nuevo con C-x C-f. Pero existe una manera más rápida: use el comando C-x b. En ese comando, necesita teclear el nombre de buffer. ->> Teclee C-x b foo para volver al buffer "foo" que contiene - el texto del archivo "foo". Después teclee C-x b TUTORIAL.es - para regresar a este tutorial. +>> Cree un archivo llamado "foo" tecleando C-x C-f foo . + Después teclee C-x b TUTORIAL.es para regresar a este + tutorial. La mayoría del tiempo el nombre del buffer es el mismo que el nombre del archivo (sin la parte del directorio del archivo). Sin embargo, esto no es así siempre. La lista de buffers que hace con C-x C-b -siempre muestra el nombre de todos los buffers. +muestra el nombre de cada buffer y de su archivo correspondiente. -CUALQUIER texto que vea en una ventana de Emacs siempre es parte de un -buffer. Algunos buffers no corresponden a un archivo. Por ejemplo, -el buffer llamado "*Buffer List*" no tiene ningún archivo. Es el -buffer que contiene la lista de buffers que ha creado con C-x C-b. El -buffer llamado "*Messages*" tampoco tiene un archivo correspondiente; -contiene los mensajes que han aparecido en la línea de abajo durante -su sesión 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ó +C-x C-s y lo guardó en un archivo. + +El buffer llamado "*Messages*" tampoco tiene un archivo +correspondiente. Este buffer contiene los mensajes que han aparecido +en la línea de abajo durante su sesión de Emacs. >> Teclee C-x b *Messages* para ver el buffer de mensajes. Luego teclee C-x b TUTORIAL para regresar a este tutorial. @@ -669,45 +663,45 @@ comando C-x C-c. (No se preocupe por perder los cambios que haya hecho; C-x C-c ofrece guardar cada archivo alterado antes de finalizar Emacs.) -C-z es el comando para salir de Emacs *temporalmente*: para que pueda -regresar a la misma sesión de Emacs después. +Si está utilizando una pantalla gráfica, no necesita ningún comando +especial para cambiar de Emacs a otra aplicación. Puede hacerlo con +el ratón, o mediante el gestor de ventanas. Sin embargo, si está +usando una terminal que solo puede mostrar una aplicación a la vez, +tendrá que "suspender" Emacs para poder acceder a otros programas. -En sistemas que lo permiten C-z "suspende" Emacs; esto es, se regresa -al intérprete de comandos pero no se destruye Emacs. En los +C-z es el comando para salir de Emacs *temporalmente*: para que pueda +regresar a la misma sesión de Emacs después. Cuando Emacs está +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'. -En sistemas que no implementen el suspendido, C-z crea un -subintérprete que corre bajo Emacs para darle la opción de correr -otros programas y regresar a Emacs después; esto en realidad no "sale" -de Emacs. En este caso, el comando `exit' del intérprete es la vía -usual para regresar a Emacs desde éste. - 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 llamado -bajo programas de manejo de correo y diversas otras utilidades, puesto -que ellos no saben cómo lidiar con la suspensión de Emacs. En -circunstancias normales, si no va a salir, es mejor suspender -Emacs con C-z en lugar de salir de él. +bajo programas de gestión de correo y otras utilidades diversas. -Existen varios comandos C-x. Aquí hay una lista de los que ha +Existen muchos comandos C-x. He aquí la lista de los que ya ha aprendido: - C-x C-f Encontrar archivo. - C-x C-s Guardar archivo. - C-x C-b Lista de buffers. - C-x C-c Salir de Emacs. - C-x 1 Borrar todo menos una ventana. - C-x u Deshacer. + C-x C-f Encontrar archivo + C-x C-s Guardar archivo + C-x s Guardar varios buffers + C-x C-b Lista de buffers + C-x b Cambiar a otro buffer + C-x C-c Salir de Emacs + C-x 1 Borrar todo menos una ventana + C-x u Deshacer Los comandos eXtendidos por nombre son comandos que se utilizan aún con menos frecuencia, o únicamente en ciertos modos. Un ejemplo es el -comando replace-string, el cual globalmente substituye una cadena de -caracteres por otra. Cuando teclea M-x, Emacs le pregunta al -final de la pantalla con M-x y debe escribir el nombre del -comando; en este caso "replace-string". Solo teclee "repl s" y -Emacs completará el nombre. Finalice el nombre del comando con -. +comando replace-string, el cual substituye globalmente una cadena de +caracteres por otra. Cuando teclea M-x, Emacs le pregunta al final de +la pantalla con M-x y debe escribir el nombre del comando; en este +caso "replace-string". Solo teclee "repl s" y Emacs completará +el nombre. ( es la tecla del tabulador, que habitualmenté está +situada sobre la tecla de bloquear mayúsculas o la de shift, en el +lado izquierdo del teclado.) Para aceptar el comando y ejecutarlo, +pulse . El comando replace-string requiere dos argumentos: la cadena de caracteres a reemplazar, y la cadena de caracteres para reemplazarla. @@ -733,11 +727,11 @@ un # al principio y al final; por ejemplo, si su archivo se llama "hola.c", su archivo auto guardado es "#hola.c#". Cuando guarda por la vía normal, Emacs borra su archivo de auto guardado. -Si la computadora falla, puede recuperar su edición de auto -guardado encontrando el archivo normal (el archivo que estuvo -editando, no el archivo de auto guardar) y entonces tecleando M-x -recover file. Cuando le pregunte por la confirmación, teclee -yes para ir y recuperar la información del auto guardado. +Si la computadora falla, puede recuperar su edición de auto guardado +encontrando el archivo normal (el archivo que estuvo editando, no el +archivo de auto guardar) y entonces tecleando M-x recover-file +. Cuando le pregunte por la confirmación, teclee yes +para seguir adelante y recuperar la información de auto guardado. * ÁREA DE ECO @@ -754,20 +748,20 @@ lentamente, se los muestra al final de la pantalla en un La línea inmediatamente encima del área de eco recibe el nombre de "línea de modo" o "mode line". La línea de modo dice algo así: ---:** TUTORIAL.es (Fundamental)--l765--65%--------- + -:**- TUTORIAL.es 63% L749 (Fundamental) Esta línea da información útil acerca del estado de Emacs y del texto que está editando. Ya sabe qué significa el nombre del archivo: es el archivo que usted -ha encontrado. -NN%-- indica su posición actual en el texto; esto +ha encontrado. NN% indica su posición actual en el texto; esto significa que NN por ciento del texto está encima de la parte superior de la pantalla. Si el principio del archivo está en la pantalla, éste -dirá --Top-- en vez de --00%--. Si el final del texto está en la -pantalla, dirá --Bot--. Si está mirando un texto tan pequeño que cabe -en la pantalla, el modo de línea dirá --All--. +dirá "Top" en vez de " 0%". Si el final del texto está en la +pantalla, dirá "Bot". Si está mirando un texto tan pequeño que cabe +entero en la pantalla, el modo de línea dirá "All". -La L y los dígitos indican la posición de otra forma: ellos dan el +La L y los dígitos señalan la posición de otra forma: indican el número de línea actual del punto. Los asteriscos cerca del frente significan que usted ha hecho cambios @@ -795,7 +789,8 @@ fundamental-mode es un comando para cambiar al modo fundamental. Si va a editar un texto de algún lenguaje humano, como este archivo, debería usar el modo de texto. ->> Teclee M-x text mode. + +>> Teclee M-x text-mode . 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 @@ -805,20 +800,20 @@ de palabras. Los modos mayores normalmente hacen cambios sutiles como el anterior: la mayoría de comandos hacen "el mismo trabajo" en cada modo mayor, -pero funcionan un poco diferente. +pero funcionan de forma un poco diferente. -Para ver documentación en el modo mayor actual, teclee C-h m. +Para ver la documentación del modo mayor actual, teclee C-h m. ->> Use C-u C-v una o más veces para traer esta línea cerca de la - parte superior de la pantalla. +>> Use C-l C-l para traer esta línea en la parte superior de la + pantalla. >> Teclee C-h m, para ver como el modo de Texto difiere del modo Fundamental. >> Teclee C-x 1 para eliminar la documentación de la pantalla. -Los modos mayores son llamados así porque también hay modos menores. -Los modos menores no son alternativas para los modos mayores, solo +Los modos mayores se llaman así porque también hay modos menores. Los +modos menores no son alternativas para los modos mayores, solo modificaciones menores de éstos. Cada modo menor puede ser activado o desactivado por sí mismo, independiente de todos los otros modos menores, e independiente de su modo mayor. Por tanto, puede no usar @@ -830,13 +825,13 @@ espa rompe la línea entre palabras automáticamente siempre que inserte texto y la línea sea demasiado ancha. -Puede activar el modo Auto Fill al hacer M-x auto fill mode. +Puede activar el modo Auto Fill al hacer M-x auto-fill-mode . Cuando el modo esté activado, puede desactivarlo nuevamente usando M-x -auto fill mode. Si el modo está desactivado, este comando lo +auto-fill-mode . Si el modo está desactivado, este comando lo activa, y si el modo está activado, este comando lo desactiva. Decimos que el comando "cambia el modo". ->> teclee M-x auto fill mode ahora. Luego inserte una línea +>> teclee M-x auto-fill-mode ahora. Luego inserte una línea de "asdf " repetidas veces hasta que la vea dividida en dos líneas. Debe intercalar espacios porque Auto Fill sólo rompe líneas en los espacios. @@ -861,15 +856,13 @@ ese p * BUSCAR -------- -Emacs puede hacer búsquedas de cadenas (grupos de caracteres o -palabras contiguos) hacia adelante a través del texto o hacia atrás en -el mismo. La búsqueda de una cadena es un comando de movimiento de +Emacs puede hacer búsquedas de cadenas (una "cadena" es un grupo de +caracteres contiguos) hacia adelante a través del texto o hacia atrás +en el mismo. La búsqueda de una cadena es un comando de movimiento de cursor; mueve el cursor al próximo lugar donde esa cadena aparece. -El comando de búsqueda de Emacs es diferente a los comandos de -búsqueda de los demás editores, en que es "incremental". Esto -significa que la búsqueda ocurre mientras teclea la cadena para -buscarla. +El comando de búsqueda de Emacs es "incremental". Esto significa que +la búsqueda ocurre mientras teclea la cadena para buscarla. El comando para iniciar una búsqueda es C-s para búsqueda hacia adelante, y C-r para la búsqueda hacia atrás. ¡PERO ESPERE! No los @@ -886,7 +879,7 @@ quiere buscar. termina una b Ahora ha buscado "cursor", una vez. >> Teclee C-s de nuevo, para buscar la siguiente ocurrencia de "cursor". ->> Ahora teclee cuatro veces y vea como se mueve el cursor. +>> Ahora teclee cuatro veces y vea como se mueve el cursor. >> Teclee para terminar la búsqueda. ¿Vió lo que ocurrió? Emacs, en una búsqueda incremental, trata de ir @@ -895,27 +888,22 @@ ir a la pr 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. -NOTA: En algunos sistemas, teclear C-s dejará inmóvil la pantalla y no -podrá ver más respuesta de Emacs. Esto indica que una -"característica" del sistema operativo llamada "control de flujo" está -interceptando el C-s y no permitiéndole llegar hasta Emacs. Para -descongelar la pantalla, teclee C-q. Luego consulte la sección -"Entrada Espontánea para Búsqueda Incremental" en el manual de Emacs -para consejos de cómo tratar con esta "característica". - -Si se encuentra en medio de una búsqueda incremental y teclea -, notará que el último carácter de la cadena buscada se borra -y la búsqueda vuelve al sitio anterior de la búsqueda. Por ejemplo, -suponga que ha tecleado "c", para buscar la primera ocurrencia de "c". -Ahora, si teclea "u", el cursor se moverá a la primera ocurrencia de -"cu". Ahora teclee . Esto borra la "u" de la cadena -buscada, y el cursor vuelve a la primera ocurrencia de "c". +Si se encuentra en medio de una búsqueda incremental y teclea , +la búsqueda "vuelve" a un punto anterior. Si teclea justo +después de teclear C-s para avanzar hasta la siguiente ocurrencia de +la cadena buscada, el cursor retrocede a una ocurrencia previa. Si no +hay ocurrencias previas, borra el último carácter de la cadena +buscada. Por ejemplo, suponga que ha tecleado "c", para buscar la +primera ocurrencia de "c". Ahora, si teclea "u", el cursor se moverá +a la primera ocurrencia de "cu". Ahora teclee . Esto borra la +"u" de la cadena buscada, y el cursor vuelve a la primera ocurrencia +de "c". Si está en medio de una búsqueda y teclea un carácter control o meta (con algunas pocas excepciones: los caracteres que son especiales en una búsqueda, tales como C-s y C-r), la búsqueda termina. -El C-s inicia una exploración que busca alguna ocurrencia de la cadena +C-s inicia una exploración que busca alguna ocurrencia de la cadena buscada DESPUÉS de la posición actual del cursor. Si quiere buscar algo anterior en el texto, teclee en cambio C-r. Todo lo que hemos dicho sobre C-s también se aplica a C-r, excepto que la dirección de @@ -926,14 +914,16 @@ la b -------------------- Una de las características agradables de Emacs es que se puede mostrar -más de una ventana en la pantalla al mismo tiempo. +más de una ventana en la pantalla al mismo tiempo. (Note que Emacs +usa el término "marcos", descrito en la siguiente sección, para +referirse a lo que otras aplicaciones llaman "ventanas". El manual de +Emacs contiene un Glosario de términos.) ->> Mueva el cursor a esta línea y teclee C-u 0 C-l (eso es CONTROL-L, - no CONTROL-1). +>> Mueva el cursor a esta línea y teclee C-l C-l. ->> Ahora teclee C-x 2 que divide la pantalla en dos ventanas. Ambas - ventanas muestran este tutorial. El cursor permanece en la ventana - superior. +>> Ahora teclee C-x 2 que divide la pantalla en dos ventanas. + Ambas ventanas muestran este tutorial. El cursor de edición + permanece en la ventana superior. >> Teclee C-M-v para desplazar la ventana inferior. (Si no tiene una tecla META real, teclee ESC C-v.) @@ -947,24 +937,25 @@ m superior. El cursor en la ventana superior está justo donde estaba antes. -Puede continuar usando C-x o para cambiar entre las ventanas. Cada -ventana tiene su propia posición del cursor, pero únicamente una -ventana actual muestra el cursor. Todos los comandos de edición -comunes se aplican a la ventana en que está el cursor. Llamaremos -esto la "ventana seleccionada". +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; +si está ejecutando Emacs en una pantalla gráfica, esos cursores se +muestran como rectángulos vacíos que no parpadean. El comando C-M-v es muy útil cuando está editando un texto en una -ventana y usando la otra ventana como referencia. Puede mantener el -cursor siempre en la ventana donde está editando, y avanzar a la otra -ventana secuencialmente con C-M-v. +ventana y usando la otra ventana como referencia. Sin moverse de la +ventana seleccionada, puede desplazar el texto de la otra ventana con +C-M-v. C-M-v es un ejemplo de un carácter CONTROL-META. Si tiene una tecla -META real, puede teclear C-M-v pulsando a la vez CONTROL y META +META (o Alt), puede teclear C-M-v pulsando a la vez CONTROL y META mientras teclea v. No importa qué tecla "vaya primero", CONTROL o META, porque las dos teclas actúan modificando los caracteres que teclea. -Si no tiene una tecla META real, y en vez de eso usa ESC, el orden sí +Si no tiene una tecla META, y en vez de eso usa ESC, el orden sí importa: debe teclear ESC seguido de Control-v, porque Control-ESC v no funcionará. Esto es porque ESC es un carácter que tiene valor por sí mismo, no es una tecla modificadora. @@ -992,6 +983,32 @@ diferentes: borrar la ventana inferior. +* MÚLTIPLES MARCOS +------------------ + +Emacs puede crear también múltiples "marcos". Marco es como +denominamos a un grupo de ventanas, junto con sus menus, barras de +desplazamiento, áreas de eco, etc. En entornos gráficos, lo que Emacs +denomina "marco" es lo que otras aplicaciones llaman "ventana". En +entornos gráficos, es posible mostrar varios marcos al mismo tiempo. +En una terminal, solo se puede mostrar un marco a la vez. + +>> Teclee M-x make-frame . + En la pantalla aparecerá un nuevo marco. + +En el nuevo marco puede hacer todo lo que hacía en el marco original. +El primer marco no tiene nada de especial. + +>> Teclee M-x delete-frame . + Esto destruye el marco seleccionado. + +También puede destruir un marco mediante el método normal que ofrezca +el entorno gráfico (a menudo, pinchando con el ratón en un botón +etiquetado como "X" en alguna de las esquinas superiores del marco). +Si al hacer eso destruye el último marco de Emacs, la aplicación +termina. + + * NIVELES RECURSIVOS DE EDICIÓN -------------------------------- @@ -1024,32 +1041,27 @@ Emacs. Todos estos comandos de "ayuda" comienzan con el car Control-h, que es llamado "el carácter de Ayuda (Help)". Para usar las funciones de ayuda, teclee el carácter C-h, y luego un -carácter decidiendo qué tipo de ayuda quiere. Si está REALMENTE +carácter que especifica qué tipo de ayuda quiere. Si está REALMENTE perdido teclee C-h ? y Emacs le dirá qué tipo de ayuda puede ofrecerle. Si ha tecleado C-h y decide que no quiere ninguna ayuda, teclee C-g para cancelarlo. -(En algunas instalaciones cambian el significado del carácter C-h. -Realmente no deberían hacer esto como una política para todos los -usuarios, así que tiene argumentos para quejarse al administrador del -sistema. Mientras tanto, si C-h no muestra un mensaje de ayuda en el -final de la pantalla, intente teclear la tecla F1 o, en su lugar, M-x -help ). +(Si C-h no muestra un mensaje de ayuda en el final de la pantalla, +intente teclear la tecla F1 o, en su lugar, M-x help .) La función de AYUDA más básica es C-h c. Teclee C-h, el carácter c y un carácter de comando o secuencia de comando; Emacs le mostrará una descripción muy breve del comando. >> Teclee C-h c C-p. - El mensaje debe ser algo como + El mensaje debe ser algo como C-p runs the command previous-line -Esto le dice el "nombre de la función". Los nombres de función se -usan principalmente para adecuar y extender Emacs. Pero ya que los -nombres de las funciones se eligen para indicar lo que el comando -hace, también pueden servir como una breve documentación: suficiente -para recordarle los comandos que ha aprendido. +Esto le dice el "nombre de la función". Ya que los nombres de las +funciones se eligen para indicar lo que hace el comando, pueden servir +como una breve documentación: suficiente para recordarle los comandos +que ha aprendido. Los comandos de múltiples caracteres tales como C-x C-s y (sí no tiene las teclas META o EDIT o ALT) v también están permitidos después @@ -1062,22 +1074,23 @@ C-h c. Esto muestra la documentación de la función, al igual que el nombre, en una ventana de Emacs. Cuando haya terminado de leer el resultado, -teclee C-x 1 para deshacerse del texto de ayuda. No tiene que hacer -esto ahora. Puede hacer algunas ediciones mientras se refiere -al texto de ayuda, y entonces teclear C-x 1. +teclee C-x 1 para deshacerse de la ventana. No tiene que hacer esto +ahora. Puede hacer algunas ediciones mientras se refiere al texto de +ayuda, y entonces teclear C-x 1. Aquí hay algunas otras opciones útiles de C-h: C-h f Describe una función. Usted teclea el nombre de la función. ->> Intente teclear C-h f previous-line. +>> Intente teclear C-h f previous-line . Esto muestra toda la información que Emacs tiene sobre la función que implementa el comando C-p -Un comando similar, C-h v, muestra la documentación de variables cuyos -valores pueda poner para adecuar el comportamiento de Emacs. Necesita -teclear el nombre de la variable cuando Emacs pregunte por ella. +Un comando similar, C-h v, muestra documentación de las variables, +incluyendo los valores que pueda poner para adaptar el comportamiento +de Emacs. Deberá teclear el nombre de la variable cuando Emacs +pregunte por ella. C-h a Comando Apropos. Teclee una palabra y Emacs hará una lista de todos los comandos que contengan esa palabra. @@ -1086,7 +1099,7 @@ teclear el nombre de la variable cuando Emacs pregunte por ella. listará una secuencia de uno o dos caracteres la cual ejecutará el mismo comando. ->> Teclee C-h a file. +>> Teclee C-h a file . Esto muestra en otra ventana una lista de todos los comandos M-x con la palabra "file" en sus nombres. Verá comandos de caracteres como @@ -1098,36 +1111,37 @@ correspondientes tales como find-file. >> Teclee C-x 1 para borrar la ventana de ayuda. - C-h i Leer los Manuales En-Línea (alias Info). Este comando + C-h i Leer los manuales incluidos (alias Info). Este comando lo pone en un buffer especial llamado `*info*' donde - puede leer manuales en línea de los paquetes - instalados en su sistema. Teclee m Emacs - para leer el manual de Emacs. Sí nunca ha usado Info - antes, teclee ? y Emacs lo llevará en una visita - guiada de los servicios del modo de Info. Una vez que - haya terminado este tutorial, debería considerar el - manual Info de Emacs como su documentación primaria. + puede leer manuales de los paquetes instalados en su + sistema. Teclee m emacs para leer el manual + de Emacs. Si nunca ha usado Info, teclee ? y Emacs y + lo llevará por una visita guiada de los servicios del + modo de Info. Una vez que haya terminado este + tutorial, debería considerar el manual Info de Emacs + como su documentación primaria. * MÁS CARACTERÍSTICAS --------------------- -Puede aprender más de Emacs leyendo su manual, ya sea como libro o en -línea en el Info (use el menú Ayuda--"Help"--o teclee F10 h r). Dos -características que pueden gustarle son la completación, que ahorra -teclear, y dired, que simplifica el manejo de archivos. +Puede aprender más acerca de Emacs leyendo su manual, ya sea como +libro o en el propio Emacs (use el menú Ayuda, "Help", o teclee C-h +r). Dos características que pueden gustarle son la completación, que +ahorra teclear, y dired, que simplifica el manejo de archivos. La completación es una manera de ahorrar teclear innecesariamente. Por ejemplo, si quiere cambiarse al buffer "*Messages*", puede teclear C-x b *M y emacs encontrará el resto del nombre del buffer tan lejos como pueda determinar de lo que ya haya tecleado. La -completación es descrita en el Info del manual de Emacs en el nodo -llamado "Completation". +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 +llamado "Completion". Dired le permite listar los archivos en un directorio (y opcionalmente sus subdirectorios), moverse alrededor de esa lista, visitar, renombrar, borrar y aparte de eso operar en los archivos. Dired está -descrito en el Info en el manual de Emacs en el nodo llamado "Dired". +descrito en el manual de Emacs en el nodo llamado "Dired". El manual también describe otras características de Emacs. @@ -1135,13 +1149,11 @@ El manual tambi * CONCLUSIÓN ------------ -Recuerde, para salir permanentemente de Emacs use C-x C-c. Para salir -temporalmente a un intérprete de comandos, de forma que puede volver a -Emacs después, use C-z. +Para salir permanentemente de Emacs use C-x C-c. Este tutorial intenta ser comprensible para todos los usuarios nuevos, -así que si encuentra algo que no esté claro, no se siente y se culpe a -sí mismo: ¡Quéjese! +así que si encuentra algo que no esté claro, no se quede parado +culpándose a sí mismo: ¡Quéjese! * COPIA @@ -1174,6 +1186,7 @@ La versi La versión en español ha sido actualizada por: Rafael Sepúlveda + Juanma Barranquero Por favor, en caso de duda, sólo es válido el original en inglés de la siguiente nota de derechos de reproducción (que puede encontrar en el diff --git a/etc/tutorials/TUTORIAL.fr b/etc/tutorials/TUTORIAL.fr index 140f58ac06e..89ec7c16f8b 100644 --- a/etc/tutorials/TUTORIAL.fr +++ b/etc/tutorials/TUTORIAL.fr @@ -94,7 +94,6 @@ qu'il des C-p. Notez ce que fait C-p lorsque le curseur est au milieu de la ligne. - Chaque ligne de texte se termine par un caractère Newline, qui sert à la séparer de la ligne suivante. La dernière ligne de votre fichier devrait se terminer par un Newline (mais Emacs n'exige pas qu'il y en @@ -180,7 +179,7 @@ ainsi que les commandes de d M-< (Meta inférieur à) et M-> (Meta supérieur à) sont deux autres commandes importantes de déplacement du curseur. La première renvoie -au tout début du texte, la seconde à la fin de celui-ci. +au tout début du texte, la seconde à la toute fin de celui-ci. Sur certains claviers, le "<" se trouve sous la virgule, vous devez donc utiliser la touche pour y avoir accès. Sur ces terminaux, @@ -228,9 +227,9 @@ vues jusqu' d'un paramètre préfixe, quelle que soit sa valeur, force la commande à agir différemment. -C-v et M-v constituent un autre type d'exception. Lorsqu'on leur -donne un paramètre, elles font défiler l'écran vers le haut ou vers le -bas du nombre de lignes indiqué au lieu de passer d'un écran complet à +C-v et M-v constituent un autre type d'exception. Lorsqu'on leur donne +un paramètre, elles font défiler l'écran vers le haut ou vers le bas +du nombre de lignes indiqué au lieu de passer d'un écran complet à l'autre. C-u 8 C-v, par exemple, fait défiler l'écran de 8 lignes. >> Faites C-u 8 C-v. @@ -248,8 +247,9 @@ d Si votre souris a une molette, vous pouvez aussi l'utiliser pour faire défiler le texte. -* QUAND EMACS EST MUET ----------------------- + +* QUAND EMACS NE RÉPOND PLUS +---------------------------- Si Emacs cesse de répondre à vos commandes, vous pouvez le débloquer en toute sécurité avec C-g. Cette commande fait stopper une commande @@ -267,8 +267,8 @@ Si vous avez tap avec un C-g. -* COMMANDES DÉSACTIVÉES ------------------------- +* COMMANDES DÉSACTIVÉES +----------------------- Certaines commandes d'Emacs sont « désactivées » afin que les utilisateurs débutants ne puissent les utiliser par accident. @@ -282,7 +282,8 @@ r désactivée, il suffit normalement de répondre « n ». >> Faites C-x C-l (qui est une commande désactivée), - puis répondez n à la question. + puis répondez « n » à la question. + * FENÊTRES ---------- @@ -300,9 +301,9 @@ contenant le curseur pour qu'elle occupe tout l' supprime toutes les autres fenêtres. >> Déplacez le curseur sur cette ligne et faites C-u 0 C-l. ->> Faites CONTROLE-h k CONTROLE-f. +>> Faites C-h k C-f. Vous constatez que cette fenêtre est réduite alors qu'une nouvelle - apparaît pour afficher la documentation sur la commande CONTROLE-f. + apparaît pour afficher la documentation sur la commande C-f. >> Faites C-x 1 et la fenêtre de documentation disparaît. @@ -322,24 +323,24 @@ comme du texte par Emacs et ins touche de retour chariot) pour insérer un caractère Newline. Vous pouvez effacer le dernier caractère que vous avez tapé en faisant -. est une touche du clavier -- la même que vous -utilisez habituellement en dehors d'Emacs, pour supprimer le dernier -caractère saisi. Il s'agit généralement de la grande touche située -quelques lignes au-dessus de la touche « Entrée ». Elle est -habituellement nommée « Delete », « Del », « Suppr » ou « Backspace ». +. est une touche du clavier -- la même que vous utilisez +habituellement en dehors d'Emacs, pour supprimer le dernier caractère +saisi. Il s'agit généralement de la grande touche située quelques +lignes au-dessus de la touche « Entrée ». Elle est habituellement +nommée « Delete », « Del », « Suppr » ou « Backspace ». Si cette grande touche s'appelle « Backspace », c'est celle-là qui -représente . Votre clavier peut également comporter une autre +représente . Votre clavier peut également comporter une autre touche, nommée « Delete », « Del » ou « Suppr », mais ce n'est pas -. +. -Plus généralement, efface le caractère situé immédiatement -avant la position courante du curseur. +Plus généralement, efface le caractère situé immédiatement avant +la position courante du curseur. >> Tapez quelques caractères puis effacez-les en faisant plusieurs - fois . Ne vous inquiétez pas de modifier ce fichier ; vous - ne modifierez pas le didacticiel principal mais uniquement votre - copie personnelle de celui-ci. + fois . Ne vous inquiétez pas de modifier ce fichier ; vous ne + modifierez pas le didacticiel principal mais uniquement votre copie + personnelle de celui-ci. Lorsqu'une ligne de texte devient trop longue pour tenir sur une seule ligne de l'écran, elle se « continue » sur une deuxième ligne @@ -350,7 +351,7 @@ droite indique une ligne qui se poursuit sur la ligne suivante. >> Insérez du texte jusqu'à atteindre la marge droite et continuez d'en insérer. Vous verrez apparaître une ligne de continuation. ->> Faites des pour effacer le texte jusqu'à ce que la ligne +>> Faites des pour effacer le texte jusqu'à ce que la ligne tienne à nouveau sur une seule ligne d'écran. La ligne de continuation disparaît. @@ -360,8 +361,8 @@ en une seule ligne. Si la ligne r dans la largeur de l'écran, elle s'affichera avec une ligne de continuation. ->> Placez le curseur au début d'une ligne et faites . - Cela fusionne cette ligne avec la ligne précédente. +>> Placez le curseur au début d'une ligne et faites . Cela + fusionne cette ligne avec la ligne précédente. >> Faites pour remettre le Newline que vous avez supprimé. @@ -376,41 +377,46 @@ texte dans Emacs et pour corriger les erreurs. Vous pouvez effacer des mots ou des lignes entières. Voici un résumé des opérations de suppression : - Efface le caractère situé avant le curseur - C-d Efface le caractère situé après le curseur + Efface le caractère situé avant le curseur + C-d Efface le caractère situé après le curseur - M- Supprime le mot situé avant le curseur - M-d Supprime le mot situé après le curseur + M- Supprime le mot situé avant le curseur + M-d Supprime le mot situé après le curseur - C-k Supprime du curseur à la fin de la ligne - M-k Supprime jusqu'à la fin de la phrase courante + C-k Supprime du curseur à la fin de la ligne + M-k Supprime jusqu'à la fin de la phrase courante -Vous noterez que et C-d, par rapport à M- et M-d, -ont la même relation que C-f et M-f (en fait, n'est pas -vraiment un caractère de contrôle, mais ne nous soucions pas de cela) -C-k et M-k sont un peu comme C-e et M-e. +Vous noterez que et C-d, par rapport à M- et M-d, ont la +même relation que C-f et M-f (en fait, n'est pas vraiment un +caractère de contrôle, mais ne nous soucions pas de cela) C-k et M-k +sont un peu comme C-e et M-e. Vous pouvez aussi supprimer n'importe quelle zone du tampon en utilisant une méthode unique et générale. Placez-vous à une extrémité -de cette zone et tapez soit C-@, soit C-SPC (SPC désigne la barre -espace). Puis, allez à l'autre extrémité et faites C-w. Cela supprime -tout le texte compris entre ces deux positions. +de cette zone et tapez C-SPC (SPC désigne la barre espace). Puis, +allez à l'autre extrémité du texte que vous voulez supprimer. En +faisant cela, Emacs surligne le texte entre le curseur et la position +d'où vous avez tapé C-SPC. Enfin, faites C-w. Cela supprime tout le +texte compris entre ces deux positions. >> Placez le curseur sur le V au début du paragraphe précédent. >> Faites C-SPC. Emacs devrait afficher un message "Mark set" en bas de l'écran. ->> Déplacez le curseur sur le x d'« extrémité », sur la seconde ligne - du paragraphe. +>> Déplacez le curseur sur le x d'« extrémité », sur la seconde + ligne du paragraphe. >> Faites C-w. Cela supprimera le texte allant du V jusqu'au caractère situé juste avant le x. La différence entre « effacer » et « supprimer » est que vous pouvez réinsérer le texte « supprimé », alors que c'est impossible avec ce -qui a été « effacé ». La réinsertion d'un texte supprimé s'appelle le +qui a été « effacé » (Vous pouvez cependant « annuler » un effacement +- voir plus bas.) La réinsertion d'un texte supprimé s'appelle le « yanking ». Généralement, les commandes qui ôtent beaucoup de texte le suppriment (afin que vous puissiez le récupérer), tandis que celles qui ne font qu'ôter un seul caractère, des lignes blanches ou des espaces, les effacent (vous ne pouvez donc pas récupérer ce texte). +Dans le cas le plus simple et sans paramètre, et C-d effacent. +Avec un paramètre, ces commandes suppriment. >> Placez le curseur au début d'une ligne non vide puis faites C-k pour supprimer le texte de celle-ci. @@ -424,11 +430,16 @@ il d simple répétition : C-u 2 C-k détruit deux lignes et leurs Newlines alors que taper deux fois C-k n'aurait pas le même effet. -Vous pouvez ramener le texte supprimé à la place qu'il occupait ou à -n'importe quel autre emplacement du texte. Vous pouvez récupérer -plusieurs fois ce texte afin d'en créer plusieurs copies. +Réinsérer du texte supprimé est appelé « yanking » (« récupérer »). +(Pensez au geste de tirer vers soi du texte qui a été jeté.) Vous +pouvez récupérer le texte supprimé à la place qu'il occupait, à +n'importe quel autre emplacement du texte, ou même dans un autre +fichier. Vous pouvez récupérer plusieurs fois ce texte afin d'en +créer plusieurs copies. Certains éditeurs de texte appellent +« couper » et « coller » les opérations de « supprimer » et de +« récupérer » (voir le Glossaire dans le manuel d'Emacs.) -La commande de récupération est C-y. Elle réinsère le dernier texte +La commande de récupération est C-y. Elle réinsère le dernier texte supprimé à la position courante du curseur. >> Essayez : faites C-y pour récupérer le texte. @@ -452,12 +463,12 @@ M-y. Apr récente, M-y remplacera ce texte récupéré par le texte supprimé précédemment. En répétant les M-y, vous ramenez les suppressions de plus en plus anciennes. Lorsque vous avez atteint le texte que vous -recherchez, vous n'avez rien besoin de faire pour le -conserver. Continuez simplement à éditer votre texte et laissez le -texte récupéré où il est. +recherchez, vous n'avez rien besoin de faire pour le conserver. +Continuez simplement à éditer votre texte et laissez le texte +récupéré où il est. -Si vous faites M-y suffisamment de fois, vous reviendrez à votre point -de départ (la suppression la plus récente). +Si vous faites M-y un nombre suffisant de fois, vous reviendrez +à votre point de départ (la suppression la plus récente). >> Supprimez une ligne, déplacez vous et supprimez une autre ligne. Puis, faites C-y pour récupérer cette dernière. @@ -472,34 +483,36 @@ de d * ANNULATION ------------ -Si vous modifiez le texte, puis que vous décidez que c'était une -erreur, vous pouvez annuler cette modification avec la commande C-x u -(comme Undo, défaire). +Si vous modifiez le texte, puis décidez que c'était une erreur, +vous pouvez annuler cette modification avec la commande C-/. -Normalement C-x u annule les modifications d'une seule commande ; si -vous répétez plusieurs fois C-x u dans une ligne, chaque répétition +Normalement C-/ annule les modifications d'une seule commande ; si +vous répétez plusieurs fois C-/ dans une ligne, chaque répétition annulera une commande supplémentaire. Il y a quand même deux exceptions : les commandes qui ne modifient pas le texte ne comptent pas (cela inclut les commandes de déplacement du curseur et les commandes de défilement du texte) et les caractères auto-insérés sont habituellement gérés par groupes allant jusqu'à 20 -(ceci afin de réduire le nombre de C-x u que vous devriez taper pour +(ceci afin de réduire le nombre de C-/ que vous devriez taper pour annuler l'insertion de texte). ->> Supprimez cette ligne avec C-k, puis faites C-x u pour la voir +>> Supprimez cette ligne avec C-k, puis faites C-/ pour la voir réapparaître. C-_ est une autre commande d'annulation ; elle fonctionne exactement -comme C-x u mais est plus facile à taper plusieurs fois dans une -ligne. Son inconvénient est qu'elle n'est pas facile à taper sur -certains claviers, c'est pourquoi C-x u existe aussi. Sur certains -terminaux, vous pouvez taper C-_ en tapant / tout en pressant la -touche CTRL. +comme C-/. Sur certains terminaux, taper C-/ envoie en fait C-_ à Emacs. +Autrement, C-x u marche aussi exactement comme C-/, mais est un peu +moins pratique à taper. -Un paramètre numérique passé à C-_ ou C-x u agit comme un nombre de +Un paramètre numérique passé à C-_ ou C-/ agit comme un nombre de répétitions. +Vous pouvez annuler la suppression de texte de la même manière que +vous pouvez annuler son effacement. La distinction entre supprimer +et effacer quelque chose n'intervient que pour la récupération avec +C-y; elle ne fait aucune différence pour l'annulation. + * FICHIERS ---------- @@ -520,7 +533,7 @@ sauvegardez, Emacs garde le fichier original sous un nom modifi cas où vous décideriez ensuite d'annuler vos modifications. Si vous examinez le bas de l'écran, vous verrez une ligne qui commence -et finit par des tirets et débute par « -1:-- TUTORIAL.fr » ou quelque +et finit par des tirets et débute par « -:--- TUTORIAL.fr » ou quelque chose comme ça. Cette partie de l'écran montre normalement le nom du fichier que vous êtes en train de visiter. Pour l'instant, vous visitez un fichier appelé « TUTORIAL.fr », qui est votre copie @@ -529,8 +542,8 @@ Emacs, son nom appara Une particularité de la commande permettant de trouver un fichier est que vous devez donner le nom du fichier voulu. On dit que la commande -« lit un paramètre à partir du terminal » (ici, le paramètre est le -nom du fichier). Après avoir fait la commande +« lit un paramètre » (ici, le paramètre est le nom du fichier). Après +avoir fait la commande C-x C-f Trouve un fichier @@ -592,7 +605,7 @@ Emacs. Emacs stocke le texte de chaque fichier dans un objet appelé « tampon ». Trouver un fichier crée un nouveau tampon dans Emacs. Pour voir la -liste des tampons existants dans votre session Emacs, faites +liste des tampons existants dans votre session Emacs, faites : C-x C-b Liste des tampons @@ -605,14 +618,14 @@ pouvez voir dans une fen >> Faites C-x 1 pour faire disparaître la liste des tampons. Lorsque vous avez plusieurs tampons, seul l'un d'entre eux est le -tampon "courant" à un instant donné : c'est celui que vous éditez. Si -vous souhaitez éditer un autre tampon, vous devez "basculer" vers +tampon « courant » à un instant donné : c'est celui que vous éditez. +Si vous souhaitez éditer un autre tampon, vous devez « basculer » vers lui. Pour basculer vers un tampon correspondant à un fichier, vous pouvez le recharger avec C-x C-f mais il y a plus simple : utilisez la commande C-x b en lui passant le nom du tampon. ->> Faites C-x b truc pour revenir au tampon "truc", qui - contient le texte du fichier "truc". +>> Faites C-x b truc pour revenir au tampon « truc », qui + contient le texte du fichier « truc ». Puis, faites C-x b TUTORIAL pour revenir à ce didacticiel. La plupart du temps, le nom d'un tampon est le même que celui du @@ -623,13 +636,17 @@ noms de tous les tampons. TOUT texte que vous visualisez dans une fenêtre Emacs fait toujours partie d'un tampon, mais certains tampons ne correspondent pas à des fichiers : le tampon "*Buffer List*", par exemple, ne contient pas de -fichiers mais la liste obtenue par C-x C-b. Le tampon "*Messages*" ne -correspond pas non plus à un fichier ; il contient la liste des -messages apparus dans la ligne d'état pendant votre session Emacs. +fichiers mais la liste obtenue par C-x C-b. Ce didacticiel n'avait pas +de fichier au départ mais il en a un désormais, car dans la section +précédente, vous avez tapé C-x C-s pour l'enregistrer. + +Le tampon "*Messages*" ne correspond pas non plus à un fichier ; il +contient la liste des messages apparus dans la ligne d'état pendant +votre session Emacs. >> Faites C-x b *Messages* pour visualiser le tampon des messages. - Puis, faites C-x b TUTORIAL pour revenir à ce didacticiel. + Puis, faites C-x b TUTORIAL.fr pour revenir à ce didacticiel. Si vous modifiez le texte d'un fichier, puis que vous chargez un autre fichier, le premier ne sera pas sauvegardé. Ses modifications restent @@ -672,26 +689,22 @@ inqui proposera de sauvegarder tous les fichiers modifiés avant de quitter Emacs). +Si vous utiliser un affichage graphique, vous n'avez pas besoin de +commande spéciale pour vous déplacer d'Emacs à une autre application. +Vous pouvez le faire à l'aide de la souris ou avec les commandes du +gestionnaire de fenêtres. Cependant, si vous utilisez un terminal +texte ne pouvant afficher qu'une application à la fois, vous devez +« suspendre » Emacs pour passer à n'importe quel autre programme. + C-z est la commande permettant de quitter *temporairement* Emacs -- -afin de pouvoir revenir à la même session plus tard. - -Sur les systèmes qui le permettent, C-z « suspend » Emacs ; -c'est-à-dire qu'il revient au shell mais ne détruit pas Emacs. Avec -les shells les plus courants, vous pouvez revenir à Emacs en faisant -la commande 'fg' ou '%emacs'. - -Sur les systèmes qui n'implémentent pas ce mécanisme, C-z crée un -sous-shell qui s'exécute sous Emacs afin que vous puissiez lancer -d'autres programmes et revenir à Emacs ensuite : vous ne « sortez » -pas vraiment d'Emacs. Dans ce cas, la commande shell 'exit' est le -moyen habituel pour revenir à Emacs à partir de ce sous-shell. +afin de pouvoir revenir à la même session plus tard. Sur les systèmes +qui le permettent, C-z « suspend » Emacs ; c'est-à-dire qu'il revient +au shell mais ne détruit pas Emacs. Avec les shells les plus courants, +vous pouvez revenir à Emacs en faisant la commande 'fg' ou '%emacs'. Le moment idéal pour utiliser C-x C-c est lorsque l'on se déconnecte. C'est aussi la commande adaptée pour sortir d'un Emacs -invoqué par un programme de courrier ou tout autre utilitaire car -ceux-ci peuvent ne pas savoir comment gérer la suspension d'Emacs. Dans -des situations normales, si vous ne devez pas vous déconnecter, il est -préférable de suspendre Emacs avec C-z au lieu de le quitter. +invoqué par un programme de courrier ou tout autre utilitaire. Il existe de nombreuses commandes C-x. Voici une liste de celles que vous avez apprises : @@ -751,8 +764,8 @@ sauv ------------- Si Emacs constate que vous tapez les commandes multi-caractères -lentement, il les affiche en bas de l'écran dans une zone nommée « -zone d'écho ». La zone d'écho contient la dernière ligne de l'écran. +lentement, il les affiche en bas de l'écran dans une zone nommée +« zone d'écho ». La zone d'écho contient la dernière ligne de l'écran. * LIGNE DE MODE @@ -761,18 +774,18 @@ zone d' La ligne placée immédiatement au dessus de la zone d'écho s'appelle la « ligne de mode ». Elle affiche quelque chose comme ça : --1:** TUTORIAL.fr (Fundamental)--L752--67%---------------- + -:**- TUTORIAL.fr 64% L749 (Fundamental) Cette ligne donne des informations sur l'état d'Emacs et sur le texte que vous êtes en train d'éditer. Vous savez déjà ce que signifie le nom de fichier -- c'est celui que -vous avez chargé. -NN%-- indique votre position actuelle dans le -texte ; cela signifie que NN pour cent du texte se trouve au dessus du -sommet de l'écran. Si le début du fichier est sur l'écran, il -s'affichera --Top-- et non --00%--. Si le bas du texte est sur -l'écran, il s'affichera --Bot--. Si tout le texte tient dans l'écran, -il s'affichera --All--. +vous avez chargé. NN% indique votre position actuelle dans le texte ; +cela signifie que NN pour cent du texte se trouve au dessus du sommet +de l'écran. Si le début du fichier est sur l'écran, il s'affichera +« Top » et non « 00% ». Si le bas du texte est sur l'écran, il +s'affichera « Bot » (comme « bottom »). Si tout le texte tient dans +l'écran, il s'affichera « All ». Le L et les chiffres qui le suivent indiquent une position d'une façon différente : ils indiquent le numéro de la ligne courante du point. @@ -784,7 +797,7 @@ simplement des tirets. La partie de la ligne de mode située entre parenthèses indique les modes d'édition dans lesquels vous vous trouvez. Le mode par défaut -est « Fundamental » et c'est celui que vous êtes en train +est le mode « Fundamental » et c'est celui que vous êtes en train d'utiliser. C'est un exemple de « mode majeur ». Emacs possède de nombreux modes majeurs différents. Certains sont @@ -804,7 +817,7 @@ exemple, est une commande pour basculer dans le mode Fundamental. Si vous devez éditer du texte en langage naturel, comme ce fichier, vous utiliserez probablement le mode Text. ->> Faites M-x text mode. +>> Faites M-x text-mode. Ne vous inquiétez pas, aucune des commandes Emacs que vous avez apprises ne change beaucoup mais vous pouvez constater que M-f et M-b @@ -818,7 +831,7 @@ les modes majeurs, mais fonctionnent un peu diff Pour lire la documentation sur votre mode majeur actuel, faites C-h m. ->> Faites une fois C-u C-v pour amener cette ligne près du haut de l'écran. +>> Faites C-l C-l pour amener cette ligne près du haut de l'écran. >> Faites C-h m pour voir comment le mode Text diffère du mode Fundamental. >> Faites C-x 1 pour supprimer la documentation de l'écran. @@ -840,7 +853,7 @@ faisant désactivé, cette commande l'active et, s'il est activé, elle le désactive : on dit que la commande « fait basculer le mode ». ->> Faites M-x auto fill mode puis insérez une ligne de +>> Faites M-x auto-fill-mode puis insérez une ligne de plusieurs « azer » jusqu'à ce qu'elle se divise en deux lignes. Vous devez mettre des espaces entre eux car le mode Auto Fill ne coupe les lignes que sur les espaces. @@ -870,8 +883,7 @@ l'arri du curseur : elle déplace le curseur à l'emplacement où la chaîne apparaît. -La commande de recherche d'Emacs est différente de celle que l'on -trouve sur la plupart des éditeurs car elle est « incrémentale ». Cela +La commande de recherche d'Emacs est « incrémentale ». Cela signifie que la recherche a lieu pendant que l'on tape la chaîne que l'on recherche. @@ -889,7 +901,7 @@ que vous recherchez. > Tapez C-s à nouveau pour trouver l'occurrence suivante de « curseur ». ->> Faites maintenant quatre fois et étudiez les mouvements du +>> Faites maintenant quatre fois et étudiez les mouvements du curseur. >> Faites pour mettre fin à la recherche. @@ -900,21 +912,13 @@ avec tap bippe et vous indique que la recherche a échoué. C-g permet également de mettre fin à la recherche. -REMARQUE : Sur certains systèmes, C-s gèlera l'écran et vous ne verrez -plus rien se produire dans Emacs. Cela indique qu'une -« fonctionnalité » du système d'exploitation, appelée « contrôle de -flux », a intercepté le C-s et ne lui permet pas de parvenir à -Emacs. Pour décoincer l'écran, faites C-q puis consultez la section -« Spontaneous Entry to Incremental Search » dans le manuel d'Emacs -pour avoir des avis sur la gestion de cette « fonctionnalité ». - Si vous vous trouvez au milieu d'une recherche incrémentale et que -vous tapez , vous remarquerez que cela supprime le dernier +vous tapez , vous remarquerez que cela supprime le dernier caractère de la chaîne recherchée et que la recherche reprend à l'endroit où elle se trouvait précédemment. Supposons, par exemple, que vous ayiez tapé « c » pour trouver la première occurrence de « c ». Si vous tapez maintenant « u », le curseur ira sur la première -occurrence de « cu ». Faites : cela supprime le « u » de la +occurrence de « cu ». Faites : cela supprime le « u » de la chaîne de recherche et le curseur revient à la première occurrence de « c ». @@ -929,21 +933,24 @@ haut dans le texte, faites plut C-s s'applique également à C-r, sauf que la direction de la recherche est inversée. + * FENÊTRES MULTIPLES -------------------- L'une des caractéristiques les plus agréables d'Emacs est que vous -pouvez afficher plusieurs fenêtres en même temps à l'écran. +pouvez afficher plusieurs fenêtres en même temps à l'écran. (Notez +qu'Emacs utilise le terme « cadres » -- décrits dans la section +d'après -- là où d'autres applications disent « fenêtres ». Le +manuel d'Emacs contient un Glossaire des termes d'Emacs.) ->> Placez le curseur sur cette ligne et faites C-u 0 C-l (CTRL-L, pas - CTRL-1). +>> Placez le curseur sur cette ligne et faites C-l C-l. >> Faites maintenant C-x 2 pour diviser l'écran en deux fenêtres. Toutes les deux affichent ce didacticiel et le curseur reste dans celle du haut. >> Faites C-M-v pour faire défiler la fenêtre du bas - (Si vous n'avez pas de touche Meta, faites C-V). + (Si vous n'avez pas de touche Meta, faites C-v). >> Tapez C-x o (« o » pour « other ») afin de placer le curseur dans la fenêtre du bas. @@ -954,10 +961,11 @@ pouvez afficher plusieurs fen haut. Le curseur est exactement où il était avant. Vous pouvez continuer à utiliser C-x o pour passer d'une fenêtre à -l'autre. Chaque fenêtre a sa propre position du curseur, mais une -seule le montre vraiment. Toutes les commandes d'édition habituelles -s'appliquent à la fenêtre dans laquelle se trouve le curseur : on -l'appelle la « fenêtre sélectionnée ». +l'autre. La « fenêtre sélectionnée », où la plupart de l'édition a +lieu, est celle avec un curseur plus visible, qui clignotte quand +vous ne tapez pas. Les autres fenêtres ont leurs propres positions +de curseur ; si vous utilisez Emacs dans un affichage graphique, ces +curseurs sont dessinés comme des boîtes fantômes fixes. La commande C-M-v est très utile lorsque l'on édite du texte dans une fenêtre et que l'on utilise l'autre uniquement comme référence. Vous @@ -998,6 +1006,33 @@ choses diff supprimer celle du bas. +* CADRES MULTIPLES +------------------ + +Emacs peut aussi créer plusieurs « cadres ». Un cadre est ce que nous +appelons une collection de fenêtres, avec ses menus, ses barres de +défilement, son mini-tampon, etc. Dans les affichages graphiques, ce +qu'Emacs appelle un cadre est ce que la plupart des applications +appellent une « fenêtre ». Des cadres graphiques multiples peuvent +apparaître sur l'écran en même temps. Dans un terminal texte, seul +un cadre à la fois peut être affiché. + +>> Tapez M-x make-frame + Voyez un nouveau cadre apparaître dans votre écran. + +Tout ce que vous faisiez dans votre cadre initial, vous pouvez le +faire dans le nouveau cadre. Il n'y a rien de spécial au premier +cadre. + +>> Tapez M-x delete-frame + Ceci détruit le cadre sélectionné. + +Vous pouvez aussi détruire un cadre en utilisant les méthodes normales +fournies par le système graphique (souvent en cliquant sur un bouton +avec un « X » dans l'angle haut du cadre.) Si vous supprimez le +dernier cadre de la tâche Emacs de cette manière, vous sortez d'Emacs. + + * NIVEAUX D'ÉDITION RÉCURSIVE ----------------------------- @@ -1006,18 +1041,18 @@ d' de mode, entourant les parenthèses situées autour du nom du mode majeur. Vous verrez, par exemple [(Fundamental)] au lieu de (Fundamental). -Pour sortir du niveau d'édition récursive, faites ESC ESC ESC. C'est -une commande de sortie à tout faire. Vous pouvez également l'utiliser -pour supprimer les fenêtres supplémentaires et pour sortir du -mini-tampon. +Pour sortir du niveau d'édition récursive, faites . +C'est une commande de sortie à tout faire. Vous pouvez également l'utiliser +pour supprimer les fenêtres supplémentaires et pour sortir du mini-tampon. ->> Faites M-x pour aller dans le mini-tampon, puis faites ESC ESC ESC +>> Faites M-x pour aller dans le mini-tampon, puis faites pour en sortir. Vous ne pouvez pas utiliser C-g pour sortir d'un niveau d'édition récursive car cette commande sert à annuler des commandes et des paramètres DANS le niveau d'édition récursive. + * OBTENIR DE L'AIDE SUPPLÉMENTAIRE ---------------------------------- @@ -1035,18 +1070,16 @@ et Emacs vous indiquera les types d'aide qu'il peut fournir. Si vous avez tapé C-h et que vous vous ravisez, il vous suffit de faire C-g pour annuler. -Certains sites changent la signification du caractère C-h. Ils ne -devraient pas le faire à la légère pour tous les utilisateurs et vous -êtes donc en droit de vous plaindre auprès de l'administrateur -système. Cependant, si C-h n'affiche pas de message d'aide en bas de -l'écran, essayez à la place la touche F1 ou M-x help . +(si C-h n'affiche pas de message d'aide en bas de l'écran, essayez à +la place la touche F1 ou M-x help .) La commande d'aide la plus simple est C-h c. Faites C-h, le caractère c, puis un caractère ou une séquence de commande : Emacs affichera une description très courte de cette commande. >> Faites C-h c C-p. - Le message devrait être quelque chose comme : + +Le message devrait être quelque chose comme : C-p runs the command previous-line @@ -1116,7 +1149,7 @@ leur correspondent, comme find-file. Vous pouvez en apprendre plus en lisant le manuel d'Emacs, qu'il soit imprimé ou en ligne avec le système Info (utilisez le menu Help, ou -faites F10 h r). Les deux fonctionnalités que vous apprécierez +faites C-h r). Les deux fonctionnalités que vous apprécierez particulièrement sont la complétion, qui permet d'économiser la frappe, et dired, qui simplifie la manipulation des fichiers. @@ -1136,12 +1169,11 @@ Info du manuel Emacs, Le manuel décrit également les nombreuses autres fonctionnalités d'Emacs. + * CONCLUSION ------------ -Rappelez-vous, pour quitter définitivement Emacs, faites C-x C-c. Pour -lancer temporairement un shell et pouvoir ensuite revenir à Emacs, -faites C-z. +Pour quitter définitivement Emacs, faites C-x C-c. Ce didacticiel est destiné à être compréhensible par tous les nouveaux utilisateurs. Si vous avez trouvé que quelque chose n'était pas clair, @@ -1157,7 +1189,7 @@ d Emacs. Cette version du didacticiel, comme GNU Emacs, est placée sous -copyright, et vous pouvez en distribuer des copies sous certaines +droit d'auteur, et vous pouvez en distribuer des copies sous certaines conditions : Copyright (C) 1985, 1996, 2001-2012 Free Software Foundation, Inc. @@ -1180,7 +1212,7 @@ l'obstructionnisme du logiciel (sa utilisant, écrivant et partagent des logiciels libres ! Cette traduction française a été effectuée par Éric Jacoboni -. + et complétée par Bastien Guerry . --- end of TUTORIAL.fr --- @@ -1188,4 +1220,3 @@ Cette traduction fran ;;; coding: latin-1 ;;; sentence-end-double-space: nil ;;; End: - diff --git a/etc/tutorials/TUTORIAL.nl b/etc/tutorials/TUTORIAL.nl index da9724b2c1e..e30c73a2441 100644 --- a/etc/tutorials/TUTORIAL.nl +++ b/etc/tutorials/TUTORIAL.nl @@ -1,4 +1,4 @@ -Emacs-inleiding. De kopieervoorwaarden staan onderaan. +De Emacs-inleiding. De kopieervoorwaarden staan onderaan. De meeste Emacs-commando's gebruiken de CONTROL-toets (soms CTRL of CTL genaamd) en/of de META-toets (soms genaamd EDIT of ALT). In plaats van @@ -12,6 +12,7 @@ steeds de volledige naam te noemen, gebruiken we de volgende afkortingen: verwijzen naar de ESC-toets als . BELANGRIJK: om Emacs te verlaten, tik C-x C-c (twee tekens). +Om een commando halverwege af te breken, tik C-g. De tekens ">>" tegen de linkerkantlijn nodigen je uit om een bepaald commando te proberen. Bijvoorbeeld: <> @@ -48,7 +49,9 @@ De volgende commando's zijn handig om volledige schermen te bekijken: >> Kijk waar de cursor staat, en onthoud de tekst er omheen. Tik C-l. Zoek de cursor en merk op dat hij nog steeds bij dezelfde tekst - staat. + staat, maar nu in het midden van het scherm. + Als je weer C-l tikt dan gaat hij naar de bovenkant van het scherm. + Nog een keer C-l en hij gaat naar de onderkant. Als je toetsenbord PageUp- en PageDn-toetsen heeft dan kun je deze ook gebruiken om een scherm terug dan wel vooruit te gaan, maar het werken @@ -64,10 +67,8 @@ naar een specifieke plaats op het scherm? Er is een aantal manieren waarop je dit kan doen. Je kan de pijltjestoetsen gebruiken, maar het is efficiënter om je handen in de standaardhouding te laten, en de commando's C-p, C-b, C-f en C-n te -gebruiken. Elk van deze commando's verplaatst de cursor precies een -regel of teken in een bepaalde richting op het scherm. Hier volgt een -figuur met de vier commando's en de richting waarin ze de cursor -bewegen: +gebruiken. Deze commando's komen overeen met de pijltjestoetsen, als +in onderstaande figuur: vorige regel, C-p : @@ -79,42 +80,41 @@ bewegen: >> Verplaats, met C-n of C-p, de cursor naar de middelste regel van de figuur. Tik dan C-l om de hele figuur in het midden van het - centrum te plaatsen. + scherm te plaatsen. Met een beetje kennis van het Engels zijn deze commando's gemakkelijk te onthouden: de p komt van "previous" (vorige), de n van "next" (volgende), de b van "backward" (achteruit) en de f van "forward" -(vooruit). Dit zijn de basiscommando's om de cursor te bewegen, dus -je zult ze VOORTDUREND gebruiken: het is vooruitziend als je ze nu -leert te gebruiken. +(vooruit). Dit zijn de basiscommando's om de cursor te bewegen, die +je VOORTDUREND zal gebruiken. ->> Tik een paar keer C-n om de cursor op deze regel te krijgen. +>> Tik een paar keer C-n om de cursor op deze regel te zetten. ->> Beweeg je binnen de regel met C-f (herhaaldelijk) en terug omhoog - met C-p. Let op wat C-p doet als de cursor midden in een regel - staat. +>> Beweeg de cursor binnen de regel met een paar keer C-f en terug + omhoog met C-p. Let op wat C-p doet als de cursor midden in een + regel staat. Elke regel eindigt met een Newline-teken (het Engelse "new line" betekent "nieuwe regel"); dit teken scheidt elke regel van de -volgende. De laatste regel in een bestand zou eigenlijk ook met een -Newline moeten eindigen (maar dat is niet noodzakelijk voor Emacs). +volgende. (De laatste regel in een bestand heeft meestal ook een +Newline aan het eind maar dat is geen vereiste voor Emacs.) >> Probeer C-b aan het begin van een regel. De cursor zal zich naar het eind van de vorige regel bewegen, omdat je achteruit over het - Newline teken gaat. + Newline-teken gaat. Net als C-b kan ook C-f zich over Newline-tekens heen bewegen. >> Tik nog een aantal keren het commando C-b, zodat je een gevoel krijgt waar de cursor is. Tik dan enkele keren C-f om de cursor - terug naar het einde van de regel te bewegen. Een verder C-f - commando beweegt de cursor dan naar de volgende regel. + naar het eind van de regel te bewegen. Nog een C-f commando + beweegt de cursor dan naar de volgende regel. -Wanneer je de cursor voorbij het begin of het einde van het scherm -beweegt, zal de tekst over het scherm heen schuiven. Dit heet -"scrollen", of "schuiven" in goed Nederlands. Door te scrollen zorgt -Emacs ervoor dat de cursor de gewenste beweging kan maken zonder dat -de cursor van het scherm af beweegt. +Wanneer je de cursor voorbij het begin of het eind van het scherm +beweegt, zal de tekst over het scherm bewegen. Dit heet "scrollen". +Door te scrollen zorgt Emacs ervoor dat de cursor naar de gewenste +plaats in de tekst kan gaan zonder de cursor van het scherm te laten +verdwijnen. >> Probeer de cursor voorbij de onderkant van het scherm te bewegen met C-n en zie wat er gebeurt. @@ -126,38 +126,39 @@ M-b een woord achteruit. >> Tik enkele keren M-f en M-b. Als je midden in een woord staat, beweegt M-f de cursor naar het eind -van het woord. Als je op een witte ruimte tussen twee woorden staat, -beweegt M-f de cursor naar het eind van het volgende woord. Het -commando M-b beweegt de cursor analoog de andere kant op. +van het woord. Als je op witruimte tussen twee woorden staat, beweegt +M-f de cursor naar het eind van het volgende woord. Het commando M-b +werkt op dezelfde manier de andere kant op. ->> Tik enkele keren M-f en M-b en daar tussendoor een paar maal C-f en - C-b, zodat je ziet wat M-f en M-b doen vanaf bepaalde plaatsen in +>> Tik enkele keren M-f en M-b en tussendoor een paar maal C-f en C-b, + zodat je ziet wat M-f en M-b doen vanaf verschillende plaatsen in een woord en tussen twee woorden. Merk op dat er een analogie bestaat tussen enerzijds C-f en C-b en anderzijds M-f en M-b. Het is bij veel commando's zo dat META-tekens gebruikt worden om iets te doen in eenheden van de taal (woorden, -zinnen, alinea's) terwijl CONTROL-tekens te maken hebben met dingen -die los staan van wat je aan het bewerken bent (tekens, regels, enz.). +zinnen, alinea's) terwijl CONTROL-tekens te maken hebben met de +bouwstenen die onafhankelijk zijn van wat je aan het bewerken bent +(tekens, regels, enz.). Deze analogie gaat ook op voor regels en zinnen: C-a en C-e bewegen de cursor naar het begin of eind van een regel, terwijl met M-a, respectievelijk M-e, de cursor naar het begin, respectievelijk het eind, van een zin gaat. ->> Tik enkele keren C-a, en dan een enkele keren C-e. - Tik een paar maal M-a, en dan enkele keren M-e. +>> Probeer een paar maal C-a, en dan enkele keren C-e. + Probeer een paar maal M-a, en dan enkele keren M-e. Bemerk hoe herhaalde C-a commando's niets doen, terwijl herhaalde M-a commando's de cursor steeds een zin achteruit bewegen. Alhoewel ze -niet volledig overeenkomen, is het gedrag van beide heel natuurlijk. +niet volledig overeenkomen, lijkt het gedrag van beide heel natuurlijk. De plaats van de cursor in de tekst wordt "punt" genoemd (zonder lidwoord, "point" in het Engels). Anders gezegd: de cursor laat op het scherm de plek zien waar punt in de tekst staat. -Nu volgt een samenvatting van eenvoudige cursorbewegingen, met -inbegrip van de commando's die de cursor per woord of zin bewegen: +Nu volgt een samenvatting van eenvoudige cursorbewegingen, inclusief +de commando's die de cursor per woord of zin bewegen: C-f Ga een teken vooruit C-b Ga een teken achteruit @@ -174,18 +175,17 @@ inbegrip van de commando's die de cursor per woord of zin bewegen: M-a Ga terug naar het begin van de zin M-e Ga vooruit naar het eind van de zin ->> Probeer al deze commando's een paar keer als oefening. Deze - commando's worden het vaakst gebruikt. +>> Probeer al deze commando's een paar keer als oefening. + Dit zijn de meestgebruikte commando's. Er zijn nog twee belangrijke cursorbewegingen: M-< (META kleiner-dan) -beweegt de cursor naar het begin van het bestand, en M-> (META +beweegt de cursor naar het begin van de tekst, en M-> (META groter-dan) beweegt hem naar het eind. Op de meeste toetsenborden zit de '<' boven de komma, zodat je de Shift-toets (ook wel bekend als de hoofdlettertoets) moet gebruiken om het '<'-teken in te tikken. Op deze toetsenborden moet je ook de -shift gebruiken om M-< in te tikken: zonder shift zou je M-, (META -komma) tikken. +shift gebruiken om M-< in te tikken: zonder shift zou je M-komma tikken. >> Tik nu M-< om naar het begin van dit bestand te gaan. Gebruik daarna C-v om hier weer terug te komen. @@ -195,14 +195,13 @@ komma) tikken. Als je toetsenbord pijltjestoetsen heeft, kan je die ook gebruiken om de cursor te verplaatsen. We raden je aan om C-b, C-f, C-n en C-p te -leren, om drie redenen. Ten eerste werken ze op alle toetsenborden, -ook die zonder pijltjestoetsen. Ten tweede zul je merken dat wanneer -je eenmaal wat ervaring hebt opgedaan in de omgang met Emacs, het -gebruik van de CONTROL-tekens sneller is dan werken met de -pijltjestoetsen (omdat je handen in de normale tikpositie kunnen -blijven). Ten derde, als je eenmaal gewend bent aan deze commando's -met CONTROL-tekens, kan je makkelijk andere gevorderde -cursorbewegingscommando's leren. +leren, om drie redenen. Ten eerste werken ze op alle soorten +toetsenborden. Ten tweede zul je merken dat wanneer je eenmaal wat +ervaring hebt opgedaan in de omgang met Emacs, het gebruik van de +CONTROL-tekens sneller is dan werken met de pijltjestoetsen (omdat je +handen in de normale tikpositie kunnen blijven). Ten derde, als je +eenmaal gewend bent aan deze commando's met CONTROL-tekens, kan je +makkelijk andere gevorderde cursorbewegingscommando's leren. De meeste Emacs-commando's accepteren een numeriek argument. Voor de meeste commando's is dit argument het aantal keren dat het commando @@ -211,7 +210,9 @@ vervolgens de cijfers van het getal, v toetsenbord een META- (of EDIT- of ALT-) toets heeft, is er ook een andere manier om het getal aan te geven: tik de cijfers terwijl je de META toets ingedrukt houdt. We raden je aan de C-u manier te leren -omdat die beschikbaar is op elke terminal. +omdat die beschikbaar is op elke terminal. Het numerieke argument +wordt ook wel het "prefix-argument" genoemd omdat je het typt voor +het commando waar het bij hoort. Bijvoorbeeld, C-u 8 C-f beweegt de cursor 8 plaatsen naar voren. @@ -233,33 +234,26 @@ verschuift de tekst 4 regels. >> Probeer nu C-u 8 C-v. -Daarmee zou je tekst 8 regels opgeschoven moeten zijn. Als je terug +Daarmee zou de tekst 8 regels opgeschoven moeten zijn. Als je terug omlaag wil scrollen, kan je M-v een argument geven. -Als je een scherm met vensters gebruikt, zoals X Windows of -MS-Windows, zou je een grote rechthoek moeten zien aan de linkerkant -van het Emacs-venster. Deze rechthoek heet een schuifbalk -("scrollbar"). Je kan de tekst scrollen door met de muis in de -schuifbalk te klikken. +Als je een grafisch scherm gebruikt, zoals X of MS-Windows, dan zou je +een hoge rechthoek moeten zien aan een katn van het Emacs-venster. +Deze rechthoek heet de schuifbalk ("scroll bar" in het Engels). Je +kan de tekst scrollen door met de muis in de schuifbalk te klikken. ->> Klik met de middelste muisknop bovenaan het heldere gebied in de - schuifbalk. Dit zou de tekst moeten verschuiven naar een positie - die afhankelijk is van hoe hoog of laag je klikt. - ->> Beweeg de muis op en neer terwijl je de middelste muisknop - ingedrukt houdt. Je zal zien dat de tekst met de muis mee heen en - weer scrollt. +Als je muis een scrollwiel heeft, dan kan je die gebruiken om te scrollen. * ALS EMACS HANGT ----------------- -Als Emacs niet meer op commando's reageert, kan je het veilig +Als Emacs niet meer op commando's reageert, kan je het gerust onderbreken door C-g te tikken. Je kan C-g gebruiken om een commando -te stoppen als het te lang duurt om uit te voeren. +af te breken als het te lang duurt om uit te voeren. Je kan C-g ook gebruiken om een numeriek argument te verwijderen of om -het begin van een commando dat je niet wilt afmaken, te verwijderen. +het begin van een commando dat je niet wilt afmaken, af te breken. >> Tik nu C-u 100 om een numeriek argument te maken met de waarde 100, en tik dan C-g. Tik vervolgens C-f. Het zou de cursor maar één @@ -292,8 +286,8 @@ niet uitvoeren en beantwoord je de vraag met "n" (van "no" of "nee"). ---------- Emacs kan meerdere vensters laten zien, elk venster met zijn eigen -tekst. We zullen later uitleggen hoe je met meerdere vensters om kan -gaan. Op dit moment willen we slechts uitleggen hoe je van extra +tekst. We zullen later uitleggen hoe je met meerdere vensters kan +werken. Op dit moment willen we slechts uitleggen hoe je van extra vensters af kunt komen en terug kan keren naar het werken met één venster. Het is eenvoudig: @@ -315,60 +309,54 @@ Dit commando is anders dan de commando's die je tot nu toe geleerd hebt aangezien het uit twee tekens bestaat. Het begint met het teken CONTROL-x. Er zijn een heleboel commando's die met CONTROL-x beginnen. Veel van die commando's hebben te maken met vensters, -bestanden, buffers, en gelijkaardige dingen. Dergelijke commando's +bestanden, buffers, en soortgelijke dingen. Dergelijke commando's bestaan uit twee, drie of vier tekens. * TOEVOEGEN EN WEGHALEN ----------------------- -Als je tekst toe wil voegen, tik je die eenvoudigweg in. Tekens die -je kan zien, zoals A, 7, * en dergelijke, worden door Emacs als tekst -geïnterpreteerd en meteen aan de tekst toegevoegd. Tik (de -"volgende regel"-toets) om een Newline toe te voegen en dus een nieuwe -regel te beginnen. +Als je tekst toe wil voegen, tik je die gewoon in. Tekens die je kan +zien, zoals A, 7, * en dergelijke, worden door Emacs als tekst +geïnterpreteerd en meteen toegevoegd. Tik (de "volgende +regel"-toets) om een Newline toe te voegen en dus een nieuwe regel te +beginnen. -Je kan het laatste teken dat je hebt ingetikt weghalen door -te tikken. is een toets op het toetsenbord -- dezelfde -toets die je normaal gesproken gebruikt, buiten Emacs, om het laatst -ingetikte teken te wissen. Het is meestal een grote toets, een paar -rijen boven de -toets, waar "Delete", "Del" of "Backspace" op -staat. +Om het teken dat dat voor de cursor staat te verwijderen, tik . + is de toets op het toetsenbord die vaak "Backspace" heet -- +dezelfde toets die je normaal gesproken, buiten Emacs, gebruikt om het +laatst ingetikte teken te wissen. -Als er op die grote toets "Backspace" staat, dan is dat degene die je -gebruikt voor . Er kan op een andere plaats ook nog een -andere toets zijn waarop "Delete" staat, maar dat is niet . - -In het algemeen haalt het teken weg dat juist voor de -cursorpositie staat. +Er kan ook nog een toets op het toetsenbord zijn waarop "Delete" +staat, maar dat is niet de knop die we noemen. >> Probeer dit nu: tik een paar letters en haal ze weer weg door een - paar keer op te drukken. Maak je niet druk over het feit - dat dit bestand verandert; je zal niets veranderen aan de originele - versie van deze inleiding. Je zit slechts je eigen kopie te - wijzigen. + paar keer te tikken. Maak je niet druk over het feit dat dit + bestand verandert; je zal niets veranderen aan de originele versie + van deze inleiding. Je bewerkt je eigen kopie. Als een regel tekst te lang wordt om helemaal op het scherm getoond te -worden, dan gaat hij verder op de volgende schermregel. Een backslash -("\") in de rechtermarge (of, als je een scherm met vensters gebruikt, -een kleine gebogen pijl) laat dan zien dat de regel op de volgende -schermregel verder gaat. +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 +laatste kolom een vervolgregel aan. >> Voeg nu tekst toe totdat je de rechter kantlijn raakt, en blijf toevoegen. Je zal zien dat er een vervolgregel verschijnt. ->> Tik weer enkele keren om zoveel tekens weg te halen tot +>> Tik weer enkele keren om zoveel tekens weg te halen dat de regel weer op een schermregel past. De vervolgregel zal verdwijnen. Je kan een Newline zoals elk ander teken verwijderen. Als je een Newline verwijdert, voeg je de twee regels waar de Newline tussen staat samen tot een enkele regel. Als de regel die het resultaat is -van deze operatie niet op een schermregel past, zal hij getoond worden -met een vervolgregel. +niet op een enkele schermregel past, zal hij getoond worden met een +vervolgregel. ->> Beweeg de cursor naar het begin van een regel en tik . - Dit voegt de huidige en vorige regel samen. +>> Beweeg de cursor naar het begin van een regel en tik . + Dit voegt die regel en de vorige regel samen. >> Tik om de Newline die je net verwijderd hebt weer toe te voegen. @@ -376,52 +364,53 @@ met een vervolgregel. Je herinnert je dat je bij de meeste Emacs-commando's het aantal keren op kan geven, dat ze herhaald moeten worden. Dit geldt ook voor gewone tekens. Als je een gewoon teken herhaalt, wordt dat teken -herhaaldelijk toegevoegd. +meerdere keren toegevoegd. >> Probeer dat nu: tik C-u 8 * om ******** toe te voegen. -Je hebt nu de eenvoudigste manier geleerd om iets in Emacs te tikken -en fouten te verbeteren. Je kan tekst ook per woord of regel -verwijderen. Hier volgt een samenvatting van de commando's om tekst -te verwijderen: +Je hebt nu de basismanier geleerd om iets in Emacs te tikken en fouten +te verbeteren. Je kan tekst ook per woord of regel verwijderen. Hier +volgt een samenvatting van de commando's om tekst te verwijderen: - Haal het teken weg dat voor de cursor staat + Haal het teken weg dat voor de cursor staat C-d Haal het teken weg dat achter de cursor staat - M- Verwijder het woord dat voor de cursor staat + M- Verwijder het woord dat voor de cursor staat M-d Verwijder het woord dat achter de cursor staat C-k Verwijder alles van de cursor tot het eind van de regel M-k Verwijder alles van de cursor tot het eind van de zin -Merk op dat en C-d, met M- en M-d de analogie -verder trekken, die begon met C-f en M-f (waarbij we voor het gemak -even vergeten dat niet echt een CONTROL-teken is). C-k en -M-k lijken enigzins op C-e en M-e in hun relatie tot regels en zinnen. +Merk op dat en C-d, met M- en M-d de analogie verder +trekken, die begon met C-f en M-f (waarbij we voor het gemak even +vergeten dat niet echt een CONTROL-teken is). C-k en M-k lijken +enigzins op C-e en M-e in hun relatie tot regels en zinnen. Je kunt ook op één uniforme manier een willekeurig deel van de tekst verwijderen. Beweeg daartoe naar één kant van het gedeelte dat je -wilt verwijderen en tik C-@ of C-. ( is de spatiebalk.) -Beweeg daarna naar de andere kant en tik C-w. Dat verwijdert alle -tekst tussen de twee posities. +wilt verwijderen en tik C-. ( is de spatiebalk.) Beweeg nu +naar de andere kant van de tekst die je wilt verwijderen. Terwijl je +beweegt, markeert Emacs zichtbaar de tekst tussen de cursor en de +plaats waar je C- tikte. Tik C-w. Dit verwijdert alle tekst +tussen beide posities. >> Beweeg de cursor naar de J aan het begin van de vorige alinea. >> Tik C-. Emacs toont nu de mededeling "Mark set" ("Markering geplaatst") onderaan het scherm. >> Plaats de cursor op de n van "kant" op de tweede regel van de alinea. ->> Tik C-w. Dit zal de tekst vanaf de J tot vlak voor de n - verwijderen. +>> Tik C-w. Dit zal de tekst vanaf de J tot aan de n verwijderen. -Er is een verschil tussen iets weghalen en iets verwijderen: iets dat -je hebt verwijderd, kan je terugbrengen, maar iets dat je hebt -weggehaald niet. (In het Engels is het verschil tussen "killing" en -"deleting" duidelijker dan tussen de Nederlandse vertalingen -"verwijderen" en "weghalen".) Verwijderde tekst terughalen heet -"yanken". In het algemeen geldt dat de commando's die meer tekst dan -een enkel teken, Newline of spatie verwijderen, deze tekst bewaren -zodat hij geyankt kan worden, terwijl dat niet geldt voor commando's -die slechts een enkel teken weghalen. +Er is een verschil tussen iets verwijderen ("kill") en iets weghalen +("delete"): iets dat je hebt verwijderd ("killed"), kan je +terugbrengen, maar iets dat je hebt weggehaald ("deleted") niet. (Je +kan het weghalen wel herstellen, zie verderop.) Verwijderde tekst +invoegen heet "yanken". In het algemeen geldt dat de commando's die +veel tekst kunnen verwijderen, deze tekst bewaren zodat hij geyankt +kan worden, terwijl dat niet geldt voor commando's die slechts een +enkel teken weghalen. en C-d zijn de eenvoudigste commando's om +tekst weg te halen, zonder argument. Met argument verwijderen ze en +kan de verwijderde tekst geyankt worden. >> Zet de cursor op het begin van een regel die niet leeg is. Tik C-k om de tekst op die regel te verwijderen. @@ -435,15 +424,22 @@ aangegeven aantal regels zal worden verwijderd, inclusief de inhoud. Dit is meer dan simpelweg herhaling: C-u 2 C-k verwijdert twee regels, terwijl tweemaal C-k tikken dat niet doet. -Om de laatst verwijderde tekst terug te halen naar de plaats waar de -cursor nu op staat (te yanken), tik C-y. +Het invoegen van de laatst verwijderde tekst heet yanken ("yanking"). +Je kan de tekst yanken op de plek waar je het verwijderde, op een +andere plek of zelfs in een ander bestand. Je kan dezelfde tekst +meerdere keren yanken; op deze manier maak je meerdere kopieën van +dezelfde tekst. Verwijderen ("killing") en yanken worden in andere +programma's ook wel knip ("cut") en plak ("paste") genoemd (zie ook de +Glossary in de Emacs-handleiding). + +Het commando om te yanken is C-y. Het voegt de laatst verwijderde +tekst in op de huidige cursorpositie. >> Probeer het nu: tik C-y om de tekst te yanken. -Het is alsof je met C-y iets uit de prullenbak haalt wat je net had -verwijderd. Merk op dat verschillende C-k's achter elkaar alle regels -die verwijderd worden, bij elkaar bewaart zodat een enkele C-y die -regels in een keer terugbrengt. +Als je meerdere keren C-k achter elkaar hebt gedaan, dan worden alle +verwijderde tekstregels samen onthouden, zodat een enkele C-y al die +regels in één keer invoegt. >> Probeer het nu: tik C-k een paar keer. @@ -468,7 +464,7 @@ verwijderde tekst. >> Verwijder een regel, beweeg de cursor wat, en verwijder nog een regel. Tik C-y om de tweede regel die je verwijderde, terug te - halen. Tik nog een M-y en die regel wordt vervangen door de eerste + halen. Tik M-y en die regel wordt vervangen door de eerste regel die je verwijderde. Tik nog enkele keren M-y en zie wat er langs komt. Herhaal dit tot de tweede regel weer langs komt, en dan nog een paar keer. Je kan ook experimenteren met positieve en @@ -479,39 +475,41 @@ verwijderde tekst. ------------ Als je de tekst veranderd hebt en je daar toch niet tevreden mee bent, -dan kan je de verandering ongedaan maken met het herstelcommando, C-x -u. +dan kan je de verandering ongedaan maken met het herstelcommando, C-/. -Normaal gesproken herstelt C-x u de veranderingen die het gevolg zijn -van een enkel commando; door herhaaldelijk C-x u te tikken, worden +Normaal gesproken herstelt C-/ de veranderingen die het gevolg zijn +van een enkel commando; door herhaaldelijk C-/ te tikken, worden steeds eerdere commando's hersteld. Er zijn echter twee uitzonderingen: commando's die de tekst niet -wijzigen, zoals cursorbewegingen, worden overgeslagen, en commando's -die simpelweg het ingetikte teken aan de tekst toevoegen, worden -meestal gegroepeerd in groepjes van maximaal 20 tekens, zodat je -minder vaak het commando C-x u hoeft te tikken om teksttoevoegingen te -herstellen. +wijzigen, zoals cursorbewegingen en scrollen, worden overgeslagen, en +commando's die simpelweg het ingetikte teken aan de tekst toevoegen, +worden meestal samengenomen in groepjes van maximaal 20 tekens. +(Hierdoor hoef je minder vaak C-/ te tikken om teksttoevoegingen te +herstellen.) ->> Gooi deze regel weg met C-k; met C-x u zou hij weer moeten - verschijnen. +>> Gooi deze regel weg met C-k; met C-/ zal hij weer verschijnen. -C-_ is een alternatief voor C-x u. Het levert exact hetzelfde -resultaat op, maar is makkelijker om een paar keer achter elkaar te -tikken. Een nadeel van C-_ is dat op sommige toetsenborden het -intikken ervan niet gebruiksvriendelijk is. Dat is ook de reden voor -het alternatief, C-x u. Op sommige terminals kan je C-_ tikken door -"/" te tikken terwijl je de CONTROL-toets ingedrukt houdt. +C-_ is een alternatief herstelcommando; het doet exact hetzelfde als +C-/. Op sommige terminals stuurt het tikken van C-/ in werkelijkheid +een C-_ naar Emacs. Nog een alternatief commando is C-x u, maar dit +is minder makkelijk te tikken. + +Een numeriek argument bij C-/, C-_ of C-x u duidt het aantal +herhalingen aan. + +Je kan het weghalen van tekst herstellen, net zoals je het verwijderen +ervan herstelt. Het verschil tussen iets verwijderen of weghalen is +of je het kan yanken met C-y. Voor het herstellen maakt het geen +verschil. -Een numeriek argument bij C-_ of C-x u duidt het aantal herhalingen -aan. * BESTANDEN ----------- Om een tekst die je gemaakt of veranderd hebt op te slaan, moet je de -tekst in een bestand stoppen ("to save a file" in het Engels). Als je +tekst in een bestand opslaan ("to save a file" in het Engels). Als je dat niet doet, ben je die veranderingen kwijt op het moment dat je Emacs verlaat. Je kan een bestand veranderen door het bestand te "bezoeken". (Ook wel "vinden"; "finding" of "visiting" in het @@ -526,8 +524,8 @@ als je het bestand opslaat, zorgt Emacs ervoor dat het originele bestand onder een gewijzigde naam nog steeds beschikbaar is, voor het geval je later besluit dat de veranderingen toch niet zo goed waren. -Bij de onderkant van het scherm zie je een regel die begint en eindigt -met streepjes, met aan het begin "-1:-- TUTORIAL.nl" of iets +Bij de onderkant van het scherm zie je een regel die begint +met streepjes, met aan het begin "-:-- TUTORIAL.nl" of iets dergelijks. Dit deel van het scherm laat normaal de naam van het bestand zien dat je op dat moment bezoekt. Op dit moment bezoek je een bestand dat "TUTORIAL.nl" heet; het is je eigen kopie van de @@ -537,16 +535,16 @@ op deze plaats. Iets bijzonders aan het commando om een bestand te bezoeken, is dat je aan moet geven welk bestand je wil. Dit heet dat het commando "een -argument van de gebruiker vraagt"; in dit geval de naam van het -bestand. Nadat je het commando +argument inleest"; in dit geval de naam van het bestand. Nadat je het +commando C-x C-f Bezoek bestand (met de f van "find file"). hebt getikt vraagt Emacs om de naam van het bestand. De naam die je intikt verschijnt op de onderste regel van het scherm. Wanneer die regel voor dit soort invoer gebruikt wordt, heet hij de minibuffer. -Je kan gewone Emacs commando's gebruiken om de bestandsnaam te -veranderen. +Je kan gewone Emacs commando's gebruiken om de bestandsnaam in te +geven. Tijdens het invoeren van de bestandsnaam (of om het even welke invoer in de minibuffer) kan je het commando afbreken met C-g. @@ -556,36 +554,38 @@ in de minibuffer) kan je het commando afbreken met C-g. Het resultaat is dat je geen bestand bezoekt. Als je de naam van een bestand hebt ingevoerd, tik dan om het -commando af te sluiten. Hierna gaat het C-x C-f commando aan het werk -en haalt het bestand op dat je aangegeven hebt. Als het C-x C-f -commando daarmee klaar is, verdwijnt de minibuffer. +commando af te sluiten. Hierna verdwijnt de minibuffer en gaat het +C-x C-f commando aan het werk: het haalt het bestand op dat je +aangegeven hebt. -Na korte tijd verschijnt de inhoud van het bestand op het scherm en -kan je de inhoud wijzigen. Als je de wijzigingen op wilt slaan, tik -dan het commando +De inhoud van het bestand verschijnt nu op het scherm en je kan de +inhoud wijzigen. Als je de wijzigingen op wilt slaan, tik dan het +commando C-x C-s Sla bestand op (met de s van "save file"). -Dit commando slaat de tekst zoals Emacs die nu heeft in het bestand -op. De eerste keer dat je dit doet, slaat Emacs het originele bestand -onder een andere naam op, zodat het niet verloren gaat. De nieuwe -naam bestaat uit de oude bestandsnaam gevolgd door een "~". +Dit commando slaat de tekst zoals Emacs die nu heeft op in het +bestand. De eerste keer dat je dit doet, slaat Emacs het originele +bestand onder een andere naam op, zodat het niet verloren gaat. De +nieuwe naam bestaat uit de oude bestandsnaam gevolgd door een "~". Als Emacs het bestand heeft opgeslagen, laat het de naam van het bestand zien. Het is een goede gewoonte een bestand regelmatig op te -slaan zodat er niet teveel werk verloren gaat als het systeem hangt of -crasht. +slaan zodat er niet teveel werk verloren gaat als het systeem crasht +(zie ook "Automatisch bewaren" hieronder). ->> Tik C-x C-s, om je kopie van deze inleiding op te slaan. Als het - goed is verschijnt "Wrote ...TUTORIAL.nl" op de onderste - schermregel. +>> Tik C-x C-s TUTORIAL.nl + Op deze manier sla je deze inleiding op in een bestand genaamd + TUTORIAL.nl. Als het goed is verschijnt "Wrote ...TUTORIAL.nl" op de + onderste schermregel. -Je kan een bestaand bestand bezoeken om het te bekijken of het te -wijzigen. Je kan ook een bestand bezoeken dat nog niet bestaat. Dit -is de manier om met Emacs een nieuw bestand te maken: bezoek het +Je kan een bestand dat al bestaat bezoeken om het te bekijken of het +te wijzigen. Je kan ook een bestand bezoeken dat nog niet bestaat. +Dit is de manier om met Emacs een nieuw bestand te maken: bezoek het bestand, dat eerst leeg zal zijn, en voeg tekst toe. Zodra je de -tekst opslaat, wordt het bestand werkelijk gecreëerd, met de tekst als -inhoud. Vanaf dat moment ben je dus bezig met een bestaand bestand. +tekst opslaat, wordt het bestand werkelijk gecreëerd, met de nieuwe +tekst als inhoud. Vanaf dat moment ben je dus bezig met een bestand +dat al bestaat. * BUFFERS @@ -594,28 +594,22 @@ inhoud. Vanaf dat moment ben je dus bezig met een bestaand bestand. Als je een tweede bestand bezoekt met C-x C-f, blijft het eerste bestand gewoon in Emacs. Je kan naar dat bestand terug door het gewoon nog een keer te bezoeken met C-x C-f. Op deze manier kan je -een behoorlijk aantal bestanden in Emacs krijgen. +een behoorlijk aantal bestanden in Emacs hebben. ->> Creëer een bestand dat "foo" heet door te tikken: C-x C-f foo - . Voeg hieraan wat tekst toe, wijzig hem, en sla "foo" op - door C-x C-s te tikken. Tik hierna C-x C-f TUTORIAL om - weer hier, in de inleiding, terug te komen. +Emacs onthoudt de tekst van elk bestand in een ding dat een "buffer" +heet. Als je een bestand bezoekt maakt Emacs een nieuwe buffer aan. +Om een lijst van de huidige buffers te zien, tik -Emacs bewaart intern de tekst van elk bestand in een ding dat een -"buffer" genoemd wordt. Als je een bestand bezoekt wordt er een -nieuwe buffer gemaakt. Om een lijst van de huidige buffers te zien, -tik - - C-x C-b Laat de bufferlijst zien + C-x C-b Toon de bufferlijst >> Probeer C-x C-b nu. -Bemerk dat elke buffer een naam heeft en mogelijk ook een -bestandsnaam; dit is de naam van het bestand waarmee de buffer -overeenkomt. ALLE tekst die je in een Emacs venster ziet is altijd -onderdeel van een of andere buffer. +Merk op dat elke buffer een naam heeft en mogelijk ook een +bestandsnaam: de naam van het bestand waarvan de inhoud in de buffer +zit. ALLE tekst die je in een Emacs venster ziet is altijd onderdeel +van een of andere buffer. ->> Tik C-x 1 om de bufferlijst te verwijderen. +>> Tik C-x 1 om de bufferlijst uit het zicht krijgen. Wanneer je met meerdere buffers werkt, dan is op elk moment slechts één van die buffers "actueel". De actuele buffer is degene die je aan @@ -626,26 +620,30 @@ opnieuw te bezoeken met C-x C-f. Er is ook een makkelijkere manier: gebruik het commando C-x b. Dit commando vraagt je naar de naam van de buffer. ->> Tik C-x b foo om terug te gaan naar de buffer "foo" die de - tekst van het bestand "foo" bevat. Tik vervolgens C-x b TUTORIAL - om terug te komen naar deze Emacs-inleiding. +>> Bezoek een bestand met de naam "foo" door te tikken: C-x C-f foo + . Tik vervolgens C-x b TUTORIAL om terug te komen + in deze Emacs-inleiding. Meestal is de naam van de buffer gelijk aan de naam van het bestand (minus de naam van de directory). Dit klopt echter niet altijd. De -lijst met buffers die je maakt met C-x C-b laat je altijd de naam van -elke buffer zien. +lijst met buffers die je maakt met C-x C-b laat je zowel de naam van +buffer als de bestandsnaam van alle buffers zien. ALLE tekst die je ziet in een venster van Emacs is altijd onderdeel van een of andere buffer. Sommige buffers komen niet overeen met een bestand. De buffer genaamd "*Buffer List*" heeft bijvoorbeeld geen -bijbehorend bestand. Deze buffer bevat de lijst met buffers die je -gemaakt hebt met C-x C-b. Ook de buffer "*Messages*" heeft geen -geassocieerd bestand; deze buffer bevat de mededelingen die Emacs je -op de onderste regel toonde. +bijbehorend bestand (deze buffer bevat de lijst met buffers die je +gemaakt hebt met C-x C-b). Deze TUTORIAL.nl-buffer had in het begin +ook geen bijbehorend bestand; nu heeft hij die wel omdat je eerder in +deze inleiding C-x C-s tikte om hem in een bestand op te slaan. + +Ook de buffer "*Messages*" hoort niet bij een bestand; deze buffer +bevat de mededelingen die Emacs op de onderste regel toonde tijdens +deze Emacs-sessie. >> Tik C-x b *Messages* om de buffer met mededelingen te - bekijken. Tik daarna weer C-x b TUTORIAL om terug te - keren naar deze buffer met de Emacs-inleiding + bekijken. Tik daarna weer C-x b TUTORIAL.nl om terug te + keren naar deze Emacs-inleiding. Als je de tekst van het ene bestand verandert en dan een ander bestand bezoekt, wordt het eerste bestand niet opgeslagen. De wijzigingen @@ -671,12 +669,12 @@ opgeslagen zijn, of je de buffer wilt bewaren. ------------------------ Er zijn veel meer Emacs commando's dan er op de toetsen van het -toetsenbord passen, zelfs als we hun aantal kunnen vergroten door de -CONTROL- of META-toets te gebruiken. Emacs lost dit probleem op met -het X commando (met de X van eXtensie of uitbreiding). Het X commando -komt voor in twee smaken: +toetsenbord passen, zelfs als we hun aantal vergroten door de CONTROL- +of de META-toets te gebruiken. Emacs lost dit probleem op met het X +commando (met de X van eXtensie of uitbreiding). Het X commando kent +twee smaken: - C-x Tekenuitbreiding. Gevolgd door een teken. + C-x Tekenuitbreiding. Wordt gevolgd door een teken. M-x Commando-naam-uitbreiding. Wordt gevolgd door een naam. Deze commando's zijn in het algemeen nuttig, maar worden minder @@ -686,29 +684,24 @@ bezoeken en C-x C-s om het te bewaren, bijvoorbeeld. Een ander voorbeeld is het commando om Emacs te verlaten: dit is C-x C-c. (Maak je geen zorgen over het verloren gaan van veranderingen die niet opgeslagen zijn; C-x C-c vraagt of je veranderde buffers wilt bewaren -voordat Emacs helemaal eindigt.) +voordat Emacs helemaal stopt.) + +Als je een grafisch scherm gebruikt heb je geen commando's nodig om +van Emacs naar een andere applicatie te gaan. Je gebruikt dat de muis +of commando's van de vensterbeheerder. Als je Emacs gebruikt in een +tekstvenster of terminal, die maar één applicatie tegelijkertijd kan +laten zien, moet je Emacs tijdelijk verlaten om naar een andere +applicatie te gaan. C-z is het commando om Emacs *tijdelijk* te verlaten, zodat je daarna -weer terug kan keren in dezelfde Emacs-sessie. - -Op systemen die deze mogelijkheid bieden, zet C-z Emacs stil: je komt -weer terug in de shell, maar Emacs is nog aanwezig. In de meeste -shells kan je Emacs weer activeren met het "fg" commando, of met -"%emacs". - -Op systemen die niet de mogelijkheid bieden om programma's stil te -zetten, creëert C-z een subshell onder Emacs om je zo in de -gelegenheid te stellen andere programma's uit te voeren en daarna weer -in Emacs terug te keren; Emacs wordt dus niet werkelijk verlaten. In -dit geval is het shellcommando "exit" de normale manier om de subshell -te verlaten en in Emacs terug te keren. +weer terug kan keren naar dezelfde Emacs-sessie. Als je Emacs in een +tekstvenster op terminal gebruikt, zet C-z Emacs stil: je komt weer +terug in de shell, maar Emacs is nog aanwezig. In de meeste shells +kan je Emacs weer activeren met het "fg" commando, of met "%emacs". Het moment om C-x C-c te gebruiken is wanneer je uit gaat loggen. Het is ook het juiste commando om Emacs te beëindigen wanneer Emacs -opgestart was door een mail-programma of iets dergelijks, aangezien -die misschien niet met een stilgezette Emacs om kunnen gaan. Normaal -gezien is het echter beter Emacs stil te zetten met C-z dan om Emacs -te verlaten, behalve als je uit wilt loggen natuurlijk. +opgestart was door een mail-programma of iets dergelijks. Er bestaan vele C-x commando's. Hier is een lijst van degene die je nu al kent: @@ -722,14 +715,15 @@ nu al kent: C-x 1 Een enkel venster C-x u Herstel -Commando-naam-bevelen worden nog minder vaak gebruikt, of alleen onder -bepaalde omstandigheden. Een voorbeeld is het commando +Commando-naam-commando's worden nog minder vaak gebruikt, of alleen +onder bepaalde omstandigheden. Een voorbeeld is het commando replace-string, dat in de hele tekst een string vervangt door een andere string ("to replace" betekent "vervangen"). Als je M-x tikt, toont Emacs onderaan het scherm "M-x" en moet je de naam van het commando intikken, in dit geval "replace-string". Als je gewoon -"repl s" tikt maakt Emacs de naam zelf af. Beëindig het commando -met . +"repl s" tikt maakt Emacs de naam zelf af. ( is de +Tab-toets, die meestal boven de CapsLock of Shift-toets zit aan de +linkerkant van het toetsenbord.) Beëindig het commando met . Het replace-string commando heeft twee argumenten nodig: de string die vervangen moet worden en de string waarmee die vervangen moet worden. @@ -739,14 +733,14 @@ Je sluit elk argument af met . Tik dan M-x repl sgewijzigdveranderd. Zie hoe deze regel daardoor gewijzigd is. Je hebt elk voorkomen - van het woord g-e-w-i-j-z-i-g-d vervangen door "veranderd"; te - beginnen op de plek waar de cursor staat. + van het woord g-e-w-i-j-z-i-g-d vervangen door "veranderd", te + beginnen op de plek waar de cursor stond. * AUTOMATISCH BEWAREN --------------------- -Als je een bestand veranderd hebt maar het nog niet opgeslagen hebt, +Als je een bestand veranderd hebt maar je hebt het nog niet opgeslagen, zouden de veranderingen verloren kunnen gaan als het systeem zou hangen of herstarten. Om je hiertegen te beschermen, slaat Emacs regelmatig de veranderde tekst automatisch op. De naam van het @@ -767,21 +761,22 @@ teruggehaald. * ECHO-GEBIED ------------- -Als je een commando langzaam intikt, toont Emacs de tekens aan de -onderkant van het scherm in een deel dat het "echo-gebied" genoemd -wordt. Dit gebied omvat de onderste regel van het scherm. +Als je een commando dat uit meerdere tekens bestaat langzaam intikt, +toont Emacs de tekens onderin het scherm in een deel dat het +"echo-gebied" genoemd wordt. Dit gebied omvat de onderste regel van +het scherm. * MODUS-REGEL ------------- -De regel direct boven het echo gebied heet de "modusregel". De +De regel direct boven het echo-gebied heet de "modusregel". De modusregel ziet er ongeveer zo uit: --1:** TUTORIAL.nl 62% L763 (Fundamental)----------------------- +-1:** TUTORIAL.nl 63% L776 (Fundamental)----------------------- -Deze regel geeft interessante informatie over Emacs en de tekst die je -aan het bewerken bent. +Deze regel geeft nuttige informatie over Emacs en de tekst die je aan +het bewerken bent. Je weet al wat de bestandsnaam betekent: het is de naam van het bestand dat je bezoekt. NN% geeft je huidige positie in de tekst aan: @@ -792,8 +787,8 @@ van " 0%". Als het laatste stuk tekst op het scherm staat, zal er tekst zo klein is dat hij volledig op het scherm past staat "All" in de modus-regel. -De L gevolgd door een getal geeft het nummer van de regel waarin punt -zich bevindt. +De L gevolgd door een getal geeft het regelnummer aan waar punt zich +bevindt. De sterretjes aan het begin betekenen dat je de tekst veranderd hebt. Direct na het bezoeken of opslaan staan er gewoon streepjes. @@ -805,8 +800,8 @@ heet een hoofdmodus ("major mode" in het Engels). Emacs heeft verschillende hoofdmodi. Sommige daarvan zijn bedoeld voor het bewerken van verschillende talen of soorten tekst, zoals -bijvoorbeeld Lisp modus, Text modus, etc. Op elk moment is er altijd -precies een modus actief, en de naam daarvan staat in de modusregel, +bijvoorbeeld Lisp-modus, Text-modus, etc. Op elk moment is er altijd +precies één modus actief, en de naam daarvan staat in de modusregel, op de plaats waar nu "Fundamental" staat. Elke hoofdmodus zorgt ervoor dat sommige commando's zich anders @@ -818,17 +813,17 @@ een uitgebreid commando, en met dat commando schakel je om naar die hoofdmodus. Zo is bijvoorbeeld M-x fundamental-mode het commando om naar de basismodus om te schakelen. -Als je Nederlandse of Engelse tekst wil gaan bewerken, zoals -bijvoorbeeld dit bestand, kan je beter "Text mode" gebruiken, de modus -om tekst in een gewone taal te bewerken: +Als je Nederlandse of Engelse tekst gaat bewerken, zoals bijvoorbeeld +dit bestand, kan je beter "Text mode" gebruiken, de modus om tekst in +een gewone taal te bewerken: ->> Tik M-x text-mode. +>> Tik M-x text-mode . -Wees gerust; geen van de commando's die je geleerd hebt zorgen voor -grondige veranderingen in Emacs. Een van de dingen die je kan merken, -is bijvoorbeeld dat M-f en M-b nu apostrofs als onderdeel van een -woord beschouwen. In de vorige modus (Fundamental) behandelen M-f en -M-b de apostrof als ruimte tussen twee woorden. +Wees gerust; geen van de commando's die je geleerd hebt gaan zich nu +echt anders gedragen. Een van de dingen die je kan merken, is +bijvoorbeeld dat M-f en M-b nu apostrofs als onderdeel van een woord +beschouwen. In de vorige modus (Fundamental) behandelen M-f en M-b de +apostrof als ruimte tussen twee woorden. Het is gebruikelijk dat hoofdmodi dergelijke subtiele verschillen hebben. De meeste commando's doen dus min of meer hetzelfde in elke @@ -837,8 +832,7 @@ hoofdmodus. Met het commando C-h m kan je de documentatie over de huidige hoofdmodus lezen. ->> Gebruik C-u C-v een paar keer om deze zin in de buurt van de - bovenkant van het scherm te krijgen. +>> Gebruik C-l C-l om deze regel bovenin het scherm te krijgen. >> Tik C-h m om te zien hoe de tekstmodus verschilt van de basismodus. >> Tik C-x 1 om de documentatie van het scherm te verwijderen. @@ -855,26 +849,27 @@ automatisch uitvullen). Wanneer deze modus aanstaat, breekt Emacs automatisch een regel tussen twee woorden af als de regel te lang wordt. -Je kan Auto Fill modus aanzetten met M-x auto-fill-mode. Als -deze modus al aanstaat, kan je hem uitzetten met M-x -auto-fill-mode. Als de modus uitstaat, zet dit commando de -modus aan; als ze aanstaat, zet dit commando de modus uit. We zeggen -dat het commando de modus "schakelt" ("to toggle" in het Engels). +Je kan Auto Fill modus aanzetten met M-x auto-fill-mode . Als +deze modus al aanstaat, kan je hem uitzetten met +M-x auto-fill-mode . Als de modus uitstaat, zet dit commando +de modus aan; als ze aanstaat, zet dit commando de modus uit. We +zeggen dat het commando de modus "schakelt" ("to toggle" in het +Engels). >> Tik nu M-x auto-fill-mode. Tik nu vele malen "asdf " op - een regel zodat je kan zien dat de regel in tweeën gesplitst wordt. + een regel totdat je ziet dat de regel in tweeën gesplitst wordt. Er moeten wel spaties tussen de woorden staan, omdat de Auto Fill modus de regel alleen op spaties breekt. De rechterkantlijn staat meestal op 70 tekens, maar die kan je -veranderen met het C-x f commando. Dit commando accepteert een -numeriek argument om de gewenste kantlijn te verkrijgen. +veranderen met het C-x f commando. Dit commando accepteert de +gewenste kantlijn als numeriek argument. >> Tik C-x f met 20 als argument (C-u 20 C-x f). Tik wat tekst en zie dat Emacs de regels afbreekt bij 20 tekens. - Zet de kantlijn nu terug op 70, dus met met C-u 70 C-x f. + Zet de kantlijn nu terug op 70, met C-u 70 C-x f. -Als je de tekst midden in een regel verandert vult Auto Fill modus de +Als je de tekst midden in een regel verandert, vult Auto Fill modus de regel niet opnieuw. Om een alinea opnieuw te vullen, tik M-q (META-q) terwijl de cursor in de alinea staat. @@ -890,13 +885,12 @@ cursorpositie, als eraan voorafgaand. Het zoeken naar een string verplaatst de cursor naar de volgende plaats waar de gezochte string voorkomt. -Het zoekcommando van Emacs is anders dan de zoekcommando's van de -meeste tekstverwerkers; het zoekt incrementeel. Dit betekent dat het +Het zoekcommando van Emacs zoekt incrementeel. Dit betekent dat het zoeken gebeurt tijdens het intikken van de gezochte string. Het commando om het voorwaarts zoeken te starten is C-s (met de "s" van "to search", zoeken); C-r start het achterwaarts zoeken (met de -"r" van "reverse" of achteruit). MAAR WACHT! Probeer ze nu nog niet. +"r" van "reverse" of achteruit). WACHT! Probeer ze nu nog niet. Als je C-s tikt verschijnt de string "I-search" in het echo-gebied. Dit betekent dat Emacs bezig is met een "incremental search" @@ -909,7 +903,7 @@ zoekstring. be woord "cursor" gezocht. >> Tik nogmaals C-s, om naar het volgende voorkomen van het woord "cursor" te zoeken. ->> Tik nu viermaal en let op de cursorbewegingen. +>> Tik nu viermaal en let op de cursorbewegingen. >> Tik om het zoeken te beëindigen. Zag je wat er gebeurde? Tijdens incrementeel zoeken probeert Emacs @@ -919,23 +913,17 @@ keer. Als er geen volgende plek is gevonden, biept Emacs en vertelt je dat de zoekopdracht niets gevonden heeft ("failing" in het Engels). C-g zou het zoeken ook afbreken. -OPMERKING: Op sommige systemen gebeurt er helemaal niets als je C-s -tikt, en daarna ook niets meer. Dit komt door een eigenschap van de -machine waarop je werkt die te maken heeft met "flow control". Met -C-s stopt de "flow" en komt niets meer van wat je tikt bij Emacs -terecht. Om deze situatie te herstellen, tik C-q. Lees daarna het -hoofdstuk "Spontaneous Entry to Incremental Search" in het -Emacs-handboek over hoe je moet omgaan met deze situatie. - -Als je tijdens incrementeel zoeken tikt, zal je zien dat het -laatste teken dat je aan de zoekstring toegevoegd hebt, weggehaald -wordt en dat het zoeken teruggaat naar de voorgaande plaats. Als je -bijvoorbeeld begint met zoeken en je tikt een "c", dan ga je naar de -plaats waar de "c" het eerst voorkomt. Tik je vervolgens een "u", dan -gaat de cursor naar de plaats waar de string "cu" het eerst voorkomt. -Als je nu tikt, dan wordt de "u" van de zoekstring -afgehaald, en gaat de cursor terug naar de plaats waar hij stond -voordat je de "u" intikte, namelijk daar waar "c" het eerst voorkwam. +Als je tijdens incrementeel zoeken tikt, dan gaat het zoeken +terug naar de vorige plek. Als je tikt nadat je C-s hebt getikt +om naar een volgende plaats te gaan waar de zoekstring voorkomt, zal + de cursor terug laten gaan naar de vorige plaats. Als er geen +vorige plaats is verwijdert het laatste karakter van de +zoekstring. Als je bijvoorbeeld begint met zoeken en je tikt een "c", +dan ga je naar de plaats waar de "c" het eerst voorkomt. Tik je +vervolgens een "u", dan gaat de cursor naar de eerstvolgende plaats +waar de string "cu" het eerst voorkomt. Tik nu en de "u" wordt +van de zoekstring afgehaald en de cursor gaat terug naar de plaats +waar "c" het eerst voorkwam. Als je tijdens een zoekoperatie een CONTROL- of META-teken intikt, dan wordt het zoeken beëindigd. Er zijn een paar uitzonderingen, namelijk @@ -944,18 +932,20 @@ C-r. Met C-s begin je te zoeken naar de plaats waar de zoekstring voor het eerst voorkomt NA de huidige cursorpositie. Als je iets wilt zoeken -dat eerder in de tekst moet voorkomen, gebruik dan C-r in plaats van -C-s. Alles wat we nu weten over C-s geldt ook voor C-r, alleen is de -zoekrichting omgedraaid. +dat eerder in de tekst moet voorkomen, gebruik dan C-r. Alles wat we +nu weten over C-s geldt ook voor C-r, alleen is de zoekrichting +omgedraaid. * MEERDERE VENSTERS ------------------- Een van Emacs' aardige eigenschappen is dat je meerdere vensters op -het scherm kan laten zien. +het scherm kan laten zien. (Merk op dat wat Emacs "frames" noemt in +andere systemen "vensters" genoemd wordt. Zie de Woordenlijst van +Emacs-termen (Glossary of Emacs terms) in de Emacs-handleiding.) ->> Zet de cursor op deze regel en tik C-u 0 C-l. +>> Zet de cursor op deze regel en tik C-l C-l. >> Tik C-x 2 om het scherm in twee vensters op te splitsen. Beide vensters laten deze inleiding zien; de cursor blijft in het @@ -966,19 +956,20 @@ het scherm kan laten zien. >> Tik C-x o (met de o van "other"; "ander" in het Nederlands) om de cursor naar het andere venster te verplaatsen. - >> Verschuif de tekst in het onderste venster, met C-v en M-v. - Zorg ervoor dat je deze inleiding in het bovenste venster leest. + Deze inleiding kan je blijven lezen in het bovenste venster. >> Tik weer C-x o om de cursor weer in het bovenste venster te zetten. De cursor staat weer precies op de plaats waar hij stond toen je het venster verliet. Je kan C-x o blijven gebruiken om van venster naar venster te gaan. -Elk venster heeft zijn eigen cursorpositie; de cursor is altijd enkel -zichtbaar in een daarvan. Alle normale commando's hebben betrekking -op het venster waarin de cursor staat. Dit venster is het -"geselecteerde venster" ("selected window" in het Engels). +Het "geselecteerde venster" ("selected windows" in het Engels), waar +de meeste bewerkingen plaatsvinden, is die met die vette cursor die +knippert als je niet aan het tikken bent. De andere vensters hebben +hun eigen cursorposities. Als je Emacs gebruikt op een grafisch +scherm, dan zijn de cursors in die andere venters niet-gevulde +rechthoekjes die niet knipperen. Het C-M-v commando is erg nuttig wanneer je tekst aan het bewerken bent in het ene venster, terwijl je het andere venster als referentie @@ -986,28 +977,29 @@ gebruikt. Je kan de cursor dan altijd in het venster houden waarin je bezig bent, terwijl je met C-M-v door de tekst in het andere venster loopt. -C-M-v is een voorbeeld van een CONTROL-META teken. Als je een echte -META-toets hebt kan je C-M-v intikken door zowel CONTROL als META -ingedrukt te houden terwijl je v tikt. Het maakt niet uit in welke -volgorde je CONTROL en META indrukt; het gaat erom welke toetsen -ingedrukt zijn terwijl je tikt. +C-M-v is een voorbeeld van een CONTROL-META teken. Als je een +META-toets (of Alt-toets) hebt kan je C-M-v intikken door zowel +CONTROL als META ingedrukt te houden terwijl je v tikt. Het maakt +niet uit in welke volgorde je CONTROL en META indrukt; het gaat erom +welke toetsen ingedrukt zijn terwijl je tikt. Als je geen echte META-toets hebt kan je gebruiken; de volgorde is dan wel belangrijk. Je moet dan eerst tikken, gevolgd door CONTROL-v; CONTROL- v zal niet werken. Dit komt doordat -zelf een teken is, terwijl CONTROL en META dat niet zijn. +zelf een teken is, terwijl CONTROL en META dat niet zijn: dat zijn +"modifiers" (Engels). >> Tik C-x 1 (in het bovenste venster) om het onderste venster te laten verdwijnen. (Als je C-x 1 tikt in het onderste venster laat je het bovenste -verdwijnen. C-x 1 betekent zoveel als "ik wil maar 1 venster, en wel -dat venster waar de cursor nu in staat.") +verdwijnen. C-x 1 betekent zoveel als "ik wil maar 1 venster, +en wel het venster waar ik nu ben.") Je hoeft niet dezelfde buffer in beide vensters te hebben. Wanneer je C-x C-f gebruikt om een bestand in één van de vensters te bezoeken, -zal het andere venster niet veranderen. Je kunt de vensters -onafhankelijk van elkaar gebruiken om bestanden te bezoeken. +verandert het andere venster niet. Je kunt de vensters onafhankelijk +van elkaar gebruiken om bestanden te bezoeken. Hier is nog een manier om twee venster te krijgen die elk een andere tekst laten zien: @@ -1020,6 +1012,32 @@ tekst laten zien: het onderste venster te laten verdwijnen. +* MEERDERE FRAMES +----------------- + +Emacs kan meerdere zogeheten frames maken. Een frame bestaat uit +vensters, menu's, scrollbalken, echo-gebied, etc. Op grafische +schermen is een Emacs-frame wat andere applicaties meestal een venter +(of een "window" in het Engels, vgl. Windows) noemen. Meerdere +grafische frames kunnen tegelijk op het scherm getoond worden. Een +tekstterminal kan maar één frame tegelijkertijd tonen. + +>> Tik M-x make-frame . + Een nieuw frame verschijnt op het scherm. + +In het nieuwe frame kan je alles doen wat je ook in het eerste frame +kon doen. Het eerste frame is niet speciaal. + +>> Tik M-x delete-frame . + Het actieve frame verdwijnt. + +Je kan een frame ook laten verdwijnen op de manier die gebruikelijk is +voor het grafische systeem dat je gebruikt, vaak door de button te +klikken in een van de bovenhoek van het frame die gemarkeerd is met +een "X". Als je Emacs' laatste frame op deze manier laat verdwijnen, +dan sluit je Emacs af. + + * RECURSIEVE BEWERKINGSNIVEAUS ------------------------------ @@ -1029,11 +1047,11 @@ aan de vierkante haken die om de haakjes van de naam van de hoofdmodus staan. Dan staat er bijvoorbeeld [(Fundamental)] in plaats van (Fundamental). -Tik Om uit een recursief bewerkingsniveau te komen. +Tik om uit een recursief bewerkingsniveau te komen. Dit is een algemeen "ontsnappingscommando". Je kan het ook gebruiken om extra vensters te verwijderen of om uit de minibuffer te komen. ->> Tik M-x om in een minibuffer te komen, en tik dan +>> Tik M-x om in een minibuffer te komen; tik dan om er weer uit te komen. C-g is niet bruikbaar om uit een recursief bewerkingsniveau te komen. @@ -1048,9 +1066,9 @@ We hebben geprobeerd je met deze inleiding precies genoeg informatie te leveren om met Emacs te beginnen werken. De mogelijkheden van Emacs zijn zo groot dat het onmogelijk is nu alles uit te leggen. Het kan zijn dat je meer over Emacs wil leren omdat het zoveel nuttige -mogelijkheden heeft. Emacs heeft commando's om documentatie te laten -zien over Emacs commando's. Deze "helpcommando's" beginnen allemaal -met C-h: "het Hulpteken". +mogelijkheden heeft. Emacs heeft commando's om documentatie te lezen +over Emacs commando's. Deze "helpcommando's" beginnen allemaal met +C-h: "het Hulpteken". Om hulp te krijgen tik je C-h, gevolgd door een teken om aan te duiden welke hulp je wilt. Als je het echt niet meer weet, tik C-h ? en @@ -1058,12 +1076,8 @@ Emacs vertelt welke hulp het allemaal te bieden heeft. Als je C-h hebt getikt maar van gedachten veranderd bent, tik je gewoon C-g om het af te breken. -(In sommige installaties wordt de betekenis van C-h veranderd. Dat is -geen goed idee, zeker als die verandering op alle gebruikers invloed -heeft, en is een geldige reden om je beklag te doen bij de -systeembeheerder of de helpdesk. Als C-h intussen niet een bericht -onderaan het scherm laat zien over mogelijke hulp, probeer dan de F1 -toets (functietoets 1) of gebruik M-x help .) +(Als C-h niet een bericht onderaan het scherm laat zien over mogelijke +hulp, probeer dan functietoets F1 of gebruik M-x help .) De eenvoudigste hulp is C-h c. Tik C-h, het teken "c" en een teken of uitgebreid commando, en Emacs laat een zeer korte beschrijving van het @@ -1077,15 +1091,13 @@ De beschrijving die getoond wordt, zou zoiets moeten zijn als: (Nederlands: C-p voert het commando previous-line uit.) -Dit commando vertelt je "de naam van de functie". Functies worden -vooral gebruikt om Emacs uit te breiden of aan de wensen van de -gebruiker aan te passen. Aangezien functienamen gekozen zijn om aan -te geven wat de functie doet, zijn ze ook geschikt als heel korte -documentatie; genoeg om je te herinneren aan wat de commando's die je -al geleerd hebt betekenen. +Dit commando vertelt je "de naam van de functie". Aangezien +functienamen gekozen zijn om aan te geven wat de functie doet, zijn ze +ook geschikt als heel korte documentatie; genoeg om je te herinneren +aan wat de commando's die je al geleerd hebt betekenen. Uitgebreide commando's zoals C-x C-s en (als je geen META-, EDIT- of -ALT-toets hebt) v kunnen ook getikt worden na C-h c. +ALT-toets hebt) v kunnen ook getikt worden na C-h c. Om meer informatie over een commando te krijgen, tik C-h k in plaats van C-h c. @@ -1095,15 +1107,15 @@ van C-h c. Dit laat de documentatie van de functie, inclusief de naam van de functie, in een apart venster zien. Als je klaar bent met lezen, tik C-x 1 om van dat venster af te komen. Je hoeft dat natuurlijk niet -meteen te doen. Je kan ook eerst wat anders doen voordat je C-x 1 -tikt. +meteen te doen. Je kan ook eerst wat tekst bewerken (en de helptekst +lezen) voordat je C-x 1 tikt. Hier zijn nog wat nuttige mogelijkheden van C-h: C-h f Beschrijf een functie. Je moet de naam van de functie intikken. ->> Tik C-h f previous-line +>> Tik C-h f previous-line Dit laat alle informatie zien die Emacs heeft over de functie die het C-p commando implementeert. @@ -1118,24 +1130,24 @@ Het commando vraagt je om de naam van een variabele. welke tekens dit commando direct uitgevoerd kan worden. ->> Tik C-h a file. +>> Tik C-h a file . Dit laat in een ander venster alle M-x commando's zien met "file" in hun naam. Je zal teken-commando's zien als C-x C-f naast de overeenkomende commandonaam zoals find-file. >> Tik C-M-v herhaaldelijk om de tekst in het hulpvenster te - verschuiven. + scrollen. >> Tik C-x 1 om het hulpvenster te verwijderen. - C-h i Lees de online handleidingen (ook wel Info genoemd). + C-h i Lees de handleidingen (ook wel Info genoemd). Dit commando zet je in een speciale buffer genaamd - "*info*" waar je online handleidingen kunt lezen van - software die op je computer is geïnstalleerd. Tik m - Emacs om de handleiding van Emacs te lezen. - Als je nog nooit Info hebt gebruikt dan kun je ? - tikken zodat Emacs je een rondleiding geeft langs de + "*info*" waar je handleidingen kunt lezen van + software die op je computer is geïnstalleerd. + Tik m Emacs om de handleiding van Emacs te + lezen. Als je nog nooit Info hebt gebruikt dan kun je + ? tikken zodat Emacs je een rondleiding geeft langs de mogelijkheden van het Info systeem. Wanneer je klaar bent met deze Emacs-inleiding dan kun je de Emacs-Info-handleiding gebruiken als je primaire bron @@ -1146,30 +1158,31 @@ overeenkomende commandonaam zoals find-file. -------------------- Je kunt meer over Emacs leren door haar handleiding te lezen. Deze is -zowel als boek als in elektronische vorm via Info beschikbaar (gebruik -het Help menu of tik h r). Kijk bijvoorbeeld eens naar -"completion", hetgeen minder tikwerk oplevert, of "dired" wat het -omgaan met bestanden vereenvoudigt. +zowel als boek als in in Emacs beschikbaar (gebruik het Help menu of +tik C-h r). Kijk bijvoorbeeld eens naar "completion", wat minder +tikwerk oplevert, of "dired" wat het omgaan met bestanden +vereenvoudigt. -"Completion" (of "afmaken", in het Nederlands) is een manier om -onnodig tikwerk te voorkomen. Als je bijvoorbeeld naar de -"*Messages*" buffer wilt omschakelen, dan kun je C-x b *M tikken -en dan zal Emacs de rest van de buffernaam invullen voor zover dit -mogelijk is. Completion staat beschreven in de node "Completion" in -de Emacs-Info-handleiding. +"Completion" ("afmaken" in het Nederlands) is een manier om onnodig +tikwerk te voorkomen. Als je bijvoorbeeld naar de "*Messages*" buffer +wilt omschakelen, dan kun je C-x b *M tikken en dan zal Emacs de +rest van de buffernaam invullen voor zover dit mogelijk is gegeven wat +je al getikt had. Completion staat beschreven in de node "Completion" +in de Emacs-Info-handleiding. -"Dired" toont je een lijst van bestanden in een directory, waarmee je -gemakkelijk bestanden kunt bezoeken, van naam kunt veranderen, kunt -wissen, of andere acties op uit kunt voeren. Informatie over Dired -kun je vinden in de node "Dired" van de Emacs-Info-handleiding. +"Dired" toont je een lijst van bestanden in een directory (en als je +wilt ook subdirectories), waarmee je gemakkelijk bestanden kunt +bezoeken, van naam kunt veranderen, kunt wissen, of andere acties op +uit kunt voeren. Informatie over Dired kun je vinden in de node +"Dired" van de Emacs-Info-handleiding. + +De handleiding beschrijft ook vele andere Emacs-features. * CONCLUSIE ----------- -Denk eraan dat je met C-x C-c Emacs permanent verlaat. Om tijdelijk -een shell te krijgen en daarna weer in Emacs terug te komen, tik je -C-z. +Denk eraan dat je Emacs verlaat met C-x C-c. De bedoeling van deze inleiding is dat ze begrijpelijk is voor alle nieuwe Emacs-gebruikers. Als je dus iets onduidelijks bent @@ -1183,60 +1196,68 @@ Doe je beklag! (De Engelse versie van) deze inleiding is voorafgegaan door een lange reeks van Emacs-inleidingen, die begon met de inleiding die Stuart Cracraft schreef voor de originele Emacs. Deze Nederlandse vertaling -is gemaakt door Pieter Schoenmakers op basis -van de GNU Emacs 20.2 TUTORIAL, en nagezien en verbeterd door Frederik -Fouvry en Lute Kamstra. +is gemaakt door Pieter Schoenmakers met +verbeteringen en correcties door Frederik Fouvry en Lute Kamstra. (Wat nu volgt is een vertaling naar het Nederlands van de condities voor gebruik en verspreiding van deze inleiding. Deze vertaling is niet gecontroleerd door een jurist. Er kunnen derhalve geen rechten -aan de vertaling worden ontleend, en de vertaling wordt gevolgd door -het Engelse origineel.) +aan de vertaling worden ontleend. Na de vertaling volgt het Engelse +origineel.) -Deze versie van de inleiding valt onder copyright, net als GNU Emacs. -Je mag deze inleiding verspreiden onder bepaalde voorwaarden: +Deze versie van de inleiding is onderdeel van GNU Emacs. Het valt +onder copyright. Je mag deze inleiding verspreiden onder bepaalde +voorwaarden: -Copyright (C) 1985, 1996-1997, 2001-2012 Free Software Foundation, Inc. + Copyright (C) 1985, 1996, 1998, 2001-2012 Free Software Foundation, Inc. - Iedereen mag letterlijke kopieën van dit document, zowel ontvangen - als verspreiden, op elk medium, vooropgesteld dat de - copyrightvermelding en de toestemmingsmelding niet veranderd worden - en dat de verspreider aan de ontvanger dezelfde distributierechten - verleent als aan hem verleend worden door deze melding. + Dit bestand is onderdeel van GNU Emacs. - Toestemming wordt verleend om veranderde versies van dit document, - of delen daarvan, te verspreiden, onder bovenstaande voorwaarden, - vooropgesteld dat ze ook duidelijk vermelden wie als laatste - veranderingen aangebracht heeft. + GNU Emacs is vrije software: iedereen mag het verspreiden en/of + modificeren onder de voorwaarden van de GNU General Public License + ("algemene publieke licentie") zoals die gepubliceerd wordt door de + Free Software Foundation, versie 3 of, zo je wilt, een latere + versie. -De condities voor het kopiëren van Emacs zelf zijn ingewikkelder dan -dit, maar gebaseerd op dezelfde gedachte. Lees het bestand COPYING en -geef vervolgens kopieën van Emacs aan al je vrienden. Help bij het -uitroeien van softwarebeschermingspolitiek ("eigendom") door vrije -software te gebruiken, te schrijven en te delen! + GNU Emacs wordt verspreid met de bedoeling dat het nuttig zal zijn, + maar ZONDER ENIGE GARANTIE; zonder zelfs de impliciete garantie van + verkoopbaarheid of geschiktheid voor een specifiek doel. De GNU + General Public License bevat meer informatie. -(Engels origineel van de copyrightmelding en condities: + Je zou de GNU General Public License moeten hebben ontvangen als + onderdeel van GNU Emacs. Als dat niet het geval is, ga naar + www.gnu.org/licenses. -This version of the tutorial, like GNU Emacs, is copyrighted, and -comes with permission to distribute copies on certain conditions: +Lees het bestand COPYING en geef daarna kopieën van Emacs aan al je +vrienden. Help bij het uitroeien van softwarebeschermingspolitiek +("eigendom") door vrije software te gebruiken, te schrijven en te +delen! -Copyright (C) 1985, 1996-1997, 2001-2012 Free Software Foundation, Inc. +Engels origineel van de copyrightmelding en condities: - Permission is granted to anyone to make or distribute verbatim - copies of this document as received, in any medium, provided that - the copyright notice and permission notice are preserved, and that - the distributor grants the recipient permission for further - redistribution as permitted by this notice. +This version of the tutorial is a part of GNU Emacs. It is copyrighted +and comes with permission to distribute copies on certain conditions: - Permission is granted to distribute modified versions of this - document, or of portions of it, under the above conditions, - provided also that they carry prominent notices stating who last - altered them. + Copyright (C) 1985, 1996, 1998, 2001-2012 Free Software Foundation, Inc. -The conditions for copying Emacs itself are more complex, but in the -same spirit. 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!) + This file is part of GNU Emacs. + + GNU Emacs is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + GNU Emacs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU Emacs. If not, see . + +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! ;;; Local Variables: ;;; coding: latin-1 diff --git a/etc/tutorials/TUTORIAL.ru b/etc/tutorials/TUTORIAL.ru index 16bf56a12d8..0d7405eb1e6 100644 --- a/etc/tutorials/TUTORIAL.ru +++ b/etc/tutorials/TUTORIAL.ru @@ -1,1132 +1,1109 @@ -õÞÅÂÎÉË Emacs. õÓÌÏ×ÉÑ ËÏÐÉÒÏ×ÁÎÉÑ ÐÒÉ×ÅÄÅÎÙ × ËÏÎÃÅ ÆÁÊÌÁ. +Учебник Emacs. УÑÐ»Ð¾Ð²Ð¸Ñ Ñ€Ð°ÑпроÑÑ‚Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð²ÐµÐ´ÐµÐ½Ñ‹ в конце файла. -äÌÑ ÕÐÒÁ×ÌÅÎÉÑ Emacs'ÏÍ ÏÂÙÞÎÏ ÉÓÐÏÌØÚÕÅÔÓÑ ËÌÀÞ (key -- ÓÏÞÅÔÁÎÉÅ ËÌÁ×ÉÛ -ËÌÁ×ÉÁÔÕÒÙ É/ÉÌÉ ËÎÏÐÏË ÍÙÛÉ), ×ËÌÀÞÁÀÝÉÊ × ÓÅÂÑ ËÌÁ×ÉÛÕ CONTROL (ÉÎÏÇÄÁ -ÏÔÍÅÞÁÅÍÁÑ ËÁË CTRL ÉÌÉ CTL) ÉÌÉ ËÌÁ×ÉÛÕ META (ÉÎÏÇÄÁ ÐÏÍÅÞÅÎÎÕÀ ËÁË ALT ÉÌÉ -EDIT). ÷ ÄÁÌØÎÅÊÛÅÍ, ×ÍÅÓÔÏ ÔÏÇÏ, ÞÔÏÂÙ ËÁÖÄÙÊ ÒÁÚ ÐÉÓÁÔØ META ÉÌÉ CONTROL, -ÍÙ ÂÕÄÅÍ ÉÓÐÏÌØÚÏ×ÁÔØ ÓÌÅÄÕÀÝÉÅ ÓÏËÒÁÝÅÎÉÑ: +Ð”Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Emacs обычно иÑпользуютÑÑ ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ (key -- Ñочетание +клавиш клавиатуры и/или кнопок мыши), включающие в ÑÐµÐ±Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÑƒ CONTROL +(иногда Ð¾Ñ‚Ð¼ÐµÑ‡Ð°ÐµÐ¼Ð°Ñ ÐºÐ°Ðº CTRL или CTL) или клавишу META (иногда помеченную как +ALT или EDIT). ВмеÑто того, чтобы каждый раз пиÑать META или CONTROL, мы +будем иÑпользовать Ñледующие ÑокращениÑ: - C- -- ÓÌÅÄÕÅÔ ÕÄÅÒÖÉ×ÁÔØ ËÌÁ×ÉÛÕ CONTROL, ÐÏËÁ ÎÁÂÉÒÁÅÔÓÑ ÓÉÍ×ÏÌ - . ôÁË, C-f ÄÏÌÖÎÏ ÏÚÎÁÞÁÔØ: ÎÁÖÁÔØ ËÌÁ×ÉÛÕ CONTROL É f. - M- -- ÓÌÅÄÕÅÔ ÕÄÅÒÖÉ×ÁÔØ ËÌÁ×ÉÛÕ META, ÐÏËÁ ÎÁÂÉÒÁÅÔÓÑ ÓÉÍ×ÏÌ - . åÓÌÉ ÎÅÔ ËÌÁ×ÉÛÉ META, ALT ÉÌÉ EDIT, ÔÏ ÎÁÖÍÉÔÅ , - ÏÔÐÕÓÔÉÔÅ ÅÅ, Á ÐÏÔÏÍ ÎÁÂÅÒÉÔÅ ÓÉÍ×ÏÌ . + C- -- Ñледует удерживать клавишу CONTROL, пока набираетÑÑ Ñимвол + . Так, C-f должно означать: одновременно нажать клавиши CONTROL и f. + M- -- Ñледует удерживать клавишу META, пока набираетÑÑ Ñимвол + . ЕÑли нет клавиши META, ALT или EDIT, то нажмите , + отпуÑтите ее, а потом наберите Ñимвол . -÷ÁÖÎÏÅ ÚÁÍÅÞÁÎÉÅ: ÄÌÑ ÚÁ×ÅÒÛÅÎÉÑ ÓÅÁÎÓÁ Emacs, ÎÁÂÅÒÉÔÅ C-x C-c (Ä×Á -ÓÉÍ×ÏÌÁ). óÉÍ×ÏÌÙ ">>" Ó ÌÅ×ÏÊ ÓÔÏÒÏÎÙ ÕËÁÚÙ×ÁÀÔ, ÞÔÏ ×ÁÍ ÎÕÖÎÏ ÄÅÌÁÔØ, -ÞÔÏÂÙ ÐÒÉÍÅÎÉÔØ ËÏÍÁÎÄÕ. îÁÐÒÉÍÅÒ: +Важное замечание: Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Emacs, наберите C-x C-c (два ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ +клавиш). Чтобы прервать чаÑтично набранную команду, нажмите C-g. +Символы ">>" Ñ Ð»ÐµÐ²Ð¾Ð¹ Ñтороны указывают, что вам нужно делать, чтобы +попробовать применить команду. Ðапример: <> -[óÅÒÅÄÉÎÁ ÓÔÒÁÎÉÃÙ ÏÓÔÁ×ÌÅÎÁ ÐÕÓÔÏÊ × ÕÞÅÂÎÙÈ ÃÅÌÑÈ. ôÅËÓÔ ÐÒÏÄÏÌÖÁÅÔÓÑ ÎÉÖÅ] ->> ôÅÐÅÒØ ÎÁÖÍÉÔÅ C-v (ÐÒÏÓÍÏÔÒ ÓÌÅÄÕÀÝÅÇÏ ÜËÒÁÎÁ) ÄÌÑ ÐÅÒÅÍÅÝÅÎÉÑ ÎÁ - ÓÌÅÄÕÀÝÉÊ ÜËÒÁÎ. (÷ÙÐÏÌÎÉÔÅ ÜÔÕ ËÏÍÁÎÄÕ ÕÄÅÒÖÉ×ÁÑ ËÌÁ×ÉÛÕ CONTROL É - ÎÁÖÉÍÁÑ v.) ôÅÐÅÒØ ×Ù ÄÏÌÖÎÙ ÜÔÏ ÓÄÅÌÁÔØ ÅÝÅ ÒÁÚ, ËÏÇÄÁ ÚÁËÏÎÞÉÔÅ ÞÉÔÁÔØ - ÜËÒÁÎ. +[Середина Ñтраницы оÑтавлена пуÑтой в учебных целÑÑ…. ТекÑÑ‚ продолжаетÑÑ Ð½Ð¸Ð¶Ðµ] +>> Теперь нажмите C-v (проÑмотр Ñледующего Ñкрана) Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ðº Ñледующему + Ñкрану. (Выполните Ñту команду ÑƒÐ´ÐµÑ€Ð¶Ð¸Ð²Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÑƒ CONTROL и Ð½Ð°Ð¶Ð¸Ð¼Ð°Ñ v.) Теперь + вы должны Ñто Ñделать еще раз, когда вы закончите читать текÑÑ‚ на Ñкране. -ïÂÒÁÔÉÔÅ ×ÎÉÍÁÎÉÅ ÎÁ ÔÏ, ÞÔÏ ÐÒÉ ÐÅÒÅÈÏÄÅ Ó ÜËÒÁÎÁ ÎÁ ÜËÒÁÎ ÐÅÒÅËÒÙ×ÁÀÔÓÑ -Ä×Å ÓÔÒÏÞËÉ -- ÜÔÏ ÏÂÅÓÐÅÞÉ×ÁÅÔ ÎÅËÏÔÏÒÕÀ ÎÅÐÒÅÒÙ×ÎÏÓÔØ ×ÏÓÐÒÉÑÔÉÑ, ÔÁË ÞÔÏ -×Ù ÍÏÖÅÔÅ ÐÒÏÄÏÌÖÁÔØ ÞÉÔÁÔØ ÔÅËÓÔ ÎÅ ÔÅÒÑÑ ÎÉÔÉ ÐÏ×ÅÓÔ×Ï×ÁÎÉÑ. +Обратите внимание на то, что при переходе Ñ Ñкрана на Ñкран показываютÑÑ Ð´Ð²Ðµ +Ñтроки Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐ³Ð¾ Ñкрана -- Ñто обеÑпечивает некоторую непрерывноÑть +воÑприÑтиÑ, так что вы можете продолжать читать текÑÑ‚ не терÑÑ Ð½Ð¸Ñ‚Ð¸ +повеÑтвованиÑ. -ðÅÒ×ÏÅ, ÞÔÏ ×ÁÍ ÎÅÏÂÈÏÄÉÍÏ ÚÎÁÔØ -- ÜÔÏ ÔÏ, ËÁË ÐÅÒÅÄ×ÉÇÁÔØÓÑ ÐÏ ÔÅËÓÔÕ ÉÚ -ÏÄÎÏÇÏ ÍÅÓÔÁ × ÄÒÕÇÏÅ. ÷Ù ÕÖÅ ÚÎÁÅÔÅ, ËÁË ÐÅÒÅÍÅÓÔÉÔØÓÑ ×ÐÅÒÅÄ ÎÁ ÏÄÉÎ -ÜËÒÁÎ, ÉÓÐÏÌØÚÕÑ ÓÏÞÅÔÁÎÉÅ ËÌÁ×ÉÛ C-v. äÌÑ ÐÅÒÅÍÅÝÅÎÉÑ ÎÁÚÁÄ ÎÁ ÏÄÉÎ ÜËÒÁÎ, -ÎÁÖÍÉÔÅ M-v (ÕÄÅÒÖÉ×ÁÊÔÅ ËÌÁ×ÉÛÕ META É ÎÁÂÅÒÉÔÅ v, ÉÌÉ ÎÁÖÍÉÔÅ É -ÚÁÔÅÍ v, Á ÅÓÌÉ Õ ×ÁÓ ÎÅÔ ËÌÁ×ÉÛÉ META, EDIT ÉÌÉ ALT). +Первое, что вам необходимо знать -- Ñто то, как передвигатьÑÑ Ð¿Ð¾ текÑту из +одного меÑта в другое. Ð’Ñ‹ уже знаете, как перемеÑтитьÑÑ Ð²Ð¿ÐµÑ€ÐµÐ´ на один Ñкран +иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñочетание клавиш C-v. Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð½Ð°Ð·Ð°Ð´ на один Ñкран, нажмите +M-v (удерживайте клавишу META и наберите v, или нажмите и затем v, +еÑли у Ð²Ð°Ñ Ð½ÐµÑ‚ клавиши META, EDIT или ALT). ->> ÐÏÐÒÏÂÕÊÔÅ ÎÁÂÒÁÔØ M-v, Á ÚÁÔÅÍ C-v, ÎÅÓËÏÌØËÏ ÒÁÚ. +>> попробуйте набрать M-v, а затем C-v, неÑколько раз. -* ëòáôëéê ðåòåþåîø ëïíáîä + +* КРÐТКИЙ ПЕРЕЧЕÐЬ КОМÐÐД ------------------------- -äÌÑ ÐÒÏÓÍÏÔÒÁ ÉÓÐÏÌØÚÕÀÔÓÑ ÓÌÅÄÕÀÝÉÅ ËÏÍÁÎÄÙ: +Следующие ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ полезны при по-Ñкранном проÑмотре текÑта: - C-v ðÅÒÅÊÔÉ ÎÁ ÏÄÉÎ ÜËÒÁÎ ×ÐÅÒÅÄ - M-v ðÅÒÅÊÔÉ ÎÁ ÏÄÉÎ ÜËÒÁÎ ÎÁÚÁÄ - C-l ïÞÉÓÔÉÔØ ÜËÒÁÎ É ÏÔÏÂÒÁÚÉÔØ ×ÓÅ ÚÁÎÏ×Ï, - ÒÁÚÍÅÓÔÉ× ÔÅËÓÔ, ÎÁÈÏÄÑÝÉÊÓÑ ×ÏÚÌÅ ËÕÒÓÏÒÁ, - × ÃÅÎÔÒÅ ÜËÒÁÎÁ. (ÜÔÏ CONTROL-L, Á ÎÅ CONTROL-1.) + C-v Перейти на один Ñкран вперед + M-v Перейти на один Ñкран назад + C-l ОчиÑтить Ñкран и отобразить вÑе заново, + размеÑтив текÑÑ‚, находÑщийÑÑ Ð²Ð¾Ð·Ð»Ðµ курÑора, + в центре Ñкрана. (Ñто CONTROL-L, а не CONTROL-1.) ->> îÁÊÄÉÔÅ ËÕÒÓÏÒ É ÚÁÐÏÍÎÉÔÅ ÔÅËÓÔ ×ÏÚÌÅ ÎÅÇÏ. ðÏÔÏÍ ÎÁÖÍÉÔÅ C-l. - îÁÊÄÉÔÅ ËÕÒÓÏÒ ÓÎÏ×Á É ÕÂÅÄÉÔÅÓØ, ÞÔÏ ×ÏÚÌÅ ÎÅÇÏ ×ÓÅ ÔÏÔ ÖÅ ÔÅËÓÔ. +>> Ðайдите курÑор и запомните текÑÑ‚ возле него. Потом нажмите C-l. + Ðайдите курÑор Ñнова и убедитеÑÑŒ, что возле него вÑе тот же текÑÑ‚. -÷Ù ÔÁËÖÅ ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ ËÌÁ×ÉÛÉ PageUp É PageDn ÄÌÑ ÐÅÒÅÍÅÝÅÎÉÑ ÍÅÖÄÕ -ÜËÒÁÎÁÍÉ (ÅÓÌÉ ÏÎÉ ÅÓÔØ ÎÁ ×ÁÛÅÍ ÔÅÒÍÉÎÁÌÅ), ÎÏ ×Ù ÓÍÏÖÅÔÅ ÒÁÂÏÔÁÔØ ÂÏÌÅÅ -ÜÆÆÅËÔÉ×ÎÏ, ÅÓÌÉ ÂÕÄÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÓÏÞÅÔÁÎÉÑ C-v É M-v. +Ð’Ñ‹ также можете иÑпользовать клавиши PageUp и PageDn Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ +Ñкранами (еÑли они еÑть на вашем терминале), но вы Ñможете работать более +Ñффективно, еÑли будете иÑпользовать ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ C-v и M-v. -* âáúï÷ùå ëïíáîäù õðòá÷ìåîéñ ëõòóïòïí +* БÐЗОВЫЕ КОМÐÐДЫ УПРÐВЛЕÐИЯ КУРСОРОМ ------------------------------------- -ä×ÉÖÅÎÉÅ ÏÔ ÜËÒÁÎÁ Ë ÜËÒÁÎÕ ÕÄÏÂÎÏ, ÎÏ ËÁË ÐÅÒÅÍÅÓÔÉÔØÓÑ × ÏÐÒÅÄÅÌÅÎÎÏÅ -ÍÅÓÔÏ × ÔÅËÓÔÅ ÎÁ ÜËÒÁÎÅ? +Движение от Ñкрана к Ñкрану удобно, но как перемеÑтитьÑÑ Ð² определенную +точку в текÑте на Ñкране? -åÓÔØ ÎÅÓËÏÌØËÏ ÓÐÏÓÏÂÏ× ×ÙÐÏÌÎÅÎÉÑ ÜÔÏÊ ÏÐÅÒÁÃÉÉ. ÷Ù ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ -ËÌÁ×ÉÛÉ ÕÐÒÁ×ÌÅÎÉÑ ËÕÒÓÏÒÏÍ (ÓÔÒÅÌËÉ), ÎÏ ÂÏÌÅÅ ÜÆÆÅËÔÉ×ÎÙÍ ÂÕÄÅÔ ÓÏÈÒÁÎÅÎÉÅ -ÒÕË × ÉÈ ÓÔÁÎÄÁÒÔÎÏÊ ÐÏÚÉÃÉÉ É ÉÓÐÏÌØÚÏ×ÁÔØ ËÏÍÁÎÄÙ C-p, C-b, C-f É C-n. üÔÉ -ËÏÍÁÎÄÙ ÜË×É×ÁÌÅÎÔÎÙ ÞÅÔÙÒÅÍ ËÌÁ×ÉÛÁÍ ÐÅÒÅÍÅÝÅÎÉÑ ËÕÒÓÏÒÁ, ËÁË ÜÔÏ ÐÏËÁÚÁÎÏ -ÎÁ ÓÈÅÍÅ: +ЕÑть неÑколько ÑпоÑобов Ñделать Ñто. Ð’Ñ‹ можете иÑпользовать клавиши +ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÑƒÑ€Ñором (Ñтрелки), но более Ñффективным будет Ñохранение рук в +их Ñтандартной позиции и иÑпользовать команды C-p, C-b, C-f и C-n. Эти +команды Ñквивалентны четырем клавишам Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÐºÑƒÑ€Ñора, как Ñто показано +на Ñхеме: - ðÒÅÄÙÄÕÝÁÑ ÓÔÒÏËÁ, C-p + ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ñтрока, C-p : : - îÁÚÁÄ, C-b .... ôÅËÕÝÁÑ ÐÏÚÉÃÉÑ ËÕÒÓÏÒÁ .... ÷ÐÅÒÅÄ, C-f + Ðазад, C-b .... Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ ÐºÑƒÑ€Ñора .... Вперед, C-f : : - óÌÅÄÕÀÝÁÑ ÓÔÒÏËÁ, C-n + Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ñтрока, C-n ->> ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ÎÁ ÓÔÒÏËÕ ÒÑÄÏÍ Ó ÄÉÁÇÒÁÍÍÏÊ, ÉÓÐÏÌØÚÕÑ ÓÏÞÅÔÁÎÉÑ - ËÌÁ×ÉÛ C-n ÉÌÉ C-p. ðÏÔÏÍ ÎÁÖÍÉÔÅ C-l É ÐÏÓÍÏÔÒÉÔÅ ËÁË ÄÉÁÇÒÁÍÍÁ - ÐÅÒÅÍÅÓÔÉÔÓÑ × ÃÅÎÔÒ ÜËÒÁÎÁ. +>> ПеремеÑтите курÑор на Ñтроку Ñ Ñ†ÐµÐ½Ñ‚Ñ€Ð¾Ð¼ диаграммы, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ + клавиш C-n или C-p. Затем нажмите C-l и поÑмотрите как диаграмма + перемеÑтитÑÑ Ð² центр Ñкрана. -÷ÁÍ ÂÕÄÅÔ ÎÅÓÌÏÖÎÏ ÚÁÐÏÍÎÉÔØ ÜÔÉ ËÏÍÁÎÄÙ ÐÏ ÐÅÒ×ÙÍ ÂÕË×ÁÍ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÈ -ÓÌÏ× -- B-ÎÁÚÁÄ (backward) É F-×ÐÅÒÅÄ (forward). üÔÏ ÏÓÎÏ×ÎÙÅ ËÏÍÁÎÄÙ -ÐÏÚÉÃÉÏÎÉÒÏ×ÁÎÉÑ ËÕÒÓÏÒÁ, ËÏÔÏÒÙÍÉ ×Ù ÂÕÄÅÔÅ ÐÏÌØÚÏ×ÁÔØÓÑ ÷óåçäá, ÔÁË ÞÔÏ -ÂÕÄÅÔ ÎÅÐÌÏÈÏ ÉÈ ×ÙÕÞÉÔØ. +Вам будет неÑложно запомнить Ñти команды по первым буквам ÑоответÑтвующих +Ñлов: P -- предыдущий (previous), N -- Ñледующий (next), B -- назад +(backward) и F -- вперед (forward). Ð’Ñ‹ поÑтоÑнно будете иÑпользовать Ñти +оÑновные команды Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¾Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÑƒÑ€Ñора. ->> îÁÖÍÉÔÅ ÎÅÓËÏÌØËÏ ÒÁÚ C-n, ÞÔÏÂÙ ÏÐÕÓÔÉÔØ ËÕÒÓÏÒ ×ÎÉÚ ÎÁ ÜÔÕ ÓÔÒÏËÕ. +>> Ðажмите неÑколько раз C-n, чтобы опуÑтить курÑор вниз к Ñтой Ñтроке. ->> ðÅÒÅÍÅÓÔÉÔÅÓØ ÐÏ ÓÔÒÏËÅ, ÉÓÐÏÌØÚÕÑ C-f, É ÐÏÔÏÍ ÐÏÄÎÉÍÉÔÅÓØ ××ÅÒÈ Ó - ÐÏÍÏÝØÀ C-p. ðÏÓÍÏÔÒÉÔÅ, ËÁË ÉÚÍÅÎÉÌÏÓØ ÐÏÌÏÖÅÎÉÅ ËÕÒÓÏÒÁ ÐÒÉ ÎÁÖÁÔÉÉ - ó-Ò, ÅÓÌÉ ÏÎ ÎÁÈÏÄÉÌÓÑ × ÓÅÒÅÄÉÎÅ ÓÔÒÏËÉ. +>> ПеремеÑтитеÑÑŒ по Ñтроке, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ C-f, и потом поднимитеÑÑŒ вверх Ñ + помощью C-p. ПоÑмотрите, как изменилоÑÑŒ положение курÑора при нажатии + С-Ñ€, еÑли он находилÑÑ Ð² Ñередине Ñтроки. -ëÁÖÄÁÑ ÓÔÒÏËÁ ÔÅËÓÔÁ ÚÁ×ÅÒÛÁÅÔÓÑ ÓÉÍ×ÏÌÏÍ ÐÅÒÅ×ÏÄÁ ÓÔÒÏËÉ (Newline -character), ËÏÔÏÒÙÊ ÏÔÄÅÌÑÅÔ ÅÅ ÏÔ ÓÌÅÄÕÀÝÅÊ ÓÔÒÏËÉ. ìÕÞÛÅ ÅÓÌÉ ÐÏÓÌÅÄÎÑÑ -ÓÔÒÏËÁ × ×ÁÛÅÍ ÆÁÊÌÅ ÔÏÖÅ ÚÁ×ÅÒÛÁÌÁÓØ ÂÙ ÓÉÍ×ÏÌÏÍ ÐÅÒÅ×ÏÄÁ ÓÔÒÏËÉ (ÎÏ Emacs ÎÅ -ÔÒÅÂÕÅÔ ÜÔÏÇÏ). +ÐšÐ°Ð¶Ð´Ð°Ñ Ñтрока текÑта завершаетÑÑ Ñимволом перевода Ñтроки (Newline +character), который отделÑет ее от Ñледующей Ñтроки. (Обычно, поÑледнÑÑ +Ñтрока файла завершаетÑÑ Ñимволом перевода Ñтроки, но Emacs не требует +Ñтого). ->> ðÏÐÒÏÂÕÊÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ C-b × ÎÁÞÁÌÅ ÓÔÒÏËÉ. ëÕÒÓÏÒ ÄÏÌÖÅÎ ÐÅÒÅÍÅÓÔÉÔØÓÑ - ÎÁ ËÏÎÅà ÐÒÅÄÙÄÕÝÅÊ ÓÔÒÏËÉ. üÔÏ ÐÒÏÉÓÈÏÄÉÔ ÐÏÔÏÍÕ, ÞÔÏ ÏÎ Ä×ÉÖÅÔÓÑ ÎÁÚÁÄ - ÞÅÒÅÚ ÓÉÍ×ÏÌ ÐÅÒÅ×ÏÄÁ ÓÔÒÏËÉ. +>> Попробуйте иÑпользовать C-b в начале Ñтроки. КурÑор должен перемеÑтитьÑÑ + на конец предыдущей Ñтроки. Это проиÑходит потому, что он движетÑÑ Ð½Ð°Ð·Ð°Ð´ + через Ñимвол перевода Ñтроки. -C-f ÍÏÖÅÔ ÐÅÒÅÍÅÝÁÔØ ËÕÒÓÏÒ ÞÅÒÅÚ ÓÉÍ×ÏÌ ÐÅÒÅ×ÏÄÁ ÓÔÒÏËÉ ÔÁË ÖÅ, ËÁË É C-b. +C-f может перемещать курÑор через Ñимвол перевода Ñтроки так же, как и C-b. ->> ðÏÐÒÏÂÕÊÔÅ ÎÅÓËÏÌØËÏ ÒÁÚ ÐÒÉÍÅÎÉÔØ C-b ÔÁË, ÞÔÏÂÙ ×Ù Õ×ÉÄÅÌÉ, ËÁË - Ä×ÉÖÅÔÓÑ ËÕÒÓÏÒ. äÁÌÅÅ ÉÓÐÏÌØÚÕÊÔÅ ÓÏÞÅÔÁÎÉÅ ËÌÁ×ÉÛ C-f ÞÔÏÂÙ ×ÅÒÎÕÔØÓÑ - ÎÁ ËÏÎÅà ÓÔÒÏËÉ. îÁÖÍÉÔÅ C-f ÅÝÅ ÒÁÚ, ÞÔÏÂÙ ÐÅÒÅÊÔÉ Ë ÎÁÞÁÌÕ ÓÌÅÄÕÀÝÅÊ - ÓÔÒÏËÉ. +>> Попробуйте неÑколько раз применить C-b так, чтобы вы увидели, как + движетÑÑ ÐºÑƒÑ€Ñор. Далее иÑпользуйте Ñочетание клавиш C-f чтобы вернутьÑÑ + на конец Ñтроки. Ðажмите C-f еще раз, чтобы перейти к началу Ñледующей + Ñтроки. -ëÏÇÄÁ ×Ù ÐÅÒÅÍÅÝÁÅÔÅÓØ ÚÁ ×ÅÒÈÎÉÊ ÉÌÉ ÎÉÖÎÉÊ ËÒÁÊ ÜËÒÁÎÁ, ÔÅËÓÔ, ÎÁÈÏÄÑÝÉÊÓÑ -ÚÁ ÜËÒÁÎÏÍ, ÓÄ×ÉÇÁÅÔÓÑ ×ÎÕÔÒØ ÜËÒÁÎÁ. üÔÏ ÎÁÚÙ×ÁÅÔÓÑ "ÐÒÏËÒÕÔËÁ" -(scrolling). ðÒÏËÒÕÔËÁ ÐÏÚ×ÏÌÑÅÔ Emacs'Õ ÐÅÒÅÍÅÝÁÔØ ËÕÒÓÏÒ × ÎÕÖÎÏÅ ÍÅÓÔÏ -ÔÅËÓÔÁ ÂÅÚ ÐÅÒÅÍÅÝÅÎÉÑ ÅÇÏ ÚÁ ÐÒÅÄÅÌÙ ÜËÒÁÎÁ. +Когда вы перемещаетеÑÑŒ за верхний или нижний край Ñкрана, текÑÑ‚, находÑщийÑÑ +за Ñкраном, ÑдвигаетÑÑ Ð²Ð½ÑƒÑ‚Ñ€ÑŒ Ñкрана. Это называетÑÑ "прокрутка" +(scrolling). Прокрутка позволÑет Emacs перемещать курÑор в нужное меÑто +текÑта без Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÐµÐ³Ð¾ за пределы Ñкрана. ->> ðÏÐÒÏÂÕÊÔÅ ÐÅÒÅÍÅÓÔÉÔØ ËÕÒÓÏÒ ÚÁ ÎÉÖÎÀÀ ÇÒÁÎÉÃÕ ÜËÒÁÎÁ, ÉÓÐÏÌØÚÕÑ C-n, É - ÐÏÓÍÏÔÒÉÔÅ, ÞÔÏ ÐÒÏÉÚÏÊÄÅÔ. +>> Попробуйте перемеÑтить курÑор за нижнюю границу Ñкрана, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ C-n, и + поÑмотрите, что произойдет. -åÓÌÉ ÐÏÓÉÍ×ÏÌØÎÏÅ ÐÅÒÅÍÅÝÅÎÉÅ ÓÌÉÛËÏÍ ÍÅÄÌÅÎÎÏ, ×Ù ÍÏÖÅÔÅ Ä×ÉÇÁÔØÓÑ ÐÏ -ÓÌÏ×ÁÍ. M-f (META-f) ÐÅÒÅÍÅÝÁÅÔ ×ÐÅÒÅÄ ÎÁ ÓÌÏ×Ï, Á M-b ÎÁÚÁÄ ÎÁ ÓÌÏ×Ï. +ЕÑли поÑимвольное перемещение Ñлишком медленно, вы можете двигатьÑÑ Ð¿Ð¾ +Ñловам. M-f (META-f) перемещает вперед на Ñлово, а M-b назад на Ñлово. ->> îÁÖÍÉÔÅ ÎÅÓËÏÌØËÏ ÒÁÚ M-f É M-b. +>> Ðажмите неÑколько раз M-f и M-b. -åÓÌÉ ËÕÒÓÏÒ ÎÁÈÏÄÉÔÓÑ × ÓÅÒÅÄÉÎÅ ÓÌÏ×Á, M-f ÐÅÒÅÍÅÓÔÉÔ ÅÇÏ × ËÏÎÅà ÓÌÏ×Á. -åÓÌÉ ËÕÒÓÏÒ ÎÁÈÏÄÉÔÓÑ ÍÅÖÄÕ ÓÌÏ×ÁÍÉ, M-f ÐÅÒÅÍÅÓÔÉÔ ÅÇÏ × ËÏÎÅà ÓÌÅÄÕÀÝÅÇÏ -ÓÌÏ×Á. M-b ÒÁÂÏÔÁÅÔ ÔÏÞÎÏ ÔÁË ÖÅ, ÎÏ × ÐÒÏÔÉ×ÏÐÏÌÏÖÎÏÍ ÎÁÐÒÁ×ÌÅÎÉÉ. +ЕÑли курÑор находитÑÑ Ð² Ñередине Ñлова, M-f перемеÑтит его в конец Ñлова. +ЕÑли курÑор находитÑÑ Ð¼ÐµÐ¶Ð´Ñƒ Ñловами, M-f перемеÑтит его в конец Ñледующего +Ñлова. M-b работает точно так же, но в противоположном направлении. ->> îÁÖÍÉÔÅ M-f É M-b ÎÅÓËÏÌØËÏ ÒÁÚ, ÐÅÒÅÍÅÖÁÑ ÉÈ Ó C-f É C-b, -- ÔÁË ×Ù - ÓÍÏÖÅÔÅ ÚÁÍÅÔÉÔØ ÄÅÊÓÔ×ÉÑ M-f É M-b ÉÚ ÒÁÚÎÙÈ ÐÏÚÉÃÉÊ × ÓÌÏ×ÁÈ É ÍÅÖÄÕ - ÎÉÍÉ. +>> Ðажмите M-f и M-b неÑколько раз, Ð¿ÐµÑ€ÐµÐ¼ÐµÐ¶Ð°Ñ Ð¸Ñ… Ñ C-f и C-b, -- так вы + Ñможете увидеть как дейÑтвуют M-f и M-b из разных позиций в Ñловах и + между ними. -ïÔÍÅÔØÔÅ ÐÁÒÁÌÌÅÌØ ÍÅÖÄÕ C-f É C-b Ó ÏÄÎÏÊ ÓÔÏÒÏÎÙ, É M-f É M-b Ó -ÄÒÕÇÏÊ. ïÞÅÎØ ÞÁÓÔÏ Meta-ÓÉÍ×ÏÌÙ ÉÓÐÏÌØÚÕÀÔÓÑ ÄÌÑ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÈ ÏÐÅÒÁÃÉÊ -ÎÁÄ ÅÄÉÎÉÃÁÍÉ, ÏÐÒÅÄÅÌÅÎÎÙÍÉ × ÑÚÙËÅ (ÓÌÏ×Á, ÐÒÅÄÌÏÖÅÎÉÑ, ÁÂÚÁÃÙ), ÔÏÇÄÁ ËÁË -Control-ÓÉÍ×ÏÌÙ ÒÁÂÏÔÁÀÔ Ó ÏÓÎÏ×ÎÙÍÉ ÅÄÉÎÉÃÁÍÉ, ÎÅÚÁ×ÉÓÉÍÏ ÏÔ ÔÏÇÏ, ÞÔÏ ×Ù -ÒÅÄÁËÔÉÒÕÅÔÅ (ÓÉÍ×ÏÌÙ, ÓÔÒÏËÉ, É Ô.Ä.). +Отметьте параллель между C-f и C-b Ñ Ð¾Ð´Ð½Ð¾Ð¹ Ñтороны, и M-f и M-b Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¹. +Очень чаÑто Meta-ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ Ð¸ÑпользуютÑÑ Ð´Ð»Ñ ÑоответÑтвующих операций над +единицами, определенными в Ñзыке (Ñлова, предложениÑ, абзацы), тогда как +Control-ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÑŽÑ‚ Ñ Ð±Ð°Ð·Ð¾Ð²Ñ‹Ð¼Ð¸ единицами, незавиÑимо от того, что вы +редактируете (Ñимволы, Ñтроки, и Ñ‚.д.). -üÔÁ ÐÁÒÁÌÌÅÌØ ÓÕÝÅÓÔ×ÕÅÔ ÍÅÖÄÕ ÓÔÒÏËÁÍÉ É ÐÒÅÄÌÏÖÅÎÉÑÍÉ: C-a É C-e -ÐÅÒÅÍÅÝÁÅÔ ËÕÒÓÏÒ × ÎÁÞÁÌÏ É ËÏÎÅà ÓÔÒÏËÉ, Á M-a É M-e ÐÅÒÅÍÅÝÁÅÔ ËÕÒÓÏÒ × -ÎÁÞÁÌÏ É ËÏÎÅà ÐÒÅÄÌÏÖÅÎÉÑ. +Эта параллель также применима к Ñтрокам и предложениÑм: C-a и C-e перемещает +курÑор в начало и конец Ñтроки, а M-a и M-e перемещает курÑор в начало и +конец предложениÑ. ->> ðÏÐÒÏÂÕÊÔÅ ÎÁÖÁÔØ ÐÁÒÕ ÒÁÚ C-a, Á ÐÏÔÏÍ ÐÁÒÕ ÒÁÚ C-e. ðÏÐÒÏÂÕÊÔÅ ÐÁÒÕ ÒÁÚ - ÎÁÖÁÔØ M-a, ÐÏÓÌÅ ÜÔÏÇÏ ÐÁÒÕ ÒÁÚ ÎÁÖÁÔØ M-e. +>> Попробуйте пару раз нажать C-a, а потом пару раз C-e. Попробуйте пару раз + нажать M-a, поÑле Ñтого пару раз нажать M-e. -ðÏÓÍÏÔÒÉÔÅ, ÞÔÏ ÐÏ×ÔÏÒ C-a ÎÉÞÅÇÏ ÎÅ ÉÚÍÅÎÑÅÔ, Á ÐÏ×ÔÏÒ M-a ÐÒÏÄÏÌÖÁÅÔ -Ä×ÉÖÅÎÉÅ ËÕÒÓÏÒÁ Ë ÓÌÅÄÕÀÝÅÍÕ ÐÒÅÄÌÏÖÅÎÉÀ. üÔÏ ÎÅ ÓÏÈÒÁÎÑÅÔ ÁÎÁÌÏÇÉÀ, ÎÏ -×ÙÇÌÑÄÉÔ ÅÓÔÅÓÔ×ÅÎÎÏ. +ПоÑмотрите, что повтор C-a ничего не изменÑет, а повтор M-a продолжает +движение курÑора к Ñледующему предложению. Это не ÑовÑем аналогично, но +выглÑдит еÑтеÑтвенно. -ðÏÌÏÖÅÎÉÅ ËÕÒÓÏÒÁ × ÔÅËÓÔÅ ÔÁËÖÅ ÎÁÚÙ×ÁÀÔ "ÔÏÞËÏÊ ×ÓÔÁ×ËÉ". óËÁÖÅÍ ÉÎÁÞÅ: -ËÕÒÓÏÒ ÐÏËÁÚÙ×ÁÅÔ ÍÅÓÔÏ ÎÁ ÜËÒÁÎÅ × ËÁËÏÊ ÔÏÞËÅ ÂÕÄÅÔ ÒÁÓÐÏÌÏÖÅÎ ××ÏÄÉÍÙÊ -ÔÅËÓÔ. +Положение курÑора в текÑте также называют "точкой вÑтавки" (point). Скажем +иначе: курÑор показывает меÑто на Ñкране в котором будет раÑположен вводимый +текÑÑ‚. -÷ÏÔ Ó×ÏÄÎÙÊ ÓÐÉÓÏË ×ÓÅÈ ÏÓÎÏ×ÎÙÈ ËÏÍÁÎÄ ÐÅÒÅÍÅÝÅÎÉÑ ËÕÒÓÏÒÁ, ×ËÌÀÞÁÑ Ä×ÉÖÅÎÉÅ -ÐÏ ÓÌÏ×ÁÍ É ÐÒÅÄÌÏÖÅÎÉÑÍ: +Вот ÑпиÑок вÑех оÑновных команд Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÐºÑƒÑ€Ñора, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ðµ по +Ñловам и предложениÑм: - C-f îÁ ÓÉÍ×ÏÌ ×ÐÅÒÅÄ - C-b îÁ ÓÉÍ×ÏÌ ÎÁÚÁÄ + C-f Ðа Ñимвол вперед + C-b Ðа Ñимвол назад - M-f îÁ ÓÌÏ×Ï ×ÐÅÒÅÄ - M-b îÁ ÓÌÏ×Ï ÎÁÚÁÄ + M-f Ðа Ñлово вперед + M-b Ðа Ñлово назад - C-n îÁ ÓÌÅÄÕÀÝÕÀ ÓÔÒÏËÕ - C-p îÁ ÐÒÅÄÙÄÕÝÕÀ ÓÔÒÏËÕ + C-n Ðа Ñледующую Ñтроку + C-p Ðа предыдущую Ñтроку - C-a ÷ ÎÁÞÁÌÏ ÓÔÒÏËÉ - C-e ÷ ËÏÎÅà ÓÔÒÏËÉ + C-a Ð’ начало Ñтроки + C-e Ð’ конец Ñтроки - M-a îÁÚÁÄ, × ÎÁÞÁÌÏ ÐÒÅÄÌÏÖÅÎÉÑ - M-e ÷ÐÅÒÅÄ, × ËÏÎÅà ÐÒÅÄÌÏÖÅÎÉÑ + M-a Ðазад, в начало Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ + M-e Вперед, в конец Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ->> ðÏÐÒÏÂÕÊÔÅ ÓÅÊÞÁÓ ÎÁ ÐÒÁËÔÉËÅ ÐÒÉÍÅÎÉÔØ ÎÅÓËÏÌØËÏ ÒÁÚ ×ÓÅ ÜÔÉ ËÏÍÁÎÄÙ. - üÔÏ ÎÁÉÂÏÌÅÅ ÉÓÐÏÌØÚÕÅÍÙÅ ËÏÍÁÎÄÙ. +>> Попробуйте ÑÐµÐ¹Ñ‡Ð°Ñ Ð½ÐµÑколько раз иÑпользовать вÑе Ñти команды. + Это наиболее чаÑто иÑпользуемые команды. -ä×Å ÄÒÕÇÉÅ ×ÁÖÎÙÅ ËÏÍÁÎÄÙ Ä×ÉÖÅÎÉÑ ËÕÒÓÏÒÁ M-< (META Less-then -{íÅÎØÛÅ-þÅÍ}), ËÏÔÏÒÁÑ ÐÅÒÅÍÅÝÁÅÔ ËÕÒÓÏÒ × ÎÁÞÁÌÏ ÔÅËÓÔÁ, É M-> (META -Greater-than {âÏÌØÛÅ-þÅÍ}), ËÏÔÏÒÁÑ ÐÅÒÅÍÅÝÁÅÔ ËÕÒÓÏÒ × ËÏÎÅà ÔÅËÓÔÁ. +Две другие важные команды Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÐºÑƒÑ€Ñора: M-< (META Less-then +{Меньше-Чем}), ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÑ‚ курÑор в начало текÑта, и M-> (META +Greater-than {Больше-Чем}), ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÑ‚ курÑор в конец текÑта. -îÁ ÂÏÌØÛÉÎÓÔ×Å ÔÅÒÍÉÎÁÌÏ× ÚÎÁË "<" ÎÁÈÏÄÉÔÓÑ ÎÁÄ ÚÎÁËÏÍ ÔÏÞËÉ, É ÞÔÏÂÙ -ÎÁÂÒÁÔØ ÅÇÏ, ×Ù ÄÏÌÖÎÙ ÉÓÐÏÌØÚÏ×ÁÔØ ËÌÁ×ÉÛÕ Shift. îÁ ÜÔÉÈ ÔÅÒÍÉÎÁÌÁÈ ×Ù ÔÁË -ÖÅ ÄÏÌÖÎÙ ÉÓÐÏÌØÚÏ×ÁÔØ Shift, ÞÔÏÂÙ ÎÁÂÒÁÔØ M-< (ÂÅÚ ÕÄÅÒÖÁÎÉÑ ËÌÁ×ÉÛÉ Shift -×Ù ÎÁÂÅÒÅÔÅ M-ÔÏÞËÁ). +Ðа большинÑтве терминалов знак "<" находитÑÑ Ð½Ð°Ð´ знаком точки, и чтобы +набрать его, вы должны иÑпользовать клавишу Shift. Ðа Ñтих терминалах вы так +же должны иÑпользовать Shift, чтобы набрать M-< (без ÑƒÐ´ÐµÑ€Ð¶Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸ Shift +вы наберете M-точка). ->> óÅÊÞÁÓ ÐÏÐÒÏÂÕÊÔÅ M-<, ÞÔÏÂÙ ÐÅÒÅÍÅÓÔÉÔØÓÑ × ÎÁÞÁÌÏ ÕÞÅÂÎÉËÁ. ðÏÔÏÍ - ÉÓÐÏÌØÚÕÊÔÅ C-v, ÞÔÏÂÙ ×ÅÒÎÕÔØÓÑ ÎÁÚÁÄ. +>> Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð¿Ð¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ M-<, чтобы перемеÑтитьÑÑ Ð² начало учебника. + Потом иÑпользуйте C-v, пока не вернетеÑÑŒ назад. ->> óÅÊÞÁÓ ÐÏÐÒÏÂÕÊÔÅ M->, ÞÔÏÂÙ ÐÅÒÅÍÅÓÔÉÔØÓÑ Ë ËÏÎÃÕ ÕÞÅÂÎÉËÁ. éÓÐÏÌØÚÕÊÔÅ - M-v, ÞÔÏÂÙ ×ÅÒÎÕÔØÓÑ ÎÁÚÁÄ. +>> Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð¿Ð¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ M->, чтобы перемеÑтитьÑÑ Ðº концу учебника. + ИÑпользуйте M-v, пока не вернетеÑÑŒ назад. -ëÕÒÓÏÒ ÍÏÖÎÏ ÐÅÒÅÍÅÝÁÔØ ËÌÁ×ÉÛÁÍÉ ÕÐÒÁ×ÌÅÎÉÑ ËÕÒÓÏÒÁ (ÓÔÒÅÌËÁÍÉ), ÅÓÌÉ ×ÁÛ -ÔÅÒÍÉÎÁÌ ÏÂÏÒÕÄÏ×ÁÎ ÉÍÉ. íÙ ÒÅËÏÍÅÎÄÕÅÍ ×ÙÕÞÉÔØ C-b, C-f, C-n É C-p ÐÏ ÔÒÅÍ -ÐÒÉÞÉÎÁÍ. ÷Ï-ÐÅÒ×ÙÈ, ÏÎÉ ÒÁÂÏÔÁÀÔ ÎÁ ÌÀÂÙÈ ÔÅÒÍÉÎÁÌÁÈ. ÷Ï-×ÔÏÒÙÈ, ÏÄÎÁÖÄÙ -ÐÏÌÕÞÉ× ÐÒÁËÔÉËÕ ÉÓÐÏÌØÚÏ×ÁÎÉÑ Emacs, ×Ù ÐÏÊÍÅÔÅ, ÞÔÏ ÉÓÐÏÌØÚÏ×ÁÔØ -CTRL-ÓÉÍ×ÏÌÙ ÕÄÏÂÎÅÅ É ÂÙÓÔÒÅÅ, ÞÅÍ ËÎÏÐËÉ ÓÏ ÓÔÒÅÌÏÞËÁÍÉ (ÐÏÔÏÍÕ ÞÔÏ ×Ù ÎÅ -ÕÂÉÒÁÅÔÅ ÒÕËÉ Ó ÏÂÙÞÎÏÇÏ ÉÈ ÐÏÌÏÖÅÎÉÑ ÐÒÉ ÐÅÞÁÔÉ). ÷-ÔÒÅÔØÉÈ, ËÁË ÔÏÌØËÏ ×Ù -ÐÒÉ×ÙËÎÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ CTRL-ÓÉÍ×ÏÌÙ, ×Ù ÓÍÏÖÅÔÅ ÔÁË ÖÅ ÌÅÇËÏ ×ÙÕÞÉÔØ É -ÉÓÐÏÌØÚÏ×ÁÔØ ÄÒÕÇÉÅ, ÒÁÓÛÉÒÅÎÎÙÅ ËÏÍÁÎÄÙ ÐÅÒÅÍÅÝÅÎÉÑ ËÕÒÓÏÒÁ. +КурÑор можно перемещать клавишами ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÑƒÑ€Ñора (Ñтрелками), еÑли ваш +терминал оборудован ими. Мы рекомендуем выучить C-b, C-f, C-n и C-p по трем +причинам. Во-первых, они работают на любых терминалах. Во-вторых, однажды +получив практику иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Emacs, вы поймете, что иÑпользовать +Control-ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÑƒÐ´Ð¾Ð±Ð½ÐµÐµ и быÑтрее, чем клавиши Ñо Ñтрелочками (потому что +вы не убираете руки Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾Ð³Ð¾ их Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ печати). Ð’-третьих, как +только вы привыкнете иÑпользовать Control-ÑочетаниÑ, вы Ñможете так же легко +выучить и иÑпользовать другие, более Ñложные команды Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÐºÑƒÑ€Ñора. -âÏÌØÛÉÎÓÔ×Ï ËÏÍÁÎÄ Emacs ÄÏÐÕÓËÁÀÔ ÚÁÄÁÎÉÅ ÃÉÆÒÏ×ÏÇÏ ÁÒÇÕÍÅÎÔÁ; ÄÌÑ -ÂÏÌØÛÉÎÓÔ×Á ËÏÍÁÎÄ, ÜÔÏ ÓÌÕÖÉÔ ÓÞÅÔÞÉËÏÍ ÐÏ×ÔÏÒÅÎÉÊ. þÔÏÂÙ ÚÁÄÁÔØ ÓÞÅÔÞÉË -ÐÏ×ÔÏÒÅÎÉÊ ÄÌÑ ËÏÍÁÎÄÙ, ÎÁÖÍÉÔÅ C-u, ÐÏÔÏÍ ÞÉÓÌÏ ÐÏ×ÔÏÒÅÎÉÊ, É ÕËÁÖÉÔÅ -ËÏÍÁÎÄÕ. åÓÌÉ Õ ×ÁÓ ÅÓÔØ ËÌÁ×ÉÛÁ META (ÉÌÉ EDIT ÉÌÉ ALT), ÔÏ ÃÉÆÒÏ×ÏÊ -ÁÒÇÕÍÅÎÔ ÍÏÖÎÏ ÚÁÄÁÔØ ÄÒÕÇÉÍ ÓÐÏÓÏÂÏÍ: ÎÁÂÅÒÉÔÅ ÃÉÆÒÙ, ÕÄÅÒÖÉ×ÁÑ ËÌÁ×ÉÛÕ -META. íÙ ÒÅËÏÍÅÎÄÕÅÍ ÐÒÉ×ÙËÎÕÔØ Ë ÉÓÐÏÌØÚÏ×ÁÎÉÀ C-u, ÐÏÓËÏÌØËÕ ÜÔÏ ÓÏÞÅÔÁÎÉÅ -ËÌÁ×ÉÛ ÒÁÂÏÔÁÅÔ ÎÁ ÌÀÂÏÍ ÔÅÒÍÉÎÁÌÅ. þÉÓÌÏ×ÏÊ ÁÒÇÕÍÅÎÔ ÔÁËÖÅ ÎÁÚÙ×ÁÅÔÓÑ -"ÐÒÅÆÉËÓÎÙÍ ÁÒÇÕÍÅÎÔÏÍ", ÐÏÓËÏÌØËÕ ×Ù ÚÁÄÁÅÔÅ ÁÒÇÕÍÅÎÔ ÄÏ ×ÙÐÏÌÎÅÎÉÑ -ËÏÍÁÎÄÙ. +БольшинÑтво команд Emacs допуÑкают задание цифрового аргумента; Ð´Ð»Ñ +большинÑтва команд, Ñто Ñлужит Ñчетчиком повторений. Чтобы задать Ñчетчик +повторений Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹, нажмите C-u, потом чиÑло повторений, и затем укажите +команду. ЕÑли у Ð²Ð°Ñ ÐµÑть клавиша META (или EDIT или ALT), то цифровой +аргумент можно задать другим ÑпоÑобом: наберите цифры, ÑƒÐ´ÐµÑ€Ð¶Ð¸Ð²Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÑƒ +META. Мы рекомендуем привыкнуть к иÑпользованию C-u, поÑкольку Ñто Ñочетание +клавиш работает на любом терминале. ЧиÑловой аргумент также называетÑÑ +"префикÑным аргументом", поÑкольку вы задаете аргумент до Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ +команды. -îÁÐÒÉÍÅÒ, C-u 8 C-f ÐÅÒÅÍÅÓÔÉÔ ËÕÒÓÏÒ ÎÁ ×ÏÓÅÍØ ÓÉÍ×ÏÌÏ× ×ÐÅÒÅÄ. +Ðапример, C-u 8 C-f перемеÑтит курÑор на воÑемь Ñимволов вперед. ->> ðÏÐÒÏÂÕÊÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ C-n ÉÌÉ C-p Ó ÃÉÆÒÏ×ÙÍ ÁÒÇÕÍÅÎÔÏÍ, ÞÔÏÂÙ - ÐÅÒÅÍÅÓÔÉÔØ ËÕÒÓÏÒ ÎÁ ÓÔÒÏËÕ ÒÑÄÏÍ Ó ÜÔÏÊ ËÏÍÁÎÄÏÊ. +>> Попробуйте иÑпользовать C-n или C-p Ñ Ñ†Ð¸Ñ„Ñ€Ð¾Ð²Ñ‹Ð¼ аргументом, чтобы + перемеÑтить курÑор на Ñту Ñтроку Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ одной команды. -íÎÏÇÉÅ ËÏÍÁÎÄÙ ÉÓÐÏÌØÚÕÀÔ ÞÉÓÌÏ×ÏÊ ÁÒÇÕÍÅÎÔ ËÁË ÓÞÅÔÞÉË ÐÏ×ÔÏÒÅÎÉÊ, ÎÏ -ÎÅËÏÔÏÒÙÅ ËÏÍÁÎÄÙ ÉÓÐÏÌØÚÕÀÔ ÅÇÏ ÄÒÕÇÉÍ ÓÐÏÓÏÂÏÍ. îÅËÏÔÏÒÙÅ ËÏÍÁÎÄÙ (ÎÏ ÎÉ -ÏÄÎÁ ÉÚ ÎÉÈ ÎÅ ÂÙÌÁ ÅÝÅ ÏÐÉÓÁÎÁ × ÄÁÎÎÏÍ ÔÅËÓÔÅ) ÉÓÐÏÌØÚÕÀÔ ÅÇÏ ËÁË ÆÌÁÇ -- -ÎÁÌÉÞÉÅ ÐÒÅÆÉËÓÎÏÇÏ ÁÒÇÕÍÅÎÔÁ ×ÎÅ ÚÁ×ÉÓÉÍÏÓÔÉ ÏÔ ÅÇÏ ÚÎÁÞÅÎÉÑ, ÉÚÍÅÎÑÅÔ -ÐÏ×ÅÄÅÎÉÅ ËÏÍÁÎÄÙ. +Многие команды иÑпользуют чиÑловой аргумент как Ñчетчик повторений, но +некоторые команды иÑпользуют его другим ÑпоÑобом. Ðекоторые команды (но мы +еще не изучили ни одну из них) иÑпользуют его как флаг -- наличие +префикÑного аргумента вне завиÑимоÑти от его значениÑ, изменÑет поведение +команды. -äÒÕÇÉÍ ×ÉÄÏÍ ÉÓËÌÀÞÅÎÉÊ Ñ×ÌÑÀÔÓÑ ËÌÀÞÉ C-v É M-v. ðÒÉ ÐÏÌÕÞÅÎÉÉ ÞÉÓÌÏ×ÏÇÏ -ÁÒÇÕÍÅÎÔÁ, ÏÎÉ ÐÒÏËÒÕÞÉ×ÁÀÔ ÜËÒÁÎ ××ÅÒÈ ÉÌÉ ×ÎÉÚ ÎÁ ÕËÁÚÁÎÎÏÅ ÞÉÓÌÏ ÓÔÒÏË, -×ÍÅÓÔÏ ÔÁËÏÇÏ ÖÅ ÞÉÓÌÁ ÜËÒÁÎÏ×. îÁÐÒÉÍÅÒ, C-u 8 C-v ÐÒÏËÒÕÔÉÔ ÜËÒÁÎ ÎÁ 8 -ÓÔÒÏË. +Другим видом иÑключений ÑвлÑÑŽÑ‚ÑÑ ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ C-v и M-v. При получении +чиÑлового аргумента, они прокручивают Ñкран вверх или вниз на указанное +чиÑло Ñтрок, вмеÑто указанного чиÑла Ñкранов. Ðапример, C-u 8 C-v прокрутит +Ñкран на 8 Ñтрок. ->> óÅÊÞÁÓ ÐÏÐÒÏÂÕÊÔÅ ËÏÍÂÉÎÁÃÉÀ C-u 8 C-v. +>> Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð¿Ð¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ набрать комбинацию C-u 8 C-v. -üÔÁ ËÏÍÁÎÄÁ ÄÏÌÖÎÁ ÐÒÏËÒÕÔÉÔØ ÜËÒÁÎ ÎÁ 8 ÓÔÒÏË ××ÅÒÈ. åÓÌÉ ×Ù ÈÏÔÉÔÅ -ÐÒÏËÒÕÔÉÔØ ÅÇÏ ×ÎÉÚ, ÍÏÖÅÔÅ ÚÁÄÁÔØ ÁÒÇÕÍÅÎÔ ÄÌÑ M-v. +Эта команда должна прокрутить Ñкран на 8 Ñтрок вверх. ЕÑли вы хотите +прокрутить его вниз, можете задать аргумент Ð´Ð»Ñ M-v. -åÓÌÉ ×Ù ÉÓÐÏÌØÚÕÅÔÅ ÏËÏÎÎÕÀ ÓÉÓÔÅÍÕ, ÔÁËÕÀ ËÁË X11 ÉÌÉ MS-Windows, ÔÏ ÄÏÌÖÎÁ -ÂÙÔØ ×ÉÄÎÁ ÐÒÑÍÏÕÇÏÌØÎÁÑ ÏÂÌÁÓÔØ, ÉÍÅÎÕÅÍÁÑ ÐÏÌÏÓÏÊ ÐÒÏËÒÕÔËÉ, ËÏÔÏÒÁÑ ×ÉÄÎÁ -Ó ÌÅ×ÏÊ ÓÔÏÒÏÎÙ ÏËÎÁ Emacs. ÷Ù ÍÏÖÅÔÅ ÐÒÏËÒÕÞÉ×ÁÔØ ÔÅËÓÔ, ÉÓÐÏÌØÚÕÑ -ÍÁÎÉÐÕÌÑÔÏÒ ÍÙÛØ. +ЕÑли вы иÑпользуете оконную ÑиÑтему, такую как X11 или MS-Windows, то должна +быть видна прÑÐ¼Ð¾ÑƒÐ³Ð¾Ð»ÑŒÐ½Ð°Ñ Ð¾Ð±Ð»Ð°Ñть, Ð¸Ð¼ÐµÐ½ÑƒÐµÐ¼Ð°Ñ Ð¿Ð¾Ð»Ð¾Ñой прокрутки, раÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð½Ð°Ñ +Ñ Ð¾Ð´Ð½Ð¾Ð¹ из Ñторон окна Emacs. Ð’Ñ‹ можете прокручивать текÑÑ‚, Ñ‰ÐµÐ»ÐºÐ°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¾Ð¹ +мыши на полоÑе прокрутки. ->> ðÏÐÒÏÂÕÊÔÅ ÐÅÒÅÍÅÝÁÔØ ÍÙÛØ ÐÒÉ ÎÁÖÁÔÏÊ ÓÒÅÄÎÅÊ ËÎÏÐËÅ ÍÙÛÉ. ÷Ù Õ×ÉÄÉÔÅ, - ËÁË ÔÅËÓÔ ÐÒÏËÒÕÞÉ×ÁÅÔÓÑ ××ÅÒÈ É ×ÎÉÚ. +ЕÑли ваша мышь имеет колеÑо прокрутки, вы можете иÑпользовать его. - -* õðòá÷ìåîéå ëõòóïòïí îá X-ôåòíéîáìå ------------------------------------- - -åÓÌÉ Õ ×ÁÓ X-ÔÅÒÍÉÎÁÌ, ÔÏ ÄÌÑ ÕÐÒÁ×ÌÅÎÉÑ ËÕÒÓÏÒÏÍ, ×ÁÍ, ×ÅÒÏÑÔÎÏ, ÐÏËÁÖÅÔÓÑ -ÂÏÌÅÅ ÌÅÇËÉÍ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ËÌÁ×ÉÛ ËÕÒÓÏÒÁ ÎÁ ÃÉÆÒÏ×ÏÊ ËÌÁ×ÉÁÔÕÒÅ -(ÓÐÒÁ×Á). óÔÒÅÌËÉ ×ÌÅ×Ï, ×ÐÒÁ×Ï, ××ÅÒÈ É ×ÎÉÚ ÐÅÒÅÄ×ÉÇÁÀÔ ËÕÒÓÏÒ × -ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÍ ÎÁÐÒÁ×ÌÅÎÉÉ -- ÏÎÉ ÒÁÂÏÔÁÀÔ ÔÏÞÎÏ ÔÁËÖÅ ËÁË C-b, C-f, C-p É -C-n, ÎÏ ÌÅÇÞÅ × ÎÁÂÏÒÅ É ÚÁÐÏÍÉÎÁÎÉÉ. ÷Ù ÔÁËÖÅ ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ -ÓÏÞÅÔÁÎÉÑ C-left É C-right ÄÌÑ ÐÅÒÅÄ×ÉÖÅÎÉÑ ÐÏ ÓÌÏ×ÁÍ, É C-up É C-down ÄÌÑ -ÐÅÒÅÄ×ÉÖÅÎÉÑ ÐÏ ÂÌÏËÁÍ (Ô.Å. ÐÁÒÁÇÒÁÆÁÍ, ÅÓÌÉ ×Ù ÒÅÄÁËÔÉÒÕÅÔÅ ÔÅËÓÔ). åÓÌÉ -Õ ×ÁÓ ÅÓÔØ ËÎÏÐËÉ ÐÏÍÅÞÅÎÎÙÅ HOME (ÉÌÉ BEGIN) É/ÉÌÉ END, ÔÏ ÏÎÉ ÂÕÄÕÔ -ÐÅÒÅÍÅÝÁÔØ ËÕÒÓÏÒ × ÎÁÞÁÌÏ É ËÏÎÅà ÓÔÒÏËÉ, Á C-home É C-end ÂÕÄÕÔ ÐÅÒÅÍÅÝÁÔØ -× ÎÁÞÁÌÏ É ËÏÎÅà ÆÁÊÌÁ. åÓÌÉ ÎÁ ×ÁÛÅÊ ËÌÁ×ÉÁÔÕÒÅ ÅÓÔØ ËÎÏÐËÉ PgUp É PgDn, -ÔÏ ×Ù ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÉÈ ÄÌÑ ÐÅÒÅÍÅÝÅÎÉÑ ××ÅÒÈ É ×ÎÉÚ ÐÏÓÔÒÁÎÉÞÎÏ, -ÁÎÁÌÏÇÉÞÎÏ ÉÓÐÏÌØÚÏ×ÁÎÉÀ M-v É C-v. - -÷ÓÅ ÜÔÉ ËÏÍÁÎÄÙ ÍÏÇÕÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÃÉÆÒÏ×ÏÊ ÁÒÇÕÍÅÎÔ, ÔÁË, ËÁË Ï ÜÔÏÍ -ÒÁÓÓËÁÚÁÎÏ ×ÙÛÅ. ÷Ù ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÕÓËÏÒÅÎÎÙÊ ÓÐÏÓÏ ××ÏÄÁ ÜÔÏÇÏ -ÁÒÇÕÍÅÎÔÁ: ÐÒÏÓÔÏ ÎÁÖÍÉÔÅ CONTROL ÉÌÉ META É ÎÁÂÅÒÉÔÅ ÞÉÓÌÏ. îÁÐÒÉÍÅÒ, ÄÌÑ -ÐÅÒÅÍÅÝÅÎÉÑ ÎÁ 12 ÓÌÏ× ×ÐÒÁ×Ï, ÎÁÂÅÒÉÔÅ C-1 C-2 C-right. úÁÐÏÍÎÉÔÅ, ÞÔÏ ÔÁË -ÏÞÅÎØ ÌÅÇËÏ ÎÁÂÉÒÁÔØ, ÐÏÔÏÍÕ ÞÔÏ ×Ù ÎÅ ÏÔÐÕÓËÁÅÔÅ ËÎÏÐËÕ CONTROL ÍÅÖÄÕ -ÎÁÖÁÔÉÑÍÉ. - - -* åóìé EMACS úá÷éó +* ЕСЛИ EMACS ЗÐВИС ------------------ -åÓÌÉ Emacs ÐÅÒÅÓÔÁÌ ÒÅÁÇÉÒÏ×ÁÔØ ÎÁ ×ÁÛÉ ËÏÍÁÎÄÙ, ÔÏ ×Ù ÍÏÖÅÔÅ ÉÚÂÅÖÁÔØ ÜÔÏÇÏ, -ÐÒÏÓÔÏ ÎÁÖÁ× C-g. ÷Ù ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ C-g, ÞÔÏÂÙ ÏÓÔÁÎÏ×ÉÔØ ×ÙÐÏÌÎÅÎÉÅ -ËÏÍÁÎÄ, ËÏÔÏÒÙÅ ÓÌÉÛËÏÍ ÄÏÌÇÏ ×ÙÐÏÌÎÑÀÔÓÑ. +ЕÑли Emacs переÑтал реагировать на ваши команды, то вы можете вывеÑти его из +Ñтого ÑоÑтоÑÐ½Ð¸Ñ Ð½Ð°Ð¶Ð°Ð² C-g. Ð’Ñ‹ можете иÑпользовать C-g, чтобы оÑтановить +выполнение команд, которые Ñлишком долго выполнÑÑŽÑ‚ÑÑ. -÷Ù ÔÁËÖÅ ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ C-g ÄÌÑ ÏÔÍÅÎÙ ÎÁÂÒÁÎÎÏÇÏ ÃÉÆÒÏ×ÏÇÏ ÁÒÇÕÍÅÎÔÁ -ÉÌÉ ËÏÍÁÎÄÙ, ËÏÔÏÒÁÑ ÎÁÞÁÌÁ ×ÙÐÏÌÎÑÔØÓÑ, ÎÏ ËÏÔÏÒÕÀ ×Ù ÎÅ ÈÏÔÉÔÅ ÚÁ×ÅÒÛÁÔØ. +Ð’Ñ‹ также можете иÑпользовать C-g Ð´Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹ набранного цифрового аргумента +или команды, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° выполнÑтьÑÑ, но которую вы не хотите завершить. ->> îÁÂÅÒÉÔÅ C-u 100 ÄÌÑ ÚÁÄÁÎÉÑ ÁÒÇÕÍÅÎÔÁ 100, ÐÏÔÏÍ ÎÁÖÍÉÔÅ C-g. ôÅÐÅÒØ - ÎÁÖÍÉÔÅ C-f. ëÕÒÓÏÒ ÄÏÌÖÅÎ ÐÅÒÅÍÅÓÔÉÔØÓÑ ×ÓÅÇÏ ÎÁ ÏÄÉÎ ÓÉÍ×ÏÌ, ÐÏÔÏÍÕ ÞÔÏ - ×Ù ÏÔÍÅÎÉÌÉ ÁÒÇÕÍÅÎÔ ÎÁÖÁÔÉÅÍ C-g. +>> Ðаберите C-u 100 Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð° 100, потом нажмите C-g. Теперь + нажмите C-f. КурÑор должен перемеÑтитьÑÑ Ð²Ñего на один Ñимвол, потому что + вы отменили аргумент нажатием C-g. -åÓÌÉ ×Ù ÎÁÖÁÌÉ ÐÏ ÏÛÉÂËÅ, ÔÏ ×Ù ÔÁË ÖÅ ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ C-g ÞÔÏÂÙ -ÉÚÂÅÖÁÔØ ×ÏÚÄÅÊÓÔ×ÉÑ ÄÁÎÎÏÊ ËÏÍÁÎÄÙ. +ЕÑли вы нажали по ошибке, то вы так же можете иÑпользовать C-g чтобы +избежать воздейÑÑ‚Ð²Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ команды. -* úáðòåýåîîùå ëïíáîäù (DISABLED COMMANDS) +* ЗÐПРЕЩЕÐÐЫЕ КОМÐÐДЫ (DISABLED COMMANDS) ----------------------------------------- -îÅËÏÔÏÒÙÅ ËÏÍÁÎÄÙ Emacs "ÚÁÐÒÅÝÅÎÙ", ÐÏÓËÏÌØËÕ ÎÁÞÉÎÁÀÝÉÅ ÐÏÌØÚÏ×ÁÔÅÌÉ ÍÏÇÕÔ -ÓÌÕÞÁÊÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÉÈ ÄÌÑ ÓÏ×ÅÒÛÅÎÉÑ ÏÐÁÓÎÙÈ ÄÅÊÓÔ×ÉÊ. +Ðекоторые команды Emacs "запрещены", так что начинающие пользователи не +Ñмогут Ñлучайно иÑпользовать их. -åÓÌÉ ×Ù ÎÁÂÒÁÌÉ ÏÄÎÕ ÉÚ ÚÁÐÒÅÝÅÎÎÙÈ ËÏÍÁÎÄ, ÔÏ Emacs ÐÏËÁÖÅÔ ÓÏÏÂÝÅÎÉÅ, -ÇÏ×ÏÒÑÝÅÅ Ï ÔÏÍ, ËÁËÁÑ ËÏÍÁÎÄÁ ×ÙÚÙ×ÁÅÔÓÑ, É ÚÁÐÒÏÓÉÔ Õ ×ÁÓ, ÈÏÔÉÔÅ ÌÉ ×Ù -ÐÒÏÄÏÌÖÁÔØ ÒÁÂÏÔÕ É ×ÙÐÏÌÎÑÔØ ÄÁÎÎÕÀ ËÏÍÁÎÄÕ. +ЕÑли вы набрали одну из запрещенных команд, то Emacs покажет Ñообщение, +говорÑщее о том, ÐºÐ°ÐºÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° вызываетÑÑ, и запроÑит у ваÑ, хотите ли вы +продолжать работу и выполнить данную команду. -åÓÌÉ ×Ù ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÐÏÐÒÏÂÏ×ÁÔØ ×ÙÐÏÌÎÉÔØ ËÏÍÁÎÄÕ, ÔÏ ÎÁÖÍÉÔÅ ËÌÁ×ÉÛÕ - (ÐÒÏÂÅÌ) × ÏÔ×ÅÔ ÎÁ ÚÁÄÁÎÎÙÊ ×ÏÐÒÏÓ. ïÂÙÞÎÏ, ÅÓÌÉ ×Ù ÎÅ ÈÏÔÉÔÅ -×ÙÐÏÌÎÑÔØ ÚÁÐÒÅÝÅÎÎÕÀ ËÏÍÁÎÄÕ, ÔÏ ÏÔ×ÅÔØÔÅ ÎÁ ×ÏÐÒÏÓ ÎÁÖÁÔÉÅÍ ËÌÁ×ÉÛÉ "n". +ЕÑли вы дейÑтвительно попробовать выполнить Ñту команду, то нажмите клавишу + (пробел) в ответ на заданный вопроÑ. Обычно, еÑли вы не хотите +выполнÑть запрещенную команду, то ответьте на Ð²Ð¾Ð¿Ñ€Ð¾Ñ Ð½Ð°Ð¶Ð°Ñ‚Ð¸ÐµÐ¼ клавиши "n". ->> îÁÖÍÉÔÅ `C-x C-l' (×ÙËÌÀÞÅÎÎÁÑ ËÏÍÁÎÄÁ), Á ÐÏÔÏÍ ÏÔ×ÅÔØÔÅ "n" ÎÁ ÚÁÄÁÎÎÙÊ - ×ÏÐÒÏÓ. +>> Ðажмите `C-x C-l' ("запрещеннаÑ" команда), а потом ответьте "n" на + заданный вопроÑ. -* ïëîá +* ОКÐÐ (WINDOWS) ------ -Emacs ÍÏÖÅÔ ÏÔÏÂÒÁÖÁÔØ ÉÎÆÏÒÍÁÃÉÀ × ÎÅÓËÏÌØËÉÈ ÏËÎÁÈ, ËÁÖÄÏÅ ÉÚ ËÏÔÏÒÙÈ -ÏÔÏÂÒÁÖÁÅÔ Ó×ÏÊ ÔÅËÓÔ. ðÏÚÖÅ ÍÙ ÏÂßÑÓÎÉÍ ËÁË ÒÁÂÏÔÁÔØ Ó ÎÅÓËÏÌØËÉÍÉ ÏËÎÁÍÉ. -á ÓÅÊÞÁÓ ÍÙ ÈÏÔÉÍ ÏÂßÑÓÎÉÔØ ×ÁÍ ËÁË ÉÚÂÁ×ÌÑÔØÓÑ ÏÔ ÌÉÛÎÉÈ ÏËÏÎ É -×ÅÒÎÕÔØÓÑ Ë ÒÅÄÁËÔÉÒÏ×ÁÎÉÀ × ÏÄÎÏÍ ÏËÎÅ. üÔÏ ÏÞÅÎØ ÐÒÏÓÔÏ ÓÄÅÌÁÔØ: +Emacs может отображать информацию в неÑкольких "окнах", каждое из которых +отображает Ñвой текÑÑ‚. Позже мы объÑÑним как работать Ñ Ð½ÐµÑколькими окнами. +Ð ÑÐµÐ¹Ñ‡Ð°Ñ Ð¼Ñ‹ хотим объÑÑнить вам как избавлÑтьÑÑ Ð¾Ñ‚ лишних окон и вернутьÑÑ Ðº +редактированию в одном окне. Это очень проÑто Ñделать: - C-x 1 ïÄÎÏ ÏËÎÏ. (ÚÁËÒÙÔØ ×ÓÅ ÄÒÕÇÉÅ ÏËÎÁ). + C-x 1 Одно окно. (закрыть вÑе другие окна). -üÔÏ CONTROL-x ÓÏ ÓÌÅÄÕÀÝÅÊ ÃÉÆÒÏÊ 1. C-x 1 ÒÁÚ×ÅÒÎÅÔ ÏËÎÏ, ËÏÔÏÒÏÅ ÓÏÄÅÒÖÉÔ -ËÕÒÓÏÒ, ÔÁË, ÞÔÏÂÙ ÏÎÏ ÚÁÎÑÌÏ ×ÅÓØ ÜËÒÁÎ. ðÒÉ ÜÔÏÍ ÂÕÄÕÔ ÕÄÁÌÅÎÙ ×ÓÅ -ÏÓÔÁÌØÎÙÅ ÏËÎÁ. +Это CONTROL-x Ñо Ñледующей цифрой 1. C-x 1 развернет окно, которое Ñодержит +курÑор, так, чтобы оно занÑло веÑÑŒ Ñкран. При Ñтом будут удалены вÑе +оÑтальные окна. ->> ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ÎÁ ÜÔÕ ÓÔÒÏËÕ É ÎÁÖÍÉÔÅ C-u 0 C-l. +>> ПеремеÑтите курÑор на Ñту Ñтроку и нажмите C-u 0 C-l. ->> îÁÂÅÒÉÔÅ CONTROL-h k CONTROL-f. - ðÏÓÍÏÔÒÉÔÅ, ËÁË ÔÅËÕÝÅÅ ÏËÎÏ ÓÏÖÍÅÔÓÑ, ËÏÇÄÁ ÎÏ×ÏÅ ÐÏÑ×ÉÔÓÑ É ÏÔÏÂÒÁÚÉÔ - ÄÏËÕÍÅÎÔÁÃÉÀ ÎÁ ÓÏÞÅÔÁÎÉÅ ËÌÁ×ÉÛ CONTROL-f. +>> Ðаберите C-h k C-f. + ПоÑмотрите, как текущее окно ÑожметÑÑ, когда поÑвитÑÑ Ð½Ð¾Ð²Ð¾Ðµ окно и + отобразит документацию Ð´Ð»Ñ ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ C-f. ->> îÁÂÅÒÉÔÅ C-x 1 É ÐÏÓÍÏÔÒÉÔÅ, ËÁË ÏËÎÏ Ó ÄÏËÕÍÅÎÔÁÃÉÅÊ ÉÓÞÅÚÎÅÔ. +>> Ðаберите C-x 1 и поÑмотрите, как окно Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸ÐµÐ¹ иÑчезнет. -üÔÁ ËÏÍÁÎÄÁ ÏÔÌÉÞÁÅÔÓÑ ÏÔ ÄÒÕÇÉÈ ËÏÍÁÎÄ, ËÏÔÏÒÙÅ ×Ù ÉÚÕÞÉÌÉ, ÔÅÍ, ÞÔÏ ÏÎÁ -ÓÏÓÔÏÉÔ ÉÚ Ä×ÕÈ ÓÉÍ×ÏÌÏ×. ïÎÁ ÎÁÞÉÎÁÅÔÓÑ ÓÏ ÚÎÁËÁ CONTROL-x. åÓÔØ ÃÅÌÙÊ -ÎÁÂÏÒ ËÏÍÁÎÄ, ËÏÔÏÒÙÅ ÎÁÞÉÎÁÀÔÓÑ Ó CONTROL-x; ÍÎÏÇÉÅ ÉÚ ÎÉÈ ÒÁÂÏÔÁÀÔ Ó -ÏËÎÁÍÉ, ÂÕÆÅÒÁÍÉ, ÆÁÊÌÁÍÉ É ÁÎÁÌÏÇÉÞÎÙÍÉ ×ÅÝÁÍÉ. üÔÉ ËÏÍÁÎÄÙ ÓÏÓÔÏÑÔ ÉÚ -Ä×ÕÈ, ÔÒÅÈ ÉÌÉ ÞÅÔÙÒÅÈ ÚÎÁËÏ×. +Эта команда отличаетÑÑ Ð¾Ñ‚ других изученных команд, что она ÑоÑтоит из двух +Ñочетаний клавиш. Она начинаетÑÑ Ñ ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ CONTROL-x. ЕÑть целый набор +команд, которые начинаютÑÑ Ñ CONTROL-x -- многие из них работают Ñ Ð¾ÐºÐ½Ð°Ð¼Ð¸, +буферами, файлами и Ñ‚.п. вещами. Эти команды ÑоÑтоÑÑ‚ из двух, трех или +четырех Ñочетаний клавиш. -* ÷óôá÷ëá é õäáìåîéå +* ВСТÐВКРИ УДÐЛЕÐИЕ -------------------- -åÓÌÉ ×Ù ÈÏÔÉÔÅ ×ÓÔÁ×ÉÔØ ÔÅËÓÔ, ÔÏ ÐÒÏÓÔÏ ÎÁÂÉÒÁÊÔÅ ÅÇÏ. óÉÍ×ÏÌÙ, ËÏÔÏÒÙÅ ×Ù -ÍÏÖÅÔÅ ×ÉÄÅÔØ, ÔÁËÉÅ ËÁË A, 7, *, É ÐÒ. ÐÏÎÉÍÁÀÔÓÑ Emacs'ÏÍ ËÁË ÔÅËÓÔ É -×ÓÔÁ×ÌÑÀÔÓÑ ÎÅÍÅÄÌÅÎÎÏ. îÁÖÍÉÔÅ (ËÌÁ×ÉÛÁ ÐÅÒÅ×ÏÄÁ ËÁÒÅÔËÉ), ÞÔÏÂÙ -×ÓÔÁ×ÉÔØ ÓÉÍ×ÏÌ ÎÏ×ÏÊ ÓÔÒÏËÉ. +ЕÑли вы хотите вÑтавить текÑÑ‚, то проÑто набирайте его. Обычные Ñимволы, +такие как A, 7, *, и пр. вÑтавлÑÑŽÑ‚ÑÑ Ñразу как вы нажимаете на них. Чтобы +вÑтавить Ñимвол новой Ñтроки нажмите (клавиша перевода каретки, +чаÑто помечена как "Enter"). -÷Ù ÍÏÖÅÔÅ ÕÄÁÌÉÔØ ÎÁÂÒÁÎÎÙÊ ÓÉÍ×ÏÌ, ÎÁÖÉÍÁÑ ËÌÁ×ÉÛÕ . -- -ÜÔÏ ËÌÁ×ÉÛÁ ÎÁ ËÌÁ×ÉÁÔÕÒÅ, ËÏÔÏÒÕÀ ×Ù ÉÓÐÏÌØÚÕÅÔÅ É ×ÎÅ Emacs ÄÌÑ ÕÄÁÌÅÎÉÑ -ÐÏÓÌÅÄÎÅÇÏ ÎÁÂÒÁÎÎÏÇÏ ÓÉÍ×ÏÌÁ. ïÂÙÞÎÏ ÜÔÏ ÂÏÌØÛÁÑ ËÌÁ×ÉÛÁ, ÒÁÓÐÏÌÏÖÅÎÎÁÑ -ÎÅÓËÏÌØËÏ ×ÙÛÅ ËÌÁ×ÉÛÉ ; ÏÂÙÞÎÏ ÏÎÁ ÐÏÍÅÞÅÎÁ ËÁË "Delete", "Del" -ÉÌÉ "Backspace". +Чтобы удалить Ñимвол перед курÑором, нажмите клавишу . Обычно Ñто +клавиша Ð¿Ð¾Ð¼ÐµÑ‡ÐµÐ½Ð½Ð°Ñ ÐºÐ°Ðº "Backspace" -- та ÑÐ°Ð¼Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ°, которую вы обычно +иÑпользуете вне Emacs Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñледнего набранного Ñимвола. -åÓÌÉ ÂÏÌØÛÁÑ ËÌÁ×ÉÛÁ ÐÏÍÅÞÅÎÁ ËÁË "Backspace", ÔÏ ÜÔÏ ÔÏ, ÞÔÏ ×ÁÍ ÎÕÖÎÏ -ÉÓÐÏÌØÚÏ×ÁÔØ ÔÏÇÄÁ, ËÏÇÄÁ ×Ù ÂÕÄÅÔÅ ÞÉÔÁÔØ ÐÒÏ . åÓÌÉ Õ ×ÁÓ Ë ÔÏÍÕ -ÖÅ ÅÓÔØ É ËÌÁ×ÉÛÁ, ÐÏÍÅÞÅÎÎÁÑ ËÁË "Delete", ÎÏ ÏÎÁ ÉÍÅÅÔ ÄÒÕÇÕÀ ÆÕÎËÃÉÀ, -ÏÔÌÉÞÎÕÀ ÏÔ . +Ðа клавиатуре может приÑутÑтвовать и Ð´Ñ€ÑƒÐ³Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ°, Ð¿Ð¾Ð¼ÐµÑ‡ÐµÐ½Ð½Ð°Ñ ÐºÐ°Ðº +"Delete", но она имеет другую функцию, отличную от . -÷ÏÏÂÝÅ ÇÏ×ÏÒÑ, ÕÄÁÌÑÅÔ ÓÉÍ×ÏÌ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ ÐÅÒÅÄ ÔÅËÕÝÅÊ -ÐÏÚÉÃÉÅÊ ËÕÒÓÏÒÁ. +>> Попробуйте Ñделать Ñто -- наберите неÑколько Ñимволов, а затем удалите их + Ð½Ð°Ð¶Ð¸Ð¼Ð°Ñ . Ðе волнуйтеÑÑŒ что Ñтот файл изменÑетÑÑ -- вы не изменÑете + учебник. Это ваша Ð»Ð¸Ñ‡Ð½Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ ÑƒÑ‡ÐµÐ±Ð½Ð¸ÐºÐ°. ->> ðÏÐÒÏÂÕÊÔÅ ×ÙÐÏÌÎÉÔØ ÜÔÏ ÓÅÊÞÁÓ -- ÎÁÂÅÒÉÔÅ ÎÅÓËÏÌØËÏ ÓÉÍ×ÏÌÏ×, Á ÚÁÔÅÍ - ÕÄÁÌÉÔÅ ÉÈ ÎÁÖÉÍÁÑ . îÅ ×ÏÌÎÕÊÔÅÓØ Ï ÉÚÍÅÎÅÎÉÑÈ ÜÔÏÇÏ ÆÁÊÌÁ -- - ×Ù ÎÅ ÉÚÍÅÎÑÅÔÅ ÇÌÁ×ÎÙÊ ÕÞÅÂÎÉË; ÜÔÏ ×ÁÛÁ ÌÉÞÎÁÑ ËÏÐÉÑ ÕÞÅÂÎÉËÁ. +Когда Ñтрока текÑта ÑтановитÑÑ Ñлишком большой Ð´Ð»Ñ Ñтроки Ñкрана, то она +"продолжаетÑÑ" на Ñледующей Ñтроке. ЕÑли вы иÑпользуете графичеÑкий +диÑплей, то небольшие изогнутые Ñтрелки поÑвÑÑ‚ÑÑ Ð½Ð° обоих Ñторонах Ñкрана +("fringes") чтобы показать, что Ñтрока продолжаетÑÑ Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐ¹ +Ñтроки. ЕÑли вы иÑпользуете текÑтовый терминал, то "продолжаемаÑ" Ñтрока +обозначаетÑÑ Ñимволом "обратный ÑлÑш" ("\") в правой чаÑти Ñкрана. -ëÏÇÄÁ ÓÔÒÏËÁ ÔÅËÓÔÁ ÓÔÁÎÏ×ÉÔÓÑ ÓÌÉÛËÏÍ ÂÏÌØÛÏÊ ÄÌÑ ÓÔÒÏËÉ ÜËÒÁÎÁ, ÔÏ ÏÎÁ -"ÐÒÏÄÏÌÖÁÅÔÓÑ" ÎÁ ÓÌÅÄÕÀÝÅÊ ÓÔÒÏËÅ ÜËÒÁÎÁ. óÉÍ×ÏÌ "ÏÂÒÁÔÎÙÊ ÓÌÜÛ" ("\") (ÉÌÉ -ÅÓÌÉ ×Ù ÉÓÐÏÌØÚÕÅÔÅ ÏËÏÎÎÕÀ ÓÉÓÔÅÍÕ, ÔÏ ÜÔÏ ÂÕÄÅÔ ÚÎÁÞÏË × ×ÉÄÅ ÍÁÌÅÎØËÏÊ -ÉÚÏÇÎÕÔÏÊ ÓÔÒÅÌËÉ) Ó ÐÒÁ×ÏÊ ÇÒÁÎÉÃÙ ÐÏËÁÚÙ×ÁÅÔ, ÞÔÏ ÓÔÒÏËÁ ÂÕÄÅÔ -ÐÒÏÄÏÌÖÁÔØÓÑ Ó ÐÒÅÄÙÄÕÝÅÊ ÓÔÒÏËÉ. +>> Вводите текÑÑ‚, пока он не доÑтигнет правой границы, и продолжайте вÑтавку + Ñимволов. Ð’Ñ‹ увидите что поÑвитÑÑ "продолжаемаÑ" Ñтрока. ->> ÷×ÏÄÉÔÅ ÔÅËÓÔ, ÐÏËÁ ÏÎ ÎÅ ÄÏÓÔÉÇÎÅÔ ÐÒÁ×ÏÊ ÇÒÁÎÉÃÙ, É ÐÒÏÄÏÌÖÁÊÔÅ ×ÓÔÁ×ËÕ - ÓÉÍ×ÏÌÏ×. ÷Ù Õ×ÉÄÉÔÅ, ËÁË ÐÏÑ×ÉÔÓÑ ÓÉÍ×ÏÌ ÐÒÏÄÏÌÖÅÎÉÑ ÓÔÒÏËÉ. +>> ИÑпользуйте Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑта до тех пор, пока Ñтрока Ñнова не + помеÑтитÑÑ Ð² Ñкран. Символ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ñтроки иÑчезнет Ñ Ñкрана. ->> éÓÐÏÌØÚÕÊÔÅ ÄÌÑ ÕÄÁÌÅÎÉÑ ÔÅËÓÔÁ ÄÏ ÔÅÈ ÐÏÒ, ÐÏËÁ ÓÔÒÏËÁ ÎÅ - ÐÏÍÅÓÔÉÔÓÑ × ÜËÒÁÎ ÓÎÏ×Á. óÉÍ×ÏÌ ÐÒÏÄÏÌÖÅÎÉÑ ÓÔÒÏËÉ ÉÓÞÅÚÎÅÔ Ó ÜËÒÁÎÁ. +Символ новой Ñтроки можно удалÑть точно так же, как и любой другой Ñимвол. +Удаление Ñимвола новой Ñтроки между Ð´Ð²ÑƒÐ¼Ñ Ñтроками приведет к их Ñклейке в +одну. ЕÑли Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ð°Ñ Ñтрока будет Ñлишком длинной, чтобы вмеÑтитьÑÑ Ð² +Ñкран, то она будет отображена как Ñтрока "Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸ÐµÐ¼". -óÉÍ×ÏÌ ÎÏ×ÏÊ ÓÔÒÏËÉ ÍÏÖÎÏ ÕÄÁÌÑÔØ ÔÏÞÎÏ ÔÁË ÖÅ, ËÁË É ÌÀÂÏÊ ÄÒÕÇÏÊ ÓÉÍ×ÏÌ. -õÄÁÌÅÎÉÅ ÓÉÍ×ÏÌÁ ÎÏ×ÏÊ ÓÔÒÏËÉ ÍÅÖÄÕ Ä×ÕÍÑ ÓÔÒÏËÁÍÉ ÐÒÉ×ÅÄÅÔ Ë ÉÈ ÓËÌÅÊËÅ × -ÏÄÎÕ. åÓÌÉ ÐÏÌÕÞÅÎÎÁÑ ÓÔÒÏËÁ ÂÕÄÅÔ ÓÌÉÛËÏÍ ÄÌÉÎÎÏÊ, ÞÔÏÂÙ ×ÍÅÓÔÉÔØÓÑ × -ÜËÒÁÎ, ÔÏ ÏÎÁ ÂÕÄÅÔ ÏÔÏÂÒÁÖÅÎÁ ËÁË ÓÔÒÏËÁ Ó ÐÒÏÄÏÌÖÅÎÉÅÍ, ËÁË ÜÔÏ ÂÙÌÏ -ÏÐÉÓÁÎÏ ×ÙÛÅ. +>> ПеремеÑтите курÑор в начало Ñтроки и нажмите . Это Ñоединит + текущую Ñтроку Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐ¹. ->> ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ × ÎÁÞÁÌÏ ÓÔÒÏËÉ É ÎÁÖÍÉÔÅ . üÔÏ ÓÏÅÄÉÎÉÔ - ÔÅËÕÝÕÀ ÓÔÒÏËÕ Ó ÐÒÅÄÙÄÕÝÅÊ. +>> Ðажмите Ð´Ð»Ñ Ð²Ñтавки Ñимвола новой Ñтроки, вмеÑто удаленного + вами. ->> îÁÖÍÉÔÅ ÄÌÑ ×ÓÔÁ×ËÉ ÎÏ×ÏÇÏ ÓÉÍ×ÏÌÁ ÓÔÒÏËÉ, ×ÍÅÓÔÏ ÕÄÁÌÅÎÎÏÇÏ - ×ÁÍÉ. +Помните, что многие команды Emacs могут получать Ñчетчик Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð¸Ñ -- +обычные Ñимволы не ÑвлÑÑŽÑ‚ÑÑ Ð¸Ñключением. Ð’Ñ‹ можете вÑтавлÑть по неÑколько +Ñимволов, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñчетчики повторений. -ðÏÍÎÉÔÅ, ÞÔÏ ÍÎÏÇÉÅ ËÏÍÁÎÄÙ Emacs ÍÏÇÕÔ ÐÏÌÕÞÁÔØ ÓÞÅÔÞÉË ÐÏ×ÔÏÒÅÎÉÑ; ÐÒÏÓÔÙÅ -ÓÉÍ×ÏÌÙ ÎÅ Ñ×ÌÑÀÔÓÑ ÉÓËÌÀÞÅÎÉÅÍ. ÷Ù ÍÏÖÅÔÅ ×ÓÔÁ×ÌÑÔØ ÐÏ ÎÅÓËÏÌØËÏ ÓÉÍ×ÏÌÏ×, -ÉÓÐÏÌØÚÕÑ ÓÞÅÔÞÉËÉ ÐÏ×ÔÏÒÅÎÉÊ. +>> Попробуйте -- наберите C-u 8 * Ð´Ð»Ñ Ð²Ñтавки ********. ->> ðÏÐÒÏÂÕÊÔÅ ÐÒÏ×ÅÒÉÔØ ÜÔÏ -- ÎÁÂÅÒÉÔÅ C-u 8 * ÄÌÑ ×ÓÔÁ×ËÉ ********. +Ð’Ñ‹ уже научилиÑÑŒ оÑновам набора текÑта в Emacs и иÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾ÑˆÐ¸Ð±Ð¾Ðº. Ð’Ñ‹ +также можете удалÑть Ñлова и Ñтроки. Вот оÑновные операции удалениÑ: -ôÅÐÅÒØ ×Ù ÎÁÕÞÉÌÉÓØ ÏÓÎÏ×ÁÍ ÎÁÂÏÒÁ ÔÅËÓÔÁ × Emacs É ÉÓÐÒÁ×ÌÅÎÉÑ ÏÛÉÂÏË. ÷Ù -ÔÁËÖÅ ÍÏÖÅÔÅ ÕÄÁÌÑÔØ ÓÌÏ×Á É ÓÔÒÏËÉ. úÄÅÓØ ÐÒÉ×ÅÄÅÎ ÓÐÉÓÏË ÏÐÅÒÁÃÉÊ -ÕÄÁÌÅÎÉÑ: + удалить Ñимвол перед курÑором + C-d удалить Ñимвол Ñледующий за (над) курÑором - ÕÄÁÌÉÔØ ÓÉÍ×ÏÌ ÐÅÒÅÄ ËÕÒÓÏÒÏÍ - C-d ÕÄÁÌÉÔØ ÓÉÍ×ÏÌ ÓÌÅÄÕÀÝÉÊ ÚÁ (ÎÁÄ) ËÕÒÓÏÒÏÍ + M- "убить" Ñлово, ÑтоÑщее перед курÑором + M-d "убить" Ñлово, ÑтоÑщее за курÑором - M- ÕÂÉÔØ ÓÌÏ×Ï, ÓÔÏÑÝÅÅ ÐÅÒÅÄ ËÕÒÓÏÒÏÍ - M-d ÕÂÉÔØ ÓÌÏ×Ï, ÓÌÅÄÕÀÝÅÅ ÚÁ ËÕÒÓÏÒÏÍ + C-k "убить" вÑе от курÑора до конца Ñтроки + M-k "убить" вÑе до конца Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ - C-k ÕÂÉÔØ ×ÓÅ ÏÔ ËÕÒÓÏÒÁ ÄÏ ËÏÎÃÁ ÓÔÒÏËÉ - M-k ÕÂÉÔØ ×ÓÅ ÄÏ ËÏÎÃÁ ÐÒÅÄÌÏÖÅÎÉÑ +Заметьте, что и C-d, вмеÑте Ñ M- и M-d продолжает параллель, +начатую C-f и M-f (да, -- Ñто не наÑтоÑщий управлÑющий Ñимвол, но не +нужно об Ñтом волноватьÑÑ). C-k и M-k, также как и C-e и M-e, продолжают +параллель между Ñтроками и предложениÑми. -úÁÍÅÔØÔÅ, ÞÔÏ É C-d, ×ÍÅÓÔÅ Ó M- É M-d ÒÁÓÛÉÒÑÀÔ -ÐÁÒÁÌÌÅÌØ, ÎÁÞÁÔÕÀ C-f É M-f (ÄÁ, -- ÜÔÏ ÎÅ ÎÁÓÔÏÑÝÉÊ ÕÐÒÁ×ÌÑÀÝÉÊ -ÓÉÍ×ÏÌ, ÎÏ ÎÅ ÎÕÖÎÏ Ï ÜÔÏÍ ×ÏÌÎÏ×ÁÔØÓÑ). C-k É M-k, ËÁË É C-e É M-e, -ÐÒÏ×ÏÄÑÔ ÐÁÒÁÌÌÅÌØ ÍÅÖÄÕ ÓÔÒÏËÁÍÉ É ÐÒÅÄÌÏÖÅÎÉÑÍÉ. +Ð’Ñ‹ можете "убить" любую чаÑть текÑта Ñледующим методом. ПеремеÑтитеÑÑŒ к +одному из концов выбранной облаÑти и нажмите C- ( -- клавиша +пробела). ПеремеÑтите курÑор к другому концу текÑта, который вы ÑобираетеÑÑŒ +"убить". По мере того, как вы будете Ñто делать, Emacs будет подÑвечивать +текÑÑ‚ между курÑором и точкой, где вы нажали C-. Затем нажмите C-w. Эта +Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ ÑƒÐ±ÑŒÐµÑ‚ веÑÑŒ текÑÑ‚ между Ð´Ð²ÑƒÐ¼Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼Ð¸ позициÑми. -÷Ù ÍÏÖÅÔÅ ÕÂÉÔØ ÌÀÂÕÀ ÞÁÓÔØ ÂÕÆÅÒÁ ÏÄÎÉÍ ÍÅÔÏÄÏÍ. ðÅÒÅÍÅÓÔÉÔÅÓØ ÎÁ ÏÄÉÎ -ÉÚ ËÏÎÃÏ× ×ÙÂÒÁÎÎÏÊ ÏÂÌÁÓÔÉ É ÎÁÖÍÉÔÅ C-@ ÉÌÉ C- (ÏÄÎÏ ÉÚ ÜÔÉÈ -ÓÏÞÅÔÁÎÉÊ). úÄÅÓØ ÏÂÏÚÎÁÞÁÅÔ ËÌÁ×ÉÛÕ ÐÒÏÂÅÌÁ. ðÅÒÅÍÅÓÔÉÔÅÓØ ÎÁ ÄÒÕÇÏÊ -ËÏÎÅà ÏÂÌÁÓÔÉ É ÎÁÖÍÉÔÅ C-w. üÔÁ ÏÐÅÒÁÃÉÑ ÕÂØÅÔ ×ÅÓØ ÔÅËÓÔ ÍÅÖÄÕ Ä×ÕÍÑ -ÕËÁÚÁÎÎÙÍÉ ÐÏÚÉÃÉÑÍÉ. +>> ПеремеÑтите курÑор к букве Ð’ в начале предыдущего параграфа. +>> Ðаберите C-. Emacs должен отобразить в нижней чаÑти Ñкрана Ñообщение + "Mark set" (метка уÑтановлена). +>> ПеремеÑтите курÑор к букве о в Ñлове "концов", на второй Ñтроке параграфа. +>> Ðажмите C-w. Это удалит текÑÑ‚ Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ Ñ Ð±ÑƒÐºÐ²Ñ‹ Ð’, и оканчивающийÑÑ Ð¿ÐµÑ€ÐµÐ´ + буквой о. ->> ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ Ë ÂÕË×Å ÷ × ÎÁÞÁÌÅ ÐÒÅÄÙÄÕÝÅÇÏ ÐÁÒÁÇÒÁÆÁ. ->> îÁÂÅÒÉÔÅ C-. Emacs ÄÏÌÖÅÎ ÏÔÏÂÒÁÚÉÔØ × ÎÉÖÎÅÊ ÞÁÓÔÉ ÜËÒÁÎÁ ÓÏÏÂÝÅÎÉÅ - "Mark set". ->> ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ Ë ÂÕË×Å Ï × ÓÌÏ×Å "ËÏÎÃÏ×", ÎÁ ×ÔÏÒÏÊ ÓÔÒÏËÅ - ÐÁÒÁÇÒÁÆÁ. ->> îÁÂÅÒÉÔÅ C-w. üÔÏ ÕÄÁÌÉÔ ÔÅËÓÔ ÎÁÞÉÎÁÑ Ó ÂÕË×Ù ÷, É ÏËÁÎÞÉ×ÁÀÝÕÀÓÑ ÐÅÒÅÄ - ÂÕË×ÏÊ Ï. +Отличие между "убить" (killing) и "удалить" (deleting) заключаетÑÑ Ð² том, +что "убитый" текÑÑ‚ может быть заново вÑтавлен (в любой точке), в то Ð²Ñ€ÐµÐ¼Ñ +как "удаленные" чаÑти не могут быть вÑтавлены (вы однако можете отменить +удаление -- Ñм. ниже). Ð’Ñтавка "убитого" текÑта называетÑÑ "воÑÑтановление" +(yanking). Ð’ общем, команды, которые могут удалÑть большие чаÑти текÑта, +убивают Ñтот текÑÑ‚ (они наÑтраиваютÑÑ Ñ‚Ð°Ðº, что вы можете воÑÑтановить +текÑÑ‚), в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº команды, которые убирают только один Ñимвол, или +убирают только пуÑтые Ñтроки и пробельные Ñимволы, выполнÑÑŽÑ‚ операцию +ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ (так что вы не можете воÑÑтановить текÑÑ‚). Ð’ проÑтейшем Ñлучае, +без дополнительного аргумента, команды и C-d выполнÑÑŽÑ‚ удаление. +Однако, еÑли им передан аргумент, то они "убивают" текÑÑ‚. -ïÔÌÉÞÉÅ ÍÅÖÄÕ "ÕÂÉÔØ (killing)" É "ÕÄÁÌÉÔØ (deleting)" ÚÁËÌÀÞÁÅÔÓÑ × ÔÏÍ, -ÞÔÏ "ÕÂÉÔÙÊ" ÔÅËÓÔ ÍÏÖÅÔ ÂÙÔØ ÚÁÎÏ×Ï ×ÓÔÁ×ÌÅÎ, × ÔÏ ×ÒÅÍÑ ËÁË "ÕÄÁÌÅÎÎÙÅ" -ÞÁÓÔÉ ÎÅ ÍÏÇÕÔ ÂÙÔØ ×ÓÔÁ×ÌÅÎÙ. ÷ÓÔÁ×ËÁ "ÕÂÉÔÏÇÏ" ÔÅËÓÔÁ ÎÁÚÙ×ÁÅÔÓÑ -"×ÏÓÓÔÁÎÏ×ÌÅÎÉÅ (yanking)". ÷ ÏÂÝÅÍ, ËÏÍÁÎÄÙ, ËÏÔÏÒÙÅ ÍÏÇÕÔ ÕÂÉÒÁÔØ ÂÏÌØÛÉÅ -ÞÁÓÔÉ ÔÅËÓÔÁ, ÕÂÉ×ÁÀÔ ÜÔÏÔ ÔÅËÓÔ (ÏÎÉ ÎÁÓÔÒÁÉ×ÁÀÔÓÑ ÔÁË, ÞÔÏ ×Ù ÍÏÖÅÔÅ -×ÏÓÓÔÁÎÏ×ÉÔØ ÔÅËÓÔ), × ÔÏ ×ÒÅÍÑ ËÁË ËÏÍÁÎÄÙ, ËÏÔÏÒÙÅ ÕÂÉÒÁÀÔ ÔÏÌØËÏ ÏÄÉÎ -ÓÉÍ×ÏÌ, ÉÌÉ ÕÄÁÌÑÀÔ ÔÏÌØËÏ ÐÕÓÔÙÅ ÓÔÒÏËÉ É ÐÒÏÂÅÌØÎÙÅ ÓÉÍ×ÏÌÙ, ×ÙÐÏÌÎÑÀÔ -ÏÐÅÒÁÃÉÀ ÕÄÁÌÅÎÉÑ (ÔÁË ÞÔÏ ×Ù ÎÅ ÍÏÖÅÔÅ ×ÏÓÓÔÁÎÏ×ÉÔØ ÔÅËÓÔ). +>> ПеремеÑтите курÑор на начало не пуÑтой Ñтроки. Теперь нажмите C-k, чтобы + убить текÑÑ‚ в Ñтой Ñтроке. ->> ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ÎÁ ÎÁÞÁÌÏ ÎÅ ÐÕÓÔÏÊ ÓÔÒÏËÉ. ôÅÐÅÒØ ÎÁÖÍÉÔÅ C-k, ÞÔÏÂÙ - ÕÂÉÔØ ÔÅËÓÔ × ÜÔÏÊ ÓÔÒÏËÅ. +>> Ðажмите C-k еще раз. Ð’Ñ‹ видите, что Ñто дейÑтвие убьет Ñимвол новой + Ñтроки, который Ñледует за Ñтой Ñтрокой. ->> îÁÖÍÉÔÅ C-k ÅÝÅ ÒÁÚ. ÷Ù ×ÉÄÉÔÅ, ÞÔÏ ÜÔÏ ÄÅÊÓÔ×ÉÅ ÕÂØÅÔ ÓÉÍ×ÏÌ ÎÏ×ÏÊ - ÓÔÒÏËÉ, ËÏÔÏÒÙÊ ÓÌÅÄÕÅÔ ÚÁ ÜÔÏÊ ÓÔÒÏËÏÊ. +Заметьте, что первое выполнение C-k убивает Ñодержимое Ñтроки, а второй +вызов C-k убивает Ñаму Ñтроку и поднимает вверх другие Ñтроки. C-k +обрабатывает чиÑловой аргумент Ñпециальным образом -- убивает заданное +количеÑтво Ñтрок _И_ их Ñодержимое. Это не проÑто повторение команды. C-u 2 +C-k удалит две Ñтроки, а также завершающие их Ñимволы новой Ñтроки; +выполнение C-k два раза подрÑд Ñтого не Ñделает. -úÁÍÅÔØÔÅ, ÞÔÏ ÐÅÒ×ÏÅ ×ÙÐÏÌÎÅÎÉÅ C-k ÕÂÉ×ÁÅÔ ÓÏÄÅÒÖÉÍÏÅ ÓÔÒÏËÉ, Á ×ÔÏÒÏÊ -×ÙÚÏ× C-k ÕÂÉ×ÁÅÔ ÓÁÍÕ ÓÔÒÏËÕ É ÐÏÄÎÉÍÁÅÔ ÄÒÕÇÉÅ ÓÔÒÏËÉ ××ÅÒÈ. C-k -ÏÂÒÁÂÁÔÙ×ÁÅÔ ÞÉÓÌÏ×ÏÊ ÁÒÇÕÍÅÎÔ ÓÐÅÃÉÁÌØÎÙÍ ÏÂÒÁÚÏÍ -- ÕÂÉ×ÁÅÔ ÚÁÄÁÎÎÏÅ -ËÏÌÉÞÅÓÔ×Ï ÓÔÒÏË _é_ ÉÈ ÓÏÄÅÒÖÉÍÏÅ. üÔÏ ÎÅ ÐÒÏÓÔÏ ÐÏ×ÔÏÒÅÎÉÅ ËÏÍÁÎÄÙ. C-u 2 -C-k ÕÄÁÌÉÔ Ä×Å ÓÔÒÏËÉ, Á ÔÁËÖÅ ÚÁ×ÅÒÛÁÀÝÉÅ ÉÈ ÓÉÍ×ÏÌÙ ÎÏ×ÏÊ ÓÔÒÏËÉ; -Ä×ÕÈÒÁÚÏ×ÏÅ ×ÙÐÏÌÎÅÎÉÅ C-k ÎÅ ÓÄÅÌÁÅÔ ÜÔÏÇÏ. +Возврат убитого ранее текÑта называетÑÑ "воÑÑтановление" (yanking). (Думайте +об Ñтом, как о воÑÑтановлении или помещении назад некоторого взÑтого +текÑта). Ð’Ñ‹ можете воÑÑтановить убитый текÑÑ‚ в меÑте ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ в любой +другой точке редактируемого текÑта или даже в другом файле. Ð’Ñ‹ можете +воÑÑтановить текÑÑ‚ неÑколько раз и получить неÑколько копий данного текÑта. +Ðекоторые редактора называют операции "убить" и "воÑÑтановить" как +"вырезать" (cutting) и "вÑтавить" (pasting) (ознакомьтеÑÑŒ Ñ Ð³Ð»Ð¾ÑÑарием +(Glossary) в руководÑтве по Emacs). -÷ÏÚ×ÒÁÔ ÕÂÉÔÏÇÏ ÒÁÎÅÅ ÔÅËÓÔÁ ÎÁÚÙ×ÁÅÔÓÑ "×ÏÓÓÔÁÎÏ×ÌÅÎÉÅ (yanking)". (äÕÍÁÊÔÅ -Ï ÜÔÏÍ, ËÁË Ï ×ÏÓÓÔÁÎÏ×ÌÅÎÉÉ ÉÌÉ ÐÏÍÅÝÅÎÉÉ ÎÁÚÁÄ ÎÅËÏÔÏÒÏÇÏ ×ÚÑÔÏÇÏ -ÔÅËÓÔÁ). ÷Ù ÍÏÖÅÔÅ ×ÏÓÓÔÁÎÏ×ÉÔØ ÕÂÉÔÙÊ ÔÅËÓÔ × ÍÅÓÔÅ ÕÄÁÌÅÎÉÑ ÉÌÉ × -ÌÀÂÏÊ ÄÒÕÇÏÊ ÔÏÞËÅ ÒÅÄÁËÔÉÒÕÅÍÏÇÏ ÔÅËÓÔÁ ÉÌÉ ÄÁÖÅ × ÄÒÕÇÏÍ ÆÁÊÌÅ. ÷Ù -ÍÏÖÅÔÅ ×ÏÓÓÔÁÎÏ×ÉÔØ ÔÅËÓÔ ÎÅÓËÏÌØËÏ ÒÁÚ É ÐÏÌÕÞÉÔØ ÎÅÓËÏÌØËÏ ËÏÐÉÊ ÄÁÎÎÏÇÏ -ÔÅËÓÔÁ. +Ð”Ð»Ñ Ð²Ð¾ÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑƒÐ±Ð¸Ñ‚Ð¾Ð³Ð¾ текÑта иÑпользуетÑÑ Ñочетание клавиш C-y. Ð”Ð°Ð½Ð½Ð°Ñ +команда воÑÑтанавливает поÑледний убитый текÑÑ‚ в точке раÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÐºÑƒÑ€Ñора. -äÌÑ ×ÏÓÓÔÁÎÏ×ÌÅÎÉÑ ÕÂÉÔÏÇÏ ÔÅËÓÔÁ ÉÓÐÏÌØÚÕÅÔÓÑ ÓÏÞÅÔÁÎÉÅ ËÌÁ×ÉÛ C-y. äÁÎÎÁÑ -ËÏÍÁÎÄÁ ×ÏÓÓÔÁÎÁ×ÌÉ×ÁÅÔ ÐÏÓÌÅÄÎÉÊ ÕÂÉÔÙÊ ÔÅËÓÔ × ÔÏÞËÅ ÒÁÓÐÏÌÏÖÅÎÉÑ ËÕÒÓÏÒÁ. +>> Попробуйте -- наберите C-y, чтобы вÑтавить текÑÑ‚ назад. ->> ðÏÐÒÏÂÕÊÔÅ ×ÙÐÏÌÎÉÔØ ÜÔÕ ËÏÍÁÎÄÕ -- ÎÁÂÅÒÉÔÅ C-y, ÞÔÏÂÙ ×ÅÒÎÕÔØ ÔÅËÓÔ - ÎÁÚÁÄ. +Помните, что еÑли вы иÑпользовали неÑколько команд C-k подрÑд, то вÑе убитые +Ñтроки будут Ñохранены вмеÑте, так что C-y также воÑÑтановит их вмеÑте. -ðÏÍÎÉÔÅ, ÞÔÏ ÅÓÌÉ ×Ù ÉÓÐÏÌØÚÏ×ÁÌÉ ÎÅÓËÏÌØËÏ ËÏÍÁÎÄ C-k × ÏÄÎÏÊ ÓÔÒÏËÅ, ÔÏ -×ÓÅ ÕÂÉÔÙÅ ÓÔÒÏËÉ ÂÕÄÕÔ ÓÏÈÒÁÎÅÎÙ ×ÍÅÓÔÅ ÔÁË, ÞÔÏ C-y ÔÁËÖÅ ×ÏÓÓÔÁÎÏ×ÉÔ ÉÈ -×ÍÅÓÔÅ. +>> Попробуйте -- нажмите C-k неÑколько раз. ->> ðÏÐÒÏÂÕÊÔÅ ×ÙÐÏÌÎÉÔØ ÜÔÏ ÓÅÊÞÁÓ -- ÎÁÖÍÉÔÅ C-k ÎÅÓËÏÌØËÏ ÒÁÚ. +Теперь вернем убитый текÑÑ‚: -ôÅÐÅÒØ ×ÅÒÎÅÍ ÕÂÉÔÙÊ ÔÅËÓÔ: +>> Ðажмите C-y. Теперь перемеÑтите курÑор на неÑколько Ñтрок вниз, и Ñнова + нажмите C-y. Ð’Ñ‹ увидите копию некоторого текÑта. ->> îÁÖÍÉÔÅ C-y. ôÅÐÅÒØ ÐÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ÎÁ ÎÅÓËÏÌØËÏ ÓÔÒÏË ×ÎÉÚ, É ÓÎÏ×Á - ÎÁÖÍÉÔÅ C-y. óÅÊÞÁÓ ×Ù ×ÉÄÉÔÅ, ËÁË ÍÏÖÎÏ ÓËÏÐÉÒÏ×ÁÔØ ÎÅËÏÔÏÒÙÊ ÔÅËÓÔ. +Что делать, еÑли еÑть некоторый текÑÑ‚, который вы хотите вернуть назад, а +потом убить что-то еще? Одно нажатие C-y вернет только поÑледний удаленный +текÑÑ‚. Ðо предыдущий текÑÑ‚ не потерÑн -- вы можете его вернуть назад, +иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ M-y. ПоÑле того как вы вернули поÑледний удаленный текÑÑ‚ Ñ +помощью C-y, нажмите M-y Ð´Ð»Ñ Ð·Ð°Ð¼ÐµÐ½Ñ‹ Ñтого воÑÑтановленного текÑта тем, +который был убит ранее. ВыполнÑÑ M-y Ñнова и Ñнова, вы будете возвращать +ранее убитые чаÑти текÑта. Когда вы доÑтигнете нужного текÑта, то вам не +нужно ничего делать, чтобы Ñохранить его. ПроÑто продолжайте работать, +оÑтавив воÑÑтановленный текÑÑ‚ там, где он еÑть. -þÔÏ ÄÅÌÁÔØ, ÅÓÌÉ ÅÓÔØ ÎÅËÏÔÏÒÙÊ ÔÅËÓÔ, ËÏÔÏÒÙÊ ×Ù ÈÏÔÉÔÅ ×ÅÒÎÕÔØ ÎÁÚÁÄ, Á -ÐÏÔÏÍ ÕÂÉÔØ ÞÔÏ-ÔÏ ÅÝÅ? ïÄÎÏ ÎÁÖÁÔÉÅ C-y ×ÅÒÎÅÔ ÔÏÌØËÏ ÐÏÓÌÅÄÎÉÊ ÕÄÁÌÅÎÎÙÊ -ÔÅËÓÔ. îÏ ÐÒÅÄÙÄÕÝÉÊ ÔÅËÓÔ ÎÅ ÂÕÄÅÔ ÐÏÔÅÒÑÎ -- ×Ù ÓÍÏÖÅÔÅ ÅÇÏ ×ÅÒÎÕÔØ -ÎÁÚÁÄ, ÉÓÐÏÌØÚÕÑ ËÏÍÁÎÄÕ M-y. ðÏÓÌÅ ÔÏÇÏ ËÁË ×Ù ×ÅÒÎÕÌÉ ÐÏÓÌÅÄÎÉÊ -ÕÄÁÌÅÎÎÙÊ ÔÅËÓÔ, ÎÁÖÍÉÔÅ M-y É ÚÁÍÅÎÉÔÅ ÜÔÏÔ ×ÏÓÓÔÁÎÏ×ÌÅÎÎÙÊ ÔÅËÓÔ ÔÅÍ, -ËÏÔÏÒÙÊ ÂÙÌ ÕÂÉÔ ÒÁÎÅÅ. îÁÖÉÍÁÑ M-y ÓÎÏ×Á É ÓÎÏ×Á, ×Ù ÂÕÄÅÔÅ ×ÏÚ×ÒÁÝÁÔØ -ÒÁÎÅÅ ÕÂÉÔÙÅ ÞÁÓÔÉ ÔÅËÓÔÁ. ëÏÇÄÁ ×Ù ÄÏÓÔÉÇÎÅÔÅ ÉÓËÏÍÏÇÏ ÔÅËÓÔÁ, ÔÏ ×ÁÍ ÎÅ -ÎÕÖÎÏ ÄÅÌÁÔØ ÎÉÞÅÇÏ, ÞÔÏÂÙ ÓÏÈÒÁÎÉÔØ ÅÇÏ. ðÒÏÓÔÏ ÐÒÏÄÏÌÖÁÊÔÅ ÒÁÂÏÔÁÔØ, -ÏÓÔÁ×É× ×ÏÓÓÔÁÎÏ×ÌÅÎÎÙÊ ÔÅËÓÔ ÔÁÍ, ÇÄÅ ÏÎ ÅÓÔØ. +ÐÐ°Ð¶Ð¸Ð¼Ð°Ñ M-y доÑтаточное чиÑло раз, вы можете вернутьÑÑ Ð² начальную точку +(наиболее раннее удаление). -îÁÖÉÍÁÑ M-y ÄÏÓÔÁÔÏÞÎÏÅ ÞÉÓÌÏ ÒÁÚ, ×Ù ÍÏÖÅÔÅ ×ÅÒÎÕÔØÓÑ × ÎÁÞÁÌØÎÕÀ ÔÏÞËÕ -(ÎÁÉÂÏÌÅÅ ÒÁÎÎÅÅ ÕÄÁÌÅÎÉÅ). - ->> õÂÅÊÔÅ ÓÔÒÏËÕ, ÐÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ É ÕÂÅÊÔÅ ÅÝÅ ÏÄÎÕ ÓÔÒÏËÕ. úÁÔÅÍ - ÉÓÐÏÌØÚÕÊÔÅ C-y ÄÌÑ ×ÏÓÓÔÁÎÏ×ÌÅÎÉÑ ×ÔÏÒÏÊ ÕÂÉÔÏÊ ÓÔÒÏËÉ, Á ÚÁÔÅÍ ÎÁÖÍÉÔÅ - M-y, É ÏÎÁ ÂÕÄÅÔ ÚÁÍÅÎÅÎÁ ÐÅÒ×ÏÊ ÕÂÉÔÏÊ ÓÔÒÏËÏÊ. îÁÖÍÉÔÅ M-y ÅÝÅ - ÎÅÓËÏÌØËÏ ÒÁÚ, ÞÔÏÂÙ Õ×ÉÄÅÔØ ÐÏÌÕÞÅÎÎÙÊ ÒÅÚÕÌØÔÁÔ. ðÒÏÄÏÌÖÁÊÔÅ ×ÙÐÏÌÎÑÔØ - ÜÔÕ ËÏÍÁÎÄÕ ÄÏ ÔÅÈ ÐÏÒ, ÐÏËÁ ×ÔÏÒÁÑ ÕÂÉÔÁÑ ÓÔÒÏËÁ ÎÅ ÂÕÄÅÔ ×ÏÓÓÔÁÎÏ×ÌÅÎÁ - ÓÎÏ×Á. åÓÌÉ ×ÁÍ ÈÏÞÅÔÓÑ, ÔÏ ×Ù ÍÏÖÅÔÅ ÚÁÄÁ×ÁÔØ ÐÏÌÏÖÉÔÅÌØÎÙÅ É - ÏÔÒÉÃÁÔÅÌØÎÙÅ ÁÒÇÕÍÅÎÔÙ ÄÌÑ ËÏÍÁÎÄÙ M-y. +>> Убейте Ñтроку, перемеÑтите курÑор и убейте еще одну Ñтроку. Затем + иÑпользуйте C-y Ð´Ð»Ñ Ð²Ð¾ÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ñ‚Ð¾Ñ€Ð¾Ð¹ убитой Ñтроки. Затем нажмите + M-y, и она будет заменена первой убитой Ñтрокой. Ðажмите M-y еще + неÑколько раз, чтобы увидеть что вы получаете. Продолжайте выполнÑть Ñту + команду до тех пор, пока Ð²Ñ‚Ð¾Ñ€Ð°Ñ ÑƒÐ±Ð¸Ñ‚Ð°Ñ Ñтрока не будет воÑÑтановлена + Ñнова. ЕÑли вам хочетÑÑ, то вы можете задавать положительные и + отрицательные аргументы Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ M-y. -* ïôíåîá (UNDO) +* ОТМЕÐÐ (UNDO) --------------- -åÓÌÉ ×Ù ÓÄÅÌÁÌÉ ÉÚÍÅÎÅÎÉÑ × ÔÅËÓÔÅ, É ÒÅÛÉÌÉ, ÞÔÏ ÏÛÉÂÌÉÓØ, ÔÏ ×Ù ÍÏÖÅÔÅ -ÏÔÍÅÎÉÔØ ÉÚÍÅÎÅÎÉÑ Ó ÐÏÍÏÝØÀ ËÏÍÁÎÄÙ "ÏÔÍÅÎÁ", ËÏÔÏÒÁÑ ÐÒÉ×ÑÚÁÎÁ Ë ÓÏÞÅÔÁÎÉÀ -ËÌÁ×ÉÛ C-x u. +ЕÑли вы Ñделали Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² текÑте, и решили, что Ñто была ошибка, то вы +можете отменить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды "отмена" (undo), ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ +привÑзана к Ñочетанию клавиш С-/. -ïÂÙÞÎÏ, C-x u ÏÔÍÅÎÑÅÔ ÉÚÍÅÎÅÎÉÑ, ÓÄÅÌÁÎÎÙÅ ÏÄÎÏÊ ËÏÍÁÎÄÏÊ; ÅÓÌÉ ÐÏ×ÔÏÒÉÔØ -C-x u ÎÅÓËÏÌØËÏ ÒÁÚ ÐÏÄÒÑÄ, ÔÏ ËÁÖÄÙÊ ÒÁÚ ÂÕÄÅÔ ÏÔÍÅÎÑÔØÓÑ ÅÝÅ ÏÄÎÁ ËÏÍÁÎÄÁ. +Обычно, C-/ отменÑет изменениÑ, Ñделанные одной командой; еÑли повторить +C-/ неÑколько раз подрÑд, то каждый раз будет отменÑтьÑÑ ÐµÑ‰Ðµ одна команда. -îÏ ÅÓÔØ Ä×Á ÉÓËÌÀÞÅÎÉÑ -- ËÏÍÁÎÄÙ ÎÅ ÉÚÍÅÎÑÀÝÉÅ ÔÅËÓÔ, ÎÅ ÕÞÉÔÙ×ÁÀÔÓÑ (ÓÀÄÁ -×ËÌÀÞÁÀÔÓÑ ËÏÍÁÎÄÙ ÐÅÒÅÍÅÝÅÎÉÑ ËÕÒÓÏÒÁ É ÐÒÏËÒÕÔËÉ), É ËÏÍÁÎÄÙ ×ÓÔÁ×ËÉ -ÓÉÍ×ÏÌÏ× ÓÏÂÉÒÁÀÔÓÑ × ÇÒÕÐÐÙ ÄÏ 20 ÓÉÍ×ÏÌÏ×. (üÔÏ ÕÍÅÎØÛÁÅÔ ÞÉÓÌÏ -ÎÁÖÁÔÉÊ C-x u, ËÏÔÏÒÙÅ ×ÁÍ ÎÕÖÎÏ ÂÕÄÅÔ ÎÁÂÒÁÔØ ÄÌÑ ÏÔÍÅÎÙ ××ÏÄÁ ÔÅËÓÔÁ). +Ðо еÑть два иÑключениÑ: не учитываютÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ не изменÑющие текÑÑ‚ (Ñюда +включаютÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÐºÑƒÑ€Ñора и прокрутки текÑта), а команды +вÑтавки Ñимволов ÑобираютÑÑ Ð² группы до 20 Ñимволов. (Это уменьшает чиÑло +нажатий C-/, которые вам нужно будет набрать Ð´Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹ ввода текÑта). ->> õÂÅÊÔÅ ÜÔÕ ÓÔÒÏËÕ Ó ÐÏÍÏÝØÀ C-k, Á ÚÁÔÅÍ ÎÁÂÅÒÉÔÅ C-x u, É ÓÔÒÏËÁ ÄÏÌÖÎÁ - ×ÅÒÎÕÔØÓÑ ÎÁÚÁÄ. +>> Убейте Ñту Ñтроку Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ C-k, а затем наберите C-/, и Ñтрока должна + вернутьÑÑ Ð½Ð°Ð·Ð°Ð´. -C-_ -- ÜÔÏ ÅÝÅ ËÏÍÁÎÄÁ ÏÔÍÅÎÙ; ÏÎÁ ÒÁÂÏÔÁÅÔ ÔÏÞÎÏ ÔÁË ÖÅ, ËÁË É C-x u, ÎÏ -ÌÅÇÞÅ × ÉÓÐÏÌØÚÏ×ÁÎÉÉ, ÅÓÌÉ ×ÁÍ ÎÕÖÎÏ ×ÙÐÏÌÎÉÔØ ÅÅ ÎÅÓËÏÌØËÏ ÒÁÚ -ÐÏÄÒÑÄ. îÅÕÄÏÂÎÏÅ ÐÏÌÏÖÅÎÉÅ C-_ ÎÁ ÎÅËÏÔÏÒÙÈ ËÌÁ×ÉÁÔÕÒÁÈ ÄÅÌÁÅÔ ÎÅ ÏÞÅ×ÉÄÎÙÍ -ÓÐÏÓÏ ÅÅ ÎÁÂÏÒÁ. ðÏÜÔÏÍÕ ÍÙ ÐÒÅÄÌÁÇÁÅÍ ÉÓÐÏÌØÚÏ×ÁÔØ C-x u. îÁ ÎÅËÏÔÏÒÙÈ -ÔÅÒÍÉÎÁÌÁÈ ×Ù ÍÏÖÅÔÅ ÎÁÂÉÒÁÔØ C-_, ÎÁÖÉÍÁÑ / É ÕÄÅÒÖÉ×ÁÑ ËÌÁ×ÉÛÕ CONTROL. +C-_ -- Ñто еще команда отмены; она работает точно так же, как и C-/. Ðа +некоторых текÑтовых терминалах, набор C-/ в дейÑтвительноÑти приводит к +отправке C-_. Кроме того, вы можете иÑпользовать C-x u Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñтой +же операции, но Ñту команду менее удобно набирать -þÉÓÌÏ×ÏÊ ÁÒÇÕÍÅÎÔ ÄÌÑ C-_ ÉÌÉ C-x u ÉÓÐÏÌØÚÕÅÔÓÑ ËÁË ÓÞÅÔÞÉË ÐÏ×ÔÏÒÅÎÉÊ. +ЧиÑловой аргумент Ð´Ð»Ñ C-/, C-_ или C-x u иÑпользуетÑÑ ÐºÐ°Ðº Ñчетчик повторений. -÷Ù ÍÏÖÅÔÅ ÏÔÍÅÎÉÔØ ÕÄÁÌÅÎÉÅ ÔÅËÓÔÁ ÔÏÞÎÏ ÔÁË ÖÅ, ËÁË É ÏÔÍÅÎÕ ÕÂÉÔÉÑ ÔÅËÓÔÁ. -ïÔÌÉÞÉÅ ÍÅÖÄÕ ÕÂÉÊÓÔ×ÏÍ É ÕÄÁÌÅÎÉÅÍ ÞÅÇÏ-ÌÉÂÏ ÚÁËÌÀÞÁÅÔÓÑ × ÔÏÍ, ÞÔÏ ×Ù -ÍÏÖÅÔÅ ×ÏÓÓÔÁÎÏ×ÉÔØ ÕÂÉÔÙÊ ÔÅËÓÔ Ó ÐÏÍÏÝØÀ ËÏÍÁÎÄÙ C-y; ÎÏ ÄÌÑ ËÏÍÁÎÄÙ -ÏÔÍÅÎÙ ÎÅÔ ÎÉËÁËÏÊ ÒÁÚÎÉÃÙ ÍÅÖÄÕ ÜÔÉÍÉ ÏÐÅÒÁÃÉÑÍÉ. +Ð’Ñ‹ можете отменить удаление текÑта точно так же, как и отмену "убитиÑ" +текÑта. Отличие между убийÑтвом и удалением чего-либо заключаетÑÑ Ð² том, +что вы можете воÑÑтановить убитый текÑÑ‚ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды C-y; но Ð´Ð»Ñ +команды отмены нет никакой разницы между Ñтими операциÑми. -* æáêìù +* ФÐЙЛЫ ------- -þÔÏÂÙ ÓÏÚÄÁÎÎÙÊ ÔÅËÓÔ ÍÏÖÎÏ ÂÙÌÏ ÒÅÄÁËÔÉÒÏ×ÁÔØ ÐÏÚÖÅ, ×Ù ÄÏÌÖÎÙ ÐÏÍÅÓÔÉÔØ -ÅÇÏ × ÆÁÊÌ. éÎÁÞÅ ÏÎ ÉÓÞÅÚÎÅÔ, ËÏÇÄÁ ×Ù ÐÏËÉÎÅÔÅ Emacs. ÷Ù ÐÏÍÅÝÁÅÔÅ ×ÁÛ -ÔÅËÓÔ × ÆÁÊÌ, "ÏÔËÒÙ×ÁÑ" ÆÁÊÌ (üÔÕ ÏÐÅÒÁÃÉÀ ÔÁËÖÅ ÎÁÚÙ×ÁÀÔ "ÐÏÓÅÔÉÔØ" ÆÁÊÌ). +Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы Ñохранить отредактированный текÑÑ‚ вы должны помеÑтить его в +файл. Иначе он иÑчезнет, когда вы закончите работу Emacs. Чтобы помеÑтить +ваш текÑÑ‚ в файл, вы должны "найти (открыть)" (find) файл до ввода +текÑта. (Эту операцию также называют "поÑетить" (visiting) файл). -ïÔËÒÙÔØ ÆÁÊÌ ÏÚÎÁÞÁÅÔ ÐÏÓÍÏÔÒÅÔØ ÅÇÏ ÓÏÄÅÒÖÉÍÏÅ Ó ÐÏÍÏÝØÀ Emacs. ÷Ï ÍÎÏÇÉÈ -ÓÌÕÞÁÑÈ ÜÔÏ ÐÒÏÉÓÈÏÄÉÔ ÔÏÇÄÁ, ËÏÇÄÁ ×Ù ÒÅÄÁËÔÉÒÕÅÔÅ ÆÁÊÌ ÓÁÍÉ. ïÄÎÁËÏ ×ÁÛÉ -ÉÚÍÅÎÅÎÉÑ, ÓÄÅÌÁÎÎÙÅ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ Emacs, ÎÅ ÂÕÄÕÔ ÚÁÆÉËÓÉÒÏ×ÁÎÙ, ÐÏËÁ ×Ù -ÎÅ ÓÏÈÒÁÎÉÔÅ ÆÁÊÌ. ÷Ù ÍÏÖÅÔÅ ÎÅ ÏÓÔÁ×ÌÑÔØ ÞÁÓÔÉÞÎÏ ÉÚÍÅÎÅÎÎÙÊ ÆÁÊÌ × -ÓÉÓÔÅÍÅ, ÅÓÌÉ ×Ù ÎÅ ÈÏÔÉÔÅ ÅÇÏ ÓÏÈÒÁÎÑÔØ. äÁÖÅ ËÏÇÄÁ ×Ù ÓÏÈÒÁÎÑÅÔÅ ÆÁÊÌ, ÔÏ -Emacs ÏÓÔÁ×ÌÑÅÔ ÏÒÉÇÉÎÁÌØÎÙÊ ÆÁÊÌ, ÎÏ Ó ÄÒÕÇÉÍ ÉÍÅÎÅÍ, ÔÁË ÞÔÏ ×Ù ÐÏÚÖÅ -ÍÏÖÅÔÅ ÏÔÍÅÎÉÔØ ×ÁÛÉ ÉÚÍÅÎÅÎÉÑ, ×ÅÒÎÕ×ÛÉÓØ Ë ÐÒÅÄÙÄÕÝÅÊ ×ÅÒÓÉÉ ÆÁÊÌÁ. +Открыть файл означает что вы видите его Ñодержимое в Emacs. Это практичеÑки +также как редактирование Ñамого файла. Однако, ваши изменениÑ, Ñделанные Ñ +помощью Emacs, не будут Ñохранены, пока вы не Ñохраните файл. Так что вы +можете не оÑтавлÑть чаÑтично измененный файл в ÑиÑтеме, еÑли вы не хотите +его ÑохранÑть. Даже когда вы ÑохранÑете файл, то Emacs оÑтавлÑет +оригинальный файл, но Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ именем, на Ñлучай, еÑли вы решите что ваши +Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±Ñ‹Ð»Ð¸ ошибкой. -åÓÌÉ ×Ù ÐÏÓÍÏÔÒÉÔÅ × ÎÉÖÎÀÀ ÞÁÓÔØ ÜËÒÁÎÁ, ÔÏ ×Ù Õ×ÉÄÉÔÅ ÓÔÒÏËÕ, ËÏÔÏÒÁÑ -ÎÁÞÉÎÁÅÔÓÑ Ó ÔÉÒÅ, É ÎÁÞÁÌÏ ËÏÔÏÒÏÊ ×ÙÇÌÑÄÉÔ ÐÒÉÍÅÒÎÏ ÔÁË "--:-- TUTORIAL.ru". -üÔÁ ÞÁÓÔØ ÜËÒÁÎÁ ×ÓÅÇÄÁ ÐÏËÁÚÙ×ÁÅÔ ÉÍÑ ÏÔËÒÙÔÏÇÏ ×ÁÍÉ ÆÁÊÌÁ. éÔÁË, ÓÅÊÞÁÓ Õ -×ÁÓ ÏÔËÒÙÔ ÆÁÊÌ Ó ÉÍÅÎÅÍ "TUTORIAL.ru", ËÏÔÏÒÙÊ Ñ×ÌÑÅÔÓÑ ×ÁÛÅÊ ÐÅÒÓÏÎÁÌØÎÏÊ -ËÏÐÉÅÊ ÕÞÅÂÎÉËÁ Emacs. äÌÑ ÌÀÂÏÇÏ ÆÁÊÌÁ, ËÏÔÏÒÙÊ ×Ù ÏÔËÒÏÅÔÅ, Emacs ÐÏËÁÖÅÔ -ÅÇÏ ÉÍÑ × ÜÔÏÊ ÓÔÒÏËÅ. +ЕÑли вы поÑмотрите в нижнюю чаÑть Ñкрана, то вы увидите Ñтроку, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ +начинаетÑÑ Ñ Ñ‚Ð¸Ñ€Ðµ, и начало которой выглÑдит примерно так " -:--- TUTORIAL.ru". +Эта чаÑть Ñкрана вÑегда показывает Ð¸Ð¼Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¾Ð³Ð¾ вами файла. Итак, ÑÐµÐ¹Ñ‡Ð°Ñ Ñƒ +Ð²Ð°Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ файл Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ "TUTORIAL.ru", который ÑвлÑетÑÑ Ð²Ð°ÑˆÐµÐ¹ перÑональной +копией учебника Emacs. Когда вы открываете файл в Emacs, Ð¸Ð¼Ñ Ñтого файла +поÑвитÑÑ Ð² Ñтой Ñтроке. -ïÄÎÏÊ ÉÚ ×ÅÝÅÊ, ËÏÔÏÒÙÅ ×ÁÍ ÎÕÖÎÏ ÚÎÁÔØ Ï ËÏÍÁÎÄÅ ÏÔËÒÙÔÉÑ ÆÁÊÌÁ -- ÜÔÏ ÔÏ, -ÞÔÏ ×Ù ÄÏÌÖÎÙ ××ÅÓÔÉ ÉÍÑ ÆÁÊÌÁ, ËÏÔÏÒÙÊ ÎÕÖÎÏ ÏÔËÒÙÔØ. ôÁËÉÅ ËÏÍÁÎÄÙ ÍÙ -ÎÁÚÙ×ÁÅÍ ËÏÍÁÎÄÁÍÉ, "ÞÉÔÁÀÝÉÍÉ ÁÒÇÕÍÅÎÔ Ó ÔÅÒÍÉÎÁÌÁ" (× ÎÁÛÅÍ ÓÌÕÞÁÅ -ÁÒÇÕÍÅÎÔÏÍ Ñ×ÌÑÅÔÓÑ ÉÍÑ ÆÁÊÌÁ). ðÏÓÌÅ ××ÏÄÁ ËÏÍÁÎÄÙ +Одной из вещей, которые вам нужно знать о команде Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° -- Ñто то, +что вы должны ввеÑти Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°, который нужно открыть. Такие команды мы +называем командами, "читающими аргумент" (в нашем Ñлучае аргументом ÑвлÑетÑÑ +Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°). ПоÑле ввода команды - C-x C-f ïÔËÒÙÔØ (ÎÁÊÔÉ) ÆÁÊÌ + C-x C-f Открыть (найти) файл -Emacs ÐÏÐÒÏÓÉÔ ×ÁÓ ××ÅÓÔÉ ÉÍÑ ÆÁÊÌÁ. éÍÑ ÆÁÊÌÁ ÎÁÂÉÒÁÅÔÓÑ × ÎÉÖÎÅÊ ÓÔÒÏËÅ -ÜËÒÁÎÁ. îÉÖÎÑÑ ÓÔÒÏËÁ ÎÁÚÙ×ÁÅÔÓÑ ÍÉÎÉ-ÂÕÆÅÒÏÍ -- ÏÎ ÓÐÅÃÉÁÌØÎÏ ÉÓÐÏÌØÚÕÅÔÓÑ -ÄÌÑ ××ÏÄÁ ÎÅÂÏÌØÛÏÇÏ ËÏÌÉÞÅÓÔ×Á ÄÁÎÎÙÈ. äÌÑ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ ÉÍÅÎÉ ÆÁÊÌÁ ×Ù -ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÏÂÙÞÎÙÅ ËÏÍÁÎÄÙ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ Emacs. +Emacs попроÑит Ð²Ð°Ñ Ð²Ð²ÐµÑти Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°. Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° набираетÑÑ Ð² нижней Ñтроке +Ñкрана. ÐижнÑÑ Ñтрока называетÑÑ Ð¼Ð¸Ð½Ð¸-буфером когда она иÑпользуетÑÑ Ð´Ð»Ñ +ввода данных. Ð’Ñ‹ можете иÑпользовать обычные команды Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Emacs +Ð´Ð»Ñ Ð²Ð²Ð¾Ð´Ð° имени файла. -ëÏÇÄÁ ×Ù ××ÏÄÉÔÅ ÉÍÑ ÆÁÊÌÁ (ÉÌÉ ÌÀÂÕÀ ÄÒÕÇÕÀ ÉÎÆÏÒÍÁÃÉÀ × ÍÉÎÉ-ÂÕÆÅÒÅ), ×Ù -ÍÏÖÅÔÅ ÏÔÍÅÎÉÔØ ÔÅËÕÝÕÀ ËÏÍÁÎÄÕ ÎÁÖÁ× C-g. +Когда вы вводите Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° (или любую другую информацию в мини-буфере), вы +можете отменить текущую команду нажав C-g. ->> îÁÖÍÉÔÅ C-x C-f, Á ÚÁÔÅÍ ÎÁÖÍÉÔÅ C-g. üÔÏ ÄÅÊÓÔ×ÉÅ ÏÔÍÅÎÉÔ ××ÏÄ ÄÁÎÎÙÈ × - ÍÉÎÉ-ÂÕÆÅÒÅ, É ÚÁÏÄÎÏ É ËÏÍÁÎÄÕ C-x C-f, ËÏÔÏÒÁÑ ÉÓÐÏÌØÚÏ×ÁÌÁ ÍÉÎÉ-ÂÕÆÅÒ - ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÁÒÇÕÍÅÎÔÁ. ÷ ÉÔÏÇÅ, ×Ù ÎÅ ÏÔËÒÙÌÉ ÎÉ ÏÄÎÏÇÏ ÆÁÊÌÁ. +>> Ðажмите C-x C-f, а затем нажмите C-g. Это дейÑтвие отменит ввод данных в + мини-буфере, и заодно и команду C-x C-f, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¸Ñпользовала мини-буфер + Ð´Ð»Ñ Ð²Ð²Ð¾Ð´Ð° аргумента. Ð’ итоге, вы не открыли никакого файла. -ëÏÇÄÁ ×Ù ÚÁ×ÅÒÛÉÔÅ ××ÏÄ ÉÍÅÎÉ ÆÁÊÌÁ, ÎÁÖÍÉÔÅ . äÁÌÅÅ ÓÒÁÂÏÔÁÅÔ -ËÏÍÁÎÄÁ C-x C-f, ËÏÔÏÒÁÑ ÏÔËÒÏÅÔ ÕËÁÚÁÎÎÙÊ ×ÁÍÉ ÆÁÊÌ. íÉÎÉ-ÂÕÆÅÒ ÉÓÞÅÚÎÅÔ, -ËÏÇÄÁ ËÏÍÁÎÄÁ C-x C-f ÚÁ×ÅÒÛÉÔÓÑ. +Когда вы завершите ввод имени файла, нажмите . Мини-буфер иÑчезнет и +команда C-x C-f выполнит работу по открытию указанного вами файла. -á ÍÇÎÏ×ÅÎÉÅÍ ÐÏÚÖÅ ÓÏÄÅÒÖÉÍÏÅ ÆÁÊÌÁ ÐÏÑ×ÉÔÓÑ ÎÁ ÜËÒÁÎÅ, É ×Ù ÓÍÏÖÅÔÅ ÅÇÏ -ÒÅÄÁËÔÉÒÏ×ÁÔØ. ëÏÇÄÁ ×Ù ÚÁËÏÎÞÉÔÅ ÒÅÄÁËÔÉÒÏ×ÁÎÉÅ, ÔÏ ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ -ÓÏÈÒÁÎÉÔØ ÉÚÍÅÎÅÎÉÑ, ÎÁÂÅÒÉÔÅ ËÏÍÁÎÄÕ +Рмгновением позже Ñодержимое файла поÑвитÑÑ Ð½Ð° Ñкране, и вы Ñможете его +редактировать. Когда вы захотите Ñохранить изменениÑ, наберите команду - C-x C-s óÏÈÒÁÎÉÔØ ÆÁÊÌ + C-x C-s Сохранить файл -üÔÁ ËÏÍÁÎÄÁ ÓËÏÐÉÒÕÅÔ ÔÅËÓÔ ÉÚ Emacs × ÆÁÊÌ. ÷ ÐÅÒ×ÙÊ ÒÁÚ, ËÏÇÄÁ ×Ù ÜÔÏ -ÓÄÅÌÁÅÔÅ, Emacs ÐÅÒÅÉÍÅÎÕÅÔ ÏÒÉÇÉÎÁÌØÎÙÊ ÆÁÊÌ × ÆÁÊÌ Ó ÎÏ×ÙÍ ÉÍÅÎÅÍ, ÞÔÏÂÙ -ÎÅ ÐÏÔÅÒÑÌÏÓØ ÐÒÅÄÙÄÕÝÅÅ ÓÏÄÅÒÖÉÍÏÅ ÆÁÊÌÁ. éÍÑ ÆÁÊÌÁ Ó ÐÒÅÄÙÄÕÝÉÍ ÓÏÄÅÒÖÉÍÙÍ -ÐÏÌÕÞÁÅÔÓÑ ÄÏÂÁ×ÌÅÎÉÅÍ ÓÉÍ×ÏÌÁ "~" Ë ÏÒÉÇÉÎÁÌØÎÏÍÕ ÉÍÅÎÉ ÆÁÊÌÁ. +Эта команда Ñкопирует текÑÑ‚ из Emacs в файл. Ð’ первый раз, когда вы Ñто +Ñделаете, Emacs переименует оригинальный файл в файл Ñ Ð½Ð¾Ð²Ñ‹Ð¼ именем, так что +он не будет потерÑн. Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼ Ñодержимым получаетÑÑ +добавлением Ñимвола "~" к оригинальному имени файла. -ëÏÇÄÁ ÓÏÈÒÁÎÅÎÉÅ ÚÁ×ÅÒÛÉÔÓÑ, Emacs ÏÔÏÂÒÁÚÉÔ ÉÍÑ ÚÁÐÉÓÁÎÎÏÇÏ ÆÁÊÌÁ. ÷Ù -ÄÏÌÖÎÙ ÓÏÈÒÁÎÑÔØ ÉÚÍÅÎÅÎÉÑ ÄÏÓÔÁÔÏÞÎÏ ÞÁÓÔÏ, ÞÔÏÂÙ ÎÅ ÐÏÔÅÒÑÔØ ×ÎÅÓÅÎÎÙÅ -ÉÚÍÅÎÅÎÉÑ, ÅÓÌÉ ÓÉÓÔÅÍÁ ×ÄÒÕÇ ÚÁ×ÉÓÎÅÔ. +Когда Ñохранение завершитÑÑ, Emacs отобразит Ð¸Ð¼Ñ Ñохраненного файла. Ð’Ñ‹ +должны ÑохранÑть Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð¾Ñтаточно чаÑто, чтобы не потерÑть внеÑенные +изменениÑ, еÑли ÑиÑтема вдруг "рухнет" (Ñм. раздел "ÐвтоматичеÑкое +Ñохранение" ниже). ->> îÁÂÅÒÉÔÅ C-x C-s, ÓÏÈÒÁÎÉÔÅ ×ÁÛÕ ËÏÐÉÀ ÕÞÅÂÎÉËÁ. ÷ ÎÉÖÎÅÊ ÓÔÒÏËÅ ÜËÒÁÎÁ - ÄÏÌÖÎÁ ÐÏÑ×ÉÔØÓÑ ÎÁÄÐÉÓØ "Wrote ...TUTORIAL.ru". +>> Ðаберите C-x C-s TUTORIAL.ru . + Эта команда должна Ñохранить вашу копию учебника в файле TUTORIAL.ru. Ð’ + нижней Ñтроке Ñкрана должна поÑвитьÑÑ Ð½Ð°Ð´Ð¿Ð¸ÑÑŒ "Wrote ...TUTORIAL.ru". -÷Ù ÍÏÖÅÔÅ ÏÔËÒÙÔØ ÓÕÝÅÓÔ×ÕÀÝÉÊ ÆÁÊÌ ÄÌÑ ÐÒÏÓÍÏÔÒÁ ÉÌÉ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ. ÷Ù -ÔÁËÖÅ ÍÏÖÅÔÅ ÏÔËÒÙÔØ ÆÁÊÌ, ËÏÔÏÒÙÊ ÅÝÅ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ. ôÁËÉÍ ÏÂÒÁÚÏÍ ×Ù -ÍÏÖÅÔÅ ÓÏÚÄÁÔØ ÆÁÊÌ Ó ÐÏÍÏÝØÀ Emacs: ÏÔËÒÏÊÔÅ ÎÅÓÕÝÅÓÔ×ÕÀÝÉÊ ÆÁÊÌ (Emacs -ÐÏËÁÖÅÔ ÅÇÏ ÐÕÓÔÙÍ) É ××ÏÄÉÔÅ × ÎÅÇÏ ÔÅËÓÔ. ëÏÇÄÁ ×Ù ×ÙÐÏÌÎÉÔÅ ËÏÍÁÎÄÕ -ÓÏÈÒÁÎÅÎÉÑ ÆÁÊÌÁ × ÐÅÒ×ÙÊ ÒÁÚ, Emacs ÓÏÚÄÁÓÔ ÎÁÓÔÏÑÝÉÊ ÆÁÊÌ Ó ÎÁÂÒÁÎÎÙÍ -×ÁÍÉ ÔÅËÓÔÏÍ. äÁÌÅÅ, ËÁË ×Ù ÐÏÎÑÌÉ, ×Ù ÂÕÄÅÔÅ ÒÅÄÁËÔÉÒÏ×ÁÔØ ÕÖÅ ÓÕÝÅÓÔ×ÕÀÝÉÊ -ÆÁÊÌ. +Ð’Ñ‹ можете открыть ÑущеÑтвующий файл Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра или редактированиÑ. Ð’Ñ‹ +также можете открыть файл, который еще не ÑущеÑтвует. Таким образом вы +можете Ñоздать файл Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Emacs: откройте неÑущеÑтвующий файл (Emacs +покажет его пуÑтым) и вводите в него текÑÑ‚. Когда вы выполните команду +ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° в первый раз, Emacs ÑоздаÑÑ‚ наÑтоÑщий файл Ñ Ð½Ð°Ð±Ñ€Ð°Ð½Ð½Ñ‹Ð¼ +вами текÑтом. Далее, как вы понÑли, вы будете редактировать уже ÑущеÑтвующий +файл. -* âõæåòá --------- +* БУФЕРР(BUFFERS) +----------------- -åÓÌÉ ×Ù ÏÔËÒÏÅÔÅ ÅÝÅ ÏÄÉÎ ÆÁÊÌ, ÉÓÐÏÌØÚÕÑ ËÏÍÁÎÄÕ C-x C-f, ÔÏ ÐÒÅÄÙÄÕÝÉÊ ÆÁÊÌ -ÏÓÔÁÅÔÓÑ ×ÎÕÔÒÉ Emacs'Á. ÷Ù ÍÏÖÅÔÅ ÐÅÒÅËÌÀÞÉÔØÓÑ ÎÁÚÁÄ Ë ÐÒÅÄÙÄÕÝÅÍÕ ÆÁÊÌÕ, -ÏÔËÒÙ× ÅÇÏ ÓÎÏ×Á Ó ÐÏÍÏÝØÀ C-x C-f. ôÁËÉÍ ÏÂÒÁÚÏÍ ×Ù ÍÏÖÅÔÅ ÚÁÇÒÕÚÉÔØ ÎÅÍÁÌÏ -ÆÁÊÌÏ× × Emacs. +ЕÑли вы откроете еще один файл Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ C-x C-f, то предыдущий файл +оÑтаетÑÑ Ð²Ð½ÑƒÑ‚Ñ€Ð¸ Emacs. Ð’Ñ‹ можете переключитьÑÑ Ð½Ð°Ð·Ð°Ð´ к предыдущему файлу, +открыв его Ñнова Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ C-x C-f. Таким образом вы можете загрузить +большое количеÑтво файлов в Emacs. ->> óÏÚÄÁÊÔÅ ÆÁÊÌ Ó ÉÍÅÎÅÍ "foo", ÎÁÂÒÁ× C-x C-f foo . - ÷ÓÔÁרÔÅ ËÁËÏÊ-ÎÉÂÕÄØ ÔÅËÓÔ, ÉÚÍÅÎÉÔÅ ÅÇÏ, É ÓÏÈÒÁÎÉÔÅ ÆÁÊÌ "foo", - ÎÁÂÒÁ× C-x C-s. - îÁËÏÎÅÃ, ÎÁÂÅÒÉÔÅ C-x C-f TUTORIAL.ru ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ×ÅÒÎÕÔØÓÑ - ÎÁÚÁÄ Ë ÕÞÅÂÎÉËÕ. +Emacs хранит текÑÑ‚ каждого файла в объекте, называемом "буфер" (buffer). +Открытие файла Ñоздает новый буфер внутри Emacs. Чтобы увидеть ÑпиÑок +буферов, Ñозданных в текущем ÑеанÑе Emacs, наберите -Emacs ÈÒÁÎÉÔ ÔÅËÓÔ ËÁÖÄÏÇÏ ÆÁÊÌÁ × ÏÂßÅËÔÅ, ÎÁÚÙ×ÁÅÍÏÍ "ÂÕÆÅÒ" ("buffer"). -ïÔËÒÙÔÉÅ ÆÁÊÌÁ ÓÏÚÄÁÅÔ ÎÏ×ÙÊ ÂÕÆÅÒ ×ÎÕÔÒÉ Emacs. þÔÏÂÙ Õ×ÉÄÅÔØ ÓÐÉÓÏË -ÂÕÆÅÒÏ×, ÓÏÚÄÁÎÎÙÈ × ÔÅËÕÝÅÍ ÓÅÁÎÓÅ Emacs, ÎÁÂÅÒÉÔÅ + C-x C-b Отобразить ÑпиÑок буферов - C-x C-b óÐÉÓÏË ÂÕÆÅÒÏ× +>> Попробуйте выполнить C-x C-b. ->> ðÏÐÒÏÂÕÊÔÅ ×ÙÐÏÌÎÉÔØ C-x C-b ÐÒÑÍÏ ÓÅÊÞÁÓ. +Мы видим, что каждый буфер имеет Ð¸Ð¼Ñ Ð¸ может иметь ÑвÑзанное Ñ Ð½Ð¸Ð¼ Ð¸Ð¼Ñ +файла, Ñодержимое которого хранитÑÑ Ð² данном буфере. ЛЮБОЙ текÑÑ‚, который вы +видите в окне Emacs, вÑегда ÑвлÑетÑÑ Ñ‡Ð°Ñтью какого-либо буфера. -íÙ ×ÉÄÉÍ, ÞÔÏ ËÁÖÄÙÊ ÂÕÆÅÒ ÉÍÅÅÔ ÉÍÑ É ÍÏÖÅÔ ÉÍÅÔØ Ó×ÑÚÁÎÎÏÅ Ó ÎÉÍ ÉÍÑ -ÆÁÊÌÁ, ÓÏÄÅÒÖÉÍÏÅ ËÏÔÏÒÏÇÏ ÈÒÁÎÉÔÓÑ × ÄÁÎÎÏÍ ÂÕÆÅÒÅ. ìàâïê ÔÅËÓÔ, ËÏÔÏÒÙÊ -×Ù ×ÉÄÉÔÅ × ÏËÎÅ Emacs'Á, ×ÓÅÇÄÁ Ñ×ÌÑÅÔÓÑ ÞÁÓÔØÀ ËÁËÏÇÏ-ÌÉÂÏ ÂÕÆÅÒÁ. +>> Ðаберите C-x 1, чтобы избавитьÑÑ Ð¾Ñ‚ ÑпиÑка буферов. ->> îÁÂÅÒÉÔÅ C-x 1, ÞÔÏÂÙ ÉÚÂÁ×ÉÔØÓÑ ÏÔ ÓÐÉÓËÁ ÂÕÆÅÒÏ×. +Когда у Ð²Ð°Ñ ÐµÑть неÑколько буферов, только один из них ÑвлÑетÑÑ "текущим" в +конкретный момент времени. Это тот буфер, который вы редактируете. ЕÑли вы +хотите редактировать другой буфер, то вы должны "переключитьÑÑ" в него. +ЕÑли вы хотите переключитьÑÑ Ð² буфер, ÑвÑзанный Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð¼, то вы можете +открыть Ñтот файл Ñнова Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ C-x C-f. Ðо еÑть более проÑтой ÑпоÑоб -- +иÑпользовать команду C-x b. Ð’ качеÑтве аргумента Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ команды вы +должны указать Ð¸Ð¼Ñ Ð±ÑƒÑ„ÐµÑ€Ð°. -ëÏÇÄÁ Õ ×ÁÓ ÅÓÔØ ÎÅÓËÏÌØËÏ ÂÕÆÅÒÏ×, ÔÏÌØËÏ ÏÄÉÎ ÉÚ ÎÉÈ Ñ×ÌÑÅÔÓÑ "ÔÅËÕÝÉÍ" × -ËÏÎËÒÅÔÎÙÊ ÍÏÍÅÎÔ ×ÒÅÍÅÎÉ. üÔÏ ÔÏÔ ÂÕÆÅÒ, ËÏÔÏÒÙÊ ×Ù ÒÅÄÁËÔÉÒÕÅÔÅ. åÓÌÉ ×Ù -ÈÏÔÉÔÅ ÒÅÄÁËÔÉÒÏ×ÁÔØ ÄÒÕÇÏÊ ÂÕÆÅÒ, ÔÏ ×Ù ÄÏÌÖÎÙ "ÐÅÒÅËÌÀÞÉÔØÓÑ" Ë ÎÅÍÕ. -åÓÌÉ ×Ù ÈÏÔÉÔÅ ÐÅÒÅËÌÀÞÉÔØÓÑ Ë ÂÕÆÅÒÕ, Ó×ÑÚÁÎÎÏÍÕ Ó ÆÁÊÌÏÍ, ÔÏ ×Ù ÍÏÖÅÔÅ -ÏÔËÒÙÔØ ÜÔÏÔ ÆÁÊÌ ÓÎÏ×Á Ó ÐÏÍÏÝØÀ C-x C-f. îÏ ÅÓÔØ ÂÏÌÅÅ ÐÒÏÓÔÏÊ ÓÐÏÓÏ -- -ÉÓÐÏÌØÚÏ×ÁÔØ ËÏÍÁÎÄÕ C-x b. ÷ ËÁÞÅÓÔ×Å ÁÒÇÕÍÅÎÔÁ ÄÌÑ ÄÁÎÎÏÊ ËÏÍÁÎÄÙ ×Ù -ÄÏÌÖÎÙ ÕËÁÚÁÔØ ÉÍÑ ÂÕÆÅÒÁ. +>> Ðаберите C-x b foo Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð² буфер "foo". Затем + наберите C-x b TUTORIAL.ru Ð´Ð»Ñ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð² буфер Ñ ÑƒÑ‡ÐµÐ±Ð½Ð¸ÐºÐ¾Ð¼. ->> îÁÂÅÒÉÔÅ C-x b foo ÄÌÑ ÐÅÒÅËÌÀÞÅÎÉÑ × ÂÕÆÅÒ "foo", ËÏÔÏÒÙÊ - ÈÒÁÎÉÔ ÔÅËÓÔ ÆÁÊÌÁ "foo". úÁÔÅÍ ÎÁÂÅÒÉÔÅ C-x b TUTORIAL.ru - ÄÌÑ ×ÏÚ×ÒÁÝÅÎÉÑ × ÂÕÆÅÒ Ó ÄÁÎÎÙÍ ÕÞÅÂÎÉËÏÍ. +Чаще вÑего Ð¸Ð¼Ñ Ð±ÑƒÑ„ÐµÑ€Ð° Ñовпадает Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ файла (только без имени каталога). +Ðо иногда Ñто не так. СпиÑок буферов, который вы Ñоздаете Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды +C-x C-b, показывает вам Ð¸Ð¼Ñ Ð±ÑƒÑ„ÐµÑ€Ð° и Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ буфера. -þÁÝÅ ×ÓÅÇÏ ÉÍÑ ÂÕÆÅÒÁ ÓÏ×ÐÁÄÁÅÔ Ó ÉÍÅÎÅÍ ÆÁÊÌÁ (ÔÏÌØËÏ ÂÅÚ ÉÍÅÎ ËÁÔÁÌÏÇÏ×). -îÏ ÉÎÏÇÄÁ ÜÔÏ ÎÅ ÔÁË. óÐÉÓÏË ÂÕÆÅÒÏ×, ËÏÔÏÒÙÊ ×Ù ÓÏÚÄÁÅÔÅ Ó ÐÏÍÏÝØÀ ËÏÍÁÎÄÙ -C-x C-b, ×ÓÅÇÄÁ ÐÏËÁÚÙ×ÁÅÔ ×ÁÍ ÔÏÞÎÙÅ ÉÍÅÎÁ ×ÓÅÈ ÂÕÆÅÒÏ×. +Ðекоторые буфера не отноÑÑÑ‚ÑÑ Ðº файлам. Ðапример, буфер Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ "*Buffer +List*", который Ñоздан Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ C-x C-b и Ñодержит ÑпиÑок вÑех буферов, не +ÑвÑзан ни Ñ ÐºÐ°ÐºÐ¸Ð¼ файлом. Буфер Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼ учебником также Ñначала не был +ÑвÑзан Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð¼, но ÑÐµÐ¹Ñ‡Ð°Ñ ÑƒÐ¶Ðµ ÑвÑзан, поÑкольку в предыдущем разделе мы +иÑпользовали C-x C-s Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ ÐµÐ³Ð¾ в файле. -ìàâïê ÔÅËÓÔ, ËÏÔÏÒÙÊ ×Ù ×ÉÄÉÔÅ × ÏËÎÅ Emacs, ×ÓÅÇÄÁ Ñ×ÌÑÅÔÓÑ ÞÁÓÔØÀ -ËÁËÏÇÏ-ÌÉÂÏ ÂÕÆÅÒÁ. îÅËÏÔÏÒÙÅ ÂÕÆÅÒÁ ÎÅ ÓÏÏÔ×ÅÔÓÔ×ÕÀÔ ÆÁÊÌÁÍ. îÁÐÒÉÍÅÒ, -ÂÕÆÅÒ Ó ÉÍÅÎÅÍ "*Buffer List*" ÎÅ Ó×ÑÚÁÎ ÎÉ Ó ËÁËÉÍ ÆÁÊÌÏÍ. üÔÏÔ ÂÕÆÅÒ -ÓÏÚÄÁÅÔÓÑ ËÏÍÍÁÎÄÏÊ C-x C-b É ÓÏÄÅÒÖÉÔ ÓÐÉÓÏË ×ÓÅÈ ÂÕÆÅÒÏ×. âÕÆÅÒ ÐÏ ÉÍÅÎÉ -"*Messages*" ÔÁËÖÅ ÎÅ Ó×ÑÚÁÎ ÎÉ Ó ËÁËÉÍ ÆÁÊÌÏÍ; ÏÎ ÓÏÄÅÒÖÉÔ ÓÏÏÂÝÅÎÉÑ, -ËÏÔÏÒÙÅ ÏÔÏÂÒÁÖÁÀÔÓÑ × ÓÁÍÏÊ ÎÉÖÎÅÊ ÓÔÒÏËÅ ÏËÎÁ Emacs × ÔÅÞÅÎÉÅ -ÔÅËÕÝÅÇÏ ÓÅÁÎÓÁ ÒÁÂÏÔÙ Ó ÒÅÄÁËÔÏÒÏÍ. +Буфер Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ "*Messages*" также не ÑвÑзан ни Ñ ÐºÐ°ÐºÐ¸Ð¼ файлом; он Ñодержит +ÑообщениÑ, которые отображаютÑÑ Ð² Ñамой нижней Ñтроке окна Emacs в течение +текущего ÑеанÑа работы Ñ Emacs. ->> îÁÂÅÒÉÔÅ C-x b *Messages* ÄÌÑ ÐÒÏÓÍÏÔÒÁ ÓÏÄÅÒÖÉÍÏÇÏ ÂÕÆÅÒÁ - ÓÏÏÂÝÅÎÉÊ. úÁÔÅÍ ÎÁÂÅÒÉÔÅ C-x b TUTORIAL.ru ÄÌÑ ×ÏÚ×ÒÁÔÁ × - ÄÁÎÎÙÊ ÕÞÅÂÎÉË. +>> Ðаберите C-x b *Messages* Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра Ñодержимого буфера + Ñообщений. Затем наберите C-x b TUTORIAL.ru Ð´Ð»Ñ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‚Ð° к + учебнику. -åÓÌÉ ×Ù ÉÚÍÅÎÑÅÔÅ ÔÅËÓÔ ÏÄÎÏÇÏ ÆÁÊÌÁ, Á ÚÁÔÅÍ ÏÔËÒÙ×ÁÅÔÅ ÄÒÕÇÏÊ, ÔÏ ÔÅËÓÔ × -ÐÅÒ×ÏÍ ÂÕÆÅÒÅ ÏÓÔÁÅÔÓÑ ÎÅ ÓÏÈÒÁÎÅÎÎÙÍ. éÚÍÅÎÅÎÉÑ ÏÓÔÁÎÕÔÓÑ ×ÎÕÔÒÉ Emacs, × -ÂÕÆÅÒÅ, Ó×ÑÚÁÎÎÏÍ Ó ÆÁÊÌÏÍ. óÏÚÄÁÎÉÅ ÉÌÉ ÒÅÄÁËÔÉÒÏ×ÁÎÉÅ ÓÌÅÄÕÀÝÅÇÏ ÂÕÆÅÒÁ ÎÅ -ÓËÁÚÙ×ÁÅÔÓÑ ÎÁ ÐÅÒ×ÏÍ ÂÕÆÅÒÅ. üÔÏ ÏÞÅÎØ ÕÄÏÂÎÏ, ÎÏ ÉÍÅÊÔÅ × ×ÉÄÕ, ÞÔÏ ×ÁÍ -ÎÕÖÎÏ ÉÍÅÔØ ÓÐÏÓÏ ÓÏÈÒÁÎÉÔØ ÐÅÒ×ÙÊ ÆÁÊÌÏ×ÙÊ ÂÕÆÅÒ. âÙÌÏ ÂÙ ÎÅÐÒÉÑÔÎÏ -ËÁÖÄÙÊ ÒÁÚ ×ÏÚ×ÒÁÝÁÔØÓÑ ÎÁÚÁÄ ÉÓÐÏÌØÚÕÑ C-x C-f É ÐÏÔÏÍ ÉÓÐÏÌØÚÏ×ÁÔØ C-x C-s -ÄÌÑ ÓÏÈÒÁÎÅÎÉÑ ÄÁÎÎÙÈ. ðÏÜÔÏÍÕ ÓÕÝÅÓÔ×ÕÅÔ ËÏÍÁÎÄÁ +ЕÑли вы изменили текÑÑ‚ одного файла, а затем открываете другой, то текÑÑ‚ в +первом буфере оÑтаетÑÑ Ð½Ðµ Ñохраненным. Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¾ÑтанутÑÑ Ð²Ð½ÑƒÑ‚Ñ€Ð¸ Emacs, в +буфере, ÑвÑзанном Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð¼. Создание или редактирование Ñледующего буфера не +влиÑет на первый буфер. Это очень удобно, но имейте в виду, что вам нужно +иметь удобный ÑпоÑоб Ñохранить буфер первого файла. Было бы неприÑтно каждый +раз возвращатьÑÑ Ð½Ð°Ð·Ð°Ð´ иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ C-x C-f и потом иÑпользовать C-x C-s Ð´Ð»Ñ +ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…. ПоÑтому ÑущеÑтвует команда - C-x s óÏÈÒÁÎÉÔØ ÎÅËÏÔÏÒÙÅ ÂÕÆÅÒÁ. (Save some buffers) + C-x s Сохранить некоторые буфера. (Save some buffers) -C-x s ÚÁÐÒÁÛÉ×ÁÅÔ Õ ×ÁÓ ÐÏÄÔ×ÅÒÖÄÅÎÉÅ Ï ÓÏÈÒÁÎÅÎÉÉ ÄÌÑ ËÁÖÄÏÇÏ ÂÕÆÅÒÁ, -ËÏÔÏÒÙÊ ÓÏÄÅÒÖÉÔ ÎÅÓÏÈÒÁÎÅÎÎÙÅ ÉÚÍÅÎÅÎÉÑ. äÌÑ ËÁÖÄÏÇÏ ÔÁËÏÇÏ ÂÕÆÅÒÁ Õ ×ÁÓ -ÚÁÐÒÏÓÑÔ: ÓÏÈÒÁÎÑÔØ ÉÌÉ ÎÅ ÓÏÈÒÁÎÑÔØ ÉÚÍÅÎÅÎÉÑ. +C-x s запрашивает у Ð²Ð°Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ðµ о Ñохранении Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ буфера, +который Ñодержит не Ñохраненные изменениÑ. Ð”Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ такого буфера у Ð²Ð°Ñ +запроÑÑÑ‚: ÑохранÑть или не ÑохранÑть изменениÑ. ->> ÷ÓÔÁרÔÅ ÓÔÒÏËÕ ÔÅËÓÔÁ, ÐÏÔÏÍ ÎÁÂÅÒÉÔÅ C-x s. - äÏÌÖÅÎ ÐÏÑ×ÉÔØÓÑ ÚÁÐÒÏÓ: ÓÏÈÒÁÎÑÔØ ÌÉ ÂÕÆÅÒ Ó ÉÍÅÎÅÍ TUTORIAL.ru. - ïÔ×ÅÔØÔÅ ÎÁ ÚÁÐÒÏÓ ÕÔ×ÅÒÄÉÔÅÌØÎÏ ÎÁÖÁÔÉÅÍ ËÌÁ×ÉÛÙ "y". +>> Ð’Ñтавьте Ñтроку текÑта, потом наберите C-x s. + Должен поÑвитьÑÑ Ð·Ð°Ð¿Ñ€Ð¾Ñ: ÑохранÑть ли буфер Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ TUTORIAL.ru. + Ответьте на Ð·Ð°Ð¿Ñ€Ð¾Ñ ÑƒÑ‚Ð²ÐµÑ€Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ нажатием клавиши "y". -* òáóûéòåîéå îáâïòá ëïíáîä +* РÐСШИРЕÐИЕ ÐÐБОРРКОМÐÐД -------------------------- -õ Emacs ÏÞÅÎØ ÍÎÏÇÏ ËÏÍÁÎÄ, É ÏÎÉ ÎÅ ÍÏÇÕÔ ÂÙÔØ ÎÁÚÎÁÞÅÎÙ ÎÁ ×ÓÅ control- É -meta- ÓÉÍ×ÏÌÙ. Emacs ÒÅÛÁÅÔ ÜÔÕ ÐÒÏÂÌÅÍÕ, ÉÓÐÏÌØÚÕÑ X-ËÏÍÁÎÄÕ (eXtend, -ÒÁÓÛÉÒÉÔØ). åÓÔØ Ä×Á ×ÁÒÉÁÎÔÁ ÜÔÏÇÏ ÒÁÓÛÉÒÅÎÉÑ: +У Emacs очень много команд, и они вÑе не могут быть назначены на control- и +meta- ÑочетаниÑ. Emacs решает Ñту проблему, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ X-команду (eXtend, +раÑширÑть). ЕÑть два варианта: - C-x òÁÓÛÉÒÅÎÉÅ Ó ÐÏÍÏÝØÀ ××ÏÄÁ ÐÒÅÆÉËÓÁ. úÁ ÎÉÍ ÓÌÅÄÕÅÔ ÏÄÉÎ ÓÉÍ×ÏÌ. - M-x òÁÓÛÉÒÅÎÉÅ ÎÁÂÏÒÁ ËÏÍÁÎÄ Ó ÐÏÍÏÝØÀ ÉÈ ÎÁÉÍÅÎÏ×ÁÎÉÑ. úÁ ÎÉÍ - ÓÌÅÄÕÅÔ ÉÍÑ ËÏÍÁÎÄÙ. + C-x РаÑширение Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ввода префикÑа. За ним Ñледует один Ñимвол. + M-x РаÑширение набора команд Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ их именованиÑ. За ним + Ñледует Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹. -üÔÏ ÐÏÌÅÚÎÙÅ ËÏÍÁÎÄÙ, ÎÏ ÏÎÉ ÉÓÐÏÌØÚÕÀÔÓÑ ÍÅÎÅÅ ÞÁÓÔÏ, ÞÅÍ ÔÅ ËÏÍÁÎÄÙ, -ËÏÔÏÒÙÅ ÍÙ ÕÖÅ ÉÚÕÞÉÌÉ. ÷Ù ÕÖÅ ×ÉÄÅÌÉ ÎÅËÏÔÏÒÙÅ ÉÚ ÒÁÓÛÉÒÅÎÎÙÈ ËÏÍÍÁÎÄ: -ËÏÍÁÎÄÙ ÒÁÂÏÔÙ Ó ÆÁÊÌÁÍÉ C-x C-f -- ÏÔËÒÙÔØ ÆÁÊÌ, É C-x C-s -- ÓÏÈÒÁÎÉÔØ -ÆÁÊÌ. äÒÕÇÏÊ ÐÒÉÍÅÒ -- ËÏÍÁÎÄÁ ÚÁ×ÅÒÛÅÎÉÑ ÒÁÂÏÔÙ Ó Emacs'ÏÍ -- C-x C-c. -(îÅ ×ÏÌÎÕÊÔÅÓØ Ï ÔÏÍ, ÞÔÏ ×Ù ÐÏÔÅÒÑÅÔÅ ÓÄÅÌÁÎÎÙÅ ÉÚÍÅÎÅÎÉÑ, C-x C-c -ÐÒÅÄÌÁÇÁÅÔ ÓÏÈÒÁÎÉÔØ ÉÚÍÅÎÅÎÉÑ ÐÅÒÅÄ ×ÙÈÏÄÏÍ ÉÚ Emacs'Á.) +Это полезные команды, но они иÑпользуютÑÑ Ð¼ÐµÐ½ÐµÐµ чаÑто, чем те команды, +которые мы уже изучили. Ð’Ñ‹ уже видели некоторые из Ñтих команд. Ðапример, +команды работы Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸: C-x C-f -- открыть файл, и C-x C-s -- Ñохранить +файл. Другой пример -- команда Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Emacs: C-x C-c. (Ðе +волнуйтеÑÑŒ о том, что вы потерÑете Ñделанные изменениÑ, C-x C-c предлагает +Ñохранить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ´ выходом из Emacs). -åÓÌÉ ×Ù ÒÁÂÏÔÁÅÔÅ ÎÁ ÇÒÁÆÉÞÅÓËÏÍ ÄÉÓÐÌÅÅ, ËÏÔÏÒÙÊ ÓÐÏÓÏÂÅÎ ÐÏËÁÚÙ×ÁÔØ -ÎÅÓËÏÌØËÏ ÐÒÏÇÒÁÍÍ ÏÄÎÏ×ÒÅÍÅÎÎÏ, ×Ù ÍÏÖÅÔÅ ÐÅÒÅËÌÀÞÉÔÓÑ ÏÔ Emacs'Á Ë ÄÒÕÇÏÊ -ÐÒÏÇÒÁÍÍÅ ÉÓÐÏÌØÚÕÑ ÍÙÛËÕ ÉÌÉ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÅ ËÏÍÁÎÄÙ ÕÓÔÁÎÏ×ÌÅÎÎÏÇÏ Õ ×ÁÓ -ÍÅÎÅÄÖÅÒÁ ÏËÏÎ. îÏ ËÏÇÄÁ ×Ù ÒÁÂÏÔÁÅÔÅ ÎÁ ÔÅËÓÔÏ×ÏÍ ÔÅÒÍÉÎÁÌÅ, ËÏÔÏÒÙÊ -ÓÐÏÓÏÂÅÎ ÏÔÏÂÒÁÚÉÔØ ÔÏÌØËÏ ÏÄÎÕ ÐÒÏÇÒÁÍÍÕ, ÔÏ ÄÌÑ ÐÅÒÅËÌÀÞÅÎÉÑ Ë ÄÒÕÇÏÊ -ÐÒÏÇÒÁÍÍÅ ×ÁÍ ÐÏÎÁÄÏÂÉÔÓÑ "ÐÒÉÏÓÔÁÎÏ×ÉÔØ" Emacs. +ЕÑли вы работаете на графичеÑком диÑплее, то вам не нужно выполнÑть +Ñпециальных команд чтобы переключитÑÑ Ð¾Ñ‚ Emacs к другой программе. Ð’Ñ‹ можете +Ñделать Ñто иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¼Ñ‹ÑˆÑŒ или ÑоответÑтвующее команды операционной ÑиÑтемы. +Ðо когда вы иÑпользуете текÑтовый терминал, который ÑпоÑобен показывать +только одну программу в конкретный момент времени, то Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº +другой программе вам понадобитÑÑ "приоÑтановить" (suspend) Emacs. -C-z -- ÜÔÏ ËÏÍÁÎÄÁ *×ÒÅÍÅÎÎÏÇÏ* ×ÙÈÏÄÁ ÉÚ Emacs. ÷Ù ÍÏÖÅÔÅ ×ÅÒÎÕÔØÓÑ × ÔÕ ÖÅ -ÓÅÓÓÉÀ Emacs ÐÏÚÖÅ. ëÏÇÄÁ Emacs ÚÁÐÕÓËÁÅÔÓÑ ÎÁ ÔÅËÓÔÏ×ÏÍ ÔÅÒÍÉÎÁÌÅ, ËÏÍÁÎÄÁ -C-z "ÐÒÉÏÓÔÁÎÁ×ÌÉ×ÁÅÔ" ("suspends") Emacs, Ô.Å. ÏÎÁ ×ÏÚ×ÒÁÝÁÅÔ ×ÁÓ × ËÏÍÁÎÄÎÙÊ -ÐÒÏÃÅÓÓÏÒ (shell), ÎÏ ÎÅ ÚÁËÒÙ×ÁÀÔ Emacs. ÷ ÂÏÌØÛÉÎÓÔ×Å ËÏÍÁÎÄÎÙÈ ÐÒÏÃÅÓÓÏÒÏ× -×Ù ÍÏÖÅÔÅ ×ÅÒÎÕÔØÓÑ × Emacs, ÉÓÐÏÌØÚÕÑ ËÏÍÁÎÄÕ `fg', `%emacs' ÉÌÉ `exit'. +C-z -- Ñто команда *временного* выхода из Emacs. Ð’Ñ‹ можете позже вернутьÑÑ Ð² +ту же ÑеÑÑию Emacs. Когда Emacs запуÑкаетÑÑ Ð½Ð° текÑтовом терминале, команда +C-z "приоÑтанавливает" (suspend) Emacs, Ñ‚.е. она возвращает Ð²Ð°Ñ Ð² командный +процеÑÑор (shell), но не завершает Emacs. Ð’ большинÑтве командных +процеÑÑоров вы можете вернутьÑÑ Ð² Emacs Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды `fg' или `%emacs'. -þÔÏÂÙ ÐÏËÉÎÕÔØ Emacs ÉÓÐÏÌØÚÕÊÔÅ ËÏÍÁÎÄÕ C-x C-c. ïÂÙÞÎÏ ÜÔÏ ÎÕÖÎÏ ÔÏÇÄÁ, -ËÏÇÄÁ ×Ù ÈÏÔÉÔÅ ÚÁËÏÎÞÉÔØ ÓÅÁÎÓ ÒÁÂÏÔÙ Ó ËÏÍÐØÀÔÅÒÏÍ. üÔÏ ÓÏÞÅÔÁÎÉÅ ÔÁËÖÅ -ÉÓÐÏÌØÚÕÅÔÓÑ, ÞÔÏÂÙ ×ÙÊÔÉ ÉÚ Emacs, ×ÙÚ×ÁÎÎÏÇÏ ÉÚ ÐÏÞÔÏ×ÏÊ ÐÒÏÇÒÁÍÍÙ ÉÌÉ -ÄÒÕÇÏÊ ÕÔÉÌÉÔÙ, ËÏÔÏÒÁÑ ÍÏÖÅÔ ÎÅ ÚÎÁÔØ, ËÁË ÓÐÒÁ×ÉÔØÓÑ Ó ÐÒÉÏÓÔÁÎÏ×ÌÅÎÎÙÍ -Emacs. ïÂÙÞÎÏ, ÅÓÌÉ ×Ù ÎÅ ÓÏÂÉÒÁÅÔÅÓØ ×ÙÈÏÄÉÔØ ÉÚ ÓÉÓÔÅÍÙ, ÔÏ ÌÕÞÛÅ -ÐÒÉÏÓÔÁÎÏ×ÉÔØ Emacs, ÉÓÐÏÌØÚÕÑ C-z, ×ÍÅÓÔÏ ÔÏÇÏ, ÞÔÏÂÙ ÐÏËÉÄÁÔØ ÅÇÏ ÓÏ×ÓÅÍ. +Чтобы покинуть Emacs иÑпользуйте C-x C-c. Это Ñочетание также иÑпользуетÑÑ, +чтобы выйти из Emacs, вызванного из почтовой программы или другой утилиты. -óÕÝÅÓÔ×ÕÅÔ ÏÞÅÎØ ÍÎÏÇÏ ËÏÍÁÎÄ, ÉÓÐÏÌØÚÕÀÝÉÈ ÐÒÅÆÉËÓ C-x. ÷Ù ÕÖÅ ÉÚÕÞÉÌÉ -ÓÌÅÄÕÀÝÉÅ ËÏÍÁÎÄÙ: +СущеÑтвует много команд Ñ Ð¿Ñ€ÐµÑ„Ð¸ÐºÑом C-x. Ð’Ñ‹ уже изучили Ñледующие команды: - C-x C-f ïÔËÒÙÔØ ÆÁÊÌ - C-x C-s óÏÈÒÁÎÉÔØ ÆÁÊÌ - C-x s óÏÈÒÁÎÉÔØ ÎÅËÏÔÏÒÙÅ ÆÁÊÌÙ - C-x C-b óÐÉÓÏË ÂÕÆÅÒÏ× - C-x b ðÅÒÅËÌÀÞÉÔØÓÑ × ÂÕÆÅÒ - C-x C-c ÷ÙÈÏÄ ÉÚ Emacs - C-x 1 õÄÁÌÉÔØ ×ÓÅ ÏËÎÁ, ËÒÏÍÅ ÔÅËÕÝÅÇÏ - C-x u ïÔÍÅÎÁ ËÏÍÁÎÄ + C-x C-f Открыть файл + C-x C-s Сохранить файл + C-x s Сохранить некоторые буфера + C-x C-b Получить ÑпиÑок буферов + C-x b ПереключитьÑÑ Ð² буфер + C-x C-c Завершить Emacs + C-x 1 Удалить вÑе окна, кроме текущего + C-x u Отмена изменений -ðÏÉÍÅÎÏ×ÁÎÎÙÅ ËÏÍÁÎÄÙ -- ÜÔÏ ËÏÍÁÎÄÙ, ËÏÔÏÒÙÅ ÉÓÐÏÌØÚÕÀÔÓÑ ÇÏÒÁÚÄÏ ÒÅÖÅ, -ÉÌÉ ÉÓÐÏÌØÚÕÀÔÓÑ ÔÏÌØËÏ × ÏÐÒÅÄÅÌÅÎÎÙÈ ÒÅÖÉÍÁÈ. ÷ ËÁÞÅÓÔ×Å ÐÒÉÍÅÒÁ ÍÏÖÎÏ -ÐÒÉ×ÅÓÔÉ ËÏÍÁÎÄÕ ÚÁÍÅÎÙ ÓÔÒÏËÉ, ËÏÔÏÒÁÑ ÚÁÍÅÎÑÅÔ ÏÄÎÕ ÓÔÒÏËÕ ÎÁ ÄÒÕÇÕÀ ×Ï -×ÓÅÍ ÔÅËÓÔÅ. ëÏÇÄÁ ×Ù ÎÁÂÅÒÅÔÅ M-x, Emacs ÐÒÅÄÌÏÖÉÔ ×ÁÍ ××ÅÓÔÉ ÉÍÑ ËÏÍÁÎÄÙ; -× ÎÁÛÅÍ ÓÌÕÞÁÅ ÜÔÏ ËÏÍÁÎÄÁ "replace-string". îÁÂÅÒÉÔÅ ÌÉÛØ "repl s", -É Emacs ÄÏÐÏÌÎÉÔ ÉÍÑ. ( -- ÜÔÏ ËÌÁ×ÉÛÁ ÔÁÂÕÌÑÃÉÉ, ÏÂÙÞÎÏ ÎÁÈÏÄÑÝÁÑÓÑ -ÎÁÄ ËÌÁ×ÉÛÁÍÉ CapsLock ÉÌÉ Shift × ÌÅ×ÏÊ ÞÁÓÔÉ ËÌÁ×ÉÁÔÕÒÙ.) úÁ×ÅÒÛÉÔÅ ÉÍÑ -ÎÁÖÁÔÉÅÍ . +Именованные раÑширенные команды -- Ñто команды, которые иÑпользуютÑÑ Ð³Ð¾Ñ€Ð°Ð·Ð´Ð¾ +реже, или иÑпользуютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ в определенных режимах. Ð’ качеÑтве примера +можно привеÑти команду replace-string, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð·Ð°Ð¼ÐµÐ½Ñет одну Ñтроку на +другую во вÑем текÑте. Когда вы наберете M-x, Emacs предложит вам ввеÑти Ð¸Ð¼Ñ +команды; в нашем Ñлучае Ñто команда "replace-string". Ðаберите лишь +"repl-s", и Emacs дополнит имÑ. ( -- Ñто клавиша табулÑции, обычно +находÑщаÑÑÑ Ð½Ð°Ð´ клавишами CapsLock или Shift в левой чаÑти клавиатуры.) +Подтвердите Ð¸Ð¼Ñ Ð½Ð°Ð¶Ð°Ñ‚Ð¸ÐµÐ¼ . -ëÏÍÁÎÄÁ ÚÁÍÅÎÙ ÓÔÒÏËÉ (replace-string) ÔÒÅÂÕÅÔ Ä×Á ÁÒÇÕÍÅÎÔÁ -- ÓÔÒÏËÕ, -ËÏÔÏÒÁÑ ÂÕÄÅÔ ÚÁÍÅÎÅÎÁ, É ÓÔÒÏËÕ, ÎÁ ËÏÔÏÒÕÀ ÎÕÖÎÏ ÚÁÍÅÎÉÔØ. ÷Ù ÄÏÌÖÎÙ -ÚÁ×ÅÒÛÁÔØ ËÁÖÄÙÊ ÁÒÇÕÍÅÎÔ ××ÏÄÏÍ . +Команда replace-string требует два аргумента -- Ñтроку, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚ +заменена, и Ñтроку, на которую нужно заменить. Ð’Ñ‹ должны завершать каждый +аргумент вводом . ->> ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ Ë ÐÕÓÔÏÊ ÓÔÒÏËÅ ÎÁ Ä×Å ÓÔÒÏÞËÉ ÎÉÖÅ ÜÔÏÊ. - îÁÂÅÒÉÔÅ M-x repl sÆÁÊÌÆÁÊÌÙ. +>> ПеремеÑтите курÑор к пуÑтой Ñтроке на две Ñтрочки ниже Ñтой. + Ðаберите M-x repl-sфайлфайлы. - úÁÍÅÔØÔÅ, ËÁË ÜÔÁ ÓÔÒÏÞËÁ ÉÚÍÅÎÉÔÓÑ: ×Ù ÚÁÍÅÎÉÔÅ ÓÌÏ×Ï Æ-Á-Ê-Ì - ÓÌÏ×ÏÍ "ÆÁÊÌÙ" ×ÅÚÄÅ, ÇÄÅ ÏÎÏ ×ÓÔÒÅÔÉÔÓÑ, ÎÉÖÅ ÐÏÚÉÃÉÉ ËÕÒÓÏÒÁ. + Заметьте, как Ñта Ñтрочка изменитÑÑ: вы замените Ñлово файл + Ñловом "файлы" везде, где оно вÑтретитÑÑ, ниже позиции курÑора. -* á÷ôïíáôéþåóëïå óïèòáîåîéå +* ÐВТОМÐТИЧЕСКОЕ СОХРÐÐЕÐИЕ --------------------------- -ëÏÇÄÁ ×Ù ÉÚÍÅÎÑÅÔÅ ÆÁÊÌ, ÎÏ ÎÅ ÓÏÈÒÁÎÑÅÔÅ ÅÇÏ, ÔÏ × ÓÌÕÞÁÅ ÚÁ×ÉÓÁÎÉÑ ÓÉÓÔÅÍÙ -×Ù ÍÏÖÅÔÅ ÐÏÔÅÒÑÔØ ÉÎÆÏÒÍÁÃÉÀ. þÔÏÂÙ ÚÁÝÉÔÉÔØ ×ÁÓ ÏÔ ÜÔÏÇÏ, Emacs ÐÅÒÉÏÄÉÞÅÓËÉ -ÓÏÈÒÁÎÑÅÔ ËÁÖÄÙÊ ÆÁÊÌ, ËÏÔÏÒÙÊ ×Ù ÒÅÄÁËÔÉÒÕÅÔÅ. á×ÔÏÍÁÔÉÞÅÓËÏÅ ÓÏÈÒÁÎÅÎÉÅ -ÐÒÏÉÓÈÏÄÉÔ × ÆÁÊÌ, ÉÍÑ ÐÏÌÕÞÁÅÔÓÑ ÉÚ ÉÍÅÎÉ ÒÅÄÁËÔÉÒÕÅÍÏÇÏ ÆÁÊÌÁ ÄÏÂÁ×ÌÅÎÉÅÍ -ÓÉÍ×ÏÌÁ "#" × ÎÁÞÁÌÅ É × ËÏÎÃÅ; ÎÁÐÒÉÍÅÒ, ÅÓÌÉ ×ÁÛ ÆÁÊÌ ÎÁÚÙ×ÁÅÔÓÑ "hello.c", -ÔÏ Á×ÔÏÍÁÔÉÞÅÓËÉ ÓÏÈÒÁÎÅÎÎÙÊ ÆÁÊÌ ÂÕÄÅÔ ÎÁÚÙ×ÁÔØÓÑ "#hello.c#". ëÏÇÄÁ ×Ù -ÓÏÈÒÁÎÉÔÅ ÆÁÊÌ ÏÂÙÞÎÙÍ ÓÐÏÓÏÂÏÍ, Emacs ÕÄÁÌÑÅÔ Á×ÔÏÍÁÔÉÞÅÓËÉ ÓÏÈÒÁÎÅÎÎÙÊ ÆÁÊÌ. +ЕÑли вы измените файл, но не Ñохраните его, то в Ñлучае "падениÑ" ÑиÑтемы вы +можете потерÑть информацию. Чтобы защитить Ð²Ð°Ñ Ð¾Ñ‚ Ñтого, Emacs периодичеÑки +ÑохранÑет каждый файл, который вы редактируете. ÐвтоматичеÑки ÑохранÑемый +файл имеет Ð¸Ð¼Ñ Ñ Ñимволами "#" в начале и в конце. Ðапример, еÑли ваш файл +называетÑÑ "hello.c", то автоматичеÑки Ñохраненный файл будет называтьÑÑ +"#hello.c#". Когда вы Ñохраните файл обычным ÑпоÑобом, Emacs удалÑет +автоматичеÑки Ñохраненный файл. -åÓÌÉ ÓÉÓÔÅÍÁ ÚÁ×ÉÓÌÁ, ÔÏ ×Ù ÍÏÖÅÔÅ ×ÏÓÓÔÁÎÏ×ÉÔØ ×ÁÛÉ ÉÚÍÅÎÅÎÉÑ, ËÏÔÏÒÙÅ ÂÙÌÉ -ÓÏÈÒÁÎÅÎÙ Á×ÔÏÍÁÔÉÞÅÓËÉ, ÐÕÔÅÍ ÏÔËÒÙÔÉÑ ÎÕÖÎÏÇÏ ÆÁÊÌÁ (ÆÁÊÌÁ, ËÏÔÏÒÙÊ ×Ù -ÒÅÄÁËÔÉÒÏ×ÁÌÉ, ÎÏ ÎÅ ÓÏÈÒÁÎÉÌÉ), É ÚÁÔÅÍ ÎÁÂÒÁ× M-x recover-file. -ëÏÇÄÁ Õ ×ÁÓ ÚÁÐÒÏÓÑÔ ÐÏÄÔ×ÅÒÖÄÅÎÉÅ, ÎÁÂÅÒÉÔÅ yes, ÞÔÏÂÙ -×ÏÓÓÔÁÎÏ×ÉÔØ Á×ÔÏÍÁÔÉÞÅÓËÉ ÓÏÈÒÁÎÅÎÎÙÅ ÄÁÎÎÙÅ. +ЕÑли ÑиÑтема завиÑла, то вы можете воÑÑтановить ваши изменениÑ, которые были +Ñохранены автоматичеÑки, путем Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð½ÑƒÐ¶Ð½Ð¾Ð³Ð¾ файла (файла, который вы +редактировали, а не того, что бы Ñохранен автоматичеÑки) и затем набрав M-x +recover-file. Когда у Ð²Ð°Ñ Ð·Ð°Ð¿Ñ€Ð¾ÑÑÑ‚ подтверждение, наберите +yes, чтобы воÑÑтановить автоматичеÑки Ñохраненные данные. -* ïâìáóôø üèá (ECHO AREA) +* ОБЛÐСТЬ ЭХР(ECHO AREA) ------------------------- -åÓÌÉ Emacs ×ÉÄÉÔ, ÞÔÏ ×Ù ÍÅÄÌÅÎÎÏ ÎÁÂÉÒÁÅÔÅ ËÏÍÁÎÄÙ ÉÚ ÎÅÓËÏÌØËÉÈ ÓÉÍ×ÏÌÏ×, -ÔÏ ÏÎ ÐÏËÁÚÙ×ÁÅÔ ÉÈ ×ÁÍ ×ÎÉÚÕ ÜËÒÁÎÁ, × ÏÂÌÁÓÔÉ ÎÁÚÙ×ÁÅÍÏÊ "ÏÂÌÁÓÔØ ÜÈÁ". -ïÂÌÁÓÔØ ÜÈÁ -- ÜÔÏ ÓÁÍÁÑ ÎÉÖÎÑÑ ÓÔÒÏËÁ ÏËÎÁ Emacs. +ЕÑли Emacs видит, что вы медленно набираете команды из неÑкольких Ñочетаний +клавиш, то он покажет их вам в нижней чаÑти Ñкрана, в облаÑти называемой +"облаÑть Ñха" (echo area). ОблаÑть Ñха -- Ñто ÑÐ°Ð¼Ð°Ñ Ð½Ð¸Ð¶Ð½ÑÑ Ñтрока окна +Emacs. -* óôòïëá óïóôïñîéñ ------------------- +* СТРОКРСОСТОЯÐИЯ (MODE LINE) +----------------------------- -óÔÒÏËÁ ÓÒÁÚÕ ÎÁÄ ÏÂÌÁÓÔØÀ ÜÈÁ ÎÁÚÙ×ÁÅÔÓÑ "ÓÔÒÏËÏÊ ÓÏÓÔÏÑÎÉÑ". ÷ÙÇÌÑÄÉÔ ÜÔÁ -ÓÔÒÏËÁ ÐÒÉÍÅÒÎÏ ÔÁË: +Строка Ñразу над облаÑтью Ñха называетÑÑ "Ñтрокой ÑоÑтоÑниÑ" (mode +line). ВыглÑдит Ñта Ñтрока примерно так: --:** TUTORIAL.ru 63% L749 (Fundamental)----------------------- -üÔÁ ÓÔÒÏËÁ ÓÏÏÂÝÁÅÔ ÐÏÌÅÚÎÕÀ ÉÎÆÏÒÍÁÃÉÀ Ï ÓÏÓÔÏÑÎÉÉ Emacs É ÔÅËÓÔÁ, ËÏÔÏÒÙÊ -×Ù ÒÅÄÁËÔÉÒÕÅÔÅ. +Эта Ñтрока Ñообщает полезную информацию о ÑоÑтоÑнии Emacs и текÑта, который +вы редактируете. -÷Ù ÕÖÅ ÚÎÁÅÔÅ, ÞÔÏ ÏÚÎÁÞÁÅÔ ÉÍÑ ÆÁÊÌÁ -- ÜÔÏ ÆÁÊÌ, ËÏÔÏÒÙÊ ×Ù ÏÔËÒÙÌÉ. NN% -ÐÏËÁÚÙ×ÁÅÔ ×ÁÛÕ ÔÅËÕÝÕÀ ÐÏÚÉÃÉÀ × ÔÅËÓÔÅ; ÜÔÏ ÏÚÎÁÞÁÅÔ ÞÔÏ NN ÐÒÏÃÅÎÔÏ× -ÔÅËÓÔÁ ÎÁÈÏÄÑÔÓÑ ×ÙÛÅ ÎÁÞÁÌÁ ÏËÎÁ. åÓÌÉ ÐÏËÁÚÁÎÏ ÎÁÞÁÌÏ ÔÅËÓÔÁ, ×Ù Õ×ÉÄÉÔÅ -"Top" ×ÍÅÓÔÏ "0%". åÓÌÉ ÐÏËÁÚÁÎ ËÏÎÅà ÔÅËÓÔÁ, ÔÏ ÂÕÄÅÔ ÏÔÏÂÒÁÖÅÎÏ "Bot". -åÓÌÉ ÔÅËÓÔ ÎÁÓÔÏÌØËÏ ÍÁÌ, ÞÔÏ ÐÏËÁÚÁÎ ×ÅÓØ, ÔÏ ÓÔÒÏËÁ ÓÏÓÔÏÑÎÉÑ ÓÏÏÂÝÉÔ -"All". +Ð’Ñ‹ уже знаете, что означает Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° -- Ñто файл, который вы открыли. NN% +показывает вашу текущую позицию в текÑте. Это означает что NN процентов +текÑта находÑÑ‚ÑÑ Ð²Ñ‹ÑˆÐµ начала окна. ЕÑли отображаетÑÑ Ð½Ð°Ñ‡Ð°Ð»Ð¾ текÑта, вы +увидите "Top" вмеÑто "0%". ЕÑли отображаетÑÑ ÐºÐ¾Ð½ÐµÑ† текÑта, то будет +отображено "Bot". ЕÑли текÑÑ‚ наÑтолько мал, что вмещаетÑÑ Ð² один Ñкран, то +Ñтрока ÑоÑтоÑÐ½Ð¸Ñ Ñообщит "All". -âÕË×Á L É ÃÉÆÒÙ ÐÏËÁÚÙ×ÁÀÔ ÐÏÚÉÃÉÀ ÄÒÕÇÉÍ ÓÐÏÓÏÂÏÍ -- ÏÎÉ ÐÏËÁÚÙ×ÁÀÔ ÎÏÍÅÒ -ÓÔÒÏËÉ × ËÏÔÏÒÏÊ ÎÁÈÏÄÉÔÓÑ ËÕÒÓÏÒ. +Буква L и цифры показывают позицию другим ÑпоÑобом -- они показывают номер +Ñтроки в которой находитÑÑ ÐºÑƒÑ€Ñор. -ú×ÅÚÄÏÞËÉ × ÎÁÞÁÌÅ ÓÔÒÏËÉ ÏÚÎÁÞÁÀÔ, ÞÔÏ ×Ù ÉÚÍÅÎÑÌÉ ÔÅËÓÔ. ðÒÉ ÏÔËÒÙÔÉÉ ÉÌÉ -ÓÏÈÒÁÎÅÎÉÉ ÆÁÊÌÁ ÜÔÁ ÞÁÓÔØ ÓÔÒÏËÉ ÂÕÄÅÔ ÓÏÄÅÒÖÁÔØ ÎÅ Ú×ÅÚÄÏÞËÉ, Á ÔÉÒÅ. +Звездочки в начале Ñтроки означают, что вы изменÑли текÑÑ‚. Сразу поÑле +Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð¸Ð»Ð¸ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° Ñта чаÑть Ñтроки будет Ñодержать не звездочки, +а тире. -þÁÓÔØ ÓÔÒÏËÉ ÓÏÓÔÏÑÎÉÑ ×ÎÕÔÒÉ ÓËÏÂÏË ÓÏÏÂÝÁÅÔ ×ÁÍ Ï ÒÅÖÉÍÅ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ, -ËÏÔÏÒÙÊ ×Ù ÓÅÊÞÁÓ ÉÓÐÏÌØÚÕÅÔÅ. óÔÁÎÄÁÒÔÎÙÊ, ÉÌÉ ÂÁÚÏ×ÙÊ, ÒÅÖÉÍ -- Fundamental, -ÏÎ ÉÓÐÏÌØÚÕÅÔÓÑ É × ÄÁÎÎÏÍ ÕÞÅÂÎÉËÅ. üÔÏ ÐÒÉÍÅÒ "ÏÓÎÏ×ÎÏÇÏ ÒÅÖÉÍÁ" ("major +ЧаÑть Ñтроки ÑоÑтоÑÐ½Ð¸Ñ Ð²Ð½ÑƒÑ‚Ñ€Ð¸ Ñкобок Ñообщает вам о режиме редактированиÑ, +который вы ÑÐµÐ¹Ñ‡Ð°Ñ Ð¸Ñпользуете. Стандартный, или базовый, режим -- Fundamental, +он иÑпользуетÑÑ Ð¸ в данном учебнике. Это пример "оÑновного режима" ("major mode"). -Emacs ÉÍÅÅÔ ÍÎÏÇÏ ÒÁÚÌÉÞÎÙÈ ÏÓÎÏ×ÎÙÈ ÒÅÖÉÍÏ×. îÅËÏÔÏÒÙÅ ÉÚ ÒÅÖÉÍÏ× -ÉÓÐÏÌØÚÕÀÔÓÑ ÄÌÑ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ ÔÅËÓÔÁ ÎÁ ÒÁÚÌÉÞÎÙÈ ÑÚÙËÁÈ É/ÉÌÉ ÒÁÚÌÉÞÎÙÈ -×ÉÄÏ× ÔÅËÓÔÁ, ÔÁËÉÅ ËÁË Lisp-ÒÅÖÉÍ, Text-ÒÅÖÉÍ É ÐÒ. ÷ ËÁÖÄÙÊ ÍÏÍÅÎÔ -×ÒÅÍÅÎÉ ÄÅÊÓÔ×ÕÅÔ ÔÏÌØËÏ ÏÄÉÎ ÏÓÎÏ×ÎÏÊ ÒÅÖÉÍ, É ÅÇÏ ÎÁÚ×ÁÎÉÅ ×Ù ÍÏÖÅÔÅ ÎÁÊÔÉ -× ÓËÏÂËÁÈ -- ÔÁÍ, ÇÄÅ ÓÅÊÞÁÓ ÎÁÈÏÄÉÔÓÑ ÓÌÏ×Ï "Fundamental" (ÂÁÚÏ×ÙÊ). +Emacs имеет много различных оÑновных режимов. Ðекоторые из режимов +иÑпользуютÑÑ Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑта на различных Ñзыках и/или различных +видов текÑта, такие как Lisp-режим, Text-режим и пр. Ð’ каждый момент +времени дейÑтвует только один оÑновной режим, и его название вы можете найти +в Ñкобках -- там, где ÑÐµÐ¹Ñ‡Ð°Ñ Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚ÑÑ Ñлово "Fundamental" (базовый). -ëÁÖÄÙÊ ÏÓÎÏ×ÎÏÊ ÒÅÖÉÍ ÚÁÓÔÁ×ÌÑÅÔ ÎÅËÏÔÏÒÙÅ ËÏÍÁÎÄÙ ×ÅÓÔÉ ÓÅÂÑ ÎÅÍÎÏÇÏ -ÐÏ-ÄÒÕÇÏÍÕ. îÁÐÒÉÍÅÒ, ÜÔÏ ËÏÍÁÎÄÙ ÓÏÚÄÁÎÉÑ ËÏÍÍÅÎÔÁÒÉÅ× × ÐÒÏÇÒÁÍÍÅ, É -ÐÏÓËÏÌØËÕ × ËÁÖÄÏÍ ÑÚÙËÅ ÐÒÏÇÒÁÍÍÉÒÏ×ÁÎÉÑ ËÏÍÍÅÎÔÁÒÉÉ ÚÁÐÉÓÙ×ÁÀÔÓÑ -ÐÏ-Ó×ÏÅÍÕ, ÔÏ É ËÁÖÄÙÊ ÏÓÎÏ×ÎÏÊ ÒÅÖÉÍ ×ÓÔÁ×ÌÑÅÔ ÉÈ ÐÏ-ÒÁÚÎÏÍÕ. ëÁÖÄÙÊ -ÏÓÎÏ×ÎÏÊ ÒÅÖÉÍ ÉÍÅÅÔ ÉÍÅÎÏ×ÁÎÎÕÀ ËÏÍÁÎÄÕ, ËÏÔÏÒÁÑ ×ËÌÀÞÁÅÔ ÅÇÏ. îÁÐÒÉÍÅÒ, -M-x fundamental-mode -- ÜÔÏ ËÏÍÁÎÄÁ, ËÏÔÏÒÁÑ ×ËÌÀÞÁÅÔ ÂÁÚÏ×ÙÊ (Fundamental) -ÒÅÖÉÍ. +Каждый оÑновной режим заÑтавлÑет некоторые команды веÑти ÑÐµÐ±Ñ Ð¿Ð¾ разному. +Ðапример, имеютÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ‚Ð°Ñ€Ð¸ÐµÐ² в программе, и поÑкольку в +каждом Ñзыке Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ‚Ð°Ñ€Ð¸Ð¸ запиÑываютÑÑ Ð¿Ð¾ Ñвоему, то и +каждый оÑновной режим вÑтавлÑет их по разному. Каждый оÑновной режим имеет +именованную команду, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²ÐºÐ»ÑŽÑ‡Ð°ÐµÑ‚ его. Ðапример, M-x fundamental-mode -- +Ñто команда, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²ÐºÐ»ÑŽÑ‡Ð°ÐµÑ‚ базовый (Fundamental) режим. -åÓÌÉ ×Ù ÒÅÄÁËÔÉÒÕÅÔÅ ÔÅËÓÔ ÎÁ ÅÓÔÅÓÔ×ÅÎÎÏÍ ÑÚÙËÅ, ÎÁÐÒÉÍÅÒ, ËÁË ÜÔÏÔ ÆÁÊÌ, -ÔÏ ×Ù, ×ÅÒÏÑÔÎÏ ÄÏÌÖÎÙ ÐÅÒÅËÌÀÞÉÔØÓÑ × ÒÅÖÉÍ Text. +ЕÑли вы редактируете текÑÑ‚ на еÑтеÑтвенном Ñзыке, например, как Ñтот файл, +то вы, вероÑтно должны переключитьÑÑ Ð² режим Text. ->> îÁÂÅÒÉÔÅ M-x text mode. +>> Ðаберите M-x text mode. -îÅ ×ÏÌÎÕÊÔÅÓØ, ÎÉ ÏÄÎÁ ÉÚ ×ÙÕÞÅÎÎÙÈ ×ÁÍÉ ËÏÍÁÎÄ Emacs ÎÅ ÉÚÍÅÎÉÌÁÓØ. îÏ ×Ù -ÍÏÖÅÔÅ ÚÁÍÅÔÉÔØ, ÞÔÏ M-f É M-b ÔÅÐÅÒØ ÒÁÓÓÍÁÔÒÉ×ÁÀÔ ÁÐÏÓÔÒÏÆÙ ËÁË ÞÁÓÔØ -ÓÌÏ×Á. òÁÎÅÅ, × ÂÁÚÏ×ÏÍ ÒÅÖÉÍÅ (Fundamental mode), M-f É M-b ÐÏÎÉÍÁÌÉ -ÁÐÏÓÔÒÏÆÙ ËÁË ÒÁÚÄÅÌÉÔÅÌÉ ÓÌÏ×. +Ðе волнуйтеÑÑŒ, ни одна из выученных вами команд Emacs не изменилаÑÑŒ. Ðо вы +можете заметить, что M-f и M-b теперь раÑÑматривают апоÑтрофы как чаÑть +Ñлова. Ранее, в базовом режиме (Fundamental mode), M-f и M-b воÑпринимали +апоÑтрофы как разделители Ñлов. -ëÁË ÐÒÁ×ÉÌÏ, ÏÓÎÏ×ÎÏÊ ÒÅÖÉÍ ÐÒÏÉÚ×ÏÄÉÔ ÐÏÄÏÂÎÙÅ ÎÅÚÎÁÞÉÔÅÌØÎÙÅ ÉÚÍÅÎÅÎÉÑ: -ÂÏÌØÛÉÎÓÔ×Ï ËÏÍÁÎÄ "ÒÁÂÏÔÁÅÔ" ÏÄÉÎÁËÏ×Ï × ËÁÖÄÏÍ ÉÚ ÒÅÖÉÍÏ×, ÎÏ ÉÈ ÄÅÊÓÔ×ÉÅ -ÏÔÌÉÞÁÅÔÓÑ ËÁËÏÊ-ÎÉÂÕÄØ ÍÅÌÏÞØÀ. +Как правило, оÑновные режимы производÑÑ‚ незначительные изменениÑ: +большинÑтво команд "работает одинаково" в каждом из режимов, но их дейÑтвие +отличаетÑÑ ÐºÐ°ÐºÐ¾Ð¹-нибудь мелочью. -äÌÑ ÐÒÏÓÍÏÔÒÁ ÄÏËÕÍÅÎÔÁÃÉÉ Ï ÔÅËÕÝÅÍ ÏÓÎÏ×ÎÏÍ ÒÅÖÉÍÅ, ÎÁÖÍÉÔÅ C-h m. +Ð”Ð»Ñ Ð¿Ñ€Ð¾Ñмотра документации о текущем оÑновном режиме, нажмите C-h m. ->> éÓÐÏÌØÚÕÊÔÅ C-u C-v ÏÄÉÎ ÒÁÚ ÉÌÉ ÂÏÌÅÅ, ÞÔÏÂÙ ÒÁÓÐÏÌÏÖÉÔØ ÜÔÕ ÓÔÒÏËÕ - ÂÌÉÖÅ Ë ×ÅÒÈÕ ÜËÒÁÎÁ. ->> îÁÂÅÒÉÔÅ C-h m, ÞÔÏÂÙ ÐÏÓÍÏÔÒÅÔØ ÏÔÌÉÞÉÑ Text-ÒÅÖÉÍÁ ÏÔ ÂÁÚÏ×ÏÇÏ. ->> îÁÂÅÒÉÔÅ C-x 1, ÞÔÏÂÙ ÕÂÒÁÔØ ÄÏËÕÍÅÎÔÁÃÉÀ Ó ÇÌÁÚ ÄÏÌÏÊ :) +>> ИÑпользуйте C-l C-l чтобы раÑположить Ñту Ñтроку вверху Ñкрана. +>> Ðаберите C-h m, чтобы поÑмотреть Ð¾Ñ‚Ð»Ð¸Ñ‡Ð¸Ñ Text-режима от базового. +>> Ðаберите C-x 1, чтобы убрать документацию Ñ Ð³Ð»Ð°Ð· долой :) -ïÓÎÏ×ÎÏÊ ÒÅÖÉÍ ÎÁÚÙ×ÁÅÔÓÑ ÏÓÎÏ×ÎÙÍ ÐÏÔÏÍÕ, ÞÔÏ ÔÁËÖÅ ÓÕÝÅÓÔ×ÕÀÔ -ÄÏÐÏÌÎÉÔÅÌØÎÙÅ, ÉÌÉ ×ÔÏÒÏÓÔÅÐÅÎÎÙÅ, (minor) ÒÅÖÉÍÙ. äÏÐÏÌÎÉÔÅÌØÎÙÅ ÒÅÖÉÍÙ -ÎÅ Ñ×ÌÑÀÔÓÑ ÁÌØÔÅÒÎÁÔÉ×ÁÍÉ ÏÓÎÏ×ÎÙÍ, ÏÎÉ ÔÏÌØËÏ ÎÅÍÎÏÇÏ ÉÚÍÅÎÑÀÔ ÉÈ -ÐÏ×ÅÄÅÎÉÅ. ëÁÖÄÙÊ ÄÏÐÏÌÎÉÔÅÌØÎÙÊ ÒÅÖÉÍ ×ËÌÀÞÁÅÔÓÑ/×ÙËÌÀÞÁÅÔÓÑ ÎÅÚÁ×ÉÓÉÍÏ -ÏÔ ÄÒÕÇÉÈ ÄÏÐÏÌÎÉÔÅÌØÎÙÈ ÒÅÖÉÍÏ× É ÎÅÚÁ×ÉÓÉÍÏ ÏÔ ×ÁÛÅÇÏ ÏÓÎÏ×ÎÏÇÏ ÒÅÖÉÍÁ. -÷Ù ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÏÓÎÏ×ÎÏÊ ÒÅÖÉÍ ÂÅÚ ÄÏÐÏÌÎÉÔÅÌØÎÙÈ, ÉÌÉ Ó ÌÀÂÏÊ -ËÏÍÂÉÎÁÃÉÅÊ ÎÅÓËÏÌØËÉÈ ÄÏÐÏÌÎÉÔÅÌØÎÙÈ ÒÅÖÉÍÏ×. +ОÑновной режим называетÑÑ Ð¾Ñновным потому, что также ÑущеÑтвуют +дополнительные (minor) режимы. Дополнительные режимы не ÑвлÑÑŽÑ‚ÑÑ +альтернативами оÑновным, они только немного изменÑÑŽÑ‚ их поведение. Каждый +дополнительный режим включаетÑÑ/выключаетÑÑ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо от других +дополнительных режимов и незавиÑимо от вашего оÑновного режима. Ð’Ñ‹ можете +иÑпользовать оÑновной режим без дополнительных, или Ñ Ð»ÑŽÐ±Ð¾Ð¹ комбинацией +неÑкольких дополнительных режимов. -ïÄÉÎ ÉÚ ÄÏÐÏÌÎÉÔÅÌØÎÙÈ ÒÅÖÉÍÏ× ÏÞÅÎØ ÐÏÌÅÚÅÎ, ÏÓÏÂÅÎÎÏ ÄÌÑ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ -ÔÅËÓÔÁ -- ÜÔÏ ÒÅÖÉÍ Á×ÔÏÚÁÐÏÌÎÅÎÉÑ (Auto Fill mode). ëÏÇÄÁ ÜÔÏÔ ÒÅÖÉÍ -×ËÌÀÞÅÎ, ÔÏ Emacs Á×ÔÏÍÁÔÉÞÅÓËÉ ÒÁÚÒÙ×ÁÅÔ ÓÔÒÏËÕ ÍÅÖÄÕ ÓÌÏ×ÁÍÉ × ÔÅÈ -ÓÌÕÞÁÑÈ, ËÏÇÄÁ ×ÓÔÁ×ÌÅÎÎÙÊ ÔÅËÓÔ ÄÅÌÁÅÔ ÓÔÒÏËÕ ÓÌÉÛËÏÍ ÄÌÉÎÎÏÊ. +Один из дополнительных режимов очень полезен, оÑобенно Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ +текÑта -- Ñто режим Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ (Auto Fill mode). Когда Ñтот режим +включен, то Emacs автоматичеÑки разрывает Ñтроку между Ñловами в тех +ÑлучаÑÑ…, когда вÑтавленный текÑÑ‚ делает Ñтроку Ñлишком длинной. -÷Ù ÍÏÖÅÔÅ ×ËÌÀÞÉÔØ ÒÅÖÉÍ Á×ÔÏÚÁÐÏÌÎÅÎÉÑ, ÎÁÂÒÁ× M-x auto fill mode. -ëÏÇÄÁ ÜÔÏÔ ÒÅÖÉÍ ×ËÌÀÞÅÎ, ÅÇÏ ÍÏÖÎÏ ×ÙËÌÀÞÉÔØ Ó ÐÏÍÏÝØÀ ÔÏÊ ÖÅ ËÏÍÁÎÄÙ -- -M-x auto fill mode. åÓÌÉ ÒÅÖÉÍ ×ËÌÀÞÅÎ, ÔÏ ÔÁËÁÑ ËÏÍÁÎÄÁ ÅÇÏ -×ÙËÌÀÞÉÔ, ÅÓÌÉ ×ÙËÌÀÞÅÎ, ÔÏ ×ËÌÀÞÉÔ. íÙ ÎÁÚÙ×ÁÅÍ ÜÔÏ ËÏÍÁÎÄÏÊ "ÐÅÒÅËÌÀÞÅÎÉÑ -ÒÅÖÉÍÁ". +Ð’Ñ‹ можете включить режим автозаполнениÑ, набрав M-x auto-fill-mode. +Когда Ñтот режим включен, его можно выключить Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ той же команды -- +M-x auto-fill-mode. ЕÑли режим включен, то Ñ‚Ð°ÐºÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° его +выключит, еÑли выключен, то включит. Мы говорим что команда "переключает +режим". ->> îÁÂÅÒÉÔÅ M-x auto fill mode. úÁÔÅÍ ××ÏÄÉÔÅ ÓÔÒÏËÕ ÉÚ ÓÌÏ× "ÆÙ×Á " - ÐÏËÁ ÎÅ Õ×ÉÄÉÔÅ, ËÁË ÏÎÁ ÒÁÚÄÅÌÉÔÓÑ ÎÁ Ä×Å ÓÔÒÏËÉ. üÔÉ ÐÒÏÂÅÌÙ ÍÅÖÄÕ - ÓÌÏ×ÁÍÉ ÎÅÏÂÈÏÄÉÍÙ, ÐÏÔÏÍÕ ÞÔÏ ÒÅÖÉÍ Á×ÔÏÚÁÐÏÌÎÅÎÉÑ ÒÁÚÂÉ×ÁÅÔ ÓÔÒÏËÉ - ÔÏÌØËÏ ÐÏ ÐÒÏÂÅÌÁÍ. +>> Ðаберите M-x auto-fill-mode. Затем вводите Ñтроку из Ñлов "фыва " + пока не увидите, как она разделитÑÑ Ð½Ð° две Ñтроки. Эти пробелы между + Ñловами необходимы, потому что режим Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð±Ð¸Ð²Ð°ÐµÑ‚ Ñтроки + только по пробелам. -çÒÁÎÉÃÁ ÒÁÚÂÉÅÎÉÑ ÏÂÙÞÎÏ ÒÁ×ÎÁ 70-ÔÉ ÓÉÍ×ÏÌÁÍ, ÎÏ ×Ù ÍÏÖÅÔÅ ÉÚÍÅÎÉÔØ ÅÅ -ÉÓÐÏÌØÚÕÑ ËÏÍÁÎÄÕ C-x f. ÷Ù ÄÏÌÖÎÙ ÚÁÄÁÔØ ÇÒÁÎÉÃÕ × ×ÉÄÅ ÞÉÓÌÏ×ÏÇÏ -ÁÒÇÕÍÅÎÔÁ ÄÌÑ ÜÔÏÊ ËÏÍÁÎÄÙ. +Граница Ñ€Ð°Ð·Ð±Ð¸ÐµÐ½Ð¸Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾ равна 70-ти Ñимволам, но вы можете изменить ее +иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ C-x f. Ð’Ñ‹ должны задать границу в виде чиÑлового +аргумента Ð´Ð»Ñ Ñтой команды. ->> ÷×ÅÄÉÔÅ C-x f Ó ÁÒÇÕÍÅÎÔÏÍ 20 (C-u 2 0 C-x f). úÁÔÅÍ ××ÅÄÉÔÅ ËÁËÏÊ-ÎÉÂÕÄØ - ÔÅËÓÔ É ÐÏÓÍÏÔÒÉÔÅ ËÁË Emacs ÚÁÐÏÌÎÑÅÔ ÓÔÒÏËÉ ÐÏ 20 ÓÉÍ×ÏÌÏ× × ËÁÖÄÏÊ. - ÷ÅÒÎÉÔÅ ÚÎÁÞÅÎÉÅ ÇÒÁÎÉÃÙ ÒÁ×ÎÏÅ 70 ÎÁÚÁÄ, ÉÓÐÏÌØÚÕÑ ËÏÍÁÎÄÕ C-x f. +>> Введите C-x f Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð¼ 20 (C-u 2 0 C-x f). + Затем введите какой-нибудь текÑÑ‚ и поÑмотрите как Emacs заполнÑет Ñтроки + по 20 Ñимволов в каждой. Верните значение границы равное 70 назад, + иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ C-x f. -åÓÌÉ ×Ù ÓÄÅÌÁÌÉ ÉÚÍÅÎÅÎÉÑ × ÓÅÒÅÄÉÎÅ ÐÁÒÁÇÒÁÆÁ, ÔÏ Á×ÔÏÚÁÐÏÌÎÅÎÉÅ ÎÅ -ÐÅÒÅÆÏÒÍÁÔÉÒÕÅÔ ÔÅËÓÔ Á×ÔÏÍÁÔÉÞÅÓËÉ. þÔÏÂÙ ÐÅÒÅÆÏÒÍÁÔÉÒÏ×ÁÔØ ÐÁÒÁÇÒÁÆ, -ÎÁÂÅÒÉÔÅ M-q (META-q), ËÏÇÄÁ ËÕÒÓÏÒ ÎÁÈÏÄÉÔÓÑ ×ÎÕÔÒÉ ÐÁÒÁÇÒÁÆÁ. +ЕÑли вы Ñделали Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² Ñередине параграфа, то автозаполнение не +переформатирует текÑÑ‚ автоматичеÑки. +Чтобы переформатировать параграф, наберите M-q (META-q), когда курÑор +находитÑÑ Ð²Ð½ÑƒÑ‚Ñ€Ð¸ параграфа. ->> ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ × ÐÒÅÄÙÄÕÝÉÊ ÐÁÒÁÇÒÁÆ, É ÎÁÖÍÉÔÅ M-q. +>> ПеремеÑтите курÑор в предыдущий параграф, и нажмите M-q. -* ðïéóë +* ПОИСК ------- -Emacs ÕÍÅÅÔ ÉÓËÁÔØ ÓÔÒÏËÉ (ÎÅÐÒÅÒÙ×ÎÙÅ ÇÒÕÐÐÙ ÓÉÍ×ÏÌÏ× ÉÌÉ ÓÌÏ×Á) ×ÐÅÒÅÄ ÉÌÉ -ÎÁÚÁÄ ÐÏ ÔÅËÓÔÕ. ðÏÉÓË ÓÔÒÏËÉ -- ÜÔÏ ËÏÍÁÎÄÁ ÐÅÒÅÍÅÝÅÎÉÑ ËÕÒÓÏÒÁ; ÏÎÁ -ÐÅÒÅÍÅÝÁÅÔ ËÕÒÓÏÒ × ÓÌÅÄÕÀÝÕÀ ÔÏÞËÕ, ÇÄÅ ÎÁÊÄÅÎÁ ÉÓËÏÍÁÑ ÓÔÒÏËÁ. +Emacs умеет иÑкать Ñтроки (Ñтрока -- Ð½ÐµÐ¿Ñ€ÐµÑ€Ñ‹Ð²Ð½Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° Ñимволов) вперед или +назад по текÑту. ПоиÑк Ñтроки -- Ñто команда Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÐºÑƒÑ€Ñора -- она +перемещает курÑор в Ñледующую точку, где найдена иÑÐºÐ¾Ð¼Ð°Ñ Ñтрока. -ëÏÍÁÎÄÁ ÐÏÉÓËÁ Emacs ÏÔÌÉÞÁÅÔÓÑ ÏÔ ÁÎÁÌÏÇÉÞÎÙÈ ËÏÍÁÎÄ ÂÏÌØÛÉÎÓÔ×Á ÄÒÕÇÉÈ -ÒÅÄÁËÔÏÒÏ× ÔÅÍ, ÞÔÏ ÏÎÁ ÉÎËÒÅÍÅÎÔÁÌØÎÁÑ. üÔÏ ÏÚÎÁÞÁÅÔ, ÞÔÏ ÐÏÉÓË ÐÒÏÉÓÈÏÄÉÔ -ÐÏ ÍÅÒÅ ÔÏÇÏ, ËÁË ×Ù ÎÁÂÉÒÁÅÔÅ ÉÓËÏÍÕÀ ÓÔÒÏËÕ. +Команда поиÑка в Emacs ÑвлÑетÑÑ Ð¸Ð½ÐºÑ€ÐµÐ¼ÐµÐ½Ñ‚Ð°Ð»ÑŒÐ½Ð¾Ð¹. Это означает, что поиÑк +проиÑходит по мере того, как вы набираете иÑкомую Ñтроку. -ëÏÍÁÎÄÁ, ÎÁÞÉÎÁÀÝÁÑ ÐÏÉÓË ×ÐÅÒÅÄ -- C-s, Á C-r ÉÝÅÔ ÎÁÚÁÄ. ðïäïöäéôå! îÅ -ÎÕÖÎÏ ÐÒÏÂÏ×ÁÔØ ÐÒÑÍÏ ÓÅÊÞÁÓ. +Команда, Ð½Ð°Ñ‡Ð¸Ð½Ð°ÑŽÑ‰Ð°Ñ Ð¿Ð¾Ð¸Ñк вперед -- C-s, а C-r ищет назад. ПОДОЖДИТЕ! Ðе +нужно пробовать прÑмо ÑейчаÑ. -ëÏÇÄÁ ×Ù ÎÁÖÍÅÔÅ C-s, ×Ù Õ×ÉÄÉÔÅ ÓÔÒÏËÕ "I-search", ÐÏÑ×É×ÛÕÀÓÑ × ÏÂÌÁÓÔÉ ÜÈÁ. -÷ÁÍ ÓÏÏÂÝÁÅÔÓÑ, ÞÔÏ Emacs ÖÄÅÔ ××ÏÄÁ ÓÌÏ×Á, ËÏÔÏÒÏÅ ×Ù ÈÏÔÉÔÅ ÎÁÊÔÉ. - ÚÁ×ÅÒÛÁÅÔ ÐÏÉÓË. +Когда вы нажмете C-s, вы увидите Ñтроку "I-search", поÑвившуюÑÑ Ð² облаÑти +Ñха. Вам ÑообщаетÑÑ, что Emacs ждет ввода Ñтроки, которую вы хотите найти. + завершает поиÑк. ->> ôÅÐÅÒØ ÎÁÖÍÉÔÅ C-s ÄÌÑ ÎÁÞÁÌÁ ÐÏÉÓËÁ. íÅÄÌÅÎÎÏ, ÐÏ ÏÄÎÏÊ ÂÕË×Å, ÎÁÂÉÒÁÊÔÅ - ÓÌÏ×Ï 'ËÕÒÓÏÒ', ÏÓÔÁÎÁ×ÌÉ×ÁÑÓØ ÐÏÓÌÅ ËÁÖÄÏÊ ××ÅÄÅÎÎÏÊ ÂÕË×Ù É ÚÁÍÅÞÁÑ, ÞÔÏ - ÐÒÏÉÓÈÏÄÉÔ Ó ËÕÒÓÏÒÏÍ. - óÅÊÞÁÓ ×Ù ÎÁÛÌÉ ÐÅÒ×ÏÅ ×ÈÏÖÄÅÎÉÅ ÓÌÏ×Á "ËÕÒÓÏÒ". ->> îÁÖÍÉÔÅ C-s ÓÎÏ×Á, ÞÔÏÂÙ ÎÁÊÔÉ ÓÌÅÄÕÀÝÅÅ ×ÈÏÖÄÅÎÉÅ ÓÌÏ×Á "ËÕÒÓÏÒ". ->> ôÅÐÅÒØ ÎÁÖÍÉÔÅ ÞÅÔÙÒÅ ÒÁÚÁ É ÐÒÏÓÌÅÄÉÔÅ ÚÁ ÐÅÒÅÍÅÝÅÎÉÑÍÉ ËÕÒÓÏÒÁ. ->> îÁÖÍÉÔÅ ÄÌÑ ÚÁ×ÅÒÛÅÎÉÑ ÐÏÉÓËÁ. +>> Теперь нажмите C-s Ð´Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° поиÑка. Медленно, по одной букве, набирайте + Ñлово 'курÑор', оÑтанавливаÑÑÑŒ поÑле каждой введенной буквы и замечаÑ, что + проиÑходит Ñ ÐºÑƒÑ€Ñором. + Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð²Ñ‹ нашли первое вхождение Ñлова "курÑор". +>> Ðажмите C-s Ñнова, чтобы найти Ñледующее вхождение Ñлова "курÑор". +>> Теперь нажмите четыре раза и проÑледите за перемещениÑми курÑора. +>> Ðажмите Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ð¾Ð¸Ñка. -÷Ù ÚÁÍÅÔÉÌÉ, ÞÔÏ ÐÒÏÉÓÈÏÄÉÌÏ? Emacs × ÒÅÖÉÍÅ ÉÎËÒÅÍÅÎÔÁÌØÎÏÇÏ ÐÏÉÓËÁ ÐÙÔÁÌÓÑ -ÐÅÒÅÈÏÄÉÔØ Ë ÓÔÒÏËÁÍ, ÓÏ×ÐÁÄÁÀÝÉÍ Ó ÎÁÂÉÒÁÅÍÏÊ ×ÁÍÉ ÓÔÒÏËÏÊ, ÐÏÄÓ×ÅÞÉ×ÁÑ ÉÈ. -þÔÏÂÙ ÐÅÒÅÊÔÉ Ë ÓÌÅÄÕÀÝÅÍÕ ×ÈÏÖÄÅÎÉÀ ÓÌÏ×Á 'ËÕÒÓÏÒ', ÐÒÏÓÔÏ ÎÁÖÍÉÔÅ C-s -ÓÎÏ×Á. åÓÌÉ ÂÏÌØÛÅ ÎÅÔ ×ÈÏÖÄÅÎÉÊ, ÔÏ Emacs ÉÚÄÁÓÔ Ú×ÕËÏ×ÏÊ ÓÉÇÎÁÌ É -ÓÏÏÂÝÉÔ, ÞÔÏ ×ÁÛ ÐÏÉÓË ÎÅ ÕÄÁÌÓÑ ("failing"), C-g ÔÁËÖÅ ÍÏÖÅÔ ÏÔÍÅÎÉÔØ -ÐÏÉÓË. +Ð’Ñ‹ заметили, что произошло? Emacs в режиме инкрементального поиÑка пыталÑÑ +переходить к Ñтрокам, Ñовпадающим Ñ Ð½Ð°Ð±Ð¸Ñ€Ð°ÐµÐ¼Ð¾Ð¹ вами Ñтрокой. Чтобы перейти +к Ñледующему вхождению Ñлова 'курÑор', проÑто нажмите C-s Ñнова. ЕÑли больше +нет вхождений, то Emacs издаÑÑ‚ звуковой Ñигнал и Ñообщит, что ваш поиÑк не +удалÑÑ ("failing"), C-g также завершает поиÑк. -úáíåþáîéå: îÁ ÎÅËÏÔÏÒÙÈ ÓÉÓÔÅÍÁÈ ××ÏÄ C-x C-s ÚÁÂÌÏËÉÒÕÅÔ ÜËÒÁÎ, ÔÁË ÞÔÏ ×Ù -ÎÅ Õ×ÉÄÉÔÅ ÐÏÓÌÅÄÕÀÝÅÇÏ ×Ù×ÏÄÁ Emacs'Á. ôÁËÏÅ ÐÏ×ÅÄÅÎÉÅ ÏÚÎÁÞÁÅÔ, ÞÔÏ -ÏÐÅÒÁÃÉÏÎÎÁÑ ÓÉÓÔÅÍÁ ÉÍÅÅÔ "ÏÓÏÂÅÎÎÏÓÔØ", ÉÍÅÎÕÅÍÕÀ "flow control", -ÐÅÒÅÈ×ÁÔÙ×ÁÀÝÕÀ ÓÏÞÅÔÁÎÉÅ C-s É ÎÅ ÐÒÏÐÕÓËÁÀÝÕÀ ÜÔÏÔ ÓÉÍ×ÏÌ Ë Emacs'Õ. äÌÑ -ÓÎÑÔÉÑ ÂÌÏËÉÒÏ×ËÉ ÜËÒÁÎÁ ÎÁÖÍÉÔÅ C-q. ïÂÒÁÔÉÔÅÓØ Ë ÒÁÚÄÅÌÕ "Spontaneous -Entry to Incremental Search" ÒÕËÏ×ÏÄÓÔ×Á Emacs, ÞÔÏÂÙ ÕÚÎÁÔØ Ï ÔÏÍ, ËÁË -ÂÏÒÏÔØÓÑ Ó ÜÔÏÊ "ÏÓÏÂÅÎÎÏÓÔØÀ". +ЕÑли вы во Ð²Ñ€ÐµÐ¼Ñ Ð¸Ð½ÐºÑ€ÐµÐ¼ÐµÐ½Ñ‚Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ поиÑка нажмете , то поиÑк "вернетÑÑ" +к предыдущему найденному меÑту. ЕÑли вы наберете Ñразу поÑле того как +вы нажали C-s Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ðº Ñледующей позиции, то перемеÑтит к +предыдущему вхождению. ЕÑли предыдущей позиции не было, то удалит +поÑледний Ñимвол в Ñтроке поиÑка. Ðапример, предположим, что вы набрали "к", +поиÑк перейдет к первому вхождению Ñимвола "к". Теперь, еÑли вы наберете +"у", курÑор перейдет к первому вхождению "ку". Ðажатие удалит Ñимвол +"у" из Ñтроки поиÑка, и курÑор вернетÑÑ Ðº первому вхождению "к". -åÓÌÉ ×Ù ×Ï ×ÒÅÍÑ ÉÎËÒÅÍÅÎÔÁÌØÎÏÇÏ ÐÏÉÓËÁ ÎÁÖÍÅÔÅ , ÔÏ ×Ù ÚÁÍÅÔÉÔÅ, -ÞÔÏ ÐÏÓÌÅÄÎÉÊ ÓÉÍ×ÏÌ × ÉÓËÏÍÏÊ ÓÔÒÏËÅ ÕÄÁÌÉÌÓÑ, É ÐÏÉÓË ×ÅÒÎÕÌÓÑ Ë -ÐÒÅÄÙÄÕÝÅÍÕ ÎÁÊÄÅÎÎÏÍÕ ÍÅÓÔÕ. îÁÐÒÉÍÅÒ, ÐÒÅÄÐÏÌÏÖÉÍ, ÞÔÏ ×Ù ÎÁÂÒÁÌÉ "Ë", -ÐÏÉÓË ÐÅÒÅÊÄÅÔ Ë ÐÅÒ×ÏÍÕ ×ÈÏÖÄÅÎÉÀ ÓÉÍ×ÏÌÁ "Ë". ôÅÐÅÒØ, ÅÓÌÉ ×Ù ÎÁÂÅÒÅÔÅ -"Õ", ËÕÒÓÏÒ ÐÅÒÅÊÄÅÔ Ë ÐÅÒ×ÏÍÕ ×ÈÏÖÄÅÎÉÀ "ËÕ". îÁÖÁÔÉÅ ÕÄÁÌÉÔ -ÓÉÍ×ÏÌ "Õ" ÉÚ ÓÔÒÏËÉ ÐÏÉÓËÁ, É ËÕÒÓÏÒ ×ÅÒÎÅÔÓÑ Ë ÐÅÒ×ÏÍÕ ×ÈÏÖÄÅÎÉÀ "Ë". +ЕÑли вы во Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ð¸Ñка введете control- или meta- Ñочетание клавиш (за +некоторыми иÑключениÑми, например, такими, как C-s и C-r, которые имеют +Ñпециальное значение в поиÑке), то поиÑк прекратитÑÑ. -åÓÌÉ ×Ù ×Ï ×ÒÅÍÑ ÐÏÉÓËÁ ××ÅÄÅÔÅ control- ÉÌÉ meta- ÓÉÍ×ÏÌ (ÚÁ ÎÅËÏÔÏÒÙÍÉ -ÉÓËÌÀÞÅÎÉÑÍÉ, ÎÁÐÒÉÍÅÒ, ÔÁËÉÍÉ, ËÁË ÓÉÍ×ÏÌÙ C-s É C-r, ËÏÔÏÒÙÅ ÎÁÞÉÎÁÀÔ -ÐÏÉÓË), ÔÏ ÐÏÉÓË ÐÒÅËÒÁÔÉÔÓÑ. - -C-s ÎÁÞÉÎÁÅÔ ÐÏÉÓË É ÉÝÅÔ ÌÀÂÙÅ ×ÈÏÖÄÅÎÉÑ ÉÓËÏÍÏÊ ÓÔÒÏËÉ ðïóìå ÔÅËÕÝÅÊ -ÐÏÚÉÃÉÉ ËÕÒÓÏÒÁ. åÓÌÉ ×Ù ÈÏÔÉÔÅ ÎÁÊÔÉ ÞÔÏ-ÔÏ ÒÁÎÅÅ × ÔÅËÓÔÅ, ÔÏ ÎÁÖÍÉÔÅ -C-r. ÷ÓÅ, ÞÔÏ ÍÙ ÇÏ×ÏÒÉÌÉ Ï C-s, ÐÒÉÍÅÎÉÍÏ É Ë C-r, ÔÏÌØËÏ C-r ÉÝÅÔ × -ÐÒÏÔÉ×ÏÐÏÌÏÖÎÏÍ ÎÁÐÒÁ×ÌÅÎÉÉ. +C-s начинает поиÑк и ищет любые Ð²Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¸Ñкомой Ñтроки ПОСЛЕ текущей +позиции курÑора. ЕÑли вы хотите найти что-то ранее в текÑте, то нажмите +C-r. Ð’Ñе, что мы говорили о C-s, применимо и к C-r, только C-r ищет в +противоположном направлении. -* íîïöåóô÷ï ïëïî (MULTIPLE WINDOWS) +* МÐОЖЕСТВО ОКОР(MULTIPLE WINDOWS) ----------------------------------- -ïÄÎÏÊ ÉÚ ÐÒÉÑÔÎÙÈ ÏÓÏÂÅÎÎÏÓÔÅÊ Emacs'Á Ñ×ÌÑÅÔÓÑ ÔÏ, ÞÔÏ ×Ù ÍÏÖÅÔÅ -ÏÄÎÏ×ÒÅÍÅÎÎÏ ÏÔÏÂÒÁÖÁÔØ ÎÁ ÜËÒÁÎÅ ÎÅÓËÏÌØËÏ ÏËÏÎ. +Одной из приÑтных возможноÑтей Emacs ÑвлÑетÑÑ Ñ‚Ð¾, что вы можете одновременно +отображать на Ñкране неÑколько окон. (Заметьте, что Emacs иÑпользует термин +"фрейм" (frame), опиÑанный в Ñледующем разделе, Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, что другие +Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð°Ð·Ñ‹Ð²Ð°ÑŽÑ‚ окна. Ð’ РуководÑтве Emacs имеетÑÑ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ñ‹Ð¹ глоÑÑарий). ->> ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ÎÁ ÜÔÕ ÓÔÒÏËÕ É ÎÁÂÅÒÉÔÅ C-u 0 C-l (ÜÔÏ CONTROL-L, Á - ÎÅ CONTROL-1). +>> ПеремеÑтите курÑор на Ñту Ñтроку и наберите C-l C-l. ->> ôÅÐÅÒØ ÎÁÂÅÒÉÔÅ C-x 2, ÞÔÏ ÒÁÚÄÅÌÉÔ ÜËÒÁÎ ÎÁ Ä×Á ÏËÎÁ. - ïÂÁ ÏËÎÁ ÏÔÏÂÒÁÖÁÀÔ ÕÞÅÂÎÉË. ëÕÒÓÏÒ ÏÓÔÁÌÓÑ × ×ÅÒÈÎÅÍ ÏËÎÅ. +>> Теперь наберите C-x 2, что разделит Ñкран на два окна. + Оба окна отображают учебник. КурÑор оÑталÑÑ Ð² верхнем окне. ->> îÁÖÍÉÔÅ C-M-v ÄÌÑ ÐÒÏËÒÕÔËÉ ÎÉÖÎÅÇÏ ÏËÎÁ. - (ÅÓÌÉ Õ ×ÁÓ ÎÅÔ ÎÁÓÔÏÑÝÅÊ ËÎÏÐËÉ META (Alt), ÔÏ ÎÁÖÍÉÔÅ C-v.) +>> Ðажмите C-M-v Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ нижнего окна. + (еÑли у Ð²Ð°Ñ Ð½ÐµÑ‚ клавиши META (Alt), то нажмите C-v.) ->> îÁÖÍÉÔÅ C-x o ("o" ÏÔ ÓÌÏ×Á "other" -- ÄÒÕÇÏÅ) ÄÌÑ ÐÅÒÅÍÅÝÅÎÉÑ ËÕÒÓÏÒÁ × - ÎÉÖÎÅÅ ÏËÎÏ. ->> éÓÐÏÌØÚÕÊÔÅ C-v É M-v × ÎÉÖÎÅÍ ÏËÎÅ, ÄÌÑ ÐÒÏËÒÕÔËÉ ÔÅËÓÔÁ. - ðÒÏÄÏÌÖÉÔÅ ÞÔÅÎÉÅ ÜÔÉÈ ÉÎÓÔÒÕËÃÉÊ × ×ÅÒÈÎÅÍ ÏËÎÅ. +>> Ðажмите C-x o ("o" от Ñлова "other" -- другое) Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÐºÑƒÑ€Ñора в + нижнее окно. +>> ИÑпользуйте C-v и M-v в нижнем окне, Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ текÑта. + Продолжите чтение Ñтой инÑтрукции в верхнем окне. ->> îÁÖÍÉÔÅ C-x o ÓÎÏ×Á, ÞÔÏÂÙ ÐÅÒÅÍÅÓÔÉÔØ ËÕÒÓÏÒ ÎÁÚÁÄ × ×ÅÒÈÎÅÅ ÏËÎÏ. - ëÕÒÓÏÒ × ×ÅÒÈÎÅÍ ÏËÎÅ ÔÁÍ ÖÅ, ÇÄÅ É ÂÙÌ ÄÏ ÔÏÇÏ. +>> Снова нажмите C-x o, чтобы перемеÑтить курÑор назад в верхнее окно. + КурÑор в верхнем окне там же, где и был до того. -÷Ù ÍÏÖÅÔÅ ÐÒÏÄÏÌÖÁÔØ ÐÅÒÅËÌÀÞÁÔØÓÑ ÍÅÖÄÕ ÏËÎÁÍÉ, ÉÓÐÏÌØÚÕÑ C-x o. ëÁÖÄÏÅ -ÏËÎÏ ÈÒÁÎÉÔ Ó×ÏÀ ÐÏÚÉÃÉÀ ËÕÒÓÏÒÁ, ÎÏ ÔÏÌØËÏ ÏÄÎÏ ÐÏËÁÚÙ×ÁÅÔ ËÕÒÓÏÒ. ÷ÓÅ -ÏÂÙÞÎÙÅ ËÏÍÁÎÄÙ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ ÐÒÉÍÅÎÑÀÔÓÑ Ë ÏËÎÕ, × ËÏÔÏÒÏÍ ÏÔÏÂÒÁÖÁÅÔÓÑ -ËÕÒÓÏÒ. íÙ ÎÁÚÙ×ÁÅÍ ÜÔÏ ÏËÎÏ "×ÙÂÒÁÎÎÙÍ" ("selected window"). +Ð’Ñ‹ можете продолжать иÑпользовать C-x o Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ окнами. +"Выбранное окно", где производитÑÑ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ -- Ñто окно Ñ Ð²Ð¸Ð´Ð¸Ð¼Ñ‹Ð¼ +курÑором, который мигает когда вы не набираете текÑÑ‚. ОÑтальные окна +ÑохранÑÑŽÑ‚ ÑобÑтвенные позиции курÑора. ЕÑли вы иÑпользуете Emacs в +графичеÑкой Ñреде, то Ñти курÑоры будут отображатьÑÑ ÐºÐ°Ðº немигающие полые +прÑмоугольники. -ëÏÍÁÎÄÁ C-M-v ÏÞÅÎØ ÕÄÏÂÎÁ, ËÏÇÄÁ ×Ù ÒÅÄÁËÔÉÒÕÅÔÅ ÔÅËÓÔ × ÏÄÎÏÍ ÏËÎÅ, Á -×ÔÏÒÏÅ ÉÓÐÏÌØÚÕÅÔÅ × ËÁÞÅÓÔ×Å ÓÐÒÁ×ÏÞÎÉËÁ. ÷Ù ÍÏÖÅÔÅ ×ÓÅÇÄÁ ÓÏÈÒÁÎÑÔØ -ËÕÒÓÏÒ × ÏËÎÅ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ É ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏ ÐÒÏÄ×ÉÇÁÔØÓÑ ×Ï ×ÔÏÒÏÍ, -ÉÓÐÏÌØÚÕÑ C-M-v. +Команда C-M-v очень удобна, когда вы редактируете текÑÑ‚ в одном окне, а +второе иÑпользуете в качеÑтве Ñправочника. С помощью C-M-v вы можете +прокручивать текÑÑ‚ в другом окне не Ð¿Ð¾ÐºÐ¸Ð´Ð°Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ окна. -C-M-v -- ÐÒÉÍÅÒ CONTROL-META ÓÉÍ×ÏÌÁ. åÓÌÉ Õ ×ÁÓ ÅÓÔØ ÎÁÓÔÏÑÝÁÑ ËÎÏÐËÁ META -(ÏÂÙÞÎÏ ÐÏÍÅÞÅÎÎÁÑ ËÁË Alt), ÔÏ ×Ù ÍÏÖÅÔÅ ÎÁÂÒÁÔØ C-M-v, ÎÁÖÁ× ÏÄÎÏ×ÒÅÍÅÎÎÏ -CONTROL É META É, ÎÅ ÏÔÐÕÓËÁÑ ÉÈ, ÎÁÖÁÔØ v. îÅ ×ÁÖÎÏ, ËÁËÁÑ ÉÚ ËÌÁ×ÉÛ, CONTROL -ÉÌÉ META, ÂÕÄÅÔ ÎÁÖÁÔÁ ÐÅÒ×ÏÊ, ÐÏÓËÏÌØËÕ ÏÂÅ ÜÔÉ ËÎÏÐËÉ ÍÏÄÉÆÉÃÉÒÕÀÔ ÔÉÐ -ÓÉÍ×ÏÌÁ. +C-M-v -- пример CONTROL-META ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ. ЕÑли у Ð²Ð°Ñ ÐµÑть клавиша META +(или Alt), то вы можете набрать C-M-v, нажав одновременно CONTROL и META и, +не отпуÑÐºÐ°Ñ Ð¸Ñ…, нажать v. Ðе важно, ÐºÐ°ÐºÐ°Ñ Ð¸Ð· клавиш, CONTROL или META, будет +нажата первой, поÑкольку обе Ñти клавиши изменÑÑŽÑ‚ набираемый вами Ñимвол. -åÓÌÉ Õ ×ÁÓ ÎÅÔ ÎÁÓÔÏÑÝÅÊ ËÎÏÐËÉ META, É ×ÍÅÓÔÏ ÎÅÅ ×Ù ÉÓÐÏÌØÚÕÅÔÅ , ÔÏ -ÐÏÒÑÄÏË ÉÈ ÎÁÖÁÔÉÑ ×ÁÖÅÎ: ÓÎÁÞÁÌÁ ×Ù ÄÏÌÖÎÙ ÎÁÖÁÔØ , Á ÚÁÔÅÍ CTRL-v; -CONTROL- v ÎÅ ÓÒÁÂÏÔÁÅÔ. üÔÏ ÐÒÏÉÓÈÏÄÉÔ ÐÏÔÏÍÕ, ÞÔÏ ÉÍÅÅÔ -Ó×ÏÊ ÓÏÂÓÔ×ÅÎÎÙÊ ÓÉÍ×ÏÌ -- ÜÔÏ ÎÅ ÍÏÄÉÆÉÃÉÒÕÀÝÁÑ ËÎÏÐËÁ. +ЕÑли у Ð²Ð°Ñ Ð½ÐµÑ‚ клавиши META, и вмеÑто нее вы иÑпользуете , то порÑдок +Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ð²Ð°Ð¶ÐµÐ½: Ñначала вы должны нажать , а затем CTRL-v, поÑкольку +CONTROL- v не будет работать. Это проиÑходит потому, что Ñама +ÑвлÑетÑÑ Ñимволом, а не модифицирующей клавишей. ->> îÁÖÍÉÔÅ C-x 1 (× ×ÅÒÈÎÅÍ ÏËÎÅ), ÞÔÏÂÙ ÉÚÂÁ×ÉÔØÓÑ ÏÔ ÎÉÖÎÅÇÏ ÏËÎÁ. +>> Ðажмите C-x 1 (в верхнем окне), чтобы избавитьÑÑ Ð¾Ñ‚ нижнего окна. -(åÓÌÉ ÂÙ ×Ù ÎÁÖÁÌÉ C-x 1 × ÎÉÖÎÅÍ ÏËÎÅ, ÔÏ ×Ù ÂÙ ÉÚÂÁ×ÉÌÉÓØ ÏÔ ×ÅÒÈÎÅÇÏ. -ðÏÎÉÍÁÊÔÅ ÜÔÕ ËÏÍÁÎÄÕ ËÁË "ïÓÔÁ×ÉÔØ ÔÏÌØËÏ ÏÄÎÏ ÏËÎÏ -- ÔÏ, × ËÏÔÏÒÏÍ Ñ -ÓÅÊÞÁÓ ÎÁÈÏÖÕÓØ"). +(ЕÑли бы вы нажали C-x 1 в нижнем окне, то вы бы избавилиÑÑŒ от верхнего. +Понимайте Ñту команду как "ОÑтавить только одно окно -- то, в котором Ñ +ÑÐµÐ¹Ñ‡Ð°Ñ Ð½Ð°Ñ…Ð¾Ð¶ÑƒÑÑŒ"). -÷ÁÍ ÎÅ ÎÕÖÎÏ ÏÔÏÂÒÁÖÁÔØ ÏÄÉÎ É ÔÏÔ ÖÅ ÂÕÆÅÒ × ÏÂÏÉÈ ÏËÎÁÈ. åÓÌÉ ×Ù -ÉÓÐÏÌØÚÕÅÔÅ C-x C-f, ÞÔÏÂÙ ÏÔËÒÙÔØ ÆÁÊÌ × ÏÄÎÏÍ ÏËÎÅ, ÄÒÕÇÏÅ ÏÓÔÁÎÅÔÓÑ ÂÅÚ -ÉÚÍÅÎÅÎÉÑ. ÷Ù ÍÏÖÅÔÅ ÏÔËÒÙ×ÁÔØ ÆÁÊÌÙ × ËÁÖÄÏÍ ÏËÎÅ ÎÅÚÁ×ÉÓÉÍÏ. +Вам не нужно отображать один и тот же буфер в обоих окнах. ЕÑли вы +иÑпользуете C-x C-f, чтобы открыть файл в одном окне, другое оÑтанетÑÑ Ð±ÐµÐ· +изменениÑ. Ð’Ñ‹ можете незавиÑимо открывать файлы в каждом окне. -åÓÔØ É ÄÒÕÇÏÊ ÐÕÔØ ÉÓÐÏÌØÚÏ×ÁÔØ Ä×Á ÏËÎÁ, ÏÔÏÂÒÁÖÁÀÝÉÈ ÒÁÚÎÙÅ ÆÁÊÌÙ: +ЕÑть и другой путь иÑпользовать два окна, отображающих разные файлы: ->> îÁÂÅÒÉÔÅ C-x 4 C-f, É ××ÅÄÉÔÅ ÉÍÑ ÏÄÎÏÇÏ ÉÚ ×ÁÛÉÈ ÆÁÊÌÏ×. úÁ×ÅÒÛÉÔÅ ××ÏÄ - ÎÁÖÁÔÉÅÍ . úÁÍÅÔØÔÅ, ÞÔÏ ×ÙÂÒÁÎÎÙÊ ÆÁÊÌ ÐÏÑ×ÉÌÓÑ × ÎÉÖÎÅÍ ÏËÎÅ. - ëÕÒÓÏÒ ÐÅÒÅÛÅÌ ÔÕÄÁ ÖÅ. +>> Ðаберите C-x 4 C-f, и введите Ð¸Ð¼Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ из ваших файлов. Завершите ввод + нажатием . Заметьте, что выбранный файл поÑвилÑÑ Ð² нижнем окне. + КурÑор перешел туда же. ->> îÁÂÅÒÉÔÅ C-x o, ÞÔÏÂÙ ×ÅÒÎÕÔØÓÑ × ×ÅÒÈÎÅÅ ÏËÎÏ, É ÚÁÔÅÍ C-x 1, ÞÔÏÂÙ - ÕÄÁÌÉÔØ ÎÉÖÎÅÅ ÏËÎÏ. +>> Ðаберите C-x o, чтобы вернутьÑÑ Ð² верхнее окно, и затем C-x 1, чтобы + удалить нижнее окно. -* òåëõòóé÷îùå õòï÷îé òåäáëôéòï÷áîéñ (RECURSIVE EDITING LEVELS) +* МÐОЖЕСТВО ФРЕЙМОВ (MULTIPLE FRAMES) +------------------------------------- + +Emacs также может Ñоздавать множеÑтво "фреймов" (frames). Фрейм -- Ñто то, +что мы называем коллекцией окон, вмеÑте Ñо Ñтрокой меню, полоÑами прокрутки, +облаÑтью Ñхо, и Ñ‚.д. Ðа графичеÑких диÑплеÑÑ…, то что в Emacs называетÑÑ +"фрейм", большинÑтво других приложений называют "окно". Ð’ графичеÑкой Ñреде +одновременно может быть отображено неÑколько фреймов. Рна текÑтовых +терминалах, может быть показан только один фрейм в конкретный момент +времени. + +>> Ðаберите M-x make-frame . + Ð’Ñ‹ увидите что новый фрейм поÑвилÑÑ Ð½Ð° Ñкране. + +Ð’ новом фрейме вы можете делать вÑе то же Ñамое что и в оригинальном +фрейме. Между ними нет оÑобых отличий. + +>> Ðаберите M-x delete-frame . + Эта команда удалит текущий фрейм. + +Ð’Ñ‹ также можете удалить фрейм иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñтандартные методы вашей графичеÑкой +Ñреды (чаÑто путем Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸ "X" в верхней чаÑти фрейма). ЕÑли вы +таким ÑпоÑобом удалите поÑледний имеющийÑÑ Ñ„Ñ€ÐµÐ¹Ð¼ Emacs, то Ñто приведет к +завершению работы Emacs. + + +* РЕКУРСИВÐЫЕ УРОВÐИ РЕДÐКТИРОВÐÐИЯ (RECURSIVE EDITING LEVELS) -------------------------------------------------------------- -éÎÏÇÄÁ ×Ù ÂÕÄÅÔÅ ÐÏÐÁÄÁÔØ × ÔÁË ÎÁÚÙ×ÁÅÍÙÅ "ÒÅËÕÒÓÉ×ÎÙÅ ÕÒÏ×ÎÉ -ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ". îÁ ÜÔÏ ÕËÁÚÙ×ÁÀÔ ÐÒÑÍÏÕÇÏÌØÎÙÅ ÓËÏÂËÉ × ÓÔÒÏËÅ ÓÏÓÔÏÑÎÉÑ, -ÏËÒÕÖÁÀÝÉÅ ÏÂÙÞÎÙÅ ÓËÏÂËÉ ×ÏËÒÕÇ ÉÍÅÎÉ ÏÓÎÏ×ÎÏÇÏ ÒÅÖÉÍÁ. îÁÐÒÉÍÅÒ, ×Ù -Õ×ÉÄÉÔÅ [(Fundamental)] ×ÍÅÓÔÏ (Fundamental). +Иногда вы будете попадать в так называемые "рекурÑивные уровни +редактированиÑ". Ðа Ñто указывают прÑмоугольные Ñкобки в Ñтроке ÑоÑтоÑниÑ, +окружающие обычные Ñкобки вокруг имени оÑновного режима. Ðапример, вы +увидите [(Fundamental)] вмеÑто (Fundamental). -þÔÏÂÙ ×ÙÊÔÉ ÉÚ ÒÅËÕÒÓÉ×ÎÙÈ ÕÒÏ×ÎÅÊ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ, ÎÁÖÍÉÔÅ -. üÔÏ ÍÎÏÇÏÃÅÌÅ×ÁÑ ËÏÍÁÎÄÁ "×ÙÈÏÄÁ". ÷Ù ÔÁËÖÅ ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÅÅ -ËÁË ÄÌÑ ÕÎÉÞÔÏÖÅÎÉÑ ÌÉÛÎÉÈ ÏËÏÎ, ÔÁË É ÄÌÑ ×ÙÈÏÄÁ ÉÚ ÍÉÎÉ-ÂÕÆÅÒÁ. +Чтобы выйти из рекурÑивных уровней редактированиÑ, нажмите +. Это Ð¼Ð½Ð¾Ð³Ð¾Ñ†ÐµÐ»ÐµÐ²Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° "выхода". Ð’Ñ‹ также можете иÑпользовать ее +как Ð´Ð»Ñ ÑƒÐ½Ð¸Ñ‡Ñ‚Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð»Ð¸ÑˆÐ½Ð¸Ñ… окон, так и Ð´Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð° из мини-буфера. ->> îÁÖÍÉÔÅ M-x, ÞÔÏÂÙ ÐÏÐÁÓÔØ × ÍÉÎÉ-ÂÕÆÅÒ, Á ÚÁÔÅÍ ÎÁÖÍÉÔÅ - , ÞÔÏÂÙ ÐÏËÉÎÕÔØ ÅÇÏ. +>> Ðажмите M-x, чтобы попаÑть в мини-буфер, а затем нажмите + , чтобы покинуть его. -÷Ù ÎÅ ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ C-g ÄÌÑ ×ÙÈÏÄÁ ÉÚ ÒÅËÕÒÓÉ×ÎÙÈ ÕÒÏ×ÎÅÊ -ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ. üÔÏ ÐÏÔÏÍÕ, ÞÔÏ C-g ÉÓÐÏÌØÚÕÅÔÓÑ ÄÌÑ ÏÔÍÅÎÙ ËÏÍÁÎÄ É -ÁÒÇÕÍÅÎÔÏ× ÷îõôòé ÒÅËÕÒÓÉ×ÎÙÈ ÕÒÏ×ÎÅÊ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ. +Ð’Ñ‹ не можете иÑпользовать C-g Ð´Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð° из рекурÑивных уровней +редактированиÑ. Это потому, что C-g иÑпользуетÑÑ Ð´Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹ команд и +аргументов Ð’ÐУТРИ рекурÑивных уровней редактированиÑ. -* ëáë ðïìõþéôø äïðïìîéôåìøîõà ðïíïýø +* КÐК ПОЛУЧИТЬ ДОПОЛÐИТЕЛЬÐУЮ ПОМОЩЬ ------------------------------------ -÷ ÜÔÏÍ ÕÞÅÂÎÉËÅ ÍÙ ÐÏÐÙÔÁÌÉÓØ ÓÎÁÂÄÉÔØ ×ÁÓ ÔÏÌØËÏ ÔÏÊ ÉÎÆÏÒÍÁÃÉÅÊ, ËÏÔÏÒÁÑ -ÐÏÍÏÖÅÔ ×ÁÍ ÎÁÞÁÔØ ÐÏÌØÚÏ×ÁÔØÓÑ Emacs'ÏÍ. ÷ Emacs'Å ÏÞÅÎØ ÍÎÏÇÏ ÓÒÅÄÓÔ× É -ÏÓÏÂÅÎÎÏÓÔÅÊ, É ÐÒÅÄÓÔÁ×ÉÔØ ×ÓÅ ÜÔÏ ÚÄÅÓØ ÎÅ ÐÒÅÄÓÔÁ×ÌÑÅÔÓÑ ×ÏÚÍÏÖÎÙÍ. -ïÄÎÁËÏ, ×ÏÚÍÏÖÎÏ ×Ù ÚÁÈÏÔÉÔÅ ÕÚÎÁÔØ ÂÏÌØÛÅ Ï ×ÏÚÍÏÖÎÏÓÔÑÈ Emacs'Á. Emacs -ÐÒÅÄÏÓÔÁ×ÌÑÅÔ ËÏÍÁÎÄÙ ÄÌÑ ÞÔÅÎÉÑ ÄÏËÕÍÅÎÔÁÃÉÉ Ï ËÏÍÁÎÄÁÈ Emacs. üÔÉ ËÏÍÁÎÄÙ -"ÓÐÒÁ×ËÉ" ("help") ×ÓÅ ÎÁÞÉÎÁÀÔÓÑ Ó ÓÉÍ×ÏÌÁ CONTROL-h, ËÏÔÏÒÙÊ Ñ×ÌÑÅÔÓÑ -"ÓÉÍ×ÏÌÏÍ ÐÏÍÏÝÉ". +Ð’ Ñтом учебнике мы попыталиÑÑŒ Ñнабдить Ð²Ð°Ñ Ð´Ð¾Ñтаточной информацией Ð´Ð»Ñ +начала иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Emacs. Ð’ Emacs очень много разной функциональноÑти, и +предÑтавить вÑе Ñто здеÑÑŒ не предÑтавлÑетÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹Ð¼. Однако, возможно вы +захотите узнать больше о возможноÑÑ‚ÑÑ… Emacs. Emacs предоÑтавлÑет команды +Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ð¸ о командах Emacs. Ð’Ñе команды "Ñправки" (help) +начинаютÑÑ Ñ ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ CONTROL-h, который ÑвлÑетÑÑ "Ñимволом Ñправки". -þÔÏÂÙ ÉÓÐÏÌØÚÏ×ÁÔØ ×ÏÚÍÏÖÎÏÓÔÉ ÓÐÒÁ×ËÉ, ÎÁÖÍÉÔÅ C-h, É ÚÁÔÅÍ -- ÓÉÍ×ÏÌ, ËÏÔÏÒÙÊ -ÒÁÓÓËÁÖÅÔ, ËÁËÏÊ ÉÍÅÎÎÏ ×ÉÄ ÓÐÒÁ×ËÉ ×Ù ÈÏÔÉÔÅ ÐÏÌÕÞÉÔØ. åÓÌÉ ×Ù -äåêóô÷éôåìøîï ÒÁÓÔÅÒÑÌÉÓØ, ÎÁÂÅÒÉÔÅ C-h ?, É Emacs ÒÁÓÓËÁÖÅÔ ×ÁÍ Ï ÔÏÍ, -ËÁËÕÀ ÓÐÒÁ×ËÕ ÏÎ ÍÏÖÅÔ ×ÁÍ ÐÒÅÄÏÓÔÁ×ÉÔØ. åÓÌÉ ×Ù ÎÁÖÁÌÉ C-h É ÐÅÒÅÄÕÍÁÌÉ -ÏÂÒÁÝÁÔØÓÑ Ë ÓÐÒÁ×ËÅ, ÔÏ ÐÒÏÓÔÏ ÎÁÖÍÉÔÅ C-g, ÞÔÏÂÙ ÏÔÍÅÎÉÔØ ÜÔÕ ËÏÍÁÎÄÕ. +Чтобы иÑпользовать Ñправку, нажмите C-h, а затем -- Ñимвол, который +раÑÑкажет, какой именно вид Ñправки вы хотите получить. ЕÑли вы +ДЕЙСТВИТЕЛЬÐО раÑтерÑлиÑÑŒ, наберите C-h ?, и Emacs раÑÑкажет вам о том, +какую Ñправку он может вам предоÑтавить. ЕÑли вы нажали C-h и передумали +обращатьÑÑ Ðº Ñправке, то проÑто нажмите C-g, чтобы отменить Ñту команду. -(ëÏÅ-ÇÄÅ ÐÅÒÅÎÁÚÎÁÞÁÀÔ ÓÉÍ×ÏÌ C-h. òÅÁÌØÎÏÊ ÎÅÏÂÈÏÄÉÍÏÓÔÉ × ÜÔÏÍ ÎÅÔ, É -ÅÓÌÉ ÜÔÏ ÔÁË, ÔÏ ÓÏÏÂÝÉÔÅ Ï ÜÔÏÍ ÓÉÓÔÅÍÎÏÍÕ ÁÄÍÉÎÉÓÔÒÁÔÏÒÕ. ôÅÍ ×ÒÅÍÅÎÅÍ, -ÅÓÌÉ C-h ÎÅ ×ÙÚÙ×ÁÅÔ ÓÏÏÂÝÅÎÉÅ ÐÏÍÏÝÉ ×ÎÉÚÕ ÜËÒÁÎÁ, ÔÏ ÐÏÐÒÏÂÕÊÔÅ ×ÍÅÓÔÏ -ÜÔÏÇÏ ÎÁÖÁÔØ ËÌÁ×ÉÛÕ F1 ÉÌÉ ÎÁÂÒÁÔØ M-x help RET). +(ЕÑли C-h не отображает Ñправку внизу Ñкрана, то попробуйте вмеÑто Ñтого +нажать клавишу F1 или набрать M-x help RET). -ïÄÎÁ ÉÚ ÓÁÍÙÈ ÇÌÁ×ÎÙÈ ÆÕÎËÃÉÊ ÓÐÒÁ×ËÉ -- C-h c. îÁÖÍÉÔÅ C-h, Á ÚÁÔÅÍ c É -ÓÉÍ×ÏÌ ËÏÍÁÎÄÙ ÉÌÉ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ, É Emacs ÏÔÏÂÒÁÚÉÔ ËÒÁÔËÏÅ ÏÐÉÓÁÎÉÅ -ÎÁÂÒÁÎÎÏÊ ËÏÍÁÎÄÙ. +Одна из Ñамых главных функций Ñправки -- C-h c. Ðажмите C-h, а затем c и +Ñимвол команды или поÑледовательноÑть, и Emacs отобразит краткое опиÑание +набранной команды. ->> îÁÖÍÉÔÅ C-h c C-p. +>> Ðажмите C-h c C-p. -óÏÏÂÝÅÎÉÅ ÄÏÌÖÎÏ ×ÙÇÌÑÄÅÔØ ÐÒÉÍÅÒÎÏ ÔÁË: +Сообщение должно выглÑдеть примерно так: C-p runs the command previous-line - (C-p ×ÙÐÏÌÎÑÅÔ ËÏÍÁÎÄÕ previous-line {ÐÒÅÄÙÄÕÝÁÑ-ÓÔÒÏËÁ}) + (C-p выполнÑет команду previous-line {Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ñтрока}) -÷ÁÍ ÓÏÏÂÝÁÀÔ "ÉÍÑ ÆÕÎËÃÉÉ". éÍÅÎÁ ÆÕÎËÃÉÊ ÉÓÐÏÌØÚÕÀÔÓÑ × ÏÓÎÏ×ÎÏÍ ÄÌÑ -ÎÁÓÔÒÏÊËÉ É ÒÁÓÛÉÒÅÎÉÑ Emacs. éÍÅÎÁ ÆÕÎËÃÉÊ ×ÙÂÒÁÎÙ ÔÁË, ÞÔÏÂÙ ÐÏËÁÚÁÔØ, ÞÔÏ -ÉÍÅÎÎÏ ËÏÍÁÎÄÁ ÄÅÌÁÅÔ, Á ÔÁËÖÅ ÏÎÉ ÐÏÚ×ÏÌÑÀÔ Ó ÐÏÍÏÝØÀ ÜÔÏÊ ËÒÁÔËÏÊ -ÉÎÆÏÒÍÁÃÉÉ ÌÅÇÞÅ ÚÁÐÏÍÎÉÔØ ÕÖÅ ×ÙÕÞÅÎÎÙÅ ËÏÍÁÎÄÙ. +Вам Ñообщают "Ð¸Ð¼Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸". ПоÑкольку имена функций выбраны так, чтобы +показать, что именно команда делает, то они могут Ñлужить короткой +документацией -- доÑтаточно чтобы напомнить вам об уже выученных командах. -íÎÏÇÏÓÉÍ×ÏÌØÎÙÅ ÓÏÞÅÔÁÎÉÑ ËÌÁ×ÉÛ, ÔÁËÉÅ ËÁË C-x C-s É (ÅÓÌÉ Õ ×ÁÓ ÎÅÔ ËÎÏÐËÉ -META ÉÌÉ EDIT ÉÌÉ ALT) v ÔÁËÖÅ ÂÕÄÕÔ ÄÏÓÔÕÐÎÙ ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÓÐÒÁ×ËÉ Ó -ÐÏÍÏÝØÀ C-h c. +МногоÑимвольные ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ, такие как C-x C-s и (еÑли у Ð²Ð°Ñ Ð½ÐµÑ‚ клавиши +META или EDIT или ALT) v также будут доÑтупны Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñправки Ñ +помощью C-h c. -÷Ù ÍÏÖÅÔÅ ÐÏÌÕÞÉÔØ ÂÏÌØÛÅ ÉÎÆÏÒÍÁÃÉÉ Ï ËÏÍÁÎÄÅ ÉÓÐÏÌØÚÕÑ C-h k ×ÍÅÓÔÏ C-h c. +Ð’Ñ‹ можете получить больше информации о Ñочетании клавиш иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ C-h k вмеÑто C-h c. ->> îÁÂÅÒÉÔÅ C-h k C-p. +>> Ðаберите C-h k C-p. -÷Ù Õ×ÉÄÉÔÅ ÏÐÉÓÁÎÉÅ ÆÕÎËÃÉÉ, Á ÔÁËÖÅ ÅÅ ÉÍÑ, × ÏÔÄÅÌØÎÏÍ ÏËÎÅ Emacs. ëÏÇÄÁ -×Ù ÚÁ×ÅÒÛÉÔÅ ÞÔÅÎÉÅ, ÎÁÖÍÉÔÅ C-x 1, ÞÔÏÂÙ ÉÚÂÁ×ÉÔØÓÑ ÏÔ ÔÅËÓÔÁ ÓÐÒÁ×ËÉ. -îÅ ÏÂÑÚÁÔÅÌØÎÏ ÎÁÖÉÍÁÔØ C-x 1 ÓÒÁÚÕ: ×Ù ÍÏÖÅÔÅ ÓÎÁÞÁÌÁ ×ÙÐÏÌÎÉÔØ ËÁËÉÅ-ÌÉÂÏ -ÉÚÍÅÎÅÎÉÑ ÔÅËÓÔÁ ×Ï ×ÒÅÍÑ ÐÒÏÓÍÏÔÒÁ ÔÅËÓÔÁ ÓÐÒÁ×ËÉ, É ÔÏÌØËÏ ÚÁÔÅÍ ÎÁÖÁÔØ +Ð’ отдельном окне Emacs вы увидите опиÑание функции, а также ее имÑ. Когда вы +завершите чтение, нажмите C-x 1, чтобы избавитьÑÑ Ð¾Ñ‚ окна Ñ Ñ‚ÐµÐºÑтом Ñправки. +Ðе обÑзательно нажимать C-x 1 Ñразу: вы можете Ñначала выполнить какие-либо +Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑта во Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€Ð¾Ñмотра текÑта Ñправки, и только затем нажать C-x 1. -åÓÔØ ÅÝÅ ÎÅÓËÏÌØËÏ ÐÏÌÅÚÎÙÈ ÆÕÎËÃÉÊ, ÄÏÓÔÕÐÎÙÈ ÞÅÒÅÚ C-h: +ЕÑть еще неÑколько полезных функций, доÑтупных через C-h: - C-h f ïÐÉÓÙ×ÁÅÔ ÆÕÎËÃÉÀ. ÷ÁÍ ÎÅÏÂÈÏÄÉÍÏ ÎÁÂÒÁÔØ ÉÍÑ ÆÕÎËÃÉÉ. + C-h f ОпиÑывает функцию. Вам необходимо набрать Ð¸Ð¼Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸. ->> ðÏÐÒÏÂÕÊÔÅ ÎÁÂÒÁÔØ C-h f previous-line. - üÔÏ ÏÔÏÂÒÁÚÉÔ ÉÎÆÏÒÍÁÃÉÀ Emacs Ï ÆÕÎËÃÉÉ, ËÏÔÏÒÁÑ ×ÙÐÏÌÎÑÅÔÓÑ ËÏÍÁÎÄÏÊ +>> Попробуйте набрать C-h f previous-line. + Это отобразит информацию Emacs о функции, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÑетÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ C-p. -áÎÁÌÏÇÉÞÎÁÑ ËÏÍÁÎÄÁ C-h v ÏÔÏÂÒÁÖÁÅÔ ÄÏËÕÍÅÎÔÁÃÉÀ Ï ÐÅÒÅÍÅÎÎÙÈ, ÚÎÁÞÅÎÉÅ -ËÏÔÏÒÙÈ ×Ù ÍÏÖÅÔÅ ÉÚÍÅÎÉÔØ ÄÌÑ ÎÁÓÔÒÏÊËÉ ÐÏ×ÅÄÅÎÉÑ Emacs. ÷ÁÍ ÎÕÖÎÏ ÎÁÂÒÁÔØ -ÉÍÑ ÐÅÒÅÍÅÎÎÏÊ, ËÏÇÄÁ Emacs ÚÁÐÒÏÓÉÔ ÅÇÏ. +ÐÐ½Ð°Ð»Ð¾Ð³Ð¸Ñ‡Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° C-h v отображает документацию о переменных, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ñ‚Ðµ, +значение которых вы можете изменить Ð´Ð»Ñ Ð½Ð°Ñтройки Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Emacs. Вам нужно +набрать Ð¸Ð¼Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹, когда Emacs запроÑит его. - C-h a (Apropos Command). ÷×ÅÄÉÔÅ ËÌÀÞÅ×ÏÅ ÓÌÏ×Ï É Emacs ÐÏËÁÖÅÔ ×ÁÍ - ÓÐÉÓÏË ×ÓÅÈ ËÏÍÁÎÄ É ÆÕÎËÃÉÊ, ÉÍÅÎÁ ËÏÔÏÒÙÈ ÓÏÄÅÒÖÁÔ ÜÔÏ ÓÌÏ×Ï. - äÌÑ ËÏÍÁÎÄ, ËÏÔÏÒÙÅ ÍÏÇÕÔ ÂÙÔØ ×ÙÚ×ÁÎÙ ÞÅÒÅÚ Meta-x, Emacs - ÐÏËÁÖÅÔ ÓÌÏ×Ï "Command" ÓÌÅ×Á ÏÔ ÉÈ ÏÐÉÓÁÎÉÑ, Á ÔÁËÖÅ ÓÉÍ×ÏÌÙ, - ËÏÔÏÒÙÅ ÜÔÉ ËÏÍÁÎÄÙ ×ÙÚÙ×ÁÀÔ. + C-h a (Command Apropos). Введите ключевое Ñлово и Emacs покажет вам + ÑпиÑок вÑех команд и функций, имена которых Ñодержат Ñто Ñлово. + Эти команды могут быть запущены Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Meta-x. + Ð”Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… команд, Ñта команда также покажет поÑледовательноÑти + клавиш которые могут иÑпользоватьÑÑ Ð´Ð»Ñ Ð¸Ñ… запуÑка. ->> îÁÂÅÒÉÔÅ C-h a file. +>> Ðаберите C-h a file. -üÔÏ ÏÔÏÂÒÁÚÉÔ × ÄÒÕÇÏÍ ÏËÎÅ ÓÐÉÓÏË ×ÓÅÈ ËÏÍÁÎÄ M-x, Õ ËÏÔÏÒÙÈ × ÉÍÅÎÁÈ -ÓÏÄÅÒÖÉÔÓÑ ÓÌÏ×Ï "file". ôÁËÖÅ × ÓÐÉÓËÅ ËÒÏÍÅ ÔÁËÉÈ ËÏÍÁÎÄ, ËÁË find-file, -×Ù Õ×ÉÄÉÔÅ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÅ ÓÉÍ×ÏÌØÎÙÅ ËÏÍÁÎÄÙ, ÔÁËÉÅ ËÁË C-x C-f. +Это отобразит в другом окне ÑпиÑок вÑех команд M-x, у которых в именах +ÑодержитÑÑ Ñлово "file". Также в ÑпиÑке кроме таких команд, как find-file, +вы увидите ÑоответÑтвующие Ñимвольные команды, такие как C-x C-f. ->> îÁÂÅÒÉÔÅ C-M-v ÄÌÑ ÐÒÏËÒÕÔËÉ ÏËÎÁ ÓÐÒÁ×ËÉ. ÷ÙÐÏÌÎÉÔÅ ÜÔÏ ÎÅÓËÏÌØËÏ ÒÁÚ. +>> Ðаберите C-M-v Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ окна Ñправки. Выполните Ñто неÑколько раз. ->> îÁÂÅÒÉÔÅ C-x 1 ÄÌÑ ÕÄÁÌÅÎÉÑ ÏËÎÁ ÓÐÒÁ×ËÉ. +>> Ðаберите C-x 1 Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¾ÐºÐ½Ð° Ñправки. - C-h i þÉÔÁÔØ ÉÎÔÅÒÁËÔÉ×ÎÙÅ ÒÕËÏ×ÏÄÓÔ×Á (ËÏÍÁÎÄÁ Info). üÔÁ ËÏÍÁÎÄÁ - ÐÅÒÅÈÏÄÉÔ × ÓÐÅÃÉÁÌØÎÙÊ ÂÕÆÅÒ Ó ÉÍÅÎÅÍ `*info*', ÇÄÅ ×Ù ÍÏÖÅÔÅ - ÞÉÔÁÔØ ÉÎÔÅÒÁËÔÉ×ÎÙÅ ÒÕËÏ×ÏÄÓÔ×Á ÄÌÑ ÐÁËÅÔÏ×, ÕÓÔÁÎÏ×ÌÅÎÎÙÈ × ×ÁÛÅÊ - ÓÉÓÔÅÍÅ. îÁÂÅÒÉÔÅ m emacs ÄÌÑ ÞÔÅÎÉÑ ÒÕËÏ×ÏÄÓÔ×Á ÐÏ - Emacs. åÓÌÉ ×Ù ÎÉËÏÇÄÁ ÒÁÎÅÅ ÎÅ ÉÓÐÏÌØÚÏ×ÁÌÉ Info, ÔÏ ÎÁÂÅÒÉÔÅ ? É - Emacs ÏÔËÒÏÅÔ ÕÞÅÂÎÉË ÐÏ ×ÏÚÍÏÖÎÏÓÔÑÍ ÒÅÖÉÍÁ Info. ïÄÎÁÖÄÙ - ÏÚÎÁËÏÍÉ×ÛÉÓØ Ó ÜÔÉÍ ÕÞÅÂÎÉËÏÍ, ×Ù ÄÏÌÖÎÙ ÉÓÐÏÌØÚÏ×ÁÔØ ÒÕËÏ×ÏÄÓÔ×Ï - Emacs Info × ËÁÞÅÓÔ×Å ÏÓÎÏ×ÎÏÊ ÄÏËÕÍÅÎÔÁÃÉÉ. + C-h i Читать интерактивные руководÑтва (команда Info). Эта команда + переходит в Ñпециальный буфер Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ `*info*', где вы можете + читать интерактивные руководÑтва Ð´Ð»Ñ Ð¿Ð°ÐºÐµÑ‚Ð¾Ð², уÑтановленных в вашей + ÑиÑтеме. Ðаберите m emacs Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ€ÑƒÐºÐ¾Ð²Ð¾Ð´Ñтва по + Emacs. ЕÑли вы никогда ранее не иÑпользовали Info, то наберите ? и + Emacs откроет учебник по возможноÑÑ‚Ñм режима Info. Однажды + ознакомившиÑÑŒ Ñ Ñтим учебником, вы должны иÑпользовать руководÑтво + Emacs Info в качеÑтве оÑновной документации. -* äïðïìîéôåìøîùå ÷ïúíïöîïóôé +* ДОПОЛÐИТЕЛЬÐЫЕ ВОЗМОЖÐОСТИ ---------------------------- -÷Ù ÍÏÖÅÔÅ ÕÚÎÁÔØ ÂÏÌØÛÅ Ï Emacs'Å, ÞÉÔÁÑ ÅÇÏ ÒÕËÏ×ÏÄÓÔ×Ï, ËÎÉÇÉ ÉÌÉ -ÉÎÔÅÒÁËÔÉ×ÎÙÊ ÓÐÒÁ×ÏÞÎÉË (ÉÓÐÏÌØÚÕÊÔÅ ÍÅÎÀ Help ÉÌÉ ÎÁÂÅÒÉÔÅ F10 h r). ÷ÁÍ -ÏÓÏÂÅÎÎÏ ÐÏÎÒÁ×ÑÔÓÑ Ä×Å ÆÕÎËÃÉÉ -- ÚÁ×ÅÒÛÅÎÉÅ, ËÏÔÏÒÏÅ ÓÏËÒÁÝÁÅÔ ËÏÌÉÞÅÓÔ×Ï -ÎÁÖÉÍÁÅÍÙÈ ËÌÁ×ÉÛ, É dired, ËÏÔÏÒÙÊ ÏÂÌÅÇÞÁÅÔ ÒÁÂÏÔÕ Ó ÆÁÊÌÁÍÉ. +Ð’Ñ‹ можете узнать больше об Emacs, Ñ‡Ð¸Ñ‚Ð°Ñ Ñ€ÑƒÐºÐ¾Ð²Ð¾Ð´Ñтво по нему, книги или +интерактивный Ñправочник (иÑпользуйте меню Help или наберите F10 h r). Вам +оÑобенно понравÑÑ‚ÑÑ Ð´Ð²Ðµ функции -- дополнение имен (completion), которое +Ñокращает количеÑтво нажимаемых клавиш, и dired, который упрощает работу Ñ +файлами. -úÁ×ÅÒÛÅÎÉÅ ÉÓÐÏÌØÚÕÅÔÓÑ ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÉÚÂÅÖÁÔØ ÎÁÂÏÒÁ ÌÉÛÎÉÈ ÓÉÍ×ÏÌÏ×. -îÁÐÒÉÍÅÒ, ÅÓÌÉ ×Ù ÈÏÔÉÔÅ ÐÅÒÅËÌÀÞÉÔØÓÑ × ÂÕÆÅÒ *Messages*, ÔÏ ×Ù ÍÏÖÅÔÅ -ÎÁÂÒÁÔØ C-x b *M É Emacs ÚÁÐÏÌÎÉÔ ÏÓÔÁÔÏË ÉÍÅÎÉ ÂÕÆÅÒÁ, ÐÏÓËÏÌØËÕ ÏÎ -ÍÏÖÅÔ ÏÐÒÅÄÅÌÉÔØ ÅÇÏ ÉÚ ÔÏÇÏ, ÞÔÏ ×Ù ÕÖÅ ÎÁÂÒÁÌÉ. úÁ×ÅÒÛÅÎÉÑ ÏÐÉÓÁÎÙ × -Info-×ÅÒÓÉÉ ÒÕËÏ×ÏÄÓÔ×Á ÐÏ Emacs × ÒÁÚÄÅÌÅ "Completion". +Дополнение имен иÑпользуетÑÑ Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы избежать набора лишних +Ñимволов. Ðапример, еÑли вы хотите переключитьÑÑ Ð² буфер *Messages*, то вы +можете набрать C-x b *M и Emacs дополнит оÑтаток имени буфера, +поÑкольку он может определить его из того, что вы уже набрали. Дополнение +имен опиÑано в Info-верÑии руководÑтва по Emacs в разделе "Completion". -Dired ÐÏÚ×ÏÌÑÅÔ ×ÁÍ ÏÔÏÂÒÁÖÁÔØ ÓÐÉÓÏË ÆÁÊÌÏ× × ËÁÔÁÌÏÇÅ (Á ÔÁËÖÅ -ÐÏÄËÁÔÁÌÏÇÁÈ, × ÚÁ×ÉÓÉÍÏÓÔÉ ÏÔ ÎÁÓÔÒÏÊËÉ), ÐÅÒÅÍÅÝÁÔØÓÑ ÐÏ ÓÐÉÓËÕ ÆÁÊÌÏ×, -ÏÔËÒÙ×ÁÔØ ÉÈ, ÐÅÒÅÉÍÅÎÏ×Ù×ÁÔØ, ÕÄÁÌÑÔØ É ×ÙÐÏÌÎÑÔØ ÐÒÏÞÉÅ ÄÅÊÓÔ×ÉÑ ÎÁÄ -ÆÁÊÌÁÍÉ. Dired ÏÐÉÓÁÎ × Info-×ÅÒÓÉÉ ÒÕËÏ×ÏÄÓÔ×Á ÐÏ Emacs × ÒÁÚÄÅÌÅ "Dired". +Dired позволÑет вам отображать ÑпиÑок файлов в каталоге (а также +подкаталогах, в завиÑимоÑти от наÑтройки), перемещатьÑÑ Ð¿Ð¾ ÑпиÑку файлов, +открывать их, переименовывать, удалÑть и выполнÑть прочие дейÑÑ‚Ð²Ð¸Ñ Ð½Ð°Ð´ +файлами. Dired опиÑан в Info-верÑии руководÑтва по Emacs в разделе "Dired". -÷ ÒÕËÏ×ÏÄÓÔ×Å ÔÁËÖÅ ÏÐÉÓÁÎÙ ÐÒÏÞÉÅ ×ÏÚÍÏÖÎÏÓÔÉ Emacs. +Ð’ руководÑтве также опиÑаны оÑтальные возможноÑти Emacs. -* úáëìàþåîéå +* ЗÐКЛЮЧЕÐИЕ ------------ -úÁÐÏÍÎÉÔÅ, ÞÔÏ ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÓÏ×ÓÅÍ ×ÙÊÔÉ ÉÚ Emacs, ÉÓÐÏÌØÚÕÅÔÓÑ ÓÏÞÅÔÁÎÉÅ -ËÌÁ×ÉÛ C-x C-c. á ÞÔÏÂÙ ×ÒÅÍÅÎÎÏ ×ÙÊÔÉ × ÏÂÏÌÏÞËÕ (shell) É ÐÏÔÏÍ ×ÅÒÎÕÔØÓÑ -ÏÂÒÁÔÎÏ, ÉÓÐÏÌØÚÕÊÔÅ C-z. +Ð”Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð° из Emacs, иÑпользуетÑÑ Ñочетание клавиш C-x C-c. -üÔÏÔ ÕÞÅÂÎÉË ÄÏÌÖÅÎ ÂÙÔØ ÐÏÎÑÔÅÎ ×ÓÅÍ ÎÏ×ÙÍ ÐÏÌØÚÏ×ÁÔÅÌÑÍ, ÎÏ ÅÓÌÉ ×Ù -ÎÁÊÄÅÔÅ ÞÔÏ-ÎÉÂÕÄØ ÎÅÑÓÎÏÅ, ÎÅ ÎÕÖÎÏ ÓÉÄÅÔØ É ÐÏÒÉÃÁÔØ ÓÅÂÑ -- ÖÁÌÕÊÔÅÓØ! +Этот учебник должен быть понÑтен вÑем новым пользователÑм, но еÑли вы +найдете что-нибудь неÑÑное, не нужно Ñидеть и порицать ÑÐµÐ±Ñ -- жалуйтеÑÑŒ! -* õóìï÷éñ òáóðòïóôòáîåîéñ +* УСЛОВИЯ РÐСПРОСТРÐÐЕÐИЯ ------------------------- -üÔÏÔ ÕÞÅÂÎÉË ÐÒÏÉÚÏÛÅÌ ÉÚ ÄÌÉÎÎÏÊ ÓÅÒÉÉ ÕÞÅÂÎÉËÏ× Emacs, ÎÁÞÁÔÏÊ Ó ÏÄÎÁÖÄÙ -ÎÁÐÉÓÁÎÎÏÇÏ Stuart Cracraft ÄÌÑ ÏÒÉÇÉÎÁÌØÎÏÇÏ Emacs'Á. +Этот учебник произошел из длинной Ñерии учебников Emacs, начатой Ñ Ð¾Ð´Ð½Ð°Ð¶Ð´Ñ‹ +напиÑанного Stuart Cracraft учебника Ð´Ð»Ñ Ð¾Ñ€Ð¸Ð³Ð¸Ð½Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Emacs. -üÔÁ ×ÅÒÓÉÑ ÕÞÅÂÎÉËÁ, ËÁË É GNU Emacs, ÚÁÝÉÝÅÎÁ ÐÒÁ×ÁÍÉ ËÏÐÉÒÏ×ÁÎÉÑ -(copyrighted) É ÐÒÉÈÏÄÉÔ Ó ÏÇÒÁÎÉÞÅÎÉÑÍÉ ÒÁÓÐÒÏÓÔÒÁÎÅÎÉÑ ËÏÐÉÊ ÓÏ -ÓÌÅÄÕÀÝÉÍÉ ÓÏÇÌÁÛÅÎÉÑÍÉ: +Эта верÑÐ¸Ñ ÑƒÑ‡ÐµÐ±Ð½Ð¸ÐºÐ°, как и GNU Emacs, защищена правами ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ +(copyrighted) и приходит Ñ Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñми раÑпроÑÑ‚Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¿Ð¸Ð¹ Ñо +Ñледующими ÑоглашениÑми: Copyright (C) 1985, 1996, 1998, 2001-2012 Free Software Foundation, Inc. @@ -1141,17 +1118,18 @@ Copyright (C) 1985, 1996, 1998, 2001-2012 Free Software Foundation, Inc. under the above conditions, provided also that they carry prominent notices stating who last altered them. -õÓÌÏ×ÉÑ ËÏÐÉÒÏ×ÁÎÉÑ ÓÁÍÏÇÏ Emacs ÂÏÌÅÅ ÓÌÏÖÎÙÅ, ÎÏ ÐÒÉÍÅÒÎÏ × ÔÏÍ ÖÅ ÄÕÈÅ. -ðÏÖÁÌÕÊÓÔÁ, ÐÒÏÞÔÉÔÅ ÆÁÊÌ COPYING É ÚÁÔÅÍ ÄÁÊÔÅ ËÏÐÉÀ GNU Emacs ×ÁÛÉÍ -ÄÒÕÚØÑÍ. ðÏÍÏÇÉÔÅ ÕÎÉÞÔÏÖÉÔØ ÏÂÓÔÒÕËÃÉÏÎÉÚÍ × ÏÂÌÁÓÔÉ ÐÒÏÇÒÁÍÍÎÏÇÏ -ÏÂÅÓÐÅÞÅÎÉÑ ("×ÌÁÄÅÎÉÅ"), ÉÓÐÏÌØÚÕÑ, ÓÏÚÄÁ×ÁÑ É ÒÁÓÐÒÏÓÔÒÁÎÑÑ Ó×ÏÂÏÄÎÏÅ -ÐÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ! +УÑÐ»Ð¾Ð²Ð¸Ñ Ñ€Ð°ÑпроÑÑ‚Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñамого Emacs более Ñложные, но примерно в том же духе. +ПожалуйÑта, прочтите файл COPYING и затем раздайте копию GNU Emacs вашим +друзьÑм. Помогите уничтожить обÑтрукционизм в облаÑти программного +обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ ("владение"), иÑпользуÑ, ÑÐ¾Ð·Ð´Ð°Ð²Ð°Ñ Ð¸ раÑпроÑтранÑÑ Ñвободное +программное обеÑпечение! -// ÖÄÕ ÚÁÍÅÞÁÎÉÊ É ÉÓÐÒÁ×ÌÅÎÉÑ ÏÛÉÂÏË ÐÏ ÁÄÒÅÓÕ alexott@gmail.com. +// жду замечаний и иÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾ÑˆÐ¸Ð±Ð¾Ðº по адреÑу alexott@gmail.com. // Alex Ott. ;;; Local Variables: -;;; coding: cyrillic-koi8 +;;; coding: utf-8 ;;; sentence-end-double-space: nil +;;; fill-column: 76 ;;; End: diff --git a/etc/tutorials/TUTORIAL.sl b/etc/tutorials/TUTORIAL.sl index ef1fecbc86a..804fe366d50 100644 --- a/etc/tutorials/TUTORIAL.sl +++ b/etc/tutorials/TUTORIAL.sl @@ -1,41 +1,42 @@ -Prvo berilo za Emacs. Pogoji uporabe in raz¹irjanja so navedeni na koncu. +Prvo berilo za Emacs. Pogoji uporabe in razÅ¡irjanja so navedeni na koncu. -Ukazi v Emacsu v splo¹nem vkljuèujejo tipki CONTROL (vèasih oznaèeni -CTRL ali CTL) in META (vèasih oznaèena EDIT ali ALT). Namesto, da bi ju -vedno izpisali s celim imenom, bomo uporabili naslednji okraj¹avi: +Ukazi v Emacsu v sploÅ¡nem vkljuÄujejo tipki CONTROL (vÄasih oznaÄeni +CTRL ali CTL) in META (vÄasih oznaÄena EDIT ali ALT). Namesto, da bi ju +vedno izpisali s celim imenom, bomo uporabili naslednji okrajÅ¡avi: - C- pomeni, da moramo dr¾ati pritisnjeno tipko CONTROL, ko - vtipkamo . Oznaka C-f tako pomeni: dr¾imo pritisnjeno + C- pomeni, da moramo držati pritisnjeno tipko CONTROL, ko + vtipkamo . Oznaka C-f tako pomeni: držimo pritisnjeno tipko CONTROL in pritisnemo tipko f. - M- pomeni, da moramo dr¾ati pritisnjeno tipko META, EDIT ali - ALT, ko vtipkamo . Èe na tipkovnici ni tipk META, EDIT + M- pomeni, da moramo držati pritisnjeno tipko META, EDIT ali + ALT, ko vtipkamo . ÄŒe na tipkovnici ni tipk META, EDIT ali ALT, pritisnemo tipko ESC, jo spustimo in zatem - pritisnemo tipko . Tipko ESC bomo oznaèevali z . + pritisnemo tipko . Tipko ESC bomo oznaÄevali z . Pomembno: Emacs zapustimo z ukazom C-x C-c (dva znaka). -V uèbeniku so vaje, s katerimi preskusite nove ukaze. Oznaèujeta jih -znaka ,>>` ob levem robu. Zgled: +Delno vneÅ¡en ukaz prekinete s C-g. +V uÄbeniku so vaje, s katerimi preskusite nove ukaze. OznaÄujeta jih +znaka »>>« ob levem robu. Zgled: <> -[Sredina strani je iz didaktiènih razlogov prazna. Besedilo se nadaljuje spodaj] ->> Vtipkajte zdaj ukaz C-v (View next screen, Prika¾i naslednji zaslon), +[Sredina strani je iz didaktiÄnih razlogov prazna. Besedilo se nadaljuje spodaj] +>> Vtipkajte zdaj ukaz C-v (View next screen, Prikaži naslednji zaslon), da se premaknete na naslednji zaslon (kar poskusite, pritisnite hkrati tipko CONTROL in V). Od zdaj naprej boste morali to - napraviti sami vsakiè, ko pridete do konca zaslona. + napraviti sami vsakiÄ, ko pridete do konca zaslona. -Ste opazili, da sta se dve vrstici s prej¹njega zaslona ponovili? Ta -kontinuiteta olaj¹a branje pri skakanju s strani na stran. +Ste opazili, da sta se dve vrstici s prejÅ¡njega zaslona ponovili? Ta +kontinuiteta olajÅ¡a branje pri skakanju s strani na stran. Prva stvar, ki si jo morate zapomniti, je, kako se premikate po -datoteki. Zdaj ¾e veste, da se premaknete za cel zaslon naprej z +datoteki. Zdaj že veste, da se premaknete za cel zaslon naprej z ukazom C-v. Za cel zaslon nazaj pa se premaknete z ukazom M-v -(pritisnite tipko META in jo dr¾ite ter pritisnite tipko v, ali pa -pritisnite in spustite ter zatem pritisnite tipko v, èe tipke -META, EDIT ali ALT na va¹i tipkovnici ni). +(pritisnite tipko META in jo držite ter pritisnite tipko v, ali pa +pritisnite in spustite ter zatem pritisnite tipko v, Äe tipke +META, EDIT ali ALT na vaÅ¡i tipkovnici ni). >> Nekajkrat pritisnite M-v in C-v, da vidite, kako ukaza delujeta. -* POVZETEK +* povzetek ---------- Za pregled celega zaslona besedila so uporabni naslednji ukazi: @@ -43,110 +44,113 @@ Za pregled celega zaslona besedila so uporabni naslednji ukazi: C-v Premik se za cel zaslon naprej M-v Premik se za cel zaslon nazaj C-l Cel zaslon premaknemo tako, da je zdaj po vertikali - osredninjen okoli besedila, kjer se nahaja kazalèek - (znak v C-l je èrka L, ne ¹tevka 1) + osredninjen okoli besedila, kjer se nahaja kazalÄek + (znak v C-l je Ärka L, ne Å¡tevka 1) ->> Poi¹èite kazalèek na zaslonu in si zapomnite besedilo okoli njega. - Vtipkajte C-l. - Ponovno poi¹èite kazalèek. Besedilo okoli njega je ostalo isto. +>> PoiÅ¡Äite kazalÄek na zaslonu in si zapomnite besedilo okoli njega. + Zatem vtipkajte C-l. Ponovno poiÅ¡Äite kazalÄek. Opazili boste, da + je besedilo okoli njega ostalo isto, vendar se je pomaknilo na sredo + zaslona. ÄŒe Å¡e enkrat pritisnite C-l, se bo ta vrstica pomaknila na + vrh zaslona. Pritisnite C-l Å¡e enkrat, in vrstica se bo pomaknila + na dno zaslona. Za premikanje za cel zaslon naprej ali nazaj lahko tipkovnicah, ki imajo ti tipki, uporabljate tudi PageUp in PageDown. Opisan postopek s C-v in M-v pa deluje povsod. -* PREMIKANJE KAZALÈKA +* PREMIKANJE KAZALÄŒKA --------------------- Premiki za celo stran naprej in nazaj so sicer uporabni, ampak kako pa pridemo do izbranega mesta na zaslonu? -Naèinov je veè. Najosnovnej¹i je uporaba ukazov C-p, C-b, C-f in -C-n. Ti po vrsti premaknejo kazalèek v prej¹njo vrstico, znak nazaj, -znak naprej, in v naslednjo vrstico. Ti ¹tirje ukazi so enakovredni +NaÄinov je veÄ. NajosnovnejÅ¡i je uporaba ukazov C-p, C-b, C-f in +C-n. Ti po vrsti premaknejo kazalÄek v prejÅ¡njo vrstico, znak nazaj, +znak naprej, in v naslednjo vrstico. Ti Å¡tirje ukazi so enakovredni kurzorskim tipkam: - prej¹nja vrstica, C-p + prejÅ¡nja vrstica, C-p : : - nazaj, C-b .... trenutni polo¾aj kazalèka .... naprej, C-f + nazaj, C-b .... trenutni položaj kazalÄka .... naprej, C-f : : naslednja vrstica, C-n ->> S pritiski na C-n ali C-p premaknite kazalèek v sredinsko vrstico +>> S pritiski na C-n ali C-p premaknite kazalÄek v sredinsko vrstico na diagramu zgoraj. Zatem pritisnite C-l. S tem diagram postavite na sredino zaslona. -V angle¹èini ima izbor tipk nazoren pomen. P kot ,previous` -(prej¹nji), N kot ,next` (naslednji), B kot ,backward` (nazaj) in F -kot ,forward` (naprej). Te osnovne ukaze za premikanje kazalèka boste -uporabljali ves èas. +V angleÅ¡Äini ima izbor tipk nazoren pomen. P kot »previous« +(prejÅ¡nji), N kot »next« (naslednji), B kot »backward« (nazaj) in F +kot »forward« (naprej). Te osnovne ukaze za premikanje kazalÄka boste +uporabljali ves Äas. ->> Nekajkrat pritisnite C-n, da pride kazalèek do te vrstice. +>> Nekajkrat pritisnite C-n, da pride kazalÄek do te vrstice. >> Z nekaj C-f se pomaknite na desno na sredo vrstice, nato pa nekajkrat - pritisnite C-p. Opazujte, kaj se dogaja s kazalèkom na sredini + pritisnite C-p. Opazujte, kaj se dogaja s kazalÄkom na sredini vrstice. -Vsaka vrstice v besedilu je zakljuèena z znakom za novo vrstico -(angl. Newline). Ta loèuje vrstico v besedilu od naslednje. Tudi -zadnja vrstica v datoteki mora biti zaljuèena z znakom za novo vrstico -(èeprav tega Emacs ne zahteva). +Vsaka vrstice v besedilu je zakljuÄena z znakom za novo vrstico +(angl. Newline). Ta loÄuje vrstico v besedilu od naslednje. (Tudi +zadnja vrstica v datoteki je po navadi zakljuÄena z znakom za novo +vrstico, Äeprav Emacs tega ne zahteva.) ->> Poskusite ukaz C-b, ko je kazalèek na zaèetku vrstice. Kazalèek se - mora premakniti na konec prej¹nje vrstice. To je zato, ker se je +>> Poskusite ukaz C-b, ko je kazalÄek na zaÄetku vrstice. KazalÄek se + mora premakniti na konec prejÅ¡nje vrstice. To je zato, ker se je ravnokar premaknil prek znaka za konec vrstice. -Ukaz C-f premika kazalèek prek znaka za novo vrstico enako kot C-b. +Ukaz C-f premika kazalÄek prek znaka za novo vrstico enako kot C-b. ->> Poskusite ¹e nekajkrat pritisniti C-b, da dobite obèutek za - premikanje kazalèka. Potem nekajkrat poskusite C-f, da pridete do konca - vrstice. ©e enkrat pritisnite C-f, da skoèite v naslednjo vrstico. +>> Poskusite Å¡e nekajkrat pritisniti C-b, da dobite obÄutek za + premikanje kazalÄka. Potem nekajkrat poskusite C-f, da pridete do konca + vrstice. Å e enkrat pritisnite C-f, da skoÄite v naslednjo vrstico. -Ko s kazalèkom dose¾ete zgornji ali spodnji rob zaslona, se besedilo -toliko premakne, da kazalèek ostane na zaslonu. V angle¹èini se temu -pravi ,,scrolling``. To omogoèa, da lahko premaknemo kazalèek na +Ko s kazalÄkom dosežete zgornji ali spodnji rob zaslona, se besedilo +toliko premakne, da kazalÄek ostane na zaslonu. V angleÅ¡Äini se temu +pravi »scrolling«. To omogoÄa, da lahko premaknemo kazalÄek na katerokoli mesto v besedilu, a vseeno ostanemo na zaslonu. ->> Poskusite kazalèek pripeljati s C-n èisto do dna zaslona in si oglejte, +>> Poskusite kazalÄek pripeljati s C-n Äisto do dna zaslona in si oglejte, kaj se zgodi. -Èe se vam zdi premikanje po en znak prepoèasno, se lahko premikate za -celo besedo. M-f (META-f) premakne kazalèek za eno besedo naprej, M-b +ÄŒe se vam zdi premikanje po en znak prepoÄasno, se lahko premikate za +celo besedo. M-f (META-f) premakne kazalÄek za eno besedo naprej, M-b pa za besedo nazaj. >> Poskusite nekajkrat M-f in M-b. -Èe je kazalèek sredi besede, ga M-f prestavi na konec besede. Èe je v +ÄŒe je kazalÄek sredi besede, ga M-f prestavi na konec besede. ÄŒe je v belini med besedami, ga M-f premakne na konec naslednje besede. M-b deluje podobno, a v nasprotni smeri. ->> Nekajkrat poskusite M-f in M-b, vmes pa ¹e nekaj C-f in - C-b. Opazujte uèinke M-f in M-b, ko je kazalèek sredi besede ali +>> Nekajkrat poskusite M-f in M-b, vmes pa Å¡e nekaj C-f in + C-b. Opazujte uÄinke M-f in M-b, ko je kazalÄek sredi besede ali med besedami. Ste opazili paralelo med C-f in C-b na eni strani ter M-f in M-b na -drugi? V Emacsu se dostikrat ukazi Meta nana¹ajo na operacije nad +drugi? V Emacsu se dostikrat ukazi Meta nanaÅ¡ajo na operacije nad enotami jezika (besede, stavki, odstavki), medtem ko se ukazi Control -nana¹ajo na operacije, neodvisne od zvrsti besedila (znaki, vrstice +nanaÅ¡ajo na operacije, neodvisne od zvrsti besedila (znaki, vrstice ipd.). Podobna zveza je tudi med vrsticami in stavki: ukaza C-a in C-e -premakneta kazalèek na zaèetek oz. konec vrstice, M-a in M-e pa na -zaèetek oz. konec stavka. +premakneta kazalÄek na zaÄetek oz. konec vrstice, M-a in M-e pa na +zaÄetek oz. konec stavka. >> Poskusite nekaj ukazov C-a, potem pa nekaj ukazov C-e. Poskusite nekaj ukazov M-a, potem pa nekaj ukazov M-e. -Ste opazili, da ponovljeni C-a ne napravijo niè, ponovljeni M-a pa se -premikajo naprej? Èeprav se ne obna¹ata enako, pa je vendar obna¹anje +Ste opazili, da ponovljeni C-a ne napravijo niÄ, ponovljeni M-a pa se +premikajo naprej? ÄŒeprav se ne obnaÅ¡ata enako, pa je vendar obnaÅ¡anje enega in drugega po svoje naravno. -Polo¾aju kazalèka na zaslonu pravimo tudi ,,point``, toèka. -Parafrazirano: kazalèek ka¾e na zaslonu, kje je toèka v besedilu. +Položaju kazalÄka na zaslonu pravimo tudi »point«, toÄka. +Parafrazirano: kazalÄek kaže na zaslonu, kje je toÄka v besedilu. -Povzetek preprostih ukazov za premikanje kazalèka, vkljuèno s premiki +Povzetek preprostih ukazov za premikanje kazalÄka, vkljuÄno s premiki po besedo in stavek: C-f Premik za znak naprej @@ -156,335 +160,329 @@ po besedo in stavek: M-b Premik za besedo nazaj C-n Premik v naslednjo vrstico - C-p Premik v prej¹njo vrstico + C-p Premik v prejÅ¡njo vrstico - C-a Premik na zaèetek vrstice + C-a Premik na zaÄetek vrstice C-e Premik na konec vrstice - M-a Premik na zaèetek stavka + M-a Premik na zaÄetek stavka M-e Premik na konec stavka >> Za vajo nekajkrat poskusite vsakega od teh ukazov. To so najpogosteje uporabljani ukazi. -©e dva pomembna ukaza za premikanje kazalèka sta M-< (META-manj¹i od), -ki ga premakne na zaèetek datoteke, in M-> (META-veèji od), ki ga +Å e dva pomembna ukaza za premikanje kazalÄka sta M-< (META-manjÅ¡i od), +ki ga premakne na zaÄetek datoteke, in M-> (META-veÄji od), ki ga premakne na konec datoteke. -Na ameri¹kih tipkovnicah najdete znak < nad vejico in morate +Na ameriÅ¡kih tipkovnicah najdete znak < nad vejico in morate pritisniti tipko Shift, da pridete do njega. Z ukazom M-< je enako - prav tako morate pritisniti tipko Shift, sicer moste izvedli drug -ukaz, Meta-vejica. Na na¹ih tipkovnicah sta oba znaka na isti tipko, -in za ukaz M-> morate pritisniti ¹e tipko Shift. +ukaz, Meta-vejica. Na naÅ¡ih tipkovnicah sta oba znaka na isti tipko, +in za ukaz M-> morate pritisniti Å¡e tipko Shift. ->> Poskusite zdaj M-<, skok na zaèetek tega uèbenika. +>> Poskusite zdaj M-<, skok na zaÄetek tega uÄbenika. Potem se vrnite nazaj z zaporednimi C-v. ->> Poskusite zdaj M->, skok na konec tega uèbenika. +>> Poskusite zdaj M->, skok na konec tega uÄbenika. Potem se vrnite nazaj z zaporednimi M-v. -Èe ima va¹a tipkovnica kurzorske tipke, lahko premikate kazalèek po -zaslonu tudi z njimi. Vseeno priporoèamo, da se privadite ukazov C-b, -C-f, C-n in C-p, in to iz treh razlogov. Prviè, delujejo na èisto vseh -terminalih. Drugiè, z nekaj prakse v Emacsu boste opazili, da je -tipkanje ukazov s CONTROL hitrej¹e od tipkanja s kurzorskimi tipkami, ker -ni treba ves èas premikati desnice s tipkovnice na kurzorske tipke in -nazaj. In tretjiè, ko se enkrat navadite teh ukazov s CONTROL, se boste -enostavneje nauèili tudi bolj zapletenih ukazov za premikanje kazalèka. +ÄŒe ima vaÅ¡a tipkovnica kurzorske tipke, lahko premikate kazalÄek po +zaslonu tudi z njimi. Vseeno priporoÄamo, da se privadite ukazov C-b, +C-f, C-n in C-p, in to iz treh razlogov. PrviÄ, delujejo na Äisto vseh +terminalih. DrugiÄ, z nekaj prakse v Emacsu boste opazili, da je +tipkanje ukazov s CONTROL hitrejÅ¡e od tipkanja s kurzorskimi tipkami, ker +ni treba ves Äas premikati desnice s tipkovnice na kurzorske tipke in +nazaj. In tretjiÄ, ko se enkrat navadite teh ukazov s CONTROL, se boste +enostavneje nauÄili tudi bolj zapletenih ukazov za premikanje kazalÄka. -Veèini ukazov v Emacsu lahko podamo ¹tevilèni argument; najveèkrat ta -pove, kolikokrat zapovrstjo naj se ukaz izvede. Veèkratno ponovitev -ukaza izvedemo tako, da najprej vtipkamo C-u, zatem ¹tevilo, -kolikokrat naj se ukaz ponovi, in nazadnje ¾eljeni ukaz. Èe ima va¹a +VeÄini ukazov v Emacsu lahko podamo Å¡tevilÄni argument; najveÄkrat ta +pove, kolikokrat zapovrstjo naj se ukaz izvede. VeÄkratno ponovitev +ukaza izvedemo tako, da najprej vtipkamo C-u, zatem Å¡tevilo, +kolikokrat naj se ukaz ponovi, in nazadnje željeni ukaz. ÄŒe ima vaÅ¡a tipkovnica tipko META (ali EDIT ali ALT), lahko izpustite ukaz C-u in -namesto tega vtipkate ¹tevilo ponovitev, medtem ko dr¾ite pritisnjeno -tipko META. Druga metoda je sicer kraj¹a, priporoèamo pa prvo, ker -deluje na vseh terminalih. Tak¹en ¹tevilèni argument je ,,prefiksni`` -argument, ker vnesemo argument pred ukazom, na katerega se nana¹a. +namesto tega vtipkate Å¡tevilo ponovitev, medtem ko držite pritisnjeno +tipko META. Druga metoda je sicer krajÅ¡a, priporoÄamo pa prvo, ker +deluje na vseh terminalih. TakÅ¡en Å¡tevilÄni argument je »prefiksni« +argument, ker vnesemo argument pred ukazom, na katerega se nanaÅ¡a. -Zgled: C-u 8 C-f premakne kazalèek za osem znakov naprej. +Zgled: C-u 8 C-f premakne kazalÄek za osem znakov naprej. ->> Poskusite s primernim argumentom za ¹tevilo ponovitev ukaza - C-n ali C-p priti èim bli¾e tej vrstici v enem samem skoku. +>> Poskusite s primernim argumentom za Å¡tevilo ponovitev ukaza + C-n ali C-p priti Äim bliže tej vrstici v enem samem skoku. -Veèina ukazov, ne pa vsi, uporablja ¹tevilèni argument kot ¹tevilo +VeÄina ukazov, ne pa vsi, uporablja Å¡tevilÄni argument kot Å¡tevilo ponovitev ukaza. Nekateri ukazi - nobeden od tistih, ki smo si jih ogledali do zdaj - ga uporabljajo kot stikalo: s podanim prefiksnim -argumentom napravi ukaz nekaj drugega kot obièajno. +argumentom napravi ukaz nekaj drugega kot obiÄajno. -Ukaza C-v in M-v sta tudi izjemi, a drugaèni. Èe jima podamo argument, -premakneta zaslon za navedeno ¹tevilo vrstic, ne pa zaslonov. Ukaz C-u +Ukaza C-v in M-v sta tudi izjemi, a drugaÄni. ÄŒe jima podamo argument, +premakneta zaslon za navedeno Å¡tevilo vrstic, ne pa zaslonov. Ukaz C-u 8 C-v, na primer, premakne zaslon navzgor za 8 vrstic. >> Poskusite zdaj C-u 8 C-v -To bi moralo zaslon premakniti navzgor za osem vrstic. Èe bi ga radi +To bi moralo zaslon premakniti navzgor za osem vrstic. ÄŒe bi ga radi premaknili nazaj, poskusite M-v z istim argumentom. -Èe uporabljate grafièni vmesnik, denimo X11 ali MS Windows, imate -verjetno ob robu Emacsovega okna navpièno pravokotno ploskev, +ÄŒe uporabljate grafiÄni vmesnik, denimo X ali MS Windows, imate +verjetno ob robu Emacsovega okna pokonÄno pravokotno ploskev, imenovano drsnik. Pogled na besedilo lahko premikate tudi tako, da z -mi¹ko kliknete na drsnik. - ->> Postavite kazalec na vrh oznaèenega obmoèja na drsniku in pritisnite - srednji gumb na mi¹ki. To bi moralo premakniti besedilo na mesto, - doloèeno s tem, kako visoko ali nizko na drsnik ste kliknili. - ->> Medtem ko dr¾ite srednji gumb pritisnjen, premikajte mi¹ko gor in - dol. Vidite, kako se premika besedilo v Emacsovem oknu, ko - premikate mi¹ko? +miÅ¡ko kliknete na drsnik. -* ÈE SE EMACS OBESI -------------------- +* ÄŒE SE EMACS PRENEHA ODZIVATI +------------------------------ -Èe se Emacs preneha odzivati na va¹e ukaze, ga lahko varno prekinete z +ÄŒe se Emacs preneha odzivati na vaÅ¡e ukaze, ga lahko varno prekinete z ukazom C-g. Z njim lahko prekinete ukaze, za katere bi trajalo predolgo, da bi se izvedli. -Isti ukaz, C-g, lahko uporabite tudi, da preklièete ¹tevilèni -argument, ali pa zaèetek ukaza, ki ga ne ¾elite izvesti. +Isti ukaz, C-g, lahko uporabite tudi, da prekliÄete Å¡tevilÄni +argument, ali pa zaÄetek ukaza, ki ga ne želite izvesti. ->> Vtipkajte C-u 100, s èimer ste izbrali ¹tevilèni argument 100, - zatem pa vtipkajte C-g. Vtipkajte zdaj C-f. Kazalèek se je - premaknil le za en znak, ker ste ¹tevilèni argument vmes preklicali +>> Vtipkajte C-u 100, s Äimer ste izbrali Å¡tevilÄni argument 100, + zatem pa vtipkajte C-g. Vtipkajte zdaj C-f. KazalÄek se je + premaknil le za en znak, ker ste Å¡tevilÄni argument vmes preklicali s C-g. -Tudi èe ste po nesreèi vtipkali , se ga lahko znebite s C-g. +Tudi Äe ste po nesreÄi vtipkali , se ga lahko znebite s C-g. -* ONEMOGOÈENI UKAZI +* ONEMOGOÄŒENI UKAZI ------------------- -Nekaj ukazov v Emacsu je namenoma ,,onemogoèenih``, da bi jih -zaèetniki ne izvedli po nesreèi. +Nekaj ukazov v Emacsu je namenoma »onemogoÄenih«, da bi jih +zaÄetniki ne izvedli po nesreÄi. -Èe vtipkate tak onemogoèen ukaz, se bo na zaslonu pojavilo novo okno z -obvestilom, kateri ukaz ste sku¹ali izvesti, in vas vpra¹alo, èe ga -res ¾elite izvesti. +ÄŒe vtipkate tak onemogoÄen ukaz, se bo na zaslonu pojavilo novo okno z +obvestilom, kateri ukaz ste skuÅ¡ali izvesti, in vas vpraÅ¡alo, Äe ga +res želite izvesti. -Èe v resnici ¾elite poskusiti ukaz, pritisnite preslednico kot odgovor -na vpra¹anje. Normalno verjetno ukaza ne ¾elite izvesti, zato na -vpra¹anje odgovorite z ,n`. +ÄŒe v resnici želite poskusiti ukaz, pritisnite preslednico kot odgovor +na vpraÅ¡anje. Normalno verjetno ukaza ne želite izvesti, zato na +vpraÅ¡anje odgovorite z »n«. ->> Vtipkajte C-x C-l (ki je onemogoèen ukaz), - zatem na vpra¹anje odgovorite n. +>> Vtipkajte C-x C-l (ki je onemogoÄen ukaz), + zatem na vpraÅ¡anje odgovorite n. * OKNA ------ -Emacs lahko prika¾e veè oken in v vsakem svoje besedilo. Kasneje bomo -razlo¾ili, kako uporabljamo veè oken hkrati. Zaenkrat bomo povedali -le, kako se znebite dodatnih oken, ki jih lahko odpre vgrajena pomoè ali -pa izpis kak¹nega drugega programa. Preprosto je: +Emacs lahko prikaže veÄ Â»oken« in v vsakem svoje besedilo. Kasneje +bomo razložili, kako uporabljamo veÄ oken hkrati. Zaenkrat bomo +povedali le, kako se znebite dodatnih oken, ki jih lahko odpre +vgrajena pomoÄ ali pa izpis kakÅ¡nega drugega programa. Preprosto je: C-x 1 Eno okno (torej, zaprimo vsa ostala). -To je CONTROL-x, ki mu sledi ¹tevka 1. Ukaz C-x 1 raztegne èez cel -zaslon okno, v katerem se nahaja kazalèek, ostala pa zapre. +To je CONTROL-x, ki mu sledi Å¡tevka 1. Ukaz C-x 1 raztegne Äez cel +zaslon okno, v katerem se nahaja kazalÄek, ostala pa zapre. ->> Premaknite kazalèek do te vrstice in vtipkajte C-u 0 C-l ->> Vtipkajte CONTROL-h k CONTROL-f. - Vidite, kako se je to okno skrèilo in odstopilo prostor oknu, - ki pojasnjuje ukaz CONTROL-f? +>> Premaknite kazalÄek do te vrstice in vtipkajte C-u 0 C-l +>> Vtipkajte C-h k C-f. + Vidite, kako se je to okno skrÄilo in odstopilo prostor oknu, + ki pojasnjuje ukaz C-f? >> Vtipkajte C-x 1 in spodnje okno se bo zaprlo. -Za razliko od ukazov, ki smo se jih nauèili do zdaj, je ta ukaz -sestavljen iz dveh znakov. Zaène se z znakom CONTROL-x. Cela vrsta -ukazov se zaène enako, in mnogi od njih zadevajo delo z datotekami, -delovnimi podroèji in podobnim. Vsem tem ukazom je skupno, da se -zaènejo s CONTROL-x, ki mu sledi ¹e en, dva ali trije znaki. +Za razliko od ukazov, ki smo se jih nauÄili do zdaj, je ta ukaz +sestavljen iz dveh znakov. ZaÄne se z znakom CONTROL-x. Cela vrsta +ukazov se zaÄne enako, in mnogi od njih zadevajo delo z datotekami, +delovnimi podroÄji in podobnim. Vsem tem ukazom je skupno, da se +zaÄnejo s CONTROL-x, ki mu sledi Å¡e en, dva ali trije znaki. * VRIVANJE IN BRISANJE ---------------------- -Èe ¾elite v obstojeèe besedilo vriniti novo, preprosto premaknite -kazalèek na ¾eljeno mesto in zaènite tipkati. Znake, ki jih lahko -vidite, na primer A, 7, * in podobno, razume Emacs kot del besedila in -jih takoj vrine. S pritiskom na Return (ali Enter) vrinete znak za -skok v novo vrstico. +ÄŒe želite v obstojeÄe besedilo vriniti novo, preprosto premaknite +kazalÄek na želeno mesto in zaÄnite tipkati. Vidne znake, na primer A, +7, * in podobno, Emacs vrine takoj, ko jih vtipkate. S pritiskom na +tipko (ali ) vrinete znak za skok v novo vrstico. -Zadnji vtipkani znak lahko izbri¹ete s pritiskom na tipko -. To je tista tipka na tipkovnici, ki jo navadno uporabljate -za brisanje nazadnje natipkanega znaka. Navadno je to velika tipka -vrstico ali dve nad tipko , ki je oznaèena z "Backspace", -"Delete" ali "Del". +Zadnji vtipkani znak lahko izbriÅ¡ete s pritiskom na tipko . Ta +tipka je na tipkovnici obiÄajno oznaÄena z »Backspace« - skratka, to +je ista tipka, ki jo tudi v drugih programih uporabljate za brisanje +nazadnje natipkanega znaka. -Èe imate na tipkovnici tipko "Backspace", je to tipka . Naj -vas ne zmede, èe imate poleg tega ¹e tipko "Delete" - je -"Backspace". +Najverjetneje imate na tipkovnici Å¡e tipko »Delete«. Naj vas to ne +zmede - z mislimo tipko »Backspace«. -Splo¹no pobri¹e znak neposredno pred trenutnim polo¾ajem -kazalèka. +>> Poskusite zdaj! Vtipkajte zdaj nekaj znakov in jih zatem s tipko + pobriÅ¡ite. NiÄ naj vas ne skrbi, Äe se je ta vrstica + spremenila. Izvirnika tega uÄbenika ne boste pokvarili -- tole je + samo vaÅ¡a osebna delovna kopija. ->> Vtipkajte zdaj nekaj znakov in jih zatem s tipko pobri¹ite. - Niè naj vas ne skrbi, èe se je ta vrstica spremenila. Izvirnika - tega uèbenika ne boste pokvarili -- tole je samo va¹a osebna kopija. +Ko vrstica postane predolga za zaslon, se »nadaljuje« v naslednji +vrstici na zaslonu. ÄŒe uporabljate grafiÄno okolje, boste opazili +zaviti puÅ¡Äici ob levem in desnem robu, ki oznaÄujeta vrstico, ki se +nadaljuje v naslednji zaslonski vrstici. ÄŒe uporabljate terminalski +vmesnik, je vrstica, ki se nadaljuje v naslednji zaslonski vrstici, +oznaÄena z obrnjeno poÅ¡evnico (znak »\«) v skrajnem desnem stolpcu. -Ko vrstica postane predolga za zaslon, se ,,nadaljuje`` v naslednji -vrstici na zaslonu. Obrnjena po¹evnica (znak ,\`) ali v grafiènih -okoljih zavita pu¹èica ob desnem robu oznaèuje vrstico, ki se -nadaljuje v naslednji zaslonski vrstici. +>> Zdaj zaÄnite tipkati besedilo, dokler ne dosežete desnega roba, in + Å¡e naprej. Opazili boste, da se pojavi znak za nadaljevanje. ->> Zdaj zaènite tipkati besedilo, dokler ne dose¾ete desnega roba, in - ¹e naprej. Opazili boste, da se pojavi znak za nadaljevanje. - ->> S tipko pobri¹ite toliko znakov, da vrstica ne sega - veè èez ¹irino zaslona. Znak za nadaljevanje v naslednji +>> S tipko pobriÅ¡ite toliko znakov, da vrstica ne sega + veÄ Äez Å¡irino zaslona. Znak za nadaljevanje v naslednji vrstici je izginil. -Znak za novo vrstico lahko pobri¹emo enako kot vsak drug znak. S tem, -ko pobri¹emo znak za novo vrstico, zdru¾imo vrstici v eno samo. Èe bo -nova vrstica predolga, da bi cela pri¹la na zaslon, bo razdeljena v -veè zaslonskih vrstic. +Znak za novo vrstico lahko pobriÅ¡emo enako kot vsak drug znak. S tem, +ko pobriÅ¡emo znak za novo vrstico, združimo vrstici v eno samo. ÄŒe bo +nova vrstica predolga, da bi cela priÅ¡la na zaslon, bo razdeljena v +veÄ zaslonskih vrstic. ->> Premaknite kazalèek na zaèetek vrstice in pritisnite . To - zdru¾i vrstico s prej¹njo. +>> Premaknite kazalÄek na zaÄetek vrstice in pritisnite . To + združi vrstico s prejÅ¡njo. >> Pritisnite . S tem ste ponovno vrinili znak za skok v novo vrstico, ki ste ga malo prej zbrisali. -Spomnimo se, da lahko za veèino ukazov v Emacsu doloèimo, naj se -izvedejo veèkrat zaporedoma; to vkljuèuje tudi vnos teksta. Ponovitev -obièajnega znaka ga veèkrat vrine v besedilo. +Spomnimo se, da lahko za veÄino ukazov v Emacsu doloÄimo, naj se +izvedejo veÄkrat zaporedoma; to vkljuÄuje tudi vnos teksta. Ponovitev +obiÄajnega znaka ga veÄkrat vrine v besedilo. >> Poskusite zdaj tole: da vnesete osem zvezdic, vtipkajte C-u 8 * -Zdaj ste se nauèili najpreprostej¹i naèin, da v Emacsu nekaj natipkate -in popravite. Bri¹ete lahko tudi besede ali vrstice. Tu je povzetek +Zdaj ste se nauÄili najpreprostejÅ¡i naÄin, da v Emacsu nekaj natipkate +in popravite. BriÅ¡ete lahko tudi besede ali vrstice. Tu je povzetek ukazov za brisanje: - pobri¹e znak tik pred kazalèkom (levo od - oznake za kazalèek) - C-d pobri¹e znak tik za kazalèkom (,pod` oznako - za kazalèek) + pobriÅ¡e znak tik pred kazalÄkom (levo od + oznake za kazalÄek) + C-d pobriÅ¡e znak tik za kazalÄkom (»pod« oznako + za kazalÄek) - M- pobri¹e besedo tik pred kazalèkom - M-d pobri¹e besedo tik za kazalèkom + M- pobriÅ¡e besedo tik pred kazalÄkom + M-d pobriÅ¡e besedo tik za kazalÄkom - C-k zavr¾e besedilo desno od kazalèka do konca vrstice - M-k zavr¾e besedilo od polo¾aja kazalèka do konca stavka + C-k zavrže besedilo desno od kazalÄka do konca vrstice + M-k zavrže besedilo od položaja kazalÄka do konca stavka -Èrka ,d` je iz angle¹ke besede ,delete` (pobrisati), èrka ,k` pa iz -besede ,kill` (pobiti). Ste opazili, da in C-d na eni, ter -M- in M-d na drugi strani nadaljujeta paralelo, ki sta jo zaèela -C-f in M-f ( pravzaprav ni kontrolni znak, kar pa naj nas ne +ÄŒrka »d« je iz angleÅ¡ke besede »delete« (pobrisati), Ärka »k« pa iz +besede »kill« (pobiti). Ste opazili, da in C-d na eni, ter +M- in M-d na drugi strani nadaljujeta paralelo, ki sta jo zaÄela +C-f in M-f ( pravzaprav ni kontrolni znak, kar pa naj nas ne moti). C-k in M-k sta v enakem sorodu s C-e in M-e: prvi deluje na vrstice, drugi na stavke. -Obstaja tudi splo¹en postopek za brisanje kateregakoli dela delovnega -podroèja. Kazalèek postavimo na en konec podroèja, ki ga ¾elimo -izbrisati, in pritisnemo C-@ ali C-SPC (SPC je -preslednica). Katerikoli od obeh ukazov deluje. Premaknite kazalèek na -drug konec podroèja, ki ga ¾elite izbrisati, in pritisnite C-w. S tem -ste zavrgli vse besedilo med obema mejama. +Obstaja tudi sploÅ¡en postopek za brisanje kateregakoli dela delovnega +podroÄja. KazalÄek postavimo na en konec podroÄja, ki ga želimo +izbrisati, in pritisnemo C-@ ali C- ( je preslednica). +Katerikoli od obeh ukazov deluje. Premaknite kazalÄek na drug konec +podroÄja, ki ga želite izbrisati. Med premikanjem Emacs z barvo +oznaÄuje podroÄje med kazalÄkom in mestom, kjer ste pritisnili +C-. KonÄno pritisnite C-w. S tem ste zavrgli vse besedilo med +obema mejama. ->> Premaknite kazalèek na èrko O, s katero se zaèenja prej¹nji +>> Premaknite kazalÄek na Ärko O, s katero se zaÄenja prejÅ¡nji odstavek. ->> Vtipkajte C-SPC. Emacs prika¾e sporoèilo "Mark set" (slov. Oznaka - postavljena) na dnu ekrana. ->> Premaknite kazalèek na èrko V v "postavimo" v drugi vrstici istega +>> Vtipkajte C-SPC. Emacs prikaže sporoÄilo »Mark set« (slov. »oznaka + postavljena«) na dnu ekrana. +>> Premaknite kazalÄek na Ärko V v »postavimo« v drugi vrstici istega odstavka. ->> Vtipkajte C-w. S tem zavr¾emo vse besedilo zaèen¹i z O in vse do - èrke V. +>> Vtipkajte C-w. S tem zavržemo vse besedilo zaÄenÅ¡i z O in vse do + Ärke V. -Razlika med tem, èe zavr¾ete cel odstavek besedila (angl. ,,kill``, -pobiti) ali pa èe pobri¹ete znak (angl. ,,delete``), je ta, da lahko -prvega vrnete nazaj z ukazom C-y, drugega pa ne. Na splo¹no ukazi, ki -lahko povzroèijo veliko ¹kode (pobri¹ejo veliko besedila), shranijo -pobrisano besedilo; tisti, ki pobri¹ejo samo posamezni znak, ali samo -prazne vrstice in presledke, pa ne. +Razlika med tem, Äe zavržete cel odstavek besedila (angl. »kill«, +pobiti) ali pa Äe pobriÅ¡ete znak (angl. »delete«), je ta, da lahko +prvega povrnete - na katerokoli mesto v besedilu - z ukazom C-y, +drugega pa ne (seveda pa lahko prekliÄete brisanje - glejte nižje). Na +sploÅ¡no ukazi, ki lahko povzroÄijo veliko Å¡kode (pobriÅ¡ejo veliko +besedila), shranijo pobrisano besedilo; tisti, ki pobriÅ¡ejo samo +posamezni znak, ali samo prazne vrstice in presledke, pa ne. ->> Postavite kazalèek na zaèetek neprazne vrstice. Pritisnite C-k, da - pobri¹ete vsebino vrstice. ->> ©e enkrat pritisnite C-k. To pobri¹e ¹e znak za novo vrstico. +>> Postavite kazalÄek na zaÄetek neprazne vrstice. Pritisnite C-k, da + pobriÅ¡ete vsebino vrstice. +>> Å e enkrat pritisnite C-k. To pobriÅ¡e Å¡e znak za novo vrstico. -Ste opazili, da prvi C-k pobri¹e vsebino vrstice, naslednji C-k pa ¹e -vrstici samo, s èimer se vse besedilo pod biv¹o vrstico premakne za -eno vrstico navzgor? Ukaz C-k obravnava ¹tevilèni argument malo -drugaèe: pobri¹e toliko in toliko vrstic z vsebinami vred. To ni zgolj -ponovitev. C-u 2 C-k pobri¹e dve polni vrstici besedila, kar je nekaj -drugega, kot èe dvakrat vtipkate C-k. +Ste opazili, da prvi C-k pobriÅ¡e vsebino vrstice, naslednji C-k pa Å¡e +vrstici samo, s Äimer se vse besedilo pod bivÅ¡o vrstico premakne za +eno vrstico navzgor? Ukaz C-k obravnava Å¡tevilÄni argument malo +drugaÄe: pobriÅ¡e toliko in toliko vrstic z vsebinami vred. To ni zgolj +ponovitev. C-u 2 C-k pobriÅ¡e dve polni vrstici besedila, kar je nekaj +drugega, kot Äe dvakrat vtipkate C-k. -Besedilo, ki ste ga prej pobili, lahko povrnete (angl. ,,yank`` -- +Besedilo, ki ste ga prej pobili, lahko povrnete (angl. »yank« - potegniti). Predstavljajte si, kot da potegnete nazaj nekaj, kar vam je nekdo odnesel. Pobito besedilo lahko potegnete nazaj na isti ali pa -na kak¹en drug kraj v besedilu, ali pa celo v kaki drugi -datoteki. Isto besedilo lahko veèkrat potegnete nazaj, tako da je v -delovnem podroèju poveèterjeno. +na kakÅ¡en drug kraj v besedilu, ali pa celo v kaki drugi datoteki. +Isto besedilo lahko veÄkrat potegnete nazaj, tako da je v delovnem +podroÄju poveÄterjeno. Nekateri drugi urejevalniki uporabljajo namesto +»kill« in »yank« izraza »cut« in »paste« (glejte glosar v priroÄniku +za Emacs). -Ukaz za vraèanje pobitega besedila je C-y. +Ukaz za vraÄanje pobitega besedila je C-y. >> Poskusite z ukazom C-y povrniti pobrisano besedilo. -Èe ste uporabili veè zaporednih ukazov C-k, je vse pobrisano besedilo +ÄŒe ste uporabili veÄ zaporednih ukazov C-k, je vse pobrisano besedilo shranjeno skupaj, in en sam C-y bo vrnil vse tako pobrisane vrstice. >> Poskusite, nekajkrat vtipkajte C-k. Zdaj pa vrnimo pobrisano besedilo: ->> Vtipkajte C-y. Zdaj pa premaknite kazalèek za nekaj vrstic navzdol - in ¹e enkrat vtipkajte C-y. Vidite zdaj, kako se kopira dele +>> Vtipkajte C-y. Zdaj pa premaknite kazalÄek za nekaj vrstic navzdol + in Å¡e enkrat vtipkajte C-y. Vidite zdaj, kako se kopira dele besedila? -Kaj pa, èe ste pobrisali nekaj besedila, ki bi ga radi vrnili, vendar -ste za iskanim odlomkom pobrisali ¹e nekaj? C-y vrne samo nazadnje -pobrisan odlomek. Vendar tudi prej¹nje besedilo ni izgubljeno. Do +Kaj pa, Äe ste pobrisali nekaj besedila, ki bi ga radi vrnili, vendar +ste za iskanim odlomkom pobrisali Å¡e nekaj? C-y vrne samo nazadnje +pobrisan odlomek. Vendar tudi prejÅ¡nje besedilo ni izgubljeno. Do njega lahko pridete z ukazom M-y. Ko ste vrnili nazadnje zbrisano besedilo s C-y, pritisnite M-y, ki ga zamenja s predzanje pobrisanim -besedilom. Vsak naslednji M-y prika¾e ¹e eno prej. Ko ste konèno -pri¹li do iskanega besedila, ni treba napraviti niè posebnega, da bi -ga obdr¾ali. Preprosto nadaljujte z urejanjem, in vrnjeno besedilo bo -ostalo, kamor ste ga odlo¾ili. +besedilom. Vsak naslednji M-y prikaže Å¡e eno prej. Ko ste konÄno +priÅ¡li do iskanega besedila, ni treba napraviti niÄ posebnega, da bi +ga obdržali. Preprosto nadaljujte z urejanjem, in vrnjeno besedilo bo +ostalo, kamor ste ga odložili. -Èe pritisnete M-y dovolj velikokrat, se boste vrnili na zaèete, torej +ÄŒe pritisnete M-y dovolj velikokrat, se boste vrnili na zaÄete, torej spet na zadnje pobrisano besedilo. ->> Pobri¹ite vrstico, premaknite se nekam drugam, in pobri¹ite ¹e +>> PobriÅ¡ite vrstico, premaknite se nekam drugam, in pobriÅ¡ite Å¡e eno vrstico. Z ukazom C-y dobite nazaj to drugo vrstico. Z ukazom M-y pa jo zamenjate s prvo vrstico. - Ponovite ukaz M-y ¹e nekajkrat in si oglejte, kaj dobite na - zaslon. Ponavljajte ga, dokler se ne prika¾e ponovno nazadnje - pobrisana vrstica, in ¹e naprej. Èe ¾elite, lahko tudi ukazu - M-y podate pozitivno ali negativno ¹tevilo ponovitev. + Ponovite ukaz M-y Å¡e nekajkrat in si oglejte, kaj dobite na + zaslon. Ponavljajte ga, dokler se ne prikaže ponovno nazadnje + pobrisana vrstica, in Å¡e naprej. ÄŒe želite, lahko tudi ukazu + M-y podate pozitivno ali negativno Å¡tevilo ponovitev. * PREKLIC UKAZA (UNDO) ---------------------- -Èe ste besedilo spremenili, a ste se kasneje premislili, lahko -besedilo vrnete v prvotno stanje z ukazom Undo, C-x u. Normalno vrne -C-x u zadnjo spremembo besedila; èe ukaz ponovimo, preklièemo ¹e -predzadnjo spremembo, in vsaka nadaljnja ponovitev se¾e ¹e eno +ÄŒe ste besedilo spremenili, a ste se kasneje premislili, lahko +besedilo vrnete v prvotno stanje z ukazom Undo, C-/. + +ObiÄajno C-/ prekliÄe spremembo besedila, ki jo izvede en ukaz; Äe +ukaz C-/ ponovimo, prekliÄemo Å¡e spremembo, ki jo je izvedel +predzadnji ukaz, in vsaka nadaljnja ponovitev C-/ seže Å¡e eno spremembo globlje v zgodovino. -Emacs hrani bolj ali manj celotno zgodovino na¹ih ukazov, z dvema -izjemama: ukazov, ki niso napravili nobene spremembe v besedilu -(npr. premik kazalèka), ne shranjuje, in zaporedje do 20 vrinjenih -znakov shrani kot en sam ukaz. Slednje prihrani nekaj ukazov C-x u, ki -bi jih morali vtipkati. +Emacs hrani bolj ali manj celotno zgodovino naÅ¡ih ukazov, z dvema +izjemama: ukazov, ki niso napravili nobene spremembe v besedilu (npr. +premik kazalÄka), ne shranjuje, in zaporedje do 20 vrinjenih znakov +shrani kot en sam ukaz. Slednje prihrani nekaj ukazov C-/, ki bi jih +morali vtipkati. ->> Pobri¹ite to vrstico z ukazom C-k, potem jo priklièite nazaj s C-x u. +>> PobriÅ¡ite to vrstico z ukazom C-k, potem jo prikliÄite nazaj s C-/. -C-_ je alternativni ukaz za preklic zadnjega ukaza. Deluje enako kot -s C-x u, ga je pa la¾je odtipkati, èe morate ukaz ponoviti veèkrat -zaporedoma. Te¾ava z ukazom C-_ je, da na nekaterih tipkovnicah ni -povsem oèitno, kako ga vtipkati, zato je podvojen ¹e kot C-x u. Na -nekaterih terminalih moramo na primer vtipkati /, medtem ko dr¾imo -pritisnjeno tipko CONTROL. +C-_ je alternativni ukaz za preklic zadnjega ukaza. Deluje povsem +enako kot C-/. Na nekaterih besedilnih terminalih v resnici pritisk +C-/ poÅ¡lje Emacsu ukaz C-_. Å e tretja možnost je C-x u, ki tudi deluje +povsem enako kot C-/, le z nekaj veÄ tipkanja. -Èe podamo ukazu C-_ ali C-x u numerièni argument, je to enako, kot èe -bi ukaz roèno ponovili tolikokrat, kot pravi argument. +ÄŒe podamo ukazu C-/, C-_ ali C-x u numeriÄni argument, je to enako, +kot Äe bi ukaz roÄno ponovili tolikokrat, kot pravi argument. -Ukaz za brisanje besedila lahko preklièete in besedilo povrnete, -enako, kot èe bi besedilo pobili. Razlika med brisanjem in pobijanjem -besedila je le ta, da le slednje lahko potegnete nazaj z ukazom -C-y. Preklic ukaza pa velja za eno in drugo. +Ukaz za brisanje besedila lahko prekliÄete in besedilo povrnete, +enako, kot Äe bi besedilo pobili. Razlika med brisanjem in pobijanjem +besedila je le ta, da le slednje lahko povrnete z ukazom C-y. Preklic +ukaza pa velja za eno in drugo. * DATOTEKE @@ -493,638 +491,657 @@ C-y. Preklic ukaza pa velja za eno in drugo. Da bi bile spremembe v besedilu trajne, morate besedilo shraniti v datoteko. V nasprotnem primeru jih boste za vedno izgubili tisti hip, ko boste zapustili Emacs. Besedilo postavimo v datoteko tako, da -na disku ,,poi¹èemo`` (angl. find) datoteko, preden zaènemo tipkati -(pravimo tudi, da ,,obi¹èemo`` datoteko). +na disku »poiÅ¡Äemo« (angl. find) datoteko, preden zaÄnemo tipkati +(pravimo tudi, da »obiÅ¡Äemo« datoteko). Poiskati datoteko pomeni, da v Emacsu vidimo vsebino datoteke. To je bolj ali manj tako, kot da z Emacsom urejamo datoteko samo. Vendar pa spremembe ne postanejo trajne, dokler datoteke ne shranimo -(angl. save) na disk. Tako imamo mo¾nost, da se izognemo temu, da bi -nam na pol spremenjene datoteke le¾ale po disku, kadar tega ne -¾elimo. Ker pa Emacs ohrani izvorno datoteko pod spremenjenim imenom, -lahko prvotno datoteko priklièemo nazaj celo ¹e potem, ko smo datoteko -¾e shranili na disk. +(angl. save) na disk. Tako imamo možnost, da se izognemo temu, da bi +nam na pol spremenjene datoteke ležale po disku, kadar tega ne +želimo. Ker pa Emacs ohrani izvorno datoteko pod spremenjenim imenom, +lahko prvotno datoteko prikliÄemo nazaj celo Å¡e potem, ko smo datoteko +že shranili na disk. -V predzadnji vrstici na dnu zaslona vidite vrstico, ki se zaène in -konèa z vezaji, in vsebuje niz znakov ,,--:-- TUTORIAL``. Ta del -zaslona navadno vsebuje ime datoteke, ki smo jo obiskali. Zdajle je to -,,TUTORIAL``, va¹a delovna kopija uèbenika Emacsa. Ko boste poiskali -kak¹no drugo datoteko, bo na tem mestu pisalo njeno ime. +V predzadnji vrstici na dnu zaslona vidite vrstico, ki se zaÄne z +vezaji, na zaÄetku pa vsebuje niz znakov »--:--- TUTORIAL« ali nekaj +podobnega. Ta del zaslona navadno vsebuje ime datoteke, ki smo jo +obiskali. Zdajle je to »TUTORIAL«, vaÅ¡a delovna kopija uÄbenika +Emacsa. Ko boste poiskali kakÅ¡no drugo datoteko, bo na tem mestu +izpisano ime te datoteke. Posebnost ukaza za iskanje datoteke je, da moramo povedati, katero -datoteko i¹èemo. Pravimo, da ukaz ,,prebere argument s terminala`` (v -tem primeru je argument ime datoteke). Ko vtipkate ukaz +datoteko iÅ¡Äemo. Pravimo, da ukaz »prebere argument« (v tem primeru je +argument ime datoteke). Ko vtipkate ukaz - C-x C-f (poi¹èi datoteko) + C-x C-f (poiÅ¡Äi datoteko) -vas Emacs povpra¹a po imenu datoteke. Kar vtipkate, se sproti vidi v -vrstici na dnu zaslona. Temu delovnemu podroèju pravimo pogovorni +vas Emacs povpraÅ¡a po imenu datoteke. Kar vtipkate, se sproti vidi v +vrstici na dnu zaslona. Temu delovnemu podroÄju pravimo pogovorni vmesnik (minibuffer), kadar se uporablja za tovrstni vnos. Znotraj -pogovornega vmesnika lahko uporabljate obièajne ukaze za urejanje, èe +pogovornega vmesnika lahko uporabljate obiÄajne ukaze za urejanje, Äe ste se na primer pri tipkanju zmotili. Sredi tipkanja imena datoteke (ali katerega koli drugega opravila v -pogovornem vmesniku) lahko ukaz preklièete s C-g. +pogovornem vmesniku) lahko ukaz prekliÄete s C-g. ->> Vtipkajte C-x C-f, zatem pa ¹e C-g. Zadnji ukaz od treh je +>> Vtipkajte C-x C-f, zatem pa Å¡e C-g. Zadnji ukaz od treh je zaprl pogovorni vmesnik in tudi preklical ukaz C-x C-f, ki je uporabljal pogovorni vmesnik. Konec z iskanjem datoteke. -Ko ste dokonèali ime, ga vnesete s pritiskom na . S tem se -po¾ene ukaz C-x C-f in poi¹èe iskano datoteko. Pogovorni vmesnik -izgine, ko je ukaz izveden. +Ko ste dokonÄali ime, ga vnesete s pritiskom na . Pogovorni +vmesnik izgine, ko je ukaz izveden. -Trenutek kasneje se vsebina datoteke pojavi na zaslonu. Zdaj lahko -dopolnjujete, urejate ali kako drugaèe spreminjate vsebino. Ko ¾elite, -da ostanejo spremembe trajne, izvedete ukaz: +Vsebina datoteke se pojavi na zaslonu. Zdaj lahko dopolnjujete, +urejate ali kako drugaÄe spreminjate vsebino. Ko želite, da ostanejo +spremembe trajne, izvedete ukaz: C-x C-s (shrani datoteko) -Besedilo se s tem shrani iz pomnilnika raèunalnika na datoteko na -disk. Ko prviè izvedete ta ukaz, se izvorna datoteka preimenuje, tako +Besedilo se s tem shrani iz pomnilnika raÄunalnika na datoteko na +disk. Ko prviÄ izvedete ta ukaz, se izvorna datoteka preimenuje, tako da ni izgubljena. Najdete jo pod novim imenom, ki se od starega -razlikuje po tem, da ima na koncu pripet znak ,,~``. +razlikuje po tem, da ima na koncu pripet znak »~«. -Ko je Emacs shranil datoteko, izpi¹e njeno ime. Shranjujte raje -pogosteje kot ne, da v primeru, èe gre z raèunalnikom kaj narobe, ne -izgubite veliko. +Ko je Emacs shranil datoteko, izpiÅ¡e njeno ime. Shranjujte raje +pogosteje kot ne, da v primeru, Äe gre z raÄunalnikom kaj narobe, ne +izgubite veliko (oglejte si tudi razdelek o samodejnem shranjevanju +nižje). ->> Vtipkajte C-x C-s, s èimer boste shranili svojo kopijo tega - uèbenika. Emacs bo v vrstici na dnu zaslona izpisal ,,Wrote - ...TUTORIAL``. +>> Vtipkajte C-x C-s TUTORIAL . + S tem boste shranili svojo kopijo tega uÄbenika. Emacs bo v vrstici + na dnu zaslona izpisal »Wrote ...TUTORIAL«. -Poi¹èete lahko lahko ¾e obstojeèo datoteko, da si jo ogledate ali -popravite, ali pa tudi datoteko, ki ¹e ne obstaja. To je naèin, kako z -Emacsom ustvarimo novo datoteko: poi¹èite datoteko z izbranim imenom, -ki bo sprva prazna, in zaènite pisati. Ko jo boste prviè shranili, bo -Emacs ustvaril datoteko z vne¹enim besedilom. Od tod dalje delate na -¾e obstojeèi datoteki. +PoiÅ¡Äete lahko lahko že obstojeÄo datoteko, da si jo ogledate ali +popravite, ali pa tudi datoteko, ki Å¡e ne obstaja. To je naÄin, kako z +Emacsom ustvarimo novo datoteko: poiÅ¡Äite datoteko z izbranim imenom, +ki bo sprva prazna, in zaÄnite pisati. Ko jo boste prviÄ shranili, bo +Emacs ustvaril datoteko z vneÅ¡enim besedilom. Od tod dalje delate na +že obstojeÄi datoteki. -* DELOVNA PODROÈJA +* DELOVNA PODROÄŒJA ------------------ -Tudi èe ste z ukazom C-x C-f poiskali in odprli drugo datoteko, prva -ostane v Emacsu. Nanjo se vrnete tako, da jo ¹e enkrat ,,poi¹èete`` z +Tudi Äe ste z ukazom C-x C-f poiskali in odprli drugo datoteko, prva +ostane v Emacsu. Nanjo se vrnete tako, da jo Å¡e enkrat »poiÅ¡Äete« z ukazom C-x C-f. Tako imate lahko v Emacsu hkrati kar precej datotek. ->> Ustvarite datoteko z imenom ,,bla`` tako, da vtipkate C-x C-f - bla . Natipkajte nekaj besedila, ga po potrebi popravite, in - shranite v datoteko ,,bla`` z ukazom C-x C-s. Ko ste konèali, se - vrnite v uèbenik z ukazom C-x C-f TUTORIAL . - -Emacs hrani besedilo vsake datoteke v takoimenovanem ,,delovnem -podroèju`` (angl. buffer). Ko poi¹èemo datoteko, Emacs ustvari zanjo -novo delovno podroèje. Vsa obstojeèa delovna podroèja v Emacsu vidimo +Emacs hrani besedilo vsake datoteke v takoimenovanem »delovnem +podroÄju« (angl. buffer). Ko poiÅ¡Äemo datoteko, Emacs ustvari zanjo +novo delovno podroÄje. Vsa obstojeÄa delovna podroÄja v Emacsu vidimo z ukazom: - C-x C-b Seznam delovnih podroèij. + C-x C-b Seznam delovnih podroÄij. >> Poskusite C-x C-b zdaj. -Vidite, da ima vsako delovno podroèje svoje ime, pri nekaterih pa pi¹e +Vidite, da ima vsako delovno podroÄje svoje ime, pri nekaterih pa piÅ¡e tudi ime datoteke, katere vsebina se hrani v njem. Vsako besedilo, ki -ga vidite v katerem od Emacsovih oken, je vedno del kak¹nega delovnega -podroèja. +ga vidite v katerem od Emacsovih oken, je vedno del kakÅ¡nega delovnega +podroÄja. ->> Z ukazom C-x 1 se znebite seznama delovnih podroèij. +>> Z ukazom C-x 1 se znebite seznama delovnih podroÄij. -Tudi èe imate veè delovnih podroèij, pa je vedno le eno od njih -trenutno dejavno. To je tisto delovno podroèje, ki ga popravljate. Èe -¾elite popravljati drugo delovno podroèje, morate ,,preklopiti`` -nanj. Èe bi radi preklopili na delovno podroèje, ki pripada kak¹ni -datoteki, ¾e poznate en naèin, kako to storiti: ponovno ,,obi¹èete`` -(odprete) to datoteko z ukazom C-x C-f. Obstaja pa ¹e la¾ji naèin: z -ukazom C-x b. Pri tem ukazu morate navesti ime delovnega podroèja. +Tudi Äe imate veÄ delovnih podroÄij, pa je vedno le eno od njih +trenutno dejavno. To je tisto delovno podroÄje, ki ga popravljate. ÄŒe +želite popravljati drugo delovno podroÄje, morate »preklopiti« +nanj. ÄŒe bi radi preklopili na delovno podroÄje, ki pripada kakÅ¡ni +datoteki, že poznate en naÄin, kako to storiti: ponovno »obiÅ¡Äete« +(odprete) to datoteko z ukazom C-x C-f. Obstaja pa Å¡e lažji naÄin: z +ukazom C-x b. Pri tem ukazu morate navesti ime delovnega podroÄja. ->> Vtipkajte C-x b bla , s èimer se vrnete v delovno podroèje - ,,bla`` z vsebino datoteke ,,bla``, ki ste jo maloprej - odprli. Zatem vtipkajte C-x b TUTORIAL , s èimer se vrnete - nazaj v ta uèbenik. +>> Ustvarite datoteko z imenom »bla« tako, da vtipkate C-x C-f bla + . Zatem se vrnite v ta uÄbenik z ukazom C-x C-f TUTORIAL + . -Veèinoma se ime delovnega podroèja kar ujema z imenom datoteke (brez -poti do datoteke), ne pa vedno. Seznam delovnih podroèij, ki ga -prika¾e ukaz C-x C-b, prika¾e imena vseh delovnih podroèij. +VeÄinoma se ime delovnega podroÄja kar ujema z imenom datoteke (brez +poti do datoteke), ne pa vedno. Seznam delovnih podroÄij, ki ga +prikaže ukaz C-x C-b, prikaže imena vseh delovnih podroÄij in +pripadajoÄa imena datotek. Vsako besedilo, ki ga vidite v katerem od Emacsovih oken, je vedno del -kak¹nega delovnega podroèja. Nekatera delovna podroèja ne pripadajo -nobeni datoteki. Podroèje ,,*Buffer List*``, na primer, je ¾e eno -takih. To delovno podroèje smo ustvarili ravnokar, ko smo pognali ukaz -C-x C-b, in vsebuje seznam delovnih podroèij. Tudi delovno podroèje -,,Messages`` ne pripada nobeni datoteki, ampak vsebuje sporoèila, ki -jih je Emacs izpisoval v odzivnem podroèju na dnu zaslona. +kakÅ¡nega delovnega podroÄja. Nekatera delovna podroÄja ne pripadajo +nobeni datoteki. PodroÄje »*Buffer List*«, na primer, je že eno takih. +To delovno podroÄje smo ustvarili ravnokar, ko smo pognali ukaz C-x +C-b, in vsebuje seznam delovnih podroÄij. Temu delovnemu podroÄju +TUTORIAL sprva ni pripadala datoteka, zdaj pa mu, ker smo v prejÅ¡njem +razdelku vtipkali C-x C-s in ga shranili v datoteko. ->> Vtipkajte C-x b *Messages* in si oglejte delovno podroèje - s sporoèili, zatem pa vtipkajte C-x b TUTORIAL in se tako - vrnite v uèbenik. +Tudi delovno podroÄje »Messages« ne pripada nobeni datoteki, ampak +vsebuje sporoÄila, ki jih je Emacs izpisoval v odzivnem podroÄju na +dnu zaslona. -Èe ste spreminjali besedilo ene datoteke, potem pa poiskali drugo, to +>> Vtipkajte C-x b *Messages* in si oglejte delovno podroÄje + s sporoÄili, zatem pa vtipkajte C-x b TUTORIAL in se tako + vrnite v uÄbenik. + +ÄŒe ste spreminjali besedilo ene datoteke, potem pa poiskali drugo, to ne shrani spremeb v prvo datoteko. Te ostanejo znotraj Emacsa, na -delovnem podroèju, ki pripada prvi datoteki. Ustvarjenje ali -spreminjanje delovnega podroèja druge datoteke nima nobenega vpliva na -podroèje prve. To je zelo uporabno, pomeni pa tudi, da potrebujemo -udobno pot, da shranimo delovno podroèje prve datoteke. Nerodno bi -bilo preklapljanje na prvo podroèje s C-x C-f, da bi shranili s C-x +delovnem podroÄju, ki pripada prvi datoteki. Ustvarjenje ali +spreminjanje delovnega podroÄja druge datoteke nima nobenega vpliva na +podroÄje prve. To je zelo uporabno, pomeni pa tudi, da potrebujemo +udobno pot, da shranimo delovno podroÄje prve datoteke. Nerodno bi +bilo preklapljanje na prvo podroÄje s C-x C-f, da bi shranili s C-x C-s. Namesto tega imamo: - C-x s Shrani nekatera delovna podroèja + C-x s Shrani nekatera delovna podroÄja -Ukaz C-x poi¹èe delovna podroèja, katerih vsebina je bila spremenjena, -odkar je bila zadnjiè shranjena na datoteko. Za vsako tako delovno -podroèje C-x s vpra¹a, èe ga ¾elite shraniti. +Ukaz C-x poiÅ¡Äe delovna podroÄja, katerih vsebina je bila spremenjena, +odkar je bila zadnjiÄ shranjena na datoteko. Za vsako tako delovno +podroÄje C-x s vpraÅ¡a, Äe ga želite shraniti. -* RAZ©IRJEN NABOR UKAZOV +* RAZÅ IRJEN NABOR UKAZOV ------------------------ -©e mnogo, mnogo je ukazov Emacsa, ki bi zaslu¾ili, da jih obesimo na +Å e mnogo, mnogo je ukazov Emacsa, ki bi zaslužili, da jih obesimo na razne kontrolne in meta znake. Emacs se temu izogne z ukazom X (iz angl. -eXtend - raz¹iriti), ki uvede ukaz iz raz¹irjenega nabora. Dveh vrst je: +eXtend - razÅ¡iriti), ki uvede ukaz iz razÅ¡irjenega nabora. Dveh vrst je: - C-x Znakovna raz¹iritev (angl. Character eXtend). + C-x Znakovna razÅ¡iritev (angl. Character eXtend). Sledi mu en sam znak. - M-x Raz¹iritev s poimenovanim ukazom. Sledi mu dolgo ime + M-x RazÅ¡iritev s poimenovanim ukazom. Sledi mu dolgo ime ukaza. -Tudi ti ukazi so na splo¹no uporabni, ne uporabljamo pa jih tako -pogosto kot tiste, ki ste se jih ¾e nauèili. Dva ukaza iz raz¹irjenega -nabora ¾e poznamo: C-x C-f, s katerim poi¹èemo datoteko, in C-x C-s, s -katerim datoteko shranimo. ©e en primer je ukaz, s katerim Emacsu -povemo, da ¾elimo konèati z delom iz iziti iz Emacsa. Ta ukaz je C-x -C-c (ne skrbite: preden konèa, Emacs ponudi, da shrani vse spremenjene +Tudi ti ukazi so na sploÅ¡no uporabni, ne uporabljamo pa jih tako +pogosto kot tiste, ki ste se jih že nauÄili. Dva ukaza iz razÅ¡irjenega +nabora že poznamo: C-x C-f, s katerim poiÅ¡Äemo datoteko, in C-x C-s, s +katerim datoteko shranimo. Å e en primer je ukaz, s katerim Emacsu +povemo, da želimo konÄati z delom iz iziti iz Emacsa. Ta ukaz je C-x +C-c (ne skrbite: preden konÄa, Emacs ponudi, da shrani vse spremenjene datoteke). -Z ukazom C-z Emacs zapustimo samo *zaèasno*, tako da lahko ob vrnitvi -nadaljujemo z delom, kjer smo ostali. +ÄŒe uporabljate grafiÄni vmesnik, ne potrebujete posebnega ukaza za +preklop iz Emacsa v katerikoli drug program, ampak to opravite z miÅ¡ko +ali ukazom upravljalnika oken. ÄŒe pa uporabljate besedilni terminal, +ki lahko prikazuje le en program naenkrat, morate zaÄasno zapustiti +Emacs, da preklopite na drug program. -Na sistemih, ki to dopu¹èajo, ukaz C-z izide iz Emacsa v ukazno -lupino, a ga ne konèa - èe uporabljate ukazno lupino C, se lahko -vrnete z ukazom ,fg` ali splo¹neje z ukazom ,,%emacs``. +Z ukazom C-z Emacs zapustimo samo *zaÄasno*, tako da lahko ob vrnitvi +nadaljujemo z delom, kjer smo ostali. Na sistemih, ki to dopuÅ¡Äajo, +ukaz C-z izide iz Emacsa v ukazno lupino, a ga ne konÄa - Äe +uporabljate ukazno lupino C, se lahko vrnete z ukazom »fg« ali +sploÅ¡neje z ukazom »%emacs«. -Drugod ukaz C-z po¾ene sekundarno ukazno lupino, tako da lahko -po¾enete kak¹en drug program in se kasneje vrnete v Emacs. V tem -primeru pravzaprav Emacsa ne zapustimo. Ukaz ,,exit`` v ukazni lupini -je navadno naèin, da zapremo sekundarno lupino in se vrnemo v Emacs. +Drugod ukaz C-z požene sekundarno ukazno lupino, tako da lahko +poženete kakÅ¡en drug program in se kasneje vrnete v Emacs. V tem +primeru pravzaprav Emacsa ne zapustimo. Ukaz »exit« v ukazni lupini +je navadno naÄin, da zapremo sekundarno lupino in se vrnemo v Emacs. -Ukaz C-x C-c uporabimo, èe se nameravamo odjaviti s sistema. To je -tudi pravilen naèin za izhod iz Emacsa, èe je tega pognal program za -delo s po¹to ali kak drug program, saj ta verjetno ne ve, kaj -napraviti z zaèasno prekinjenim Emacsom. V vseh ostalih primerih pa, -èe se ne nameravate odjaviti s sistema, uporabite C-z, in se vrnite v -Emacs, ko bi radi spet urejali besedilo. +Ukaz C-x C-c uporabimo, Äe se nameravamo odjaviti s sistema. To je +tudi pravilen naÄin za izhod iz Emacsa, Äe je tega pognal program za +delo s poÅ¡to ali kak drug program. Ukazov C-x je veliko. Zaenkrat smo spoznali naslednje: - C-x C-f Poi¹èi datoteko. + C-x C-f PoiÅ¡Äi datoteko. C-x C-s Shrani datoteko. - C-x C-b Prika¾i seznam delovnih podroèij. - C-x C-c Konèaj Emacs. + C-x C-b Prikaži seznam delovnih podroÄij. + C-x C-c KonÄaj Emacs. C-x 1 Zapri vsa okna razen enega. C-x u Preklic zadnjega ukaza. -Poimenovani raz¹irjeni ukazi so ukazi, ki se uporabljajo ¹e bolj -poredko, ali pa se uporabljajo samo v nekaterih naèinih dela. Eden +Poimenovani razÅ¡irjeni ukazi so ukazi, ki se uporabljajo Å¡e bolj +poredko, ali pa se uporabljajo samo v nekaterih naÄinih dela. Eden takih je na primer ukaz replace-string, ki po vsem besedilu zamenja en -niz znakov z drugim. Ko vtipkate M-x, se to izpi¹e v pogovornem -vmesniku na dnu zaslona, Emacs pa èaka, da vtipkate ime ukaza, ki ga -¾elite priklicati; v tem primeru je to ,,replace-string``. Vtipkajte -samo ,,repl s`` in Emacs bo dopolnil ime ( je tabulatorska +niz znakov z drugim. Ko vtipkate M-x, se to izpiÅ¡e v pogovornem +vmesniku na dnu zaslona, Emacs pa Äaka, da vtipkate ime ukaza, ki ga +želite priklicati; v tem primeru je to »replace-string«. Vtipkajte +samo »repl s« in Emacs bo dopolnil ime ( je tabulatorska tipka; navadno jo najdemo nad tipko Caps Lock ali Shift na levi strani tipkovnice). Ukaz vnesete s pritiskom na . -Ukaz replace-string potrebuje dva argumenta -- niz, ki ga ¾elite +Ukaz replace-string potrebuje dva argumenta -- niz, ki ga želite zamenjati, in niz, s katerim bi radi zamenjali prvega. Vsakega posebej -vnesete in zakljuèite s pritiskom na tipko Return. +vnesete in zakljuÄite s pritiskom na tipko Return. ->> Premaknite kazalèek na prazno vrstico dve vrstici pod to, zatem +>> Premaknite kazalÄek na prazno vrstico dve vrstici pod to, zatem vtipkajte M-x repl szamenjalaspremenila. Opazite, kako se je ta vrstica zamenjala? Vse besede z-a-m-e-n-j-a-l-a od tod do konca besedila ste nadomestili z besedo - ,,spremenila``. + »spremenila«. -* AVTOMATIÈNO SHRANJEVANJE +* AVTOMATIÄŒNO SHRANJEVANJE -------------------------- -Spremembe v datoteki, ki jih ¹e niste shranili na disk, so izgubljene, -èe medtem denimo zmanjka elektrike. Da bi vas zavaroval pred tem, -Emacs periodièno avtomatièno shrani vse datoteke, ki jih -urejate. Avtomatièno shranjena datoteka se od izvorne razlikuje po -znaku ,#` na zaèetku in koncu imena: èe se je va¹a datoteka imenovala -,,hello.c``, se avtomatièno shranjena datoteka imenuje -,,#hello.c#``. Ko normalno shranite datoteko, avtomatièno shranjena -datoteka ni veè potrebna, in Emacs jo pobri¹e. +Spremembe v datoteki, ki jih Å¡e niste shranili na disk, so izgubljene, +Äe medtem denimo zmanjka elektrike. Da bi vas zavaroval pred tem, +Emacs periodiÄno avtomatiÄno shrani vse datoteke, ki jih +urejate. AvtomatiÄno shranjena datoteka se od izvorne razlikuje po +znaku »#« na zaÄetku in koncu imena: Äe se je vaÅ¡a datoteka imenovala +»hello.c«, se avtomatiÄno shranjena datoteka imenuje +»#hello.c#«. Ko normalno shranite datoteko, avtomatiÄno shranjena +datoteka ni veÄ potrebna, in Emacs jo pobriÅ¡e. -Èe res pride do izgube podatkov v pomnilniku, lahko povrnete avtomatièno -shranjeno besedilo tako, da normalno poi¹èete datoteko (pravo ime -datoteke, ne ime avtomatièno shranjene datoteke), zatem pa vtipkate M-x -recover file. Ko vas vpra¹a za potrditev, vtipkajte yes -za nadaljevanje in povrnitev avtomatièno shranjenenih podatkov. +ÄŒe res pride do izgube podatkov v pomnilniku, lahko povrnete avtomatiÄno +shranjeno besedilo tako, da normalno poiÅ¡Äete datoteko (pravo ime +datoteke, ne ime avtomatiÄno shranjene datoteke), zatem pa vtipkate M-x +recover-file . Ko vas vpraÅ¡a za potrditev, vtipkajte yes +za nadaljevanje in povrnitev avtomatiÄno shranjenenih podatkov. -* ODZIVNO PODROÈJE +* ODZIVNO PODROÄŒJE ------------------ -Kadar Emacs opazi, da poèasi vtipkavate ukaz, odpre v zadnji vrstici -na dnu zaslona odzivno podroèje in v njem sproti prikazuje natipkano. +Kadar Emacs opazi, da poÄasi vtipkavate ukaz, odpre v zadnji vrstici +na dnu zaslona odzivno podroÄje in v njem sproti prikazuje natipkano. * STATUSNA VRSTICA ------------------ -Vrstica nad odzivnim podroèjem je statusna vrstica. Ta ka¾e verjetno +Vrstica nad odzivnim podroÄjem je statusna vrstica. Ta kaže verjetno nekaj podobnega kot: ---:** TUTORIAL (Fundamental)--L670--58%---------------------- +--:**- TUTORIAL (Fundamental)--L670--58%---------------------- V njej so izpisani pomembni podatki o stanju Emacsa in besedilu, ki ga urejate. -Zdaj ¾e veste, kaj pomeni ime datoteke -- to je datoteka, ki ste jo -poiskali. Oznaka --NN%-- pomeni, da je nad vrhom zaslona ¹e NN -odstotkov celotne datoteke. Èe je zaèetek datoteke na zaslonu, bo -namesto --00%-- pisalo --Top--. Podobno bo pisalo --Bot--, èe je -zadnja vrstica datoteke na zaslonu. Èe je datoteka, ki jo ogledujete, -tako kratka, da gre vsa na en zaslon, pa bo pisalo --All--. +Zdaj že veste, kaj pomeni ime datoteke -- to je datoteka, ki ste jo +poiskali. Oznaka --NN%-- pomeni, da je nad vrhom zaslona Å¡e NN +odstotkov celotne datoteke. ÄŒe je zaÄetek datoteke na zaslonu, bo +namesto »0%« pisalo »Top«. Podobno bo pisalo »Bot«, Äe je +zadnja vrstica datoteke na zaslonu. ÄŒe je datoteka, ki jo ogledujete, +tako kratka, da gre vsa na en zaslon, pa bo pisalo »All«. -Èrka L in ¹tevilke za njo ka¾ejo polo¾aj ¹e drugaèe, kot zaporedno -¹tevilko vrstice, v kateri je kazalèek. +ÄŒrka L in Å¡tevilke za njo kažejo položaj Å¡e drugaÄe, kot zaporedno +Å¡tevilko vrstice, v kateri je kazalÄek. -Zvezdice na zaèetku vrstice pomenijo, da ste datoteko ¾e spreminjali. +Zvezdice na zaÄetku vrstice pomenijo, da ste datoteko že spreminjali. Tik po tem, ko ste odprli ali shranili datoteko, ni nobenih zvezdic, -so samo èrtice. +so samo Ärtice. -Del statusne vrstice znotraj oklepajev vam pove, v kak¹nem naèinu dela -Emacs. Privzeti naèin je osnovni naèin (Fundamental), v katerem ste -sedaj. Fundamental je eden od glavnih naèinov (angl. major -mode). Emacs pozna veliko razliènih glavnih naèinov. Nekateri od njih +Del statusne vrstice znotraj oklepajev vam pove, v kakÅ¡nem naÄinu dela +Emacs. Privzeti naÄin je osnovni naÄin (Fundamental), v katerem ste +sedaj. Fundamental je eden od glavnih naÄinov (angl. major +mode). Emacs pozna veliko razliÄnih glavnih naÄinov. Nekateri od njih so namenjeni pisanju programov, kot na primer Lisp, ali pisanju -besedil, kot npr. Text. Naenkrat je lahko aktiven le en glavni naèin, -njegovo ime pa je vedno izpisano v statusni vrstici, kjer zdaj pi¹e +besedil, kot npr. Text. Naenkrat je lahko aktiven le en glavni naÄin, +njegovo ime pa je vedno izpisano v statusni vrstici, kjer zdaj piÅ¡e Fundamental. -Glavni naèini lahko spremenijo pomen nekaterim ukazom. Obstajajo, +Glavni naÄini lahko spremenijo pomen nekaterim ukazom. Obstajajo, denimo, ukazi za pisanje komentarjev v programu, in ker ima vsak programski jezik svoje predstave o tem, kako mora komentar izgledati, -mora vsak glavni naèin vnesti komentarje drugaèe. Ker je vsak glavni -naèin ime raz¹irjenega ukaza, lahko tako tudi izbiramo glavni -naèin. Na primer, M-x fundamental-mode vas postavi v naèin +mora vsak glavni naÄin vnesti komentarje drugaÄe. Ker je vsak glavni +naÄin ime razÅ¡irjenega ukaza, lahko tako tudi izbiramo glavni +naÄin. Na primer, M-x fundamental-mode vas postavi v naÄin Fundamental. -Èe nameravate popravljati slovensko (ali angle¹ko) besedilo, kot je na -primer tole, boste verjetno izbrali tekstovni naèin (Text). ->> Vtipkajte M-x text mode. +ÄŒe nameravate popravljati slovensko (ali angleÅ¡ko) besedilo, kot je na +primer tole, boste verjetno izbrali tekstovni naÄin (Text). +>> Vtipkajte M-x text-mode . -Brez skrbi, noben od ukazov Emacsa, ki ste se jih nauèili, se s tem ne -spremeni kaj dosti. Lahko pa opazite, da Emacs zdaj jemlje opu¹èaje za -dele besed, ko se premikate z M-f ali M-b. V osnovnem naèinu jih je +Brez skrbi, noben od ukazov Emacsa, ki ste se jih nauÄili, se s tem ne +spremeni kaj dosti. Lahko pa opazite, da Emacs zdaj jemlje opuÅ¡Äaje za +dele besed, ko se premikate z M-f ali M-b. V osnovnem naÄinu jih je obravnaval kot meje med besedami. -Glavni naèini navadno poèenjajo majhne spremembe, kot je ta: veèina -ukazov ,,opravi isti posel``, vendar pa to poènejo na razlièen naèin. +Glavni naÄini navadno poÄenjajo majhne spremembe, kot je ta: veÄina +ukazov »opravi isti posel«, vendar pa to poÄnejo na razliÄen naÄin. -Dokumentacijo o trenutno aktivnem glavnem naèinu dobite z ukazom C-h m. +Dokumentacijo o trenutno aktivnem glavnem naÄinu dobite z ukazom C-h m. ->> Uporabite C-u C-v enkrat ali veèkrat, toliko, da bo ta vrstica blizu - vrha zaslona. ->> Vtipkajte C-h m, da vidite, v èem se tekstovni naèin (Text) razlikuje +>> Vtipkajte C-l C-l, da postavite to vrstico na vrh zaslona. +>> Vtipkajte C-h m, da vidite, v Äem se tekstovni naÄin (Text) razlikuje od osnovnega (Fundamental). >> Vtipkajte C-x 1, da umaknete dokumentacijo z zaslona. -Glavnim naèinom pravimo glavni naèini zato, ker obstajajo tudi -podnaèini (angl. minor modes). Podnaèini ne nadome¹èajo glavnih -naèinom, ampak le spreminjajo njihovo obna¹anje. Podnaèine lahko -aktiviramo ali deaktiviramo neodvisno od glavnega naèina in neodvisno -od ostalih podnaèinov. Tako lahko ne uporabljate nobenega podnaèina, -en podnaèin, ali kombinacijo veèih podnaèinov. +Glavnim naÄinom pravimo glavni naÄini zato, ker obstajajo tudi +podnaÄini (angl. minor modes). PodnaÄini ne nadomeÅ¡Äajo glavnih +naÄinom, ampak le spreminjajo njihovo obnaÅ¡anje. PodnaÄine lahko +aktiviramo ali deaktiviramo neodvisno od glavnega naÄina in neodvisno +od ostalih podnaÄinov. Tako lahko ne uporabljate nobenega podnaÄina, +en podnaÄin, ali kombinacijo veÄih podnaÄinov. -Podnaèin, ki je zelo uporaben posebno za pisanje besedil, je Auto -Fill. Ko je vklopljen, Emacs med pisanjem avtomatièno deli vrstice na +PodnaÄin, ki je zelo uporaben posebno za pisanje besedil, je Auto +Fill. Ko je vklopljen, Emacs med pisanjem avtomatiÄno deli vrstice na presledkih med besedami, tako da vrstice niso predolge. -Vklopite ga lahko z ukazom M-x auto fill mode. Ko je -vklopljen, ga lahko izklopite z istim ukazom, M-x -auto fill mode. Z istim ukazom torej preklapljamo -(angl. toggle) med vklopljenim in izklopljenim stanjem. +Vklopite ga lahko z ukazom M-x auto-fill-mode . Ko je +vklopljen, ga lahko izklopite z istim ukazom, M-x auto-fill-mode +. Z istim ukazom torej preklapljamo (angl. toggle) med +vklopljenim in izklopljenim stanjem. ->> Vtipkajte zdaj M-x auto fill mode. Potem zaènite tipkati - "asdf asdkl sdjf sdjkf"... dokler ne opazite, da je Emacs razbil +>> Vtipkajte zdaj M-x auto-fill-mode . Potem zaÄnite tipkati + »asdf asdkl sdjf sdjkf«... dokler ne opazite, da je Emacs razbil vrstico na dve. Med tipkanjem mora biti dovolj presledkov, saj Auto Fill prelamlja vrstice samo na presledkih. -©irina besedila je navadno postavljena na 70 znakov, kar pa lahko -spremenite z ukazom C-x f. Novo ¹irino morate podati kot ¹tevilèni +Å irina besedila je navadno postavljena na 70 znakov, kar pa lahko +spremenite z ukazom C-x f. Novo Å¡irino morate podati kot Å¡tevilÄni argument. >> Vtipkajte C-x f in argument 20. (C-u 2 0 C-x f). Zatem vtipkajte - nekaj besedila in poglejte, èe bo Emacs res delil vrstice pri 20 + nekaj besedila in poglejte, Äe bo Emacs res delil vrstice pri 20 znakih. Potem z ukazom C-x f postavite mejo nazaj na 70. -Auto Fill deluje le, kadar pi¹ete novo besedilo, ne pa, -kadar popravljate ¾e napisan odstavek. -Tak odstavek lahko poravnate tako, da kazalèek premaknete nekam -znotraj odstavka in uka¾ete M-q (META-q). +Auto Fill deluje le, kadar piÅ¡ete novo besedilo, ne pa, +kadar popravljate že napisan odstavek. +Tak odstavek lahko poravnate tako, da kazalÄek premaknete nekam +znotraj odstavka in ukažete M-q (META-q). ->> Premaknite kazalèek v prej¹nji odstavek in izvedite M-q. +>> Premaknite kazalÄek v prejÅ¡nji odstavek in izvedite M-q. * ISKANJE --------- -Emacs lahko v besedilu poi¹èe niz znakov (zaporedje znakov ali besed), -naprej ali nazaj po besedilu. Iskanje spada v skupino ukazov za -premikanje kazalèka, saj premakne kazalèek na kraj v besedilu, kjer je -na¹el iskani niz. +Emacs lahko v besedilu poiÅ¡Äe niz znakov (»niz« je zaporedje soslednih +znakov), naprej ali nazaj po besedilu. Iskanje spada v skupino ukazov +za premikanje kazalÄka, saj premakne kazalÄek na kraj v besedilu, kjer +je naÅ¡el iskani niz. -Iskanje v Emacsu je morda nekoliko drugaèno od tistega, ki ste ga -navajeni, in sicer je ,,inkrementalno``. To pomeni, da se iskanje -odvija hkrati s tem, ko tipkate iskani niz. +Iskanje v Emacsu je »inkrementalno«. To pomeni, da se iskanje odvija +hkrati s tem, ko tipkate iskani niz. Ukaza za iskanje sta C-s za iskanje naprej po datoteki in C-r za -iskanje nazaj po datoteki. POÈAKAJTE! Ne preizku¹ajte jih ¹e ta hip! +iskanje nazaj po datoteki. POÄŒAKAJTE! Ne preizkuÅ¡ajte jih Å¡e ta hip! -Ko boste natipkali C-s, boste opazili niz ,,I-search`` kot pozivnik +Ko boste natipkali C-s, boste opazili niz »I-search« kot pozivnik v pogovornem vmesniku. To vam pove, da je Emacs v inkrementalnem iskanju -in vas èaka, da zaènete tipkati, kar i¹èete. zakljuèi iskanje. +in vas Äaka, da zaÄnete tipkati, kar iÅ¡Äete. zakljuÄi iskanje. ->> Pritisnite zdaj C-s. POÈASI, èrko za èrko, vtipkajte besedo - ,,kazalèek``. Za vsako vtipkano èrko se ustavite in si oglejte, kaj - se je zgodilo s kazalèkom. ->> ©e enkrat pritisnite C-s, da poi¹èete naslednji ,,kazalèek``. ->> ©estkrat pritisnite in opazujte, kako se premika kazalèek. ->> Konèajte iskanje s tipko . +>> Pritisnite zdaj C-s. POÄŒASI, Ärko za Ärko, vtipkajte besedo + »kazalÄek«. Za vsako vtipkano Ärko se ustavite in si oglejte, kaj + se je zgodilo s kazalÄkom. +>> Å e enkrat pritisnite C-s, da poiÅ¡Äete naslednji »kazalÄek«. +>> Å estkrat pritisnite in opazujte, kako se premika kazalÄek. +>> KonÄajte iskanje s tipko . -Ste videli, kaj se je zgodilo? Emacs pri inkrementalnem iskanju sku¹a -poiskati niz, ki ste ga natipkali do tistega hipa. Da poi¹èete -naslednje mesto, kjer se pojavi ,,kazalèek``, samo ¹e enkrat -pritisnete C-s. Èe takega mesta ni, Emacs èivkne in vam sporoèi, da +Ste videli, kaj se je zgodilo? Emacs pri inkrementalnem iskanju skuÅ¡a +poiskati niz, ki ste ga natipkali do tistega hipa. Da poiÅ¡Äete +naslednje mesto, kjer se pojavi »kazalÄek«, samo Å¡e enkrat +pritisnete C-s. ÄŒe takega mesta ni, Emacs Äivkne in vam sporoÄi, da iskanje ni uspelo. Tudi C-g prekine iskanje. -OPOZORILO: Na nekaterih sistemih bo s pritiskom na C-s ekran -zmrznil. To je znak, da je operacijski sistem prestregel znak C-s in -ga interpretiral kot znak za prekinitev toka podatkov, namesto da bi -ga posredoval programu Emacs. Ekran ,,odtajate`` s pritiskom na -C-q. Potem si oglejte razdelek ,,Spontaneous Entry to Incremental -Search`` v priroèniku za nasvet, kako se spopasti s to nev¹eènostjo. +ÄŒe sredi inkrementalnega iskanja pritisnete , boste opazili, +da to pobriÅ¡e zadnji znak v iskanem nizu, kazalÄek pa se premakne +nazaj na mesto v besedilu, kjer je naÅ¡el krajÅ¡i niz. Na primer, +predpostavimo, da ste do zdaj natipkali »ka« in je kazalÄek na +mestu, kjer se prviÄ pojavi »ka«. ÄŒe zdaj pritisnete , boste +s tem v pogovornem vmesniku izbrisali »a«, hkrati pa se bo kazalÄek +postavil na mesto, kjer je prviÄ naÅ¡el »k«, preden ste natipkali Å¡e +»a«. -Èe sredi inkrementalnega iskanja pritisnete , boste opazili, -da to pobri¹e zadnji znak v iskanem nizu, kazalèek pa se premakne -nazaj na mesto v besedilu, kjer je na¹el kraj¹i niz. Na primer, -predpostavimo, da ste do zdaj natipkali ,,ka`` in je kazalèek na -mestu, kjer se prviè pojavi ,,ka``. Èe zdaj pritisnete , boste -s tem v pogovornem vmesniku izbrisali ,a`, hkrati pa se bo kazalèek -postavil na mesto, kjer je prviè na¹el ,k`, preden ste natipkali ¹e -,a`. - -Èe sredi iskanja vtipkate katerikoli kontrolni znaki ali metaznak +ÄŒe sredi iskanja vtipkate katerikoli kontrolni znaki ali metaznak (razen tistih, ki imajo poseben pomen pri iskanju, to sta C-s in C-r), se iskanje prekine. -C-s zaène iskati na mestu v datoteki, kjer trenutno stoji kazalèek, in -i¹èe do konca datoteke. Èe bi radi iskali proti zaèetku datoteke, +C-s zaÄne iskati na mestu v datoteki, kjer trenutno stoji kazalÄek, in +iÅ¡Äe do konca datoteke. ÄŒe bi radi iskali proti zaÄetku datoteke, namesto C-s vtipkamo C-r. Vse, kar smo povedali o ukazu C-s, velja tudi za C-r, le smer iskanja je obrnjena. -* VEÈ OKEN NA ZASLONU +* VEÄŒ OKEN NA ZASLONU --------------------- -Ena simpatiènih lastnosti Emacsa je, da zna hkrati prikazati veè oken -na ekranu, tudi èe ne delamo v grafiènem naèinu. +Ena simpatiÄnih lastnosti Emacsa je, da zna hkrati prikazati veÄ oken +na zaslonu, tudi Äe ne delamo v grafiÄnem naÄinu. (Opozorimo naj, da +Emacs uporablja izraz »okvir« (angl. »frame«) - razložen je v +naslednjem razdelku - za tisto, Äemur nekateri drugi programi pravijo +»okno« (angl. »window«). PriroÄnik za Emacs vsebuje glosar +uporabljenih izrazov.) ->> Premaknite kazalèek v to vrstico in vtipkajte C-u 0 C-l (zadnji - znak je CONTROL-L, ne CONTROL-1) +>> Premaknite kazalÄek v to vrstico in vtipkajte C-l C-l. >> Zdaj vtipkajte C-x 2, da razdelite zaslon na dve okni. - V obeh oknih imate odprt ta priroènik. Kazalèek je ostal v zgornjem + V obeh oknih imate odprt ta priroÄnik. KazalÄek je ostal v zgornjem oknu. >> Pritisnite C-M-v za listanje v spodnjem oknu. - (Èe nimate tipke META, tipkajte ESC C-v). ->> Vtipkajte C-x o (o kot ,,other``, drugi), da preselite kazalèek v + (ÄŒe nimate tipke META, tipkajte ESC C-v). +>> Vtipkajte C-x o (o kot »other«, drugi), da preselite kazalÄek v spodnje okno. ->> S C-v in M-v se v spodnjem oknu premikate po vsebini datoteke. - Zgornje okno ¹e vedno ka¾e ta navodila. ->> Ponovni C-x o vas vrne v zgornje okno. Kazalèek se je vrnil na - mesto, kjer je bil, preden smo skoèili v spodnje okno. +>> Z ukazoma C-v in M-v se v spodnjem oknu premikate po vsebini + datoteke. Zgornje okno Å¡e vedno kaže ta navodila. +>> Ponovni C-x o vas vrne v zgornje okno. KazalÄek se je vrnil na + mesto, kjer je bil, preden smo skoÄili v spodnje okno. -Z ukazom C-x o lahko preklapljamo med okni. Vsako okno si zapomni, kje -v oknu je ostal kazalèek, samo trenutno aktivno okno pa kazalèek tudi -v resnici prika¾e. Vsi obièajni ukazi za urejanje, ki smo se jih -nauèili, veljajo za aktivno okno. +Z ukazom C-x o lahko preklapljamo med okni. Izbrano okno, torej tisto, +v katerem urejamo besedilo, je tisto z zelo opaznim kazalÄkom, ki +utripa, kadar ne tipkamo. Tudi ostala okna pa si zapomnijo, kje je +ostal kazalÄek. ÄŒe poganjate Emacs v grafiÄnem naÄinu, je položaj +kazalÄka v teh oknih prikazan kot ne-utripajoÄ Ärtni pravokotnik. Ukaz C-M-v je zelo uporaben, kadar urejamo besedilo v enem oknu, -drugega pa uporabljamo samo za pomoè. Kazalèek ostaja ves èas v oknu, -v katerem urejamo, po vsebini spodnjega okna pa se vseeno lahko -premikamo, ne da bi morali venomer skakati iz enega okna v drugega. +drugega pa uporabljamo samo za pomoÄ. Ne da bi zapustili izbrano okno, +se lahko premikamo po vsebini drugega okna z ukazon C-M-v. -C-M-v je primer znaka CONTROL-META. Èe imate v resnici tipko META (na -PC navadno levi Alt), lahko vtipkate C-M-v tako, da dr¾ite pritisnjeni +C-M-v je primer znaka CONTROL-META. ÄŒe imate v resnici tipko META (na +PC navadno levi Alt), lahko vtipkate C-M-v tako, da držite pritisnjeni tako CONTROL kot META, medtem ko vtipkate v. Ni pomembno, katero od -tipk, CONTROL ali META, pritisnete prvo, saj obe delujeta ¹ele, ko -pritisnete znak, ki sledi (v zgornjem primeru ,v`). +tipk, CONTROL ali META, pritisnete prvo, saj obe delujeta Å¡ele, ko +pritisnete znak, ki sledi (v zgornjem primeru »v«). -Nasprotno pa je vrstni red pritiskanja pomemben, èe nimate tipke META -in namesto nje uporabljate ESC. V tem primeru morate najprej -pritisniti ESC, potem pa Control-v. Obratna kombinacija, CONTROL-ESC v -ne deluje. To je zato, ker je ESC znak sam po sebi, ne pa modifikator, -kot sta CONTROL in META. +Nasprotno pa je vrstni red pritiskanja pomemben, Äe nimate tipke META +in namesto nje uporabljate . V tem primeru morate najprej +pritisniti , potem pa Control-v. Obratna kombinacija, +CONTROL- ne deluje. To je zato, ker je znak sam po sebi, ne +pa modifikator, kot sta CONTROL in META. >> V zgornjem oknu vtipkajte C-x 1, da se znebite spodnjega okna. -(Èe bi vtipkali C-x 1 v spodnjem oknu, bi se znebili -zgornjega. Razmi¹ljajte o tem ukazu kot ,,Obdr¾i samo eno okno, in -sicer tisto, v katerem sem zdaj.``) +(ÄŒe bi vtipkali C-x 1 v spodnjem oknu, bi se znebili +zgornjega. RazmiÅ¡ljajte o tem ukazu kot »Obdrži samo eno okno, in +sicer tisto, v katerem sem zdaj.«) -Seveda ni nujno, da obe okni ka¾eta isto delovno podroèje. Èe v enem -oknu izvedete C-x C-f in poi¹èete novo datoteko, se vsebina drugega +Seveda ni nujno, da obe okni kažeta isto delovno podroÄje. ÄŒe v enem +oknu izvedete C-x C-f in poiÅ¡Äete novo datoteko, se vsebina drugega okna ne spremeni. V vsakem oknu lahko neodvisno obdelujete drugo datoteko. -Pa ¹e ena pot, kako v dveh oknih prika¾ete dve razlièni datoteki: +Pa Å¡e ena pot, kako v dveh oknih prikažete dve razliÄni datoteki: ->> Vtipkajte C-x 4 C-f, in na pozivnik vtipkajte ime ene va¹ih - datotek. Konèajte z . Odpre se ¹e eno okno in izbrana - datoteka se pojavi v drugem oknu. Tudi kazalèek se preseli v drugo +>> Vtipkajte C-x 4 C-f, in na pozivnik vtipkajte ime ene vaÅ¡ih + datotek. KonÄajte z . Odpre se Å¡e eno okno in izbrana + datoteka se pojavi v drugem oknu. Tudi kazalÄek se preseli v drugo okno. >> Vtipkajte C-x o, da se vrnete nazaj v zgornje okno, in C-x 1, da zaprete spodnje okno. +* VEÄŒ HKRATNIH OKVIROV +---------------------- + +Emacs lahko ustvari tudi veÄ Â»okvirov«. Okvir je zbirka oken, skupaj z +menuji, drsniki, pogovornim vmesnikom ipd. V grafiÄnem naÄinu je +Emacsov »okvir« tisto, Äemur veÄina drugih programov pravi »okno«. ÄŒe +delate v grafiÄnem naÄinu, je lahko veÄ okvirov hkrati prikazanih na +zaslonu. V besedilnem terminalu imamo seveda na voljo le en okvir. + +>> Vtipkajte M-x make-frame + Opazite, kako se je na zaslonu pojavil nov okvir. + +Vse, kar ste poÄeli v prvotnem okviru, lahko poÄnete tudi v novem. +Prvi okvir ni v niÄemer poseben. + +>> Vtipkajte M-x delete-frame + Ukaz izbriÅ¡e izbrani okvir. + +Okvir lahko izbriÅ¡ete tudi z obiÄajnim naÄinom, ki ga ponuja grafiÄni +sistem - pogosto s klikom na simbol »X« v enem od zgornjih kotov okna. +ÄŒe zaprete zadnji okvir, s tem obenem zaprete tudi Emacs. + + * REKURZIVNI NIVOJI UREJANJA ---------------------------- -Vèasih boste pri¹li v nekaj, èemur se pravi ,,rekurzivni nivo -urejanja``. To se vidi po tem, da v statusni vrstici oglati oklepaji -oklepajo ime glavnega naèina. V osnovnem naèinu bi, na primer, videli +VÄasih boste priÅ¡li v nekaj, Äemur se pravi »rekurzivni nivo +urejanja«. To se vidi po tem, da v statusni vrstici oglati oklepaji +oklepajo ime glavnega naÄina. V osnovnem naÄinu bi, na primer, videli [(Fundamental)] namesto (Fundamental). -Iz rekurzivnega nivoja urejanja se re¹ite, èe vtipkate ESC ESC ESC. To -zaporedje je vsenamenski ukaz ,,pojdi ven``. Uporabite ga lahko tudi -za ukinjanje odveènih oken, ali vrnitev iz pogovornega vmesnika. +Iz rekurzivnega nivoja urejanja se reÅ¡ite, Äe vtipkate ESC ESC ESC. To +zaporedje je vsenamenski ukaz »pojdi ven«. Uporabite ga lahko tudi +za ukinjanje odveÄnih oken, ali vrnitev iz pogovornega vmesnika. >> Pritisnite M-x, da odprete pogovorni vmesnik, zatem pa vtipkajte ESC ESC ESC, da pridete ven iz njega. Z ukazom C-g ne morete iz rekurzivnega nivoja urejanja, ker C-g -preklièe ukaze ali argumente ZNOTRAJ rekurzivnega nivoja. +prekliÄe ukaze ali argumente ZNOTRAJ rekurzivnega nivoja. -* DODATNA POMOÈ +* DODATNA POMOÄŒ --------------- -V tem uvodu smo posku¹ali zbrati dovolj informacij, da lahko zaènete -Emacs uporabljati. Emacs ponuja toliko, da bi bilo nemogoèe vse to -zbrati tukaj. Verjetno pa bi se vseeno radi nauèili kaj o ¹tevilnih -koristnih mo¾nostih, ki jih ¹e ne poznate. Emacs ima ¾e vgrajene +V tem uvodu smo poskuÅ¡ali zbrati dovolj informacij, da lahko zaÄnete +Emacs uporabljati. Emacs ponuja toliko, da bi bilo nemogoÄe vse to +zbrati tukaj. Verjetno pa bi se vseeno radi nauÄili kaj o Å¡tevilnih +koristnih možnostih, ki jih Å¡e ne poznate. Emacs ima že vgrajene veliko dokumentacije, do katere lahko pridete s pritiskom na CONTROL-h -(h kot ,,help``, pomoè). +(h kot »help«, pomoÄ). -Za pomoè pritisnete C-h, potem pa vtipkate znak, ki pove, kak¹no pomoè -¾elite. Èe ste poplnoma izgubljeni, vtipkajte C-h ? in Emacs vam bo -povedal, kak¹na pomoè je sploh na voljo. Èe ste vtipkali C-h, pa ste -si premislili, lahko ukaz preklièete s C-g. +Za pomoÄ pritisnete C-h, potem pa vtipkate znak, ki pove, kakÅ¡no pomoÄ +želite. ÄŒe ste poplnoma izgubljeni, vtipkajte C-h ? in Emacs vam bo +povedal, kakÅ¡na pomoÄ je sploh na voljo. ÄŒe ste vtipkali C-h, pa ste +si premislili, lahko ukaz prekliÄete s C-g. -(Na nekaterih sistemih se znak C-h preslika v kaj drugega. To ni -dobro, in v takem primeru se prito¾ite sistemskemu vzdr¾evalcu. Medtem -pa, èe C-h ne prika¾e sporoèila o pomoèi na dnu zaslona, namesto tega -poskusite pritisniti tipko F1 ali pa vtipkajte M-x help .) +(ÄŒe C-h ne prikaže sporoÄila o pomoÄi na dnu zaslona, poskusite +namesto tega pritisniti tipko F1 ali pa vtipkajte M-x help .) -Najosnovnej¹i tip pomoèi prika¾e C-h c. Pritisnite C-h, tipko c, zatem +NajosnovnejÅ¡i tip pomoÄi prikaže C-h c. Pritisnite C-h, tipko c, zatem pa ukazni znak ali zaporedje ukaznih znakov, in Emacs bo izpisal kratek opis ukaza. >> Vtipkajte C-h c C-p. - Izpi¹e se nekaj takega kot + IzpiÅ¡e se nekaj takega kot C-p runs the command previous-line -Ukaz je izpisal ime funkcije, ki izvede ukaz. Imena funkcij -uporabljamo, kadar pi¹emo prilagoditve in raz¹iritve Emacsa. Ker pa so -navadno imena funkcij izbrana tako, da kaj povedo o tem, kaj funkcija -poène, bo verjetno to tudi dovolj za kratko osve¾itev, èe ste se z -ukazom ¾e kdaj sreèali. +Ukaz je izpisal ime funkcije, ki izvede ukaz. Ker so navadno imena +funkcij izbrana tako, da kaj povedo o tem, kaj funkcija poÄne, bo +verjetno to tudi dovolj za kratko osvežitev, Äe ste se z ukazom že +kdaj sreÄali. Ukazu C-h lahko sledi tudi zaporedje znakov, kot na primer C-x C-s, -ali, èe nimate tipke META, v. +ali, Äe nimate tipke META, v. -Za veè informacij o ukazu vtipkajte C-h k namesto C-h c. +Za veÄ informacij o ukazu vtipkajte C-h k namesto C-h c. >> Vtipkajte C-h k C-p. -To odpre novo okno in v njem prika¾e dokumentacijo o funkciji, obenem +To odpre novo okno in v njem prikaže dokumentacijo o funkciji, obenem z njenim imenom. Ko ste opravili, vtipkajte C-x 1, da se znebite okna -z pomoèjo. Tega seveda ni potrebno napraviti takoj, ampak lahko -urejate, medtem ko imate odprto okno s pomoèjo, in ga zaprete, ko ste -konèali. +z pomoÄjo. Tega ni potrebno napraviti ta hip. Namesto tega lahko +urejate, medtem ko imate odprto okno s pomoÄjo, in ga zaprete, ko ste +konÄali. -Sledi ¹e nekaj uporabnih mo¾nosti, ki jih ponuja pomoè: +Sledi Å¡e nekaj uporabnih možnosti, ki jih ponuja pomoÄ: - C-h f Opi¹i funkcijo. Kot argument morate podati ime + C-h f OpiÅ¡i funkcijo. Kot argument morate podati ime funkcije. ->> Poskusite C-h f previous-line. - To izpi¹e vse podatke, ki jih ima Emacs o funkciji, ki izvede ukaz C-p. +>> Poskusite C-h f previous-line . + To izpiÅ¡e vse podatke, ki jih ima Emacs o funkciji, ki izvede ukaz C-p. -Podoben ukaz C-h v izpi¹e dokumentacijo za spremenljivke, s katerimi -lahko nastavite obna¹anje Emacsa. Ob pozivniku morate vpisati ime -spremenljivke. +Podoben ukaz C-h v izpiÅ¡e dokumentacijo za spremenljivke, vkljuÄno s +tistimi, s katerimi lahko nastavite obnaÅ¡anje Emacsa. Ob pozivniku +morate vpisati ime spremenljivke. - C-h a Apropos. Vtipkajte kljuèno besedo in Emacs bo izpisal - vse ukaze, ki vsebujejo to kljuèno besedo. Vse te - ukaze lahko priklièete z META-x. Pri nekaterih ukazih + C-h a Apropos. Vtipkajte kljuÄno besedo in Emacs bo izpisal + vse ukaze, ki vsebujejo to kljuÄno besedo. Vse te + ukaze lahko prikliÄete z META-x. Pri nekaterih ukazih bo Apropos izpisal tudi eno ali dvoznakovno - zaporedje, s katerim dose¾ete isti uèinek. + zaporedje, s katerim dosežete isti uÄinek. ->> Vtipkajte C-h a file. +>> Vtipkajte C-h a file . To odpre novo okno, v katerem so vsa dolga imena ukazov, ki vsebujejo -,,file`` v imenu. Izvedete jih lahko z M-x. Pri nekaterih se izpi¹e +»file« v imenu. Izvedete jih lahko z M-x. Pri nekaterih se izpiÅ¡e tudi kratek ukaz, npr. C-x C-f ali C-x C-w pri ukazih find-file in write-file. ->> Pritisnite C-M-v, da se sprehajate po oknu s pomoèjo. Poskusite +>> Pritisnite C-M-v, da se sprehajate po oknu s pomoÄjo. Poskusite nekajkrat. ->> Vtipkajte C-x 1, da zaprete okno s pomoèjo. +>> Vtipkajte C-x 1, da zaprete okno s pomoÄjo. - C-h i Priroèniki z navodili za uporabo (tkim. datoteke - "info"). Ta ukaz vas prestavi v posebno delovno - podroèje, imenovano "info". V njem lahko prebirate - priroènike za programe, ki so name¹èeni v sistemu. Z - ukazom m emacs denimo dobite priroènik za - urejevalnik Emacs. Èe sistema Info ¹e niste + C-h i PriroÄniki z navodili za uporabo (tkim. datoteke + »info«). Ta ukaz vas prestavi v posebno delovno + podroÄje, imenovano »*info*«. V njem lahko prebirate + priroÄnike za programe, ki so nameÅ¡Äeni v sistemu. Z + ukazom m emacs denimo dobite priroÄnik za + urejevalnik Emacs. ÄŒe sistema Info Å¡e niste uporabljali, vtipkajte ? in Emacs vas bo popeljal na - vódeni izlet po naèinu Info in mo¾nostih, ki jih - ponuja. Ko boste zakljuèili z branjem tega prvega - berila, bo priroènik za Emacs v sistemu Info va¹ + vódeni izlet po naÄinu Info in možnostih, ki jih + ponuja. Ko boste zakljuÄili z branjem tega prvega + berila, bo priroÄnik za Emacs v sistemu Info vaÅ¡ glavni vir dokumentacije. -* DRUGE MO®NOSTI +* DRUGE MOŽNOSTI ---------------- -©e veè se lahko nauèite o Emacsu z branjem priroènika, bodisi -natisnjenega, bodisi na zaslonu v sistemu Info (uporabite menu Help -ali vtipkajte F10 h r). Dve mo¾nosti, ki vam bosta morda posebej v¹eè, -sta samodejno zakljuèevanje vrstice, s katerim prihranite nekaj -tipkanja, in dired, s katerim poenostavimo delo z datotekami. +Å e veÄ se lahko nauÄite o Emacsu z branjem priroÄnika, bodisi +natisnjenega, bodisi znotraj samega Emacsa (uporabite menu Help ali +vtipkajte C-h r). Dve možnosti, ki vam bosta morda posebej vÅ¡eÄ, sta +samodejno zakljuÄevanje vrstice, s katerim prihranite nekaj tipkanja, +in dired, s katerim poenostavimo delo z datotekami. -Samodejno zakljuèevanje vrstic je naèin, s katerim prihranimo nekaj -tipkanja. Èe ¾elite denimo preklopiti v delovno podroèje *Messages*, +Samodejno zakljuÄevanje vrstic je naÄin, s katerim prihranimo nekaj +tipkanja. ÄŒe želite denimo preklopiti v delovno podroÄje *Messages*, je dovolj, da vtipkate C-x b *M in Emacs bo sam dopolnil -preostanek imena delovnega podroèja. Samodejno zakljuèevanje je -opisano v sistemu Info v priroèniku za Emacs, razdelek ,,Completion``. +preostanek imena delovnega podroÄja. Samodejno zakljuÄevanje deluje +tudi za imena ukazov in imena datotek. Samodejno zakljuÄevanje je +opisano v priroÄniku za Emacs, razdelek »Completion«. -Dired omogoèa izpis seznama datotek v imeniku (in po mo¾nosti tudi +Dired omogoÄa izpis seznama datotek v imeniku (in po možnosti tudi podimenikih), premikanje po seznamu, obiskovanje (odpiranje), preimenovanje, brisanje in druge operacije z datotekami. Dired je -opisav v sistemu Info v priroèniku za Emacs, razdelek ,,Dired``. +opisav v priroÄniku za Emacs, razdelek »Dired«. -Priroènik opisuje tudi mnoge druge mo¾nosti Emacsa. +PriroÄnik opisuje tudi mnoge druge možnosti Emacsa. -* ZAKLJUÈEK +* ZAKLJUÄŒEK ----------- -Zapomnite si, da Emacs zapustite z ukazom C-x C-c. Èe bi radi samo -zaèasno skoèili v ukazno lupino in se kasneje vrnili v Emacs, pa -storite to z ukazom C-z. +Emacs zapustite z ukazom C-x C-c. -Ta uèbenik je napisan z namenom, da bi bil razumljiv vsem novincem v -Emacsu. Èe se vam kaj ne zdi jasno napisano, ne valite krivde nase - -prito¾ite se! +Ta uÄbenik je napisan z namenom, da bi bil razumljiv vsem novincem v +Emacsu. ÄŒe se vam kaj ne zdi jasno napisano, ne valite krivde nase - +pritožite se! -* RAZMNO®EVANJE IN RAZ©IRJANJE +* RAZMNOŽEVANJE IN RAZÅ IRJANJE ------------------------------ -Angle¹ki izvirnik tega uvoda v Emacs je naslednik dolge vrste tovrstnih -besedil, zaèen¹i s tistim, ki ga je Stuart Cracraft napisal za izvorni -Emacs. V sloven¹èino ga je prevedel Primo¾ Peterlin. +AngleÅ¡ki izvirnik tega uvoda v Emacs je naslednik dolge vrste tovrstnih +besedil, zaÄenÅ¡i s tistim, ki ga je Stuart Cracraft napisal za izvorni +Emacs. V slovenÅ¡Äino ga je prevedel Primož Peterlin. To besedilo, kot sam GNU Emacs, je avtorsko delo, in njegovo -razmno¾evanje in raz¹irjanje je dovoljeno pod naslednjimi pogoji: +razmnoževanje in razÅ¡irjanje je dovoljeno pod naslednjimi pogoji: -Copyright (C) 1985, 1996, 1998, 2001-2012 Free Software Foundation, Inc. +Copyright © 1985, 1996, 1998, 2001-2012 Free Software Foundation, Inc. - Dovoljeno je izdelovati in raz¹irjati neokrnjene kopije tega spisa - v kakr¹nikoli obliki pod pogojem, da je ohranjena navedba o - avtorstvu in to dovoljenje, ter da distributer dovoljuje prejemniku - nadaljnje raz¹irjanje pod pogoji, navedenimi v tem dovoljenju. + Ta datoteka je del paketa GNU Emacs. - Pod pogoji iz prej¹njega odstavka je dovoljeno raz¹irjati - spremenjene verzije tega spisa ali njegovih delov, èe je jasno - oznaèeno, kdo je nazadnje vnesel spremembe. + GNU Emacs je prost program; lahko ga redistribuirate in/ali prirejate + po pogojih, doloÄenih v dovoljenju za rabo »GNU General Public License«, + izdanem pri Free Software Foundation, bodisi 3. izdaje tega dovoljenja, + bodisi katerekoli kasnejÅ¡e izdaje, ki je na voljo. -Pogoji za razmno¾evanje in raz¹irjanje samega Emacsa so malo drugaèni, -a v istem duhu. Prosimo, preberite datoteko COPYING in potem dajte -kopijo programa GNU Emacs svojim prijateljem. Pomagajte zatreti -obstrukcionizem (,,lastni¹tvo``) v programju tako, da uporabljate, -pi¹ete in delite prosto programje! + GNU Emacs je ponujen v dobri veri, da je uporaben, vendar zanj NI + NOBENEGA JAMSTVA, niti implicitnih jamstev PRIMERNOSTI ZA PRODAJO + ali USTREZNOSTI ZA DOLOÄŒEN NAMEN. Podrobnosti so na voljo v »GNU + General Public License«. + + Kopijo »GNU General Public License« bi morali prejeti skupaj s paketom + GNU Emacs. ÄŒe je niste, je na voljo na . + +Prosimo, preberite datoteko COPYING in potem ponudite kopijo programa +GNU Emacs svojim prijateljem. Pomagajte zatreti obstrukcionizem +(»lastniÅ¡tvo«) v programju tako, da uporabljate, piÅ¡ete in delite +prosto programje! ;;; Local Variables: -;;; coding: iso-latin-2 +;;; coding: utf-8 ;;; sentence-end-double-space: nil ;;; End: - diff --git a/etc/tutorials/TUTORIAL.sv b/etc/tutorials/TUTORIAL.sv index ff5ef3cddcd..7db452e79fc 100644 --- a/etc/tutorials/TUTORIAL.sv +++ b/etc/tutorials/TUTORIAL.sv @@ -11,6 +11,7 @@ ALT eller EDIT). Vi anv den och trycker sedan . Viktigt: För att avsluta Emacs trycker du C-x C-c (två tecken). +För att avsluta kommandon som inte skrivits in fullt, tryck C-g. Tecknen ">>" i vänstermarginalen anger att du kan prova ett kommando. Till exempel: <> @@ -45,7 +46,9 @@ F >> Leta reda på markören och se vad som står där. Tryck sedan C-l. Hitta markören igen och notera att det är samma text som står kring - markören nu. + markören nu, men nu mitt på skärmen. Om du trycker C-l igen så + flyttas texten högst upp på skärmen. Tryck C-l igen och den flyttas + ner till botten. Du kan också använda PageUp och PageDn tangenterna, om din terminal har dem, för att flytta en hel skärmbild åt gången, men du redigerar @@ -77,8 +80,8 @@ fyra piltangenterna. S Detta är enklare att komma ihåg om du tänker på dessa förkortningar: P för föregående (previous), N för nästa (next), B för bakåt (backward) -och F för framåt (forward). Dessa är de grundläggande kommandona för -att flytta markören och du kommer att använda dem hela tiden. +och F för framåt (forward). Du kommer att använda dessa grundläggande +kommandona hela tiden. >> Gör några C-n så att du kommer ned till den här raden. @@ -223,22 +226,16 @@ upp Detta borde ha flyttat skärmbilden 8 rader uppåt. Om du önskar flytta tillbaka igen är det bara att ge samma argument till M-v. -Om du använder Emacs under ett fönstersystem, som X11 eller -MS-Windows, finns det troligen ett rektangulärt område på sidan -av Emacs-fönstret, en så kallad rullningslist. Genom att klicka i den -med musen kan du rulla texten. +Om du använder ett fönstersystem, som X eller MS-Windows, finns det +troligen ett rektangulärt område på sidan av Emacs-fönstret, en så +kallad rullningslist. Genom att klicka i den med musen kan du rulla +texten. ->> Prova att trycka med den mellersta musknappen i det utvalda området - på rullningslisten. Detta bör flytta skärmbilden till en plats i - texten beroende på var i rullningslisten du trycker. +Om din mus har ett rullningshjul kan även den användas för att rulla +texten. ->> Prova att flytta musen upp och ner medan du håller ner den - mellersta musknappen. Du ser att texten rullar upp och ner beroende - på hur du för musen. - - -* OM EMACS HÄNGER ------------------ +* OM EMACS SLUTAR SVARA +----------------------- Om Emacs slutar att reagera på kommandon kan du lugnt stoppa dem genom att trycka C-g. Du kan också använda C-g för att stoppa ett kommando @@ -264,9 +261,9 @@ Om du provar ett av dessa sp meddelande som berättar vilket kommando det är och kommer att fråga om du verkligen vill fortsätta och utföra detta kommando. -Om du verkligen önskar att utföra kommandot trycker du mellanslag som -svar på frågan. Normalt, om du inte önskar att utföra detta kommando, -svarar du "n" på frågan. +Om du verkligen önskar att utföra kommandot skriver du , +(mellanslagstangenten) som svar på frågan. Normalt, om du inte önskar +att utföra detta kommando, svarar du "n" på frågan. >> Skriv C-x C-l (som är ett spärrat kommando). Skriv n som svar på frågan. @@ -275,8 +272,8 @@ svarar du "n" p * FÖNSTER --------- -Emacs kan ha flera fönster och varje fönster kan visa sin egen text. -Vi kommer förklara senare hur man använder flera fönster. Här skall vi +Emacs kan ha flera "fönster" där varje kan visa sin egen text. Vi +kommer förklara senare hur man använder flera fönster. Här skall vi förklara hur man blir av med extra fönster för att komma tillbaka till det grundläggande läget med endast ett fönster. Det är enkelt: @@ -289,7 +286,7 @@ tas bort. >> Flytta markören till den här raden och tryck C-u 0 C-l. >> Tryck C-h k C-f. Se hur det här fönstret krymper samtidigt som ett nytt uppträder - för att visa dokumentationen för C-f-kommandot. + för att visa dokumentationen av C-f-kommandot. >> Slå C-x 1 och se hur dokumentationsfönstret nu försvinner. @@ -303,39 +300,36 @@ g * SKRIVA OCH TA BORT TEXT ------------------------- -Om du önskar att sätta in text är det bara att skriva in -texten. Tecken som du kan se, så som A, 7, *, etc. tolkas som text och -sätts in direkt. Skriv (retur-tangenten) för att sätta in en -radbrytning. +Om du önskar att sätta in text är det bara att skriva in texten. +Vanliga tecken, som A, 7, *, etc., sätts in direkt när du skriver dem. +Tryck på för att sätta in en radbrytning. (Det är den tangent +på tangentbordet som ibland är märkt med "Enter") -Du kan radera det sista tecknet du skrev genom att trycka . - är en tangent på tangentbordet -- samma som du normalt -använder utanför Emacs för att ta bort det senaste tecknet du skrivit. -Det är vanligen en stor tangent några rader ovanför retur-tangenten, -och den är vanligtvis märkt "Delete, "Del" eller "Backspace". +För att radera tecknet omedelbart före aktuell markörposition, +skriv . Det är tangenten på tangentbordet som vanligtvis är +markerad med "Backspace" -- det är samma tangent som du normal +använder för att radera det sist inmatade tecknet utanför Emacs. -Om den stora tangenten är märkt med "Backspace" så är det den du -använder för . Det kan finnas en annan tangent som är märkt -med "Delete" men det är inte . - -Generellt raderar tecknet precis före den aktuella -markörspositionen. +Det kan finnas en annan tangent på ditt tangentbordet som är märkt med +"Delete", men det är inte den vi menar med . >> Gör detta nu: Skriv in några tecken och ta bort dem genom att - använda . Var inte rädd för att skriva i den här filen, - du kommer inte att kunna förändra originalet till vägledningen. - Detta är bara en lokal kopia. + använda . Var inte rädd för att skriva i den här filen, du + kommer inte att kunna förändra originalet till vägledningen. Detta + är bara en lokal kopia. När en rad blir för lång för att rymmas på en skärmbredd så fortsätter -den på raden under. Ett bakstreck ("\") (eller om du kör under ett -fönstersystem, en liten böjd pil) i slutet av högermarginalen -indikerar att raden fortsätter. +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 +höger att raden fortsätter. >> Skriv in lite text så att du kommer till slutet av raden och fortsätt att skriva lite till. Du kommer då att se hur fortsättningstecknet ser ut. ->> Använd för att radera texten tills raden ryms på en +>> Använd för att radera texten tills raden ryms på en skärmbredd igen. Fortsättningstecknet kommer då att försvinna. Du kan radera radbrytning precis som andra tecken. Genom att radera @@ -343,7 +337,7 @@ radbrytningen mellan tv resultatet av denna sammanslagning blir för stor för att passa inom en skärmbredd, så kommer den att visas med ett fortsättningstecken. ->> Flytta markören till början av en rad och tryck . +>> Flytta markören till början av en rad och tryck . Detta kommer att klistra ihop raden med raden över. >> Tryck för att sätta in radbrytningen du tog bort. @@ -358,28 +352,30 @@ Du har nu l Emacs och att rätta fel. Du kan radera ord och rader också. Här är en översikt över kommandon för radering: - Raderar tecknet som står precis före markören + Raderar tecknet som står precis före markören C-d Raderar tecknet som står precis under markören - M- Raderar ordet precis före markören + M- Raderar ordet precis före markören M-d Raderar ordet precis efter markören C-k Raderar från markören till slutet av raden M-k Raderar till slutet av stycket -Lägg märke till att och C-d kontra M- och M-d -följer mönstret som började med C-f och M-f. ( är inte precis -ett kontrolltecken men låt oss inte bry oss om det.) C-k och M-k -fungerar på samma sätt som C-e och M-e (nästan). +Lägg märke till att och C-d kontra M- och M-d följer +mönstret som började med C-f och M-f. ( är inte precis ett +kontrolltecken men låt oss inte bry oss om det.) C-k och M-k fungerar +på liknande sätt som C-e och M-e när det gäller rader respektive +meningar. -Du kan också ta bort vilken del som helst av texten med hjälp av -följande allmänna metod. Flytta till ena änden av det område du vill -ta bort och tryck C-@ eller C-mellanslag. Flytta till andra änden av -området och tryck C-w. Detta tar bort all text mellan de två -positionerna. +Du kan också ta bort en del av en texten med hjälp av följande +allmänna metod. Flytta till ena änden av det område du vill ta bort +och tryck C-. ( är mellanslagstangenten.) Flytta sedan till +andra änden av området du vill ta bort. När du gör det markerar Emacs +texten mellan markören och den plats där du tryckte C-. Slutligen, +tryck C-w. Detta tar bort texten mellan de två positionerna. >> Flytta markören till bokstaven D i föregående stycke. ->> Tryck C-mellanslag. Emacs skall nu visa meddelandet "Mark set" +>> Tryck C-. Emacs skall nu visa meddelandet "Mark set" längst ner på skärmen. >> Flytta markören till bokstaven o i ordet metod på andra raden i stycket. @@ -387,12 +383,15 @@ positionerna. o. Skillnaden mellan att "ta bort" (killing) och "radera" (deleting) text -är att "borttagen" text kan hämtas tillbaka, medan raderad text inte -kan det. Återinsättning av borttagen text kallas "återhämtning" -(yanking). Generellt kan man säga att kommandon som tar bort fler än -ett tecken sparar undan texten (så att den kan återhämtas) medan -kommandon som bara raderar ett tecken eller tomma rader och mellanrum -inte sparar någonting (och den texten kan alltså inte återhämtas). +är att "borttagen" text kan sättas tillbaka (var som helst), medan +raderad text inte kan det på det sättet. (Du kan dock ångra en +radering--se nedan.) Återinsättning av borttagen text kallas +"återhämtning" (yanking). Generellt kan man säga att kommandon som +tar bort fler än ett tecken sparar undan texten (så att den kan +återhämtas) medan kommandon som bara raderar ett tecken, eller bara +raderar tomma rader och mellanrum inte sparar någonting (och den +texten kan alltså inte återhämtas). och C-d raderar i det enkla +fallet utan argument. Med argument så tar de bort i stället. >> Flytta markören till början av en rad som inte är tom. Tryck C-k för att ta bort texten på raden. @@ -412,7 +411,9 @@ tagits bort.) Du kan antingen h plats som där den blev borttagen, eller så kan du sätta in den på en annan plats i texten du redigerar eller till och med i en helt annan fil. Du kan också hämta tillbaka samma text flera gånger så att du får -flera lika förekomster av den. +flera kopior av den. Några andra textredigerare kallar "ta bort" och +"återhämta" att "klippa ut" respektive "klistra in" (Se ordlistan i +Emacs-manualen) Kommandot för att hämta tillbaka text är C-y. Kommandot hämtar tillbaka den sist borttagna texten och placerar den där markören är. @@ -455,28 +456,26 @@ till startpunkten (texten som sist blev borttagen). ------- Om du gör en förändring i texten och sedan ångrar dig, så kan du -upphäva ändringen med kommandot C-x u (undo). +upphäva ändringen med ångra-kommandot C-/. -Normalt kommer C-x u upphäva förändringen som gjordes av det sist -utförda kommandot. Om du repeterar C-x u flera gånger kommer varje +Normalt kommer C-/ upphäva förändringen som gjordes av det sist +utförda kommandot. Om du repeterar C-/ flera gånger kommer varje repetition upphäva ett kommando till. Det finns två undantag. Kommandon som inte förändrar texten räknas inte (detta inkluderar markörförflyttningar och bläddringskommandon), och inskrivna enkelbokstäver blir vanligtvis grupperade i grupper om -upp till 20 tecken. Detta är för att reducera antalet C-x u som behövs +upp till 20 tecken. Detta är för att reducera antalet C-/ som behövs för att ångra inskriven text. ->> Ta bort den här raden med C-k. C-x u kommer att hämta tillbaka den - igen. +>> Ta bort den här raden med C-k, hämta sedan tillbaka den med C-/. -C-_ är ett alternativ till ångra-kommandot. Den fungerar på samma sätt -som C-x u men är enklare att trycka flera gånger i följd. Det -olämpliga med C-_ är att den är svår att hitta på en del tangentbord. -Det är därför vi också har C-x u. På en del terminaler kan du få fram -C-_ genom att trycka / samtidigt som Ctrl hålls nere. +C-_ är ett alternativt ångra-kommandot. Den fungerar exakt på samma +sätt som C-/. På vissa textterminaler skickar C-/ faktiskt C-_ till +Emacs. Även C-x u fungerar precis som C-/, men är inte lika enkelt att +skriva. -Ett numeriskt argument till C-_ eller C-x u medför repetering. +Ett numeriskt argument till C-/, C-_ eller C-x u medför upprepning. Du kan ångra radering av text precis på samma sätt som du kan ångra att du tagit bort text. Skillnaden mellan att ta bort och att radera @@ -500,16 +499,16 @@ med n nytt namn, som backup, ifall du senare ångrar alltihop. Om du tittar nästan längst ner på skärmbilden så kommer du se en rad -som börjar och slutar med minustecken, och som innehåller texten -"--:-- TUTORIAL.sv". Denna del av skärmbilden visar alltid namnet på -filen du besöker. Just nu är du inne i en fil som heter "TUTORIAL.sv" -och som är en personlig kopia av vägledningen till Emacs. Vilken fil -du än är inne i så kommer filnamnet stå där. +som börjar med minustecken, och som startar med "--:-- TUTORIAL.sv" +eller något snarlikt. Denna del av skärmbilden visar normalt namnet på +filen du besöker. Just nu besöker du din personlig kopia av +vägledningen till Emacs, vilken heter "TUTORIAL.sv". Vilken fil du än +är inne i så kommer filnamnet stå där. En annan sak med kommandot för att finna filer är att du måste ange -vilket filnamn du önskar. Vi säger att kommandot "läser ett argument -från terminalen". I detta fall är argumentet namnet på filen. Efter -att du gett kommandot +vilket filnamn du önskar. Vi säger att kommandot "läser ett +argument". I detta fall är argumentet namnet på filen. Efter att du +gett kommandot C-x C-f Finn en fil @@ -526,12 +525,11 @@ avbryta med kommandot C-g. du inte finner någon fil. När du är färdig med att skriva filnamnet trycker du för att -utföra kommandot. Då kommer C-x C-f kommandot att börja leta fram -filen. Minibufferten försvinner när C-x C-f kommandot är färdigt. +utföra kommandot. Minibufferten försvinner och C-x C-f kommandot börja +leta efter filen. -Efter en liten stund kommer filen upp på skärmen och du kan börja -redigera innehållet. När du vill spara filen kan du använda detta -kommando +Filinnehållet visas nu upp på skärmen och du kan börja redigera +innehållet. När du vill spara filen kan du använda detta kommando C-x C-s Spara fil @@ -542,11 +540,11 @@ slutet av det ursprungliga filnamnet. När lagringen är utförd kommer Emacs skriva ut namnet på filen som blev sparad. Du bör spara ofta så att du inte förlorar så mycket om -systemet kraschar. +systemet kraschar. (Se kapitlet om sparautomatik nedan.) ->> Skriv C-x C-s för att spara en kopia av denna vägledning. - Detta skall leda till att "Wrote ...TUTORIAL.sv" skrivs ut nederst - på skärmbilden. +>> Skriv C-x C-s TUTORIAL.sv . + Detta sparar den här handledningen i en fil med namnet TUTORIAL + och "Wrote ...TUTORIAL.sv" skrivs ut nederst på skärmbilden. Du kan finna en existerande fil, antingen för att förändra den eller för att titta på den. Du kan också finna en fil som inte existerar. @@ -565,11 +563,6 @@ att vara den på nytt med C-x C-f. På så sätt kan du ha ett stort antal filer öppna i Emacs. ->> Skapa en fil med namnet "foo" genom att trycka C-x C-f foo . - Skriv in lite text, redigera den och spara "foo" genom att använda - C-x C-s. Skriv till slut C-x C-f TUTORIAL.sv för att komma - tillbaka till den här vägledningen. - Emacs sparar texten för varje fil i ett objekt kallat "buffert". När du finner en ny fil skapas en ny buffert i Emacs. För att se en lista över existerande buffertar i Emacs kan du skriva @@ -591,9 +584,9 @@ motsvarar en fil kan du g C-f. Det finns dock ett enklare sätt: använd C-x b kommandot. I det kommandot anger du buffertens namn. ->> Skriv C-x b foo för att gå tillbaka till bufferten "foo" - som innehåller texten i filen "foo". Skriv sedan C-x b TUTORIAL.sv - för att komma tillbaka till den här handledningen. +>> Skapa en fil med namnet "foo" genom att trycka C-x C-f foo . + Skriv sedan C-x b TUTORIAL.sv för att komma tillbaka till + den här handledningen. Mestadels är buffertens namn densamma som filens namn (utan katalogdel.) Det är dock inte alltid så. Bufferlistan du skapar med @@ -646,24 +639,21 @@ f förändringar du har gjort. C-x C-c erbjuder dig att spara förändringar innan Emacs avslutas. +Om du använder ett fönstersystem behöver du inte något speciellt +kommando för att byta till ett annat program. Du kan göra det med +musen eller med ett kommando till fönsterhanteraren. Men om du +använder en textterminal, som bara kan visa ett program åt gången, så +måste du avbryta Emacs för att flytta till ett annat program. + C-z är kommandot för att avsluta Emacs *tillfälligt* så att du kan -återvända till samma Emacs senare. - -På system som tillåter det kommer C-z suspendera Emacs, dvs. returnera -till kommandoraden utan att avsluta Emacs. I de flesta system kan du få -tillbaka Emacs med kommandot 'fg' eller '%emacs'. - -På system som saknar suspendering startar C-z ett skal som kör under -Emacs och som ger dig chansen till att köra andra program och sedan -återgå till Emacs efteråt. Den ger ingen riktig avslutning av Emacs. I -detta fall återvänder man vanligtvis till Emacs med kommandot 'exit'. +återvända till samma Emacs senare. När Emacs körs från en textterminal +så avbryts Emacs med C-z, dvs du återgår till kommandoskalet utan att +Emacsprocessen förstörs. I de flesta vanliga kommandoskalen så kan man +återgå till Emacs med kommandot 'fg' eller med '%emacs'. C-x C-c används när du skall avsluta Emacs. Det är klokt att avsluta Emacs om den har startats av ett mail-program eller andra -applikationer eftersom det inte är säkert att de kan hantera -suspendering av Emacs. Under normala omständigheter, om du inte har -tänkt att logga ut, är det bättre att suspendera Emacs med C-z -istället för att avsluta. +applikationer. Det finns många C-x kommandon. Här är en lista över de du har lärt dig hittills: @@ -685,7 +675,7 @@ M-x d fallet "replace-string". Det är bara att skriva "repl s" och Emacs kommer då att fylla i kommandonamnet. ( är tabulatortangenten, som vanligtvis finns över CapsLock- eller -skifttangenten nära den vänstra kanten på tangentbordet.) Avsluta +skifttangenten nära den vänstra kanten på tangentbordet.) Kör kommandot med . Kommandot replace-string kräver två argument, teckensträngen som skall @@ -770,7 +760,7 @@ fundamental-mode kommandot f Om du skall redigera text, såsom den här filen, bör du troligen använda Text-läge. ->> Skriv M-x text mode. +>> Skriv M-x text-mode . Inget av kommandona du har lärt dig hittills förändrar Emacs i någon högre grad. Men lägg märke till att M-f och M-b nu behandlar @@ -784,8 +774,7 @@ annorlunda. För att få fram dokumentationen för det läge du är i nu kan du skriva C-h m. ->> Använd C-u C-v så att denna rad kommer nära toppen av - skärmbilden. +>> Använd C-l C-l för att få denna rad överst på skärmbilden. >> Skriv C-h m och se hur Text-läget skiljer sig från Fundamental-läget. >> Tryck C-x 1 för att ta bort dokumentationen från skärmbilden. @@ -801,13 +790,13 @@ radbrytningsl rader mellan ord automatisk när du skriver in text så att en rad blir för lång. -Du kan slå på radbrytningsläget genom att skriva M-x auto fill -mode. När läget är påslaget kan du slå av det igen genom att -upprepa M-x auto fill mode. Om läget är avslaget slår +Du kan slå på radbrytningsläget genom att skriva M-x auto-fill-mode +. När läget är påslaget kan du slå av det igen genom att +upprepa M-x auto-fill-mode . Om läget är avslaget slår kommandot på det och vice versa. Vi säger att kommandot "växlar läget". ->> Skriv M-x auto fill mode nu. Skriv så in en rad med +>> Skriv M-x auto-fill-mode nu. Skriv så in en rad med "asdf " tills raden delar sig. Du måste sätta in blanktecken, för Auto Fill bryter bara raden mellan ord. @@ -831,15 +820,13 @@ du * SÖKNING --------- -Emacs kan söka efter textsträngar (grupper med sammanhängande -bokstäver eller ord) antingen framåt eller bakåt i texten. När du +Emacs kan söka efter textsträngar (en "sträng" är en grupp med +sammanhängande bokstäver) antingen framåt eller bakåt i texten. När du söker efter text kommer markören att flytta sig till nästa plats där teckensträngen uppträder. -Sökmetoden i Emacs skiljer sig lite från sökmetoder i andra -redigeringsprogram genom att den är inkrementell. Detta betyder att -sökandet fortgår medan du skriver in teckensträngen du skall söka -efter. +Sökmetoden i Emacs är inkrementell. Detta betyder att sökandet fortgår +medan du skriver in teckensträngen du skall söka efter. Kommandot för att inleda en sökning är C-s för att söka framåt och C-r för att söka bakåt. MEN VÄNTA! Prova dem inte än. @@ -855,7 +842,7 @@ efter. avslutar s har du sökt efter ordet "markör" en gång. >> Skriv C-s en gång till för att söka efter nästa förekomst av ordet "markör". ->> Tryck nu på fyra gånger och se hur markören flyttar sig +>> Tryck nu på fyra gånger och se hur markören flyttar sig >> Tryck för att avsluta sökandet. Såg du vad som hände? Under inkrementell sökning försöker Emacs att gå @@ -865,22 +852,18 @@ f Om det inte finns flera förekomster kommer Emacs att pipa och meddela att sökandet har misslyckats. C-g avbryter också sökandet. -Observera: På vissa system gör C-s att skärmen låser sig. Detta tyder -på att systemets flödeskontroll har fångat upp C-s och inte skickat -den vidare till Emacs. För att fortsätta måste du trycka C-q. Se i så -fall avsnittet "Spontaneous Entry to Incremental Search" i -Emacs-manualen för råd om hur detta kan undvikas. +Om du är inne i en inkrementell sökning och trycker kommer den +sökningen att återgå till en tidigare plats. Om du skriver +precis efter att du skrivit C-s för att gå till nästa förekomst av +söksträngen, kommer att flytta markören tillbaka till en +tidigare förekomst. Om det inte finns några tidigare förekomster så +raderar sista tecknet i söksträngen. Om du till exempel skriver +"m" för att söka efter den första förekomsten av "m", och sedan +trycker "a" så kommer markören flytta sig till första förekomsten av +"ma". Tryck nu . Detta avlägsnar "a" från söksträngen, och +markören flyttar sig tillbaka till den första förekomsten av "m". -Om du är inne i en inkrementell sökning och trycker kommer -du lägga märke till att den sista bokstaven i söksträngen blir raderad -och sökandet hoppar tillbaka till en tidigare förekomst. Om du till -exempel skriver "m" för att söka efter den första förekomsten av "m", -och sedan trycker "a" så kommer markören flytta sig till första -förekomsten av "ma". Tryck nu . Detta avlägsnar "a" från -söksträngen, och markören flyttar sig tillbaka till den första -förekomsten av "m". - -Om du är mitt i en sökning och trycker ett KONTROLL- eller META-tecken +Om du är mitt i en sökning och trycker ett kontroll- eller meta-tecken så avbryts sökandet. Undantag är tecken som används under sökningen, så som C-s och C-r. @@ -894,21 +877,22 @@ C-r, bortsett fr --------------- En av egenskaperna hos Emacs är att den kan visa mera än en buffert på -skärmen samtidig. +skärmen samtidig. (Notera att Emacs använder termen "ramar" +(frames), som beskrivs i nästa kapitel, för det som en del andra +program kallar för "fönster" (windows). Emacs-manualen innehåller en +ordlista över Emacs-termer. ->> Flytta markören till den här raden och tryck C-u 0 C-l (alltså - KONTROLL-L, inte KONTROLL-1). +>> Flytta markören till den här raden och tryck C-l C-l. >> Skriv nu C-x 2, som leder till att skärmen delas i två - fönster. Bägge fönstren visar den här vägledningen. Markören står i - det övre fönstret. + fönster. Bägge fönstren visar den här vägledningen. + Redigeringsmarkören stannar i det övre fönstret. >> Skriv C-M-v för att rulla det nedre fönstret. (Om du inte har META-tangenten trycker du C-v.) ->> Skriv C-x o (o för other) för att flytta markören till det +>> Skriv C-x o ("o" för "other") för att flytta markören till det nedre fönstret. - >> Använd C-v och M-v i det nedre fönstret för att flytta upp och ned i texten. Fortsätt att läsa den här texten i det övre fönstret. @@ -918,21 +902,20 @@ sk gjorde när du lämnade det. Du kan fortsätta att använda C-x o för att byta mellan de två -fönstren. Vart och ett av fönstren har sin egen markörposition men det -är bara ett av fönstren som visar den. Alla redigeringskommandon -fungerar i det fönster där markören är synlig. Vi kallar detta fönster -för det valda fönstret (selected window). +fönstren. Det valda fönstret, där de flesta redigeringarna äger rum, är +det med den tydligaste markören, som blinkar när du inte skriver. De +andra fönstren har sin egen markörposition. Om du kör Emacs under ett +fönstersystem, ritas dessa markörer som en tom ruta som inte blinkar.. Kommandot C-M-v är bra när du redigerar text i ett fönster och -använder det andra fönstret för referenser. Då kan du kan ha markören -i samma fönster hela tiden och du kan använda C-M-v för att flytta dig -i det andra fönstret. +använder det andra fönstret för referenser. Utan att lämna det valda +fönstret du kan använda C-M-v för att rulla det andra fönstret. -C-M-v är ett exempel på en KONTROLL-META-kombination. Om du har -META-tangenten håller du både KONTROLL och META nedtryckt samtidigt -som du trycker v. Det har ingen betydelse vilken av tangenterna -KONTROLL och META som trycks först, för bägge fungerar så att de -"modifierar" de andra tangenterna du trycker. +C-M-v är ett exempel på en KONTROLL-META-kombination. Om du har META- +eller Alt-tangenten håller du både KONTROLL och META nedtryckt +samtidigt som du trycker v. Det har ingen betydelse vilken av +tangenterna KONTROLL och META som trycks först, för bägge fungerar så +att de "modifierar" de andra tangenterna du trycker. Om du inte har META-tangenten och använder istället är ordningsföljden viktig. Du måste trycka följt av KONTROLL-v, @@ -961,6 +944,28 @@ filer: >> Skriv C-x o för att gå tillbaka till det övre fönstret och C-x 1 för att bli kvitt det nedre igen. +* MULTIPLA RAMAR +---------------- + +Emacs kan också skapa flera "ramar". En ram är vad vi kallar en +samling av fönster tillsammans med menyer, rullningslister, ekoområde +etc. Det som Emacs kallar för ram kallar de flesta andra program för +fönster. Flera grafiska ramar kan visas på skärmen samtidigt. På en +textterminal kan bara en ram visas åt gången. + +>> Skriv M-x make-frame . + En ny ram visas på din skärm. + +Du kan göra allt du gjorde i den första ramen i den här nya ramen. Det +finns inget speciellt med den första ramen. + +>> Skriv M-x delete-frame . + Ta bort den valda ramen. + +Du kan också ta bort ramen genom den vanliga metod som tillhandahålls +av fönstersystemet (ofta klickar man på knappen med symbolen "X" i +något av de övre hörnen.) Om den sista ramen tas bort på det här +sättet så avlutas Emacs. * REKURSIVA REDIGERINGSNIVÅER ----------------------------- @@ -999,11 +1004,8 @@ hj har skrivit C-h och bestämmer dig för att du inte behöver ha någon hjälp kan du trycka C-g för att avbryta. -(På vissa platser är C-h omkonfigurerad. Det är normalt ingen bra ide´, -så du kan på goda grunder klaga hos systemadministratören. Under -tiden, om C-h inte visar ett hjälpmeddelande längst ner på skärmen, -kan du i stället försöka med funktionstangenten F1 eller M-x -help.) +(Om C-h inte visar ett hjälpmeddelande längst ner på skärmen, kan du i +stället försöka med funktionstangenten F1 eller M-x help .) Den mest grundläggande hjälp-funktionen är C-h c. Skriv C-h, ett "c" och en knappsekvens. Emacs ger då en beskrivning av kommandot. @@ -1014,8 +1016,7 @@ Meddelandet skall d C-p runs the command previous-line -Detta ger ett funktionsnamn. Funktionsnamnen används huvudsakligen för -att specialanpassa och utvidga Emacs. Men eftersom funktionerna har +Detta ger dig namnet på funktionen. Eftersom funktionerna har beskrivande namn kan de också fungera som en enkel dokumentation, tillräckligt för att påminna dig om kommandon du redan lärt dig. @@ -1062,9 +1063,9 @@ C-x C-f listade bredvid motsvarande kommandonamn, t.ex. find-file. >> Type C-x 1 för att ta bort hjälpfönstret. - C-h i Läs direktmanualen (alias Info). Detta kommando + C-h i Läs den bifogade manualen (alias Info). Detta kommando placerar dig i en speciell buffer vid namn "*info*" - där du kan läsa direkthjälpen för de paket som är + där du kan läsa hjälpen för de paket som är installerade i ditt system. Slå m emacs för att läsa Emacs-manualen. Om du aldrig tidigare har använt dig av Info, skriv ? och Emacs tar dig på en @@ -1074,18 +1075,6 @@ C-x C-f listade bredvid motsvarande kommandonamn, t.ex. find-file. din huvudsakliga källa till dokumentation. -* TILL SIST ------------ - -Tänk på att använda C-x C-c för att avsluta Emacs permanent. För att -tillfälligt gå till ett skal, så att du senare kan komma tillbaka -igen, använd C-z. (Under X kommer detta att minimera Emacs.) - -Denna vägledningen är avsedd för nya användare, om det är något som är -oklart duger det inte att sitta och tycka synd om sig själv -- Skicka -ett mail och klaga! - - * MER FUNKTIONER ---------------- @@ -1108,6 +1097,15 @@ Emacs-manualen i noden "Dired". Manualen beskriver även många andra Emacs funktioner. +* SLUTORD +--------- + +För att avsluta Emacs använd C-x C-c. + +Den här handledningen är tänkt att vara förståelig för alla nya +Emacs-användare. Så om det är något som är oklart, klandra inte dig +själv, klaga! + * KOPIERING ----------- @@ -1121,24 +1119,26 @@ comes with permission to distribute copies on certain conditions: Copyright (C) 1985, 1996, 1998, 2001-2012 Free Software Foundation, Inc. - Permission is granted to anyone to make or distribute verbatim copies - of this document as received, in any medium, provided that the - copyright notice and permission notice are preserved, - and that the distributor grants the recipient permission - for further redistribution as permitted by this notice. +This file is part of GNU Emacs. - Permission is granted to distribute modified versions - of this document, or of portions of it, - under the above conditions, provided also that they - carry prominent notices stating who last altered them. + GNU Emacs is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. -The conditions for copying Emacs itself are more complex, but in the -same spirit. 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! + GNU Emacs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU Emacs. If not, see . + +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! ;;; Local Variables: ;;; coding: latin-1 ;;; sentence-end-double-space: nil ;;; End: - diff --git a/etc/tutorials/TUTORIAL.translators b/etc/tutorials/TUTORIAL.translators index 64780687bb1..3ec948eb79a 100644 --- a/etc/tutorials/TUTORIAL.translators +++ b/etc/tutorials/TUTORIAL.translators @@ -2,8 +2,8 @@ This file contains the list of translators and maintainers of the tutorial. * TUTORIAL.bg: -Author: Ognyan Kulev -Maintainer: Ognyan Kulev +Author: Ognyan Kulev +Maintainer: Ognyan Kulev * TUTORIAL.cn: Author: Sun Yijiang @@ -75,8 +75,8 @@ Author: Miroslav VaÅ¡ko Maintainer: Maintainer needed. * TUTORIAL.sl: -Author: Primož Peterlin -Maintainer: Primož Peterlin +Author: Primož Peterlin +Maintainer: Primož Peterlin * TUTORIAL.sv: Author: Mats Lidell diff --git a/lib/gnulib.mk b/lib/gnulib.mk index 14010feb04b..154ae9882da 100644 --- a/lib/gnulib.mk +++ b/lib/gnulib.mk @@ -21,7 +21,7 @@ # 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=msvc-inval --avoid=msvc-nothrow --avoid=pathmax --avoid=raise --avoid=threadlib --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt careadlinkat crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dup2 filemode getloadavg getopt-gnu ignore-value intprops lstat mktime pthread_sigmask readlink socklen stdarg stdio strftime strtoimax strtoumax symlink sys_stat +# 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=msvc-inval --avoid=msvc-nothrow --avoid=raise --avoid=threadlib --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt careadlinkat crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dup2 filemode getloadavg getopt-gnu ignore-value intprops lstat mktime pthread_sigmask readlink socklen stdarg stdio strftime strtoimax strtoumax symlink sys_stat MOSTLYCLEANFILES += core *.stackdump @@ -258,6 +258,15 @@ EXTRA_libgnu_a_SOURCES += mktime.c ## end gnulib module mktime +## begin gnulib module pathmax + +if gl_GNULIB_ENABLED_pathmax + +endif +EXTRA_DIST += pathmax.h + +## end gnulib module pathmax + ## begin gnulib module pthread_sigmask diff --git a/lib/makefile.w32-in b/lib/makefile.w32-in index d5304258879..3600406ac13 100644 --- a/lib/makefile.w32-in +++ b/lib/makefile.w32-in @@ -155,6 +155,7 @@ $(BLD)/filemode.$(O) : \ # $(BLD)/dtoastr.$(O) $(BLD)/getopt.$(O) $(BLD)/getopt1.$(O): stamp_BLD $(BLD)/strftime.$(O) $(BLD)/time_r.$(O) $(BLD)/md5.$(O): stamp_BLD +$(BLD)/sha1.$(O) $(BLD)/sha256.$(O) $(BLD)/sha512.$(O): stamp_BLD $(BLD)/filemode.$(O): stamp_BLD # @@ -212,7 +213,6 @@ getopt_.h-SH: doit HAVE_GETOPT_H = HAVE_GETOPT_H INCLUDE_NEXT = include_next -PRAGMA_SYSTEM_HEADER = \#pragma GCC system_header PRAGMA_COLUMNS = NEXT_GETOPT_H = ARG_NONNULL_H = ../build-aux/snippet/arg-nonnull.h diff --git a/lib/pathmax.h b/lib/pathmax.h new file mode 100644 index 00000000000..c47618a1b6a --- /dev/null +++ b/lib/pathmax.h @@ -0,0 +1,84 @@ +/* Define PATH_MAX somehow. Requires sys/types.h. + Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2011 Free Software + Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _PATHMAX_H +# define _PATHMAX_H + +/* POSIX:2008 defines PATH_MAX to be the maximum number of bytes in a filename, + including the terminating NUL byte. + + PATH_MAX is not defined on systems which have no limit on filename length, + such as GNU/Hurd. + + This file does *not* define PATH_MAX always. Programs that use this file + can handle the GNU/Hurd case in several ways: + - Either with a package-wide handling, or with a per-file handling, + - Either through a + #ifdef PATH_MAX + or through a fallback like + #ifndef PATH_MAX + # define PATH_MAX 8192 + #endif + or through a fallback like + #ifndef PATH_MAX + # define PATH_MAX pathconf ("/", _PC_PATH_MAX) + #endif + */ + +# include + +# include + +# ifndef _POSIX_PATH_MAX +# define _POSIX_PATH_MAX 256 +# endif + +/* Don't include sys/param.h if it already has been. */ +# if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN +# include +# endif + +# if !defined PATH_MAX && defined MAXPATHLEN +# define PATH_MAX MAXPATHLEN +# endif + +# ifdef __hpux +/* On HP-UX, PATH_MAX designates the maximum number of bytes in a filename, + *not* including the terminating NUL byte, and is set to 1023. + Additionally, when _XOPEN_SOURCE is defined to 500 or more, PATH_MAX is + not defined at all any more. */ +# undef PATH_MAX +# define PATH_MAX 1024 +# endif + +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +/* The page "Naming Files, Paths, and Namespaces" on msdn.microsoft.com, + section "Maximum Path Length Limitation", + + explains that the maximum size of a filename, including the terminating + NUL byte, is 260 = 3 + 256 + 1. + This is the same value as + - FILENAME_MAX in , + - _MAX_PATH in , + - MAX_PATH in . + Undefine the original value, because mingw's gets it wrong. */ +# undef PATH_MAX +# define PATH_MAX 260 +# endif + +#endif /* _PATHMAX_H */ diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2813d80d9ff..c28dc491863 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,636 @@ +2012-02-10 Lars Ingebrigtsen + + * mail/emacsbug.el (report-emacs-bug-hook): Query the user first + about SMTP before checking the From header. + + * mail/sendmail.el (sendmail-query-user-about-smtp): Refacored out + into own function for reuse by emacsbug.el. + +2012-02-10 Leo Liu + + * subr.el (condition-case-unless-debug): Rename from + condition-case-no-debug. All callers changed. + (with-demoted-errors): Fix caller. + + * vc/diff-mode.el (diff-auto-refine-mode, diff-hunk): + * nxml/rng-valid.el (rng-do-some-validation): + * emacs-lisp/package.el (package-refresh-contents) + (package-menu-execute): + * desktop.el (desktop-create-buffer): + * font-lock.el (lisp-font-lock-keywords-2): caller changed. + +2012-02-10 Glenn Morris + + * textmodes/bibtex.el: + Add missing :version tags for new/changed defcustoms. + + * files.el (remote-file-name-inhibit-cache): Doc fixes. + +2012-02-09 Lars Ingebrigtsen + + * mail/smtpmail.el (smtpmail-user-mail-address): New function. + (smtpmail-via-smtp): Use it, or fall back on the From address. + (smtpmail-send-it): Ditto. + +2012-02-09 Stefan Monnier + + * emacs-lisp/bytecomp.el (byte-compile-file-form-defvar): + Don't fallback on byte-compile-defvar. Optimize (defvar foo) away. + (byte-compile-tmp-var): New const. + (byte-compile-defvar): Use it to minimize .elc size. + Just use `defvar' rather than simulate it (bug#10761). + +2012-02-09 Glenn Morris + + * files.el (rename-uniquely): Doc fix. (Bug#3806) + + * progmodes/cc-guess.el (c-guess-offset-threshold, c-guess-region-max): + Add :version tags. + + * progmodes/compile.el (compilation-first-column) + (compilation-error-screen-columns, compilation-filter-start): Doc fixes. + + * vc/log-view.el (log-view-toggle-entry-display): + * vc/vc.el (vc-merge, vc-pull): Doc fixes. + + * mail/emacsbug.el (report-emacs-bug-can-use-osx-open) + (report-emacs-bug-can-use-xdg-email): + (report-emacs-bug-insert-to-mailer): Doc fixes. + (report-emacs-bug): Message fix. + + * net/browse-url.el (browse-url-can-use-xdg-open) + (browse-url-xdg-open): Doc fixes. + + * electric.el (electric-indent-mode, electric-pair-mode) + (electric-layout-rules, electric-layout-mode): Doc fixes. + (electric-pair-pairs, electric-pair-skip-self): Add :version tags. + +2012-02-08 Martin Rudalics + + * server.el (server-unselect-display): Don't inadvertently kill + the current buffer. (Bug#10729) + +2012-02-08 Glenn Morris + + * progmodes/sql.el (sql-port, sql-connection-alist, sql-list-all) + (sql-list-table): Doc fixes. + + * image-mode.el (image-transform-minor-mode-map, image-transform-mode): + Comment out (does nothing). + + * completion.el (dynamic-completion-mode): + * dirtrack.el (dirtrack-debug-mode): + * electric.el (electric-layout-mode): + * epa-mail.el (epa-mail-mode, epa-global-mail-mode): + * face-remap.el (text-scale-mode, buffer-face-mode): + * iimage.el (iimage-mode): + * image-mode.el (image-transform-mode): + * minibuffer.el (completion-in-region-mode): + * scroll-lock.el (scroll-lock-mode): + * simple.el (next-error-follow-minor-mode): + * tar-mode.el (tar-subfile-mode): + * tooltip.el (tooltip-mode): + * vcursor.el (vcursor-use-vcursor-map): + * wid-browse.el (widget-minor-mode): + * emulation/tpu-edt.el (tpu-edt-mode): + * emulation/tpu-extras.el (tpu-cursor-free-mode): + * international/iso-ascii.el (iso-ascii-mode): + * language/thai-util.el (thai-word-mode): + * mail/supercite.el (sc-minor-mode): + * net/goto-addr.el (goto-address-mode): + * net/rcirc.el (rcirc-multiline-minor-mode, rcirc-track-minor-mode): + * progmodes/cwarn.el (cwarn-mode): + * progmodes/flymake.el (flymake-mode): + * progmodes/glasses.el (glasses-mode): + * progmodes/hideshow.el (hs-minor-mode): + * progmodes/pascal.el (pascal-outline-mode): + * textmodes/enriched.el (enriched-mode): + * vc/smerge-mode.el (smerge-mode): + Doc fixes (minor mode argument). + +2012-02-07 Eli Zaretskii + + * ls-lisp.el (ls-lisp-sanitize): New function. + (ls-lisp-insert-directory): Use it to fix or remove any elements + in file-alist with missing attributes. (Bug#4673) + +2012-02-07 Alan Mackenzie + + Fix spurious recognition of c-in-knr-argdecl. + + * progmodes/cc-engine.el (c-in-knr-argdecl): Check for '=' in a + putative K&R region. + +2012-02-07 Alan Mackenzie + + * progmodes/cc-engine.el (c-forward-objc-directive): Prevent + looping in "#pragma mark @implementation". + +2012-02-07 Michael Albinus + + * notifications.el (notifications-on-closed-signal): Make `reason' + optional. (Bug#10744) + +2012-02-07 Glenn Morris + + * emacs-lisp/easy-mmode.el (define-minor-mode): + Doc fixes for the macro and the mode it defines. + + * image.el (imagemagick-types-inhibit): Doc fix. + + * cus-start.el (imagemagick-render-type): Add it. + +2012-02-06 Lars Ingebrigtsen + + * progmodes/cc-mode.el + (c-standard-font-lock-fontify-region-function): Set the default at + load time, too, so that `font-lock-fontify-buffer' can be called + without setting up the entire mode first. This fixes a bug in + `mm-inline-text' with C MIME parts. + +2012-02-06 Chong Yidong + + * simple.el (list-processes--refresh): Delete exited processes + (Bug#8094). + + * comint.el (comint-next-prompt): next-single-char-property-change + and prev-single-char-property-change never return nil (Bug#8657). + + * custom.el (defcustom): Doc fix (Bug#9711). + +2012-02-05 Chong Yidong + + * cus-edit.el (custom-variable-reset-backup): Quote the value + before storing it in the customized-value property (Bug#6712). + (custom-display): Add a customization type tag. + (custom-buffer-create-internal): Improve tooltip message. + + * wid-edit.el (widget-field-value-get): New optional arg to + suppress trailing whitespace truncation. + (character): Use it (Bug#2689). + +2012-02-05 Andreas Schwab + + * progmodes/gud.el (gud-pv): Use pv instead of pv1. + * progmodes/gdb-mi.el (gud-pp): Use pp instead of pp1. + +2012-02-05 Chong Yidong + + * cus-edit.el (custom-variable-value-create): For mismatched + types, show the current value (Bug#7600). + + * custom.el (defcustom): Doc fix. + +2012-02-05 Glenn Morris + + * font-lock.el (lisp-font-lock-keywords-2): Add with-wrapper-hook. + +2012-02-05 Juanma Barranquero + + * emacs-lisp/pp.el (pp-to-string): Use `with-temp-buffer'. + (pp-buffer): Use `ignore-errors', `looking-at-p'. + (pp-last-sexp): Use `looking-at-p'. + +2012-02-04 Glenn Morris + + * files.el (revert-buffer): + Doc fix (mention revert-buffer-in-progress-p). + + * emacs-lisp/ert-x.el (ert-simulate-command): + Check deferred-action-list (which is obsolete) is bound. + + * subr.el (with-wrapper-hook): Doc fixes. + + * simple.el (filter-buffer-substring-functions) + (buffer-substring-filters, filter-buffer-substring): Doc fixes. + +2012-02-04 Lars Ljung (tiny change) + + * eshell/esh-ext.el (eshell-windows-shell-file): Match "cmdproxy" + anywhere in shell-file-name, not just at the beginning. (Bug#10523) + +2012-02-04 Leo Liu + + * emacs-lisp/smie.el: Fix dead link (Bug#10711). + +2012-02-04 Glenn Morris + + * image.el (image-extension-data): Add obsolete alias. + + * isearch.el (isearch-update): Doc fix. + + * facemenu.el (list-colors-display): Doc fix (minor rephrasing). + + * ido.el (ido-find-file): Doc fix (ido-toggle-vc not on any key). + +2012-02-03 Glenn Morris + + * image.el (image-animated-p): Doc fix. Use image-animated-types. + (image-animate-timeout): Doc fix. + + * image-mode.el (image-animate-loop, image-toggle-animation): Doc fixes. + +2012-02-02 Glenn Morris + + * server.el (server-auth-dir): Doc fix. + (server-eval-at): Doc fix. Give an explicit error if !server-use-tcp. + + * subr.el (run-mode-hooks): Doc fix. + +2012-02-02 Juri Linkov + + * image-mode.el (image-toggle-display-image): Remove tautological + `major-mode' from the `derived-mode-p' test. + +2012-02-02 Kenichi Handa + + * composite.el (compose-region): Cancel previous change. + +2012-02-02 Kenichi Handa + + * composite.el (compose-region, compose-string): Signal error for + a null string component (Bug#6988). + +2012-02-01 Chong Yidong + + * view.el (view-buffer-other-window, view-buffer-other-frame): + Handle special modes like view-buffer (Bug#10650). + (view-buffer): Simplify. + + * frame.el (set-frame-font): Tweak meaning of third argument. + + * dynamic-setting.el (font-setting-change-default-font): + Use set-frame-font (Bug#9982). + +2012-02-01 Glenn Morris + + * progmodes/compile.el (compilation-internal-error-properties): + Respect compilation-first-column in the "*compilation*" buffer. + + * emacs-lisp/easy-mmode.el (define-minor-mode): + Relax :variable's test for a named function. + +2012-01-31 Alan Mackenzie + + * progmodes/cc-engine.el (c-guess-basic-syntax): CASE 5B.1: Fix an + off by one error. + +2012-01-31 Chong Yidong + + * frame.el (set-frame-font): New arg ALL-FRAMES. + + * menu-bar.el (menu-set-font): Use set-frame-font. + + * faces.el (face-spec-reset-face): Don't apply unspecified + attribute values to the default face. + +2012-01-31 Juanma Barranquero + + * progmodes/cwarn.el (cwarn): Remove dead link. + (cwarn-configuration, cwarn-verbose, cwarn-mode-text, cwarn-load-hook): + Remove * from defcustom docstrings. + (turn-on-cwarn-mode): Make obsolete. + (c-at-toplevel-p): Remove compatibility code for Emacs 20.3 and older. + (turn-on-cwarn-mode-if-enabled): Call `cwarn-mode'. + +2012-01-31 Glenn Morris + + * emacs-lisp/easy-mmode.el (define-minor-mode): Doc fix. + Fix :variable handling of mode a symbol not equal to modefun. + Allow named functions to be used as the cdr of :variable. + +2012-01-30 Glenn Morris + + * emacs-lisp/authors.el (authors-fixed-entries): + Remove reference to deleted file rnewspost.el. + +2012-01-29 Juanma Barranquero + + * window.el (window-with-parameter): Remove unused variable `windows'. + (window--side-check): Remove unused variable `code'. + (window--resize-siblings): Remove unused variable `first'. + (adjust-window-trailing-edge): Remove unused variable `failed'. + (window-deletable-p, window--delete): Remove unused variable `buffer'. + Use `let', not `let*'. + (balance-windows-2): Remove unused variable `found'. + (window--state-put-2): Remove unused variable `splits'. + (window-state-put): Remove unused variable `selected'. + (same-window-p): Use `string-match-p'. + (display-buffer-assq-regexp): Remove unused variable `value'. + (display-buffer-pop-up-frame, display-buffer-pop-up-window): + Mark argument ALIST as ignored. + (pop-to-buffer): Remove unused variable `old-window'. + +2012-01-29 Eli Zaretskii + + * jka-cmpr-hook.el (jka-compr-compression-info-list): Support .lz + and .lzma compressed files. + +2012-01-29 Chong Yidong + + * frame.el (window-system-default-frame-alist): Doc fix. + + * dynamic-setting.el (font-setting-change-default-font): Don't + change the default face if SET-FONT argument is non-nil (Bug#9982). + +2012-01-29 Samuel Bronson (tiny change) + + * custom.el (defcustom): Add doc link to Lisp manual (Bug#10635). + +2012-01-29 Syver Enstad (tiny change) + + * progmodes/gud.el (pdb): Give pdb full paths, to allow setting + breakpoints in files outside current directory (Bug#6098). + +2012-01-29 Chong Yidong + + * progmodes/python.el: Require ansi-color at top-level. + + * emacs-lisp/lisp-mode.el (emacs-lisp-mode-abbrev-table): + Define and use in Emacs Lisp mode (Bug#9360). + (lisp-mode-abbrev-table): Add doc. + (lisp-mode-variables): Don't set local-abbrev-table. + (lisp-interaction-mode): Use emacs-lisp-mode-abbrev-table. + +2012-01-28 Roland Winkler + + * textmodes/bibtex.el (bibtex-vec-incr): Fix docstring. + +2012-01-28 Roland Winkler + + * textmodes/bibtex.el (bibtex-entry-alist): New function. + (bibtex-set-dialect): Use it. Either set global values of + dialect-dependent variables or bind these variables buffer-locally + (Bug#10254). + (bibtex-mode): Call bibtex-set-dialect via + hack-local-variables-hook. + (bibtex-dialect): Update docstring. Add + safe-local-variable predicate. + (bibtex-entry-alist, bibtex-field-alist): Initialize via + bibtex-set-dialect. + (bibtex-mode-map): Define menu for each dialect. + (bibtex-entry): Fix docstring. + +2012-01-28 Chong Yidong + + * eshell/esh-arg.el (eshell-quote-argument): New function. + + * eshell/esh-ext.el (eshell-invoke-batch-file): + * eshell/em-unix.el (eshell/cat, eshell/du): Use it to quote the + first arg to eshell-parse-command (Bug#10523). + +2012-01-28 Drew Adams + + * net/ange-ftp.el (ange-ftp-canonize-filename): Check, that + `default-directory' is non-nil. + +2012-01-28 Eli Zaretskii + + * mail/emacsbug.el (report-emacs-bug): Fill the potentially long + line that displays system-configuration-options. (Bug#9924) + +2012-01-28 Drew Adams + + * descr-text.el (describe-char): Show information about POS, in + addition to information about the character at POS. Improve and + update the doc string. Change "code point" to "code point in + charset", to avoid confusion with the character's Unicode code + point shown above that. (Bug#10129) + +2012-01-28 Eli Zaretskii + + * descr-text.el (describe-char): Show the raw character, not only + its display form at POS. Suggested by Kenichi Handa . + See http://lists.gnu.org/archive/html/emacs-devel/2012-01/msg00760.html + for the reasons. + +2012-01-28 Phil Hagelberg + + * emacs-lisp/package.el (package-install): Run + package-refresh-contents if there is no archive yet (Bug#9798). + +2012-01-28 Chong Yidong + + * emacs-lisp/package.el (package-maybe-load-descriptor): + New function, split from package-maybe-load-descriptor. + (package-maybe-load-descriptor): Use it. + (package-download-transaction): Fully load required packages + inside the loop, so that `require' calls work (Bug#10593). + (package-install): No need to call package-initialize now. + +2012-01-28 Chong Yidong + + * simple.el (deactivate-mark): Doc fix (Bug#8614). + + * tooltip.el (tooltip-mode): Doc fix. + (tooltip-use-echo-area): Mark as obsolete (Bug#6595). + + * frame.el (set-cursor-color): Doc fix (Bug#352). + + * mail/rmail.el (rmail-start-mail): Add send-action again (Bug#10625). + (rmail-mail-return): Switch to NEWBUF only if it is non-nil. + + * cus-edit.el (custom-buffer-create-internal): Fix search button + action (Bug#10542). + (customize-unsaved, customize-saved): Doc fix (Bug#10541). + +2012-01-27 Eduard Wiebe + + * dired.el (dired-mark-files-regexp): + Include any subdirectory components. (Bug#10445) + +2012-01-27 Mike Lamb (tiny change) + + * pcmpl-unix.el (pcmpl-ssh-known-hosts): + Handle [host]:port syntax. (Bug#10533) + +2012-01-27 Alex Harsanyi + + * xml.el (xml-parse-tag): Fix parsing of comments (Bug#10405). + +2012-01-26 Glenn Morris + + * dired-x.el (dired-bind-jump): Use ctl-x-map and ctl-x-4-map. + * term.el (term-raw-escape-map): Use Control-X-prefix. + * vc/vc-hooks.el (vc-prefix-map): Use ctl-x-map. (Bug#10566) + +2012-01-25 Martin Rudalics + + * window.el (window-state-get, window--state-get-1): Don't deal + with fixed-sizeness of windows. Simplify code. + +2012-01-25 Jérémy Compostella + + * window.el (window--state-get-1, window--state-put-2): + Don't save and restore the mark. + +2012-01-25 Chong Yidong + + * custom.el (custom-variable-p): Doc fix. + +2012-01-25 Glenn Morris + + * dired.el (dired-goto-file): Handle some of the more common + characters that `ls -b' escapes. (Bug#10596) + + * progmodes/compile.el (compilation-next-error-function): + Respect compilation-first-column in the "*compilation*" buffer. + * progmodes/grep.el (grep-first-column): New variable. (Bug#10594) + + * vc/vc.el (vc-modify-change-comment): Scoping fix. (Bug#10513) + +2012-01-24 Glenn Morris + + * pcmpl-gnu.el (pcomplete/tar): Handle " - ". (Bug#10457) + +2012-01-24 Julien Danjou + + * color.el (color-rgb-to-hsl): Fix value computing. + (color-hue-to-rgb): New function. + (color-hsl-to-rgb): New function. + (color-clamp, color-saturate-hsl, color-saturate-name) + (color-desaturate-hsl, color-desaturate-name, color-lighten-hsl) + (color-lighten-name, color-darken-hsl, color-darken-name): New function. + +2012-01-24 Glenn Morris + + * vc/vc-rcs.el (vc-rcs-create-tag): + * vc/vc-sccs.el (vc-sccs-create-tag): + Fix argument spec to be what vc-create-tag expects. (Bug#10515) + +2012-01-23 Mike Lamb (tiny change) + + * eshell/esh-util.el (eshell-read-hosts-file): + Skip comment lines. (Bug#10549) + + * eshell/em-unix.el (pcomplete/ssh): Remove. (Bug#10548) + +2012-01-23 Juanma Barranquero + + * subr.el (display-delayed-warnings): Doc fix. + (collapse-delayed-warnings): New function to collapse identical + adjacent warnings. + (delayed-warnings-hook): Add it. + +2012-01-22 Michael Albinus + + * net/tramp.el (tramp-action-login): Set connection property "login-as". + + * net/tramp-cache.el (tramp-dump-connection-properties): Do not dump + properties, when "login-as" is set. + + * net/tramp-sh.el (tramp-methods): Add user spec to "pscp" and "psftp". + (tramp-default-user-alist): Don't add "pscp". + (tramp-do-copy-or-rename-file-out-of-band): Use connection + property "login-as", if set. (Bug#10530) + +2012-01-21 Michael Albinus + + * net/tramp-sh.el (tramp-default-user-alist): Don't add "plink", + "plink1" and "psftp". (Bug#10530) + +2012-01-21 Kenichi Handa + + * international/mule-cmds.el (prefer-coding-system): Show a + warning message if the default value of file-name-coding-system + was not changed. + +2012-01-21 Jérémy Compostella + + * windmove.el (windmove-reference-loc): + Fix windmove-reference-loc miscalculation. + +2012-01-21 Jay Belanger + + * calc/calc-units.el (math-put-default-units): Don't use "1" as a + default unit. + +2012-01-21 Glenn Morris + + * international/mule.el (auto-coding-alist): Add .tbz. + + * files.el (local-enable-local-variables): Doc fix. + (inhibit-local-variables-regexps): Rename from + inhibit-first-line-modes-regexps. Keep old name as obsolete alias. + Doc fix. Add some extensions from auto-coding-alist. + (inhibit-local-variables-suffixes): + Rename from inhibit-first-line-modes-suffixes. Doc fix. + (inhibit-local-variables-p): + New function, extracted from set-auto-mode-1. + (set-auto-mode): Doc fix. Respect inhibit-local-variables-regexps. + (set-auto-mode-1): Doc fix. Use inhibit-local-variables-p. + (hack-local-variables): Doc fix. Make the mode-only case + respect enable-local-variables and friends. + Respect inhibit-local-variables-regexps for file-locals, but + not for directory-locals. + (set-visited-file-name): + Take account of inhibit-local-variables-regexps. + Whether it applies may change as the file name is changed. + * jka-cmpr-hook.el (jka-compr-install): + * jka-compr.el (jka-compr-uninstall): + Update for inhibit-first-line-modes-suffixes name change. + +2012-01-20 Martin Rudalics + + * help-macro.el (make-help-screen): Temporarily restore original + binding for minor-mode-map-alist (Bug#10454). + +2012-01-19 Julien Danjou + + * color.el (color-name-to-rgb): Use the white color to find the max + color component value and return correctly computed values. + (color-name-to-rgb): Add missing float conversion for max value. + +2012-01-19 Martin Rudalics + + * window.el (window--state-get-1, window-state-get): Do not use + special state value for window-persistent-parameters. Rename + argument IGNORE to WRITABLE. Rewrite doc-string. + (window--state-put-2): Reset all window parameters to nil before + assigning values of persistent parameters. + +2012-01-18 Alan Mackenzie + + Eliminate sluggishness and hangs in fontification of "semicolon + deserts". + + * progmodes/cc-engine.el (c-state-nonlit-pos-interval): + Change value 10000 -> 3000. + (c-state-safe-place): Reformulate so it doesn't stack up an + infinite number of wrong entries in c-state-nonlit-pos-cache. + (c-determine-limit-get-base, c-determine-limit): New functions to + determine backward search limits disregarding literals. + (c-find-decl-spots): Amend commenting. + (c-cheap-inside-bracelist-p): New function which detects "={". + + * progmodes/cc-fonts.el + (c-make-font-lock-BO-decl-search-function): Give a limit to a + backward search. + (c-font-lock-declarations): Fix an occurrence of point being + undefined. Check additionally for point being in a bracelist or + near a macro invocation without a semicolon so as to avoid a + fruitless time consuming search for a declarator. Give a more + precise search limit for declarators using the new + c-determine-limit. + +2012-01-18 Glenn Morris + + * files.el (auto-mode-alist, inhibit-first-line-modes-regexps) + (set-auto-mode): Doc fixes. + +2012-01-17 Glenn Morris + + * isearch.el (search-nonincremental-instead): Fix doc typo. + + * dired.el (dired-insert-directory): Handle newlines in directory name. + (dired-build-subdir-alist): Unescape newlines in directory name. + +2012-01-17 Michael Albinus + + * net/tramp.el (tramp-local-end-of-line): New defcustom. + (tramp-action-login, tramp-action-yesno, tramp-action-yn) + (tramp-action-terminal): Use it. (Bug#10530) + 2012-01-16 Stefan Monnier * minibuffer.el (completion--replace): Strip properties (bug#10062). @@ -34,6 +667,17 @@ * dired.el (dired-get-filename): Fix 'verbatim case of previous change. +2012-01-13 Alan Mackenzie + + Fix filling for when filladapt mode is enabled. + + * progmodes/cc-cmds.el (c-fill-paragraph): In the invocation of + c-mask-paragraph, pass in `fill-paragraph' rather than + `fill-region-as-paragraph'. (This is a reversion of a previous + change.) + * progmodes/cc-mode.el (c-basic-common-init): Make + fill-paragraph-handle-comment buffer local and set it to nil. + 2012-01-13 Glenn Morris * dired.el (dired-switches-escape-p): New function. @@ -165,7 +809,7 @@ first prompt in `sql-interacive-mode'. (sql-mode-oracle-font-lock-keywords): Add CONNECT_BY_* builtin keywords. - (sql-mode-mysql-font-lock-keywords): Add ELSEIF keyword. + (sql-mode-mysql-font-lock-keywords): Add ELSEIF keyword. (sql-product-interactive): Bug fix: Set `sql-buffer' in context of original buffer. Invoke `sql-login-hook'. @@ -3679,7 +4323,7 @@ * cus-start.el (all): Add entry for bidi-paragraph-direction. - * international/uni-bidi.el: Regenerated. + * international/uni-bidi.el: Regenerate. 2011-08-23 Kenichi Handa diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el index 8f4c79e3f0a..dcbf845c371 100644 --- a/lisp/calc/calc-units.el +++ b/lisp/calc/calc-units.el @@ -415,18 +415,19 @@ If EXPR is nil, return nil." (defun math-put-default-units (expr) "Put the units in EXPR in the default units table." - (let* ((units (math-get-units expr)) - (standard-units (math-get-standard-units expr)) + (let ((units (math-get-units expr))) + (unless (eq units 1) + (let* ((standard-units (math-get-standard-units expr)) (default-units (gethash standard-units math-default-units-table))) - (cond - ((not default-units) - (puthash standard-units (list units) math-default-units-table)) - ((not (equal units (car default-units))) - (puthash standard-units - (list units (car default-units)) - math-default-units-table))))) + (cond + ((not default-units) + (puthash standard-units (list units) math-default-units-table)) + ((not (equal units (car default-units))) + (puthash standard-units + (list units (car default-units)) + math-default-units-table))))))) (defun calc-convert-units (&optional old-units new-units) diff --git a/lisp/cedet/ChangeLog b/lisp/cedet/ChangeLog index f9a546ec894..361ccba10cc 100644 --- a/lisp/cedet/ChangeLog +++ b/lisp/cedet/ChangeLog @@ -1,3 +1,14 @@ +2012-02-09 Juanma Barranquero + + * ede/auto.el (ede-directory-safe-p, ede-add-project-to-global-list): + Add declarations. + +2012-01-29 David Engster + + Fix require error when using srecode-insert (Bug#9967). + * srecode/insert.el: Require srecode/filters. + * srecode/filters.el: Drop two requires. + 2012-01-09 Eric Ludlam * ede.el (ede-project-directories): New option. @@ -140,8 +151,8 @@ 2011-07-30 Chong Yidong - * semantic/grammar.el (semantic-grammar-insert-defanalyzers): Fix - require. + * semantic/grammar.el (semantic-grammar-insert-defanalyzers): + Fix require. 2011-07-04 Darren Hoo (tiny change) diff --git a/lisp/cedet/ede/auto.el b/lisp/cedet/ede/auto.el index b458cc246f0..a5ea8178858 100644 --- a/lisp/cedet/ede/auto.el +++ b/lisp/cedet/ede/auto.el @@ -31,6 +31,9 @@ (require 'eieio) +(declare-function ede-directory-safe-p "ede") +(declare-function ede-add-project-to-global-list "ede") + (defclass ede-project-autoload () ((name :initarg :name :documentation "Name of this project type") diff --git a/lisp/cedet/semantic/wisent/js-wy.el b/lisp/cedet/semantic/wisent/js-wy.el index b8d3240aef1..05346b02c8d 100644 --- a/lisp/cedet/semantic/wisent/js-wy.el +++ b/lisp/cedet/semantic/wisent/js-wy.el @@ -1,7 +1,7 @@ ;;; semantic/wisent/js-wy.el --- Generated parser support file ;; Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. -;; Copyright (C) 1998-2011 Ecma International +;; Copyright (C) 1998-2011 Ecma International. ;; This file is part of GNU Emacs. diff --git a/lisp/cedet/semantic/wisent/python-wy.el b/lisp/cedet/semantic/wisent/python-wy.el index cb0f37c8f16..e8229dcd9ea 100644 --- a/lisp/cedet/semantic/wisent/python-wy.el +++ b/lisp/cedet/semantic/wisent/python-wy.el @@ -1,7 +1,8 @@ ;;; semantic/wisent/python-wy.el --- Generated parser support file ;; Copyright (C) 2002-2004, 2007, 2010-2012 Free Software Foundation, Inc. -;; Copyright (C) 2001-2010 Python Software Foundation +;; Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, +;; 2009, 2010 Python Software Foundation; All Rights Reserved ;; This file is part of GNU Emacs. diff --git a/lisp/cedet/srecode/filters.el b/lisp/cedet/srecode/filters.el index 67435f23e90..d4a7e542770 100644 --- a/lisp/cedet/srecode/filters.el +++ b/lisp/cedet/srecode/filters.el @@ -26,8 +26,9 @@ ;;; Code: (require 'newcomment) -(require 'srecode/table) -(require 'srecode/insert) + +(declare-function srecode-dictionary-lookup-name "srecode/dictionary") +(defvar srecode-inserter-variable-current-dictionary) (defun srecode-comment-prefix (str) "Prefix each line of STR with the comment prefix characters." diff --git a/lisp/cedet/srecode/insert.el b/lisp/cedet/srecode/insert.el index 40d3374c744..7d300614c08 100644 --- a/lisp/cedet/srecode/insert.el +++ b/lisp/cedet/srecode/insert.el @@ -33,6 +33,7 @@ (require 'srecode/find) (require 'srecode/dictionary) (require 'srecode/args) +(require 'srecode/filters) (defvar srecode-template-inserter-point) (declare-function srecode-overlaid-activate "srecode/fields") diff --git a/lisp/color.el b/lisp/color.el index ff7f0eee4e6..65536752ed8 100644 --- a/lisp/color.el +++ b/lisp/color.el @@ -53,7 +53,10 @@ numbers, (RED GREEN BLUE), each between 0.0 and 1.0 inclusive. Optional arg FRAME specifies the frame where the color is to be displayed. If FRAME is omitted or nil, use the selected frame. If FRAME cannot display COLOR, return nil." - (mapcar (lambda (x) (/ x 65535.0)) (color-values color frame))) + ;; `colors-values' maximum value is either 65535 or 65280 depending on the + ;; display system. So we use a white conversion to get the max value. + (let ((valmax (float (car (color-values "#ffffff"))))) + (mapcar (lambda (x) (/ x valmax)) (color-values color frame)))) (defun color-rgb-to-hex (red green blue) "Return hexadecimal notation for the color RED GREEN BLUE. @@ -89,6 +92,34 @@ resulting list." result)) (nreverse result))) +(defun color-hue-to-rgb (v1 v2 h) + "Compute hue from V1 and V2 H. Internally used by +`color-hsl-to-rgb'." + (cond + ((< h (/ 1.0 6)) (+ v1 (* (- v2 v1) h 6.0))) + ((< h 0.5) v2) + ((< h (/ 2.0 3)) (+ v1 (* (- v2 v1) (- (/ 2.0 3) h) 6.0))) + (t v1))) + +(defun color-hsl-to-rgb (H S L) + "Convert H S L (HUE, SATURATION, LUMINANCE) , where HUE is in +radians and both SATURATION and LUMINANCE are between 0.0 and +1.0, inclusive to their RGB representation. + +Return a list (RED, GREEN, BLUE) which each be numbers between +0.0 and 1.0, inclusive." + + (if (= S 0.0) + (list L L L) + (let* ((m2 (if (<= L 0.5) + (* L (+ 1.0 S)) + (- (+ L S) (* L S)))) + (m1 (- (* 2.0 L) m2))) + (list + (color-hue-to-rgb m1 m2 (+ H (/ 1.0 3))) + (color-hue-to-rgb m1 m2 H) + (color-hue-to-rgb m1 m2 (- H (/ 1.0 3))))))) + (defun color-complement-hex (color) "Return the color that is the complement of COLOR, in hexadecimal format." (apply 'color-rgb-to-hex (color-complement color))) @@ -138,23 +169,21 @@ inclusive." (min (min r g b)) (delta (- max min)) (l (/ (+ max min) 2.0))) - (list - (if (< (- max min) 1e-8) - 0 - (* 2 float-pi - (/ (cond ((= max r) - (+ (/ (- g b) delta) (if (< g b) 6 0))) - ((= max g) - (+ (/ (- b r) delta) 2)) - (t - (+ (/ (- r g) delta) 4))) - 6))) - (if (= max min) - 0 - (if (> l 0.5) - (/ delta (- 2 (+ max min))) - (/ delta (+ max min)))) - l))) + (if (= delta 0) + (list 0.0 0.0 l) + (let* ((s (if (<= l 0.5) (/ delta (+ max min)) + (/ delta (- 2.0 max min)))) + (rc (/ (- max r) delta)) + (gc (/ (- max g) delta)) + (bc (/ (- max b) delta)) + (h (mod + (/ + (cond + ((= r max) (- bc gc)) + ((= g max) (+ 2.0 rc (- bc))) + (t (+ 4.0 gc (- rc)))) + 6.0) 1.0))) + (list h s l))))) (defun color-srgb-to-xyz (red green blue) "Convert RED GREEN BLUE colors from the sRGB color space to CIE XYZ. @@ -310,6 +339,82 @@ returned by `color-srgb-to-lab' or `color-xyz-to-lab'." (expt (/ ΔH′ (* Sh kH)) 2.0) (* Rt (/ ΔC′ (* Sc kC)) (/ ΔH′ (* Sh kH))))))))) +(defun color-clamp (value) + "Make sure VALUE is a number between 0.0 and 1.0 inclusive." + (min 1.0 (max 0.0 value))) + +(defun color-saturate-hsl (H S L percent) + "Return a color PERCENT more saturated than the one defined in +H S L color-space. + +Return a list (HUE, SATURATION, LUMINANCE), where HUE is in radians +and both SATURATION and LUMINANCE are between 0.0 and 1.0, +inclusive." + (list H (color-clamp (+ S (/ percent 100.0))) L)) + +(defun color-saturate-name (name percent) + "Short hand to saturate COLOR by PERCENT. + +See `color-saturate-hsl'." + (apply 'color-rgb-to-hex + (apply 'color-hsl-to-rgb + (apply 'color-saturate-hsl + (append + (apply 'color-rgb-to-hsl + (color-name-to-rgb name)) + (list percent)))))) + +(defun color-desaturate-hsl (H S L percent) + "Return a color PERCENT less saturated than the one defined in +H S L color-space. + +Return a list (HUE, SATURATION, LUMINANCE), where HUE is in radians +and both SATURATION and LUMINANCE are between 0.0 and 1.0, +inclusive." + (color-saturate-hsl H S L (- percent))) + +(defun color-desaturate-name (name percent) + "Short hand to desaturate COLOR by PERCENT. + +See `color-desaturate-hsl'." + (color-saturate-name name (- percent))) + +(defun color-lighten-hsl (H S L percent) + "Return a color PERCENT lighter than the one defined in +H S L color-space. + +Return a list (HUE, SATURATION, LUMINANCE), where HUE is in radians +and both SATURATION and LUMINANCE are between 0.0 and 1.0, +inclusive." + (list H S (color-clamp (+ L (/ percent 100.0))))) + +(defun color-lighten-name (name percent) + "Short hand to saturate COLOR by PERCENT. + +See `color-lighten-hsl'." + (apply 'color-rgb-to-hex + (apply 'color-hsl-to-rgb + (apply 'color-lighten--hsl + (append + (apply 'color-rgb-to-hsl + (color-name-to-rgb name)) + (list percent)))))) + +(defun color-darken-hsl (H S L percent) + "Return a color PERCENT darker than the one defined in +H S L color-space. + +Return a list (HUE, SATURATION, LUMINANCE), where HUE is in radians +and both SATURATION and LUMINANCE are between 0.0 and 1.0, +inclusive." + (color-lighten-hsl H S L (- percent))) + +(defun color-darken-name (name percent) + "Short hand to saturate COLOR by PERCENT. + +See `color-darken-hsl'." + (color-lighten-name name (- percent))) + (provide 'color) ;;; color.el ends here diff --git a/lisp/comint.el b/lisp/comint.el index 2d0ae6920f9..975291471df 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -2513,7 +2513,7 @@ text matching `comint-prompt-regexp'." (if (> n 0) (next-single-char-property-change pos 'field) (previous-single-char-property-change pos 'field))) - (cond ((or (null pos) (= pos prev-pos)) + (cond ((= pos prev-pos) ;; Ran off the end of the buffer. (when (> n 0) ;; There's always an input field at the end of the diff --git a/lisp/completion.el b/lisp/completion.el index 485305b6e40..ceb272fad6d 100644 --- a/lisp/completion.el +++ b/lisp/completion.el @@ -2337,7 +2337,10 @@ TYPE is the type of the wrapper to be added. Can be :before or :under." ;;;###autoload (define-minor-mode dynamic-completion-mode - "Enable dynamic word-completion." + "Toggle dynamic word-completion on or off. +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil." :global t ;; This is always good, not specific to dynamic-completion-mode. (define-key function-key-map [C-return] [?\C-\r]) diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index 419ab88056a..4ed72be06fb 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el @@ -1357,7 +1357,7 @@ suggest to customize that face, if it's customizable." ;;;###autoload (defun customize-unsaved () - "Customize all user options set in this session but not saved." + "Customize all options and faces set in this session but not saved." (interactive) (let ((found nil)) (mapatoms (lambda (symbol) @@ -1395,7 +1395,7 @@ suggest to customize that face, if it's customizable." "*Customize Rogue*")))) ;;;###autoload (defun customize-saved () - "Customize all already saved user options." + "Customize all saved options and faces." (interactive) (let ((found nil)) (mapatoms (lambda (symbol) @@ -1624,7 +1624,9 @@ Otherwise use brackets." ;; Insert the search field. (when custom-search-field (widget-insert "\n") - (let* ((echo "Search for custom items") + (let* ((echo "Search for custom items. +You can enter one or more words separated by spaces, +or a regular expression.") (search-widget (widget-create 'editable-field @@ -1637,7 +1639,7 @@ Otherwise use brackets." :tag " Search " :help-echo echo :action (lambda (widget &optional _event) - (customize-apropos (widget-value (widget-get widget :parent))))) + (customize-apropos (split-string (widget-value (widget-get widget :parent)))))) (widget-insert "\n"))) ;; The custom command buttons are also in the toolbar, so for a @@ -2599,7 +2601,6 @@ try matching its doc string against `custom-guess-doc-alist'." :parent widget) buttons)) ((memq form '(lisp mismatch)) - ;; In lisp mode edit the saved value when possible. (push (widget-create-child-and-convert widget 'custom-visibility :help-echo "Hide the value of this option." @@ -2611,11 +2612,10 @@ try matching its doc string against `custom-guess-doc-alist'." t) buttons) (insert " ") - (let* ((value (cond ((get symbol 'saved-value) - (car (get symbol 'saved-value))) - ((get symbol 'standard-value) - (car (get symbol 'standard-value))) - ((default-boundp symbol) + ;; This used to try presenting the saved value or the + ;; standard value, but it seems more intuitive to present + ;; the current value (Bug#7600). + (let* ((value (cond ((default-boundp symbol) (custom-quote (funcall get symbol))) (t (custom-quote (widget-get conv :value)))))) @@ -3073,7 +3073,7 @@ to switch between two values." (funcall set symbol (car value)) (error nil))) (error "No backup value for %s" symbol)) - (put symbol 'customized-value (list (car value))) + (put symbol 'customized-value (list (custom-quote (car value)))) (put symbol 'variable-comment comment) (put symbol 'customized-variable-comment comment) (custom-variable-state-set widget) @@ -3251,6 +3251,7 @@ Also change :reverse-video to :inverse-video." :args '((const :tag "all" t) (const :tag "defaults" default) (checklist + :tag "specific display" :offset 0 :extra-offset 9 :args ((group :sibling-args (:help-echo "\ diff --git a/lisp/cus-start.el b/lisp/cus-start.el index 2cee72d717e..a5032cf99e7 100644 --- a/lisp/cus-start.el +++ b/lisp/cus-start.el @@ -237,6 +237,8 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of :set custom-set-minor-mode) ;; fringe.c (overflow-newline-into-fringe fringe boolean) + ;; image.c + (imagemagick-render-type image integer "24.1") ;; indent.c (indent-tabs-mode indent boolean) ;; keyboard.c @@ -504,6 +506,8 @@ since it could result in memory overflow and make Emacs crash." (fboundp 'x-selection-exists-p)) ((string-match "fringe" (symbol-name symbol)) (fboundp 'define-fringe-bitmap)) + ((string-match "\\`imagemagick" (symbol-name symbol)) + (fboundp 'imagemagick-types)) ((equal "font-use-system-font" (symbol-name symbol)) (featurep 'system-font-setting)) ;; Conditioned on x-create-frame, because that's diff --git a/lisp/custom.el b/lisp/custom.el index 2ccfe094933..2d880d23955 100644 --- a/lisp/custom.el +++ b/lisp/custom.el @@ -198,12 +198,16 @@ set to nil, as the value is no longer rogue." (run-hooks 'custom-define-hook) symbol) -(defmacro defcustom (symbol value doc &rest args) - "Declare SYMBOL as a customizable variable that defaults to VALUE. +(defmacro defcustom (symbol standard doc &rest args) + "Declare SYMBOL as a customizable variable. +SYMBOL is the variable name; it should not be quoted. +STANDARD is an expression specifying the variable's standard +value. It should not be quoted. It is evaluated once by +`defcustom', and the value is assigned to SYMBOL if the variable +is unbound. The expression itself is also stored, so that +Customize can re-evaluate it later to get the standard value. DOC is the variable documentation. -Neither SYMBOL nor VALUE need to be quoted. -If SYMBOL is not already bound, initialize it to VALUE. The remaining arguments should have the form [KEYWORD VALUE]... @@ -229,8 +233,12 @@ The following keywords are meaningful: VALUE should be a feature symbol. If you save a value for this option, then when your `.emacs' file loads the value, it does (require VALUE) first. +:set-after VARIABLES + Specifies that SYMBOL should be set after the list of variables + VARIABLES when both have been customized. :risky Set SYMBOL's `risky-local-variable' property to VALUE. :safe Set SYMBOL's `safe-local-variable' property to VALUE. + See Info node `(elisp) File Local Variables'. The following common keywords are also meaningful. @@ -299,9 +307,6 @@ The following common keywords are also meaningful. Load file FILE (a string) before displaying this customization item. Loading is done with `load', and only if the file is not already loaded. -:set-after VARIABLES - Specifies that SYMBOL should be set after the list of variables - VARIABLES when both have been customized. If SYMBOL has a local binding, then this form affects the local binding. This is normally not what you want. Thus, if you need @@ -319,14 +324,15 @@ for more information." `(custom-declare-variable ',symbol ,(if lexical-binding ;FIXME: This is not reliable, but is all we have. - ;; The `default' arg should be an expression that evaluates to - ;; the value to use. The use of `eval' for it is spread over - ;; many different places and hence difficult to eliminate, yet - ;; we want to make sure that the `value' expression is checked by the - ;; byte-compiler, and that lexical-binding is obeyed, so quote the - ;; expression with `lambda' rather than with `quote'. - `(list (lambda () ,value)) - `',value) + ;; The STANDARD arg should be an expression that evaluates to + ;; the standard value. The use of `eval' for it is spread + ;; over many different places and hence difficult to + ;; eliminate, yet we want to make sure that the `standard' + ;; expression is checked by the byte-compiler, and that + ;; lexical-binding is obeyed, so quote the expression with + ;; `lambda' rather than with `quote'. + `(list (lambda () ,standard)) + `',standard) ,doc ,@args)) @@ -591,8 +597,10 @@ If NOSET is non-nil, don't bother autoloading LOAD when setting the variable." ;; This test is also in the C code of `user-variable-p'. (defun custom-variable-p (variable) - "Return non-nil if VARIABLE is a custom variable. -This recursively follows aliases." + "Return non-nil if VARIABLE is a customizable variable. +A customizable variable is either (i) a variable whose property +list contains a non-nil `standard-value' or `custom-autoload' +property, or (ii) an alias for another customizable variable." (setq variable (indirect-variable variable)) (or (get variable 'standard-value) (get variable 'custom-autoload))) diff --git a/lisp/descr-text.el b/lisp/descr-text.el index 0ab72d414e0..d2995ab790d 100644 --- a/lisp/descr-text.el +++ b/lisp/descr-text.el @@ -376,12 +376,21 @@ This function is semi-obsolete. Use `get-char-code-property'." ;;;###autoload (defun describe-char (pos &optional buffer) - "Describe the character after POS (interactively, the character after point). -Is POS is taken to be in buffer BUFFER or current buffer if nil. -The information includes character code, charset and code points in it, -syntax, category, how the character is encoded in a file, -character composition information (if relevant), -as well as widgets, buttons, overlays, and text properties." + "Describe position POS (interactively, point) and the char after POS. +POS is taken to be in BUFFER, or the current buffer if BUFFER is nil. +The information is displayed in buffer `*Help*'. + +The position information includes POS; the total size of BUFFER; the +region limits, if narrowed; the column number; and the horizontal +scroll amount, if the buffer is horizontally scrolled. + +The character information includes the character code; charset and +code points in it; syntax; category; how the character is encoded in +BUFFER and in BUFFER's file; character composition information (if +relevant); the font and font glyphs used to display the character; +the character's canonical name and other properties defined by the +Unicode Data Base; and widgets, buttons, overlays, and text properties +relevant to POS." (interactive "d") (unless (buffer-live-p buffer) (setq buffer (current-buffer))) (let ((src-buf (current-buffer))) @@ -511,8 +520,27 @@ as well as widgets, buttons, overlays, and text properties." (setq composition nil))) (setq item-list - `(("character" - ,(format "%s (%d, #o%o, #x%x)" + `(("position" + ,(let* ((beg (point-min)) + (end (point-max)) + (total (buffer-size)) + (percent (if (> total 50000) ; Avoid overflow multiplying by 100 + (/ (+ (/ total 200) (1- pos)) (max (/ total 100) 1)) + (/ (+ (/ total 2) (* 100 (1- pos))) (max total 1)))) + (hscroll (if (= (window-hscroll) 0) + "" + (format ", Hscroll: %d" (window-hscroll)))) + (col (current-column))) + (if (or (/= beg 1) (/= end (1+ total))) + (format "%d of %d (%d%%), restriction: <%d-%d>, column: %d%s" + pos total percent col beg end hscroll) + (if (= pos end) + (format "%d of %d (EOB), column: %d%s" pos total col hscroll) + (format "%d of %d (%d%%), column: %d%s" + pos total percent col hscroll))))) + ("character" + ,(format "%s (displayed as %s) (codepoint %d, #o%o, #x%x)" + char-description (apply 'propertize char-description (text-properties-at pos)) char char char)) @@ -521,7 +549,7 @@ as well as widgets, buttons, overlays, and text properties." ,(symbol-name charset) 'type 'help-character-set 'help-args '(,charset)) ,(format "(%s)" (charset-description charset))) - ("code point" + ("code point in charset" ,(let ((str (if (integerp code) (format (if (< code 256) "0x%02X" "0x%04X") code) diff --git a/lisp/desktop.el b/lisp/desktop.el index 2f79cc05e79..674ce72dba3 100644 --- a/lisp/desktop.el +++ b/lisp/desktop.el @@ -1158,7 +1158,7 @@ directory DIRNAME." (desktop-load-file desktop-buffer-major-mode) (let ((buffer-list (buffer-list)) (result - (condition-case-no-debug err + (condition-case-unless-debug err (funcall (or (cdr (assq desktop-buffer-major-mode desktop-buffer-mode-handlers)) 'desktop-restore-file-buffer) diff --git a/lisp/dired-x.el b/lisp/dired-x.el index f775fd952c0..9b54954695b 100644 --- a/lisp/dired-x.el +++ b/lisp/dired-x.el @@ -85,12 +85,12 @@ use \\[customize]." :set (lambda (sym val) (if (set sym val) (progn - (define-key global-map "\C-x\C-j" 'dired-jump) - (define-key global-map "\C-x4\C-j" 'dired-jump-other-window)) - (if (eq 'dired-jump (lookup-key global-map "\C-x\C-j")) - (define-key global-map "\C-x\C-j" nil)) - (if (eq 'dired-jump-other-window (lookup-key global-map "\C-x4\C-j")) - (define-key global-map "\C-x4\C-j" nil)))) + (define-key ctl-x-map "\C-j" 'dired-jump) + (define-key ctl-x-4-map "\C-j" 'dired-jump-other-window)) + (if (eq 'dired-jump (lookup-key ctl-x-map "\C-j")) + (define-key ctl-x-map "\C-j" nil)) + (if (eq 'dired-jump-other-window (lookup-key ctl-x-4-map "\C-j")) + (define-key ctl-x-4-map "\C-j" nil)))) :group 'dired-keys) (defcustom dired-bind-man t diff --git a/lisp/dired.el b/lisp/dired.el index f1a778ad05a..3962ef14aa4 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -1172,7 +1172,22 @@ see `dired-use-ls-dired' for more details.") "\\015" (text-properties-at (match-beginning 0))) nil t)) - (set-marker end nil))) + (set-marker end nil)) + ;; Replace any newlines in DIR with literal "\n"s, for the sake + ;; of the header line. To disambiguate a literal "\n" in the + ;; actual dirname, we also replace "\" with "\\". + ;; Personally, I think this should always be done, irrespective + ;; of the value of dired-actual-switches, because: + ;; i) Dired simply does not work with an unescaped newline in + ;; the directory name used in the header (bug=10469#28), and + ;; ii) "\" is always replaced with "\\" in the listing, so doing + ;; it in the header as well makes things consistent. + ;; But at present it is only done if "-b" is in ls-switches, + ;; because newlines in dirnames are uncommon, and people may + ;; have gotten used to seeing unescaped "\" in the headers. + ;; Note: adjust dired-build-subdir-alist if you change this. + (setq dir (replace-regexp-in-string "\\\\" "\\\\" dir nil t) + dir (replace-regexp-in-string "\n" "\\n" dir nil t))) (dired-insert-set-properties opoint (point)) ;; If we used --dired and it worked, the lines are already indented. ;; Otherwise, indent them. @@ -2541,12 +2556,31 @@ instead of `dired-actual-switches'." (delete-region (point) (match-end 1)) (insert new-dir-name)) (setq count (1+ count)) + ;; Undo any escaping of newlines and \ by dired-insert-directory. + ;; Convert "n" preceded by odd number of \ to newline, and \\ to \. + (when (and (dired-switches-escape-p switches) + (string-match-p "\\\\" new-dir-name)) + (let (temp res) + (mapc (lambda (char) + (cond ((equal char ?\\) + (if temp + (setq res (concat res "\\") + temp nil) + (setq temp "\\"))) + ((and temp (equal char ?n)) + (setq res (concat res "\n") + temp nil)) + (t + (setq res (concat res temp (char-to-string char)) + temp nil)))) + new-dir-name) + (setq new-dir-name res))) (dired-alist-add-1 new-dir-name - ;; Place a sub directory boundary between lines. - (save-excursion - (goto-char (match-beginning 0)) - (beginning-of-line) - (point-marker))))) + ;; Place a sub directory boundary between lines. + (save-excursion + (goto-char (match-beginning 0)) + (beginning-of-line) + (point-marker))))) (if (and (> count 1) (called-interactively-p 'interactive)) (message "Buffer includes %d directories" count))) ;; We don't need to sort it because it is in buffer order per @@ -2606,6 +2640,20 @@ instead of `dired-actual-switches'." (replace-regexp-in-string "\^m" "\\^m" base nil t)) (setq search-string (replace-regexp-in-string "\\\\" "\\\\" search-string nil t)) + (and (dired-switches-escape-p dired-actual-switches) + (string-match "[ \t\n]" search-string) + ;; FIXME to fix this for all possible file names + ;; (embedded control characters etc), we need to + ;; escape everything that `ls -b' does. + (setq search-string + (replace-regexp-in-string " " "\\ " + search-string nil t) + search-string + (replace-regexp-in-string "\t" "\\t" + search-string nil t) + search-string + (replace-regexp-in-string "\n" "\\n" + search-string nil t))) (while (and (not found) ;; filenames are preceded by SPC, this makes ;; the search faster (e.g. for the filename "-"!). @@ -3120,8 +3168,8 @@ object files--just `.o' will mark more than you might think." (dired-mark-if (and (not (looking-at dired-re-dot)) (not (eolp)) ; empty line - (let ((fn (dired-get-filename nil t))) - (and fn (string-match regexp (file-name-nondirectory fn))))) + (let ((fn (dired-get-filename t t))) + (and fn (string-match regexp fn)))) "matching file"))) (defun dired-mark-files-containing-regexp (regexp &optional marker-char) @@ -4148,7 +4196,7 @@ instead. ;;;*** ;;;### (autoloads (dired-do-relsymlink dired-jump-other-window dired-jump) -;;;;;; "dired-x" "dired-x.el" "85900e333d980b376bf820108ae1a1fc") +;;;;;; "dired-x" "dired-x.el" "8d995933a8d82be3a8662d7eff7543cc") ;;; Generated autoloads from dired-x.el (autoload 'dired-jump "dired-x" "\ diff --git a/lisp/dirtrack.el b/lisp/dirtrack.el index 07220f21ed8..4f6236b240e 100644 --- a/lisp/dirtrack.el +++ b/lisp/dirtrack.el @@ -203,7 +203,10 @@ directory." (define-minor-mode dirtrack-debug-mode - "Toggle Dirtrack debugging." + "Toggle Dirtrack debugging. +With a prefix argument ARG, enable Dirtrack debugging if ARG is +positive, and disable it otherwise. If called from Lisp, enable +the mode if ARG is omitted or nil." nil nil nil (if dirtrack-debug-mode (display-buffer (get-buffer-create dirtrack-debug-buffer)))) diff --git a/lisp/dynamic-setting.el b/lisp/dynamic-setting.el index 8343d389f80..e967ddce332 100644 --- a/lisp/dynamic-setting.el +++ b/lisp/dynamic-setting.el @@ -42,44 +42,28 @@ If DISPLAY-OR-FRAME is a frame, the display is the one for that frame. If SET-FONT is non-nil, change the font for frames. Otherwise re-apply the current form for the frame (i.e. hinting or somesuch changed)." - (let ((new-font (and (fboundp 'font-get-system-font) - (font-get-system-font)))) - (when new-font - ;; Be careful here: when set-face-attribute is called for the - ;; :font attribute, Emacs tries to guess the best matching font - ;; by examining the other face attributes (Bug#2476). - + (font-get-system-font))) + (frame-list (frames-on-display-list display-or-frame))) + (when (and new-font (display-graphic-p display-or-frame)) (clear-font-cache) - ;; Set for current frames. Only change font for those that have - ;; the old font now. If they don't have the old font, the user - ;; probably changed it. - (dolist (f (frames-on-display-list display-or-frame)) - (if (display-graphic-p f) - (let* ((frame-font - (or (font-get (face-attribute 'default :font f - 'default) :user-spec) - (frame-parameter f 'font-parameter))) - (font-to-set - (if set-font new-font - ;; else set font again, hinting etc. may have changed. - frame-font))) - (if font-to-set - (progn - (set-frame-parameter f 'font-parameter font-to-set) - (set-face-attribute 'default f - :width 'normal - :weight 'normal - :slant 'normal - :font font-to-set)))))) - - ;; Set for future frames. - (set-face-attribute 'default t :font new-font) - (let ((spec (list (list t (face-attr-construct 'default))))) - (progn - (put 'default 'customized-face spec) - (custom-push-theme 'theme-face 'default 'user 'set spec) - (put 'default 'face-modified nil)))))) + (if set-font + ;; Set the font on all current and future frames, as though + ;; the `default' face had been "set for this session": + (set-frame-font new-font nil frame-list) + ;; Just redraw the existing fonts on all frames: + (dolist (f frame-list) + (let ((frame-font + (or (font-get (face-attribute 'default :font f 'default) + :user-spec) + (frame-parameter f 'font-parameter)))) + (when frame-font + (set-frame-parameter f 'font-parameter frame-font) + (set-face-attribute 'default f + :width 'normal + :weight 'normal + :slant 'normal + :font frame-font)))))))) (defun dynamic-setting-handle-config-changed-event (event) "Handle config-changed-event on the display in EVENT. diff --git a/lisp/electric.el b/lisp/electric.el index 1c4b34e151c..50c9010a74e 100644 --- a/lisp/electric.el +++ b/lisp/electric.el @@ -260,9 +260,9 @@ With a prefix argument ARG, enable Electric Indent mode if ARG is positive, and disable it otherwise. If called from Lisp, enable the mode if ARG is omitted or nil. -Electric Indent mode is a global minor mode. When enabled, -reindentation is triggered whenever you insert a character listed -in `electric-indent-chars'." +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'." :global t :group 'electricity (if (not electric-indent-mode) @@ -288,6 +288,8 @@ in `electric-indent-chars'." (defcustom electric-pair-pairs '((?\" . ?\")) "Alist of pairs that should be used regardless of major mode." + :group 'electricity + :version "24.1" :type '(repeat (cons character character))) (defcustom electric-pair-skip-self t @@ -296,6 +298,8 @@ When inserting a closing paren character right before the same character, just skip that character instead, so that hitting ( followed by ) results in \"()\" rather than \"())\". This can be convenient for people who find it easier to hit ) than C-f." + :group 'electricity + :version "24.1" :type 'boolean) (defun electric-pair-post-self-insert-function () @@ -360,7 +364,9 @@ the mode if ARG is omitted or nil. Electric Pair mode is a global minor mode. When enabled, typing an open parenthesis automatically inserts the corresponding -closing parenthesis. \(Likewise for brackets, etc.)" +closing parenthesis. \(Likewise for brackets, etc.) + +See options `electric-pair-pairs' and `electric-pair-skip-self'." :global t :group 'electricity (if electric-pair-mode @@ -375,8 +381,8 @@ closing parenthesis. \(Likewise for brackets, etc.)" "List of rules saying where to automatically insert newlines. Each rule has the form (CHAR . WHERE) where CHAR is the char that was just inserted and WHERE specifies where to insert newlines -and can be: nil, `before', `after', `around', or a function that returns -one of those symbols.") +and can be: nil, `before', `after', `around', or a function of no +arguments that returns one of those symbols.") (defun electric-layout-post-self-insert-function () (let* ((rule (cdr (assq last-command-event electric-layout-rules))) @@ -404,7 +410,11 @@ one of those symbols.") ;;;###autoload (define-minor-mode electric-layout-mode - "Automatically insert newlines around some chars." + "Automatically insert newlines around some chars. +With a prefix argument ARG, enable Electric Layout mode if ARG is +positive, and disable it otherwise. If called from Lisp, enable +the mode if ARG is omitted or nil. +The variable `electric-layout-rules' says when and how to insert newlines." :global t :group 'electricity (if electric-layout-mode diff --git a/lisp/emacs-lisp/advice.el b/lisp/emacs-lisp/advice.el index e0d8ffaba90..09dde2c1c17 100644 --- a/lisp/emacs-lisp/advice.el +++ b/lisp/emacs-lisp/advice.el @@ -348,10 +348,7 @@ ;; first argument list defined in the list of before/around/after advices. ;; The values of variables can be accessed/changed in the body of ;; an advice by simply referring to them by their original name, however, -;; more portable argument access macros are also provided (see below). For -;; subrs/special-forms for which neither explicit argument list definitions -;; are available, nor their documentation strings contain such definitions -;; (as they do v19s), `(&rest ad-subr-args)' will be used. +;; more portable argument access macros are also provided (see below). ;; is an optional, special documentation string which will ;; be expanded into a proper documentation string upon call of `documentation'. @@ -491,17 +488,15 @@ ;; @@@ Argument list mapping: ;; ========================== -;; Because `defadvice' allows the specification of the argument list of the -;; advised function we need a mapping mechanism that maps this argument list -;; onto that of the original function. For example, somebody might specify -;; `(sym newdef)' as the argument list of `fset', while advice might use -;; `(&rest ad-subr-args)' as the argument list of the original function -;; (depending on what Emacs version is used). Hence SYM and NEWDEF have to -;; be properly mapped onto the &rest variable when the original definition is -;; called. Advice automatically takes care of that mapping, hence, the advice -;; programmer can specify an argument list without having to know about the -;; exact structure of the original argument list as long as the new argument -;; list takes a compatible number/magnitude of actual arguments. +;; Because `defadvice' allows the specification of the argument list +;; of the advised function we need a mapping mechanism that maps this +;; argument list onto that of the original function. Hence SYM and +;; NEWDEF have to be properly mapped onto the &rest variable when the +;; original definition is called. Advice automatically takes care of +;; that mapping, hence, the advice programmer can specify an argument +;; list without having to know about the exact structure of the +;; original argument list as long as the new argument list takes a +;; compatible number/magnitude of actual arguments. ;; @@ Activation and deactivation: ;; =============================== @@ -884,9 +879,6 @@ ;; @@ Summary of forms with special meanings when used within an advice: ;; ===================================================================== ;; ad-return-value name of the return value variable (get/settable) -;; ad-subr-args name of &rest argument variable used for advised -;; subrs whose actual argument list cannot be -;; determined (get/settable) ;; (ad-get-arg ), (ad-get-args ), ;; (ad-set-arg ), (ad-set-args ) ;; argument access text macros to get/set the values of @@ -2594,36 +2586,6 @@ For that it has to be fbound with a non-autoload definition." (byte-compile symbol) (fset function (symbol-function symbol)))))) - -;; @@ Constructing advised definitions: -;; ==================================== -;; -;; Main design decisions about the form of advised definitions: -;; -;; A) How will original definitions be called? -;; B) What will argument lists of advised functions look like? -;; -;; Ad A) -;; I chose to use function indirection for all four types of original -;; definitions (functions, macros, subrs and special forms), i.e., create -;; a unique symbol `ad-Orig-' which is fbound to the original -;; definition and call it according to type and arguments. Functions and -;; subrs that don't have any &rest arguments can be called directly in a -;; `(ad-Orig- ....)' form. If they have a &rest argument we have to -;; use `apply'. Macros will be called with -;; `(macroexpand '(ad-Orig- ....))', and special forms also need a -;; form like that with `eval' instead of `macroexpand'. -;; -;; Ad B) -;; Use original arguments where possible and `(&rest ad-subr-args)' -;; otherwise, even though this seems to be more complicated and less -;; uniform than a general `(&rest args)' approach. My reason to still -;; do it that way is that in most cases my approach leads to the more -;; efficient form for the advised function, and portability (e.g., to -;; make the same advice work regardless of whether something is a -;; function or a subr) can still be achieved with argument access macros. - - (defun ad-prognify (forms) (cond ((<= (length forms) 1) (car forms)) diff --git a/lisp/emacs-lisp/authors.el b/lisp/emacs-lisp/authors.el index 68cff86aa0d..bf9f500b542 100644 --- a/lisp/emacs-lisp/authors.el +++ b/lisp/emacs-lisp/authors.el @@ -421,7 +421,8 @@ Changes to files in this list are not listed.") "vt220.el" "vt240.el") ("Motorola" :changed "buff-menu.el") ("Hiroshi Nakano" :changed "ralloc.c") - ("Sundar Narasimhan" :changed "rnewspost.el") + ;; File removed in Emacs 24.1. +;;; ("Sundar Narasimhan" :changed "rnewspost.el") ;; No longer distributed. ;;; ("NeXT, Inc." :wrote "unexnext.c") ("Mark Neale" :changed "fortran.el") diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index 80e380f07ea..2ee878e5213 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -2237,22 +2237,21 @@ list that represents a doc string reference. (put 'defvar 'byte-hunk-handler 'byte-compile-file-form-defvar) (put 'defconst 'byte-hunk-handler 'byte-compile-file-form-defvar) (defun byte-compile-file-form-defvar (form) - (if (null (nth 3 form)) - ;; Since there is no doc string, we can compile this as a normal form, - ;; and not do a file-boundary. - (byte-compile-keep-pending form) - (when (and (symbolp (nth 1 form)) - (not (string-match "[-*/:$]" (symbol-name (nth 1 form)))) - (byte-compile-warning-enabled-p 'lexical)) - (byte-compile-warn "global/dynamic var `%s' lacks a prefix" - (nth 1 form))) - (push (nth 1 form) byte-compile-bound-variables) - (if (eq (car form) 'defconst) - (push (nth 1 form) byte-compile-const-variables)) + (when (and (symbolp (nth 1 form)) + (not (string-match "[-*/:$]" (symbol-name (nth 1 form)))) + (byte-compile-warning-enabled-p 'lexical)) + (byte-compile-warn "global/dynamic var `%s' lacks a prefix" + (nth 1 form))) + (push (nth 1 form) byte-compile-bound-variables) + (if (eq (car form) 'defconst) + (push (nth 1 form) byte-compile-const-variables)) + (if (and (null (cddr form)) ;No `value' provided. + (eq (car form) 'defvar)) ;Just a declaration. + nil (cond ((consp (nth 2 form)) - (setq form (copy-sequence form)) - (setcar (cdr (cdr form)) - (byte-compile-top-level (nth 2 form) nil 'file)))) + (setq form (copy-sequence form)) + (setcar (cdr (cdr form)) + (byte-compile-top-level (nth 2 form) nil 'file)))) form)) (put 'define-abbrev-table 'byte-hunk-handler @@ -4124,8 +4123,10 @@ binding slots have been popped." (push (nth 1 (nth 1 form)) byte-compile-global-not-obsolete-vars)) (byte-compile-normal-call form)) +(defconst byte-compile-tmp-var (make-symbol "def-tmp-var")) + (defun byte-compile-defvar (form) - ;; This is not used for file-level defvar/consts with doc strings. + ;; This is not used for file-level defvar/consts. (when (and (symbolp (nth 1 form)) (not (string-match "[-*/:$]" (symbol-name (nth 1 form)))) (byte-compile-warning-enabled-p 'lexical)) @@ -4148,32 +4149,21 @@ binding slots have been popped." (push var byte-compile-bound-variables) (if (eq fun 'defconst) (push var byte-compile-const-variables)) - (byte-compile-body-do-effect - (list - ;; Put the defined variable in this library's load-history entry - ;; just as a real defvar would, but only in top-level forms. - (when (and (cddr form) (null byte-compile-current-form)) - `(setq current-load-list (cons ',var current-load-list))) - (when (> (length form) 3) - (when (and string (not (stringp string))) - (byte-compile-warn "third arg to `%s %s' is not a string: %s" - fun var string)) - `(put ',var 'variable-documentation ,string)) - (if (cddr form) ; `value' provided - (let ((byte-compile-not-obsolete-vars (list var))) - (if (eq fun 'defconst) - ;; `defconst' sets `var' unconditionally. - (let ((tmp (make-symbol "defconst-tmp-var"))) - ;; Quote with `quote' to prevent byte-compiling the body, - ;; which would lead to an inf-loop. - `(funcall '(lambda (,tmp) (defconst ,var ,tmp)) - ,value)) - ;; `defvar' sets `var' only when unbound. - `(if (not (default-boundp ',var)) (setq-default ,var ,value)))) - (when (eq fun 'defconst) - ;; This will signal an appropriate error at runtime. - `(eval ',form))) - `',var)))) + (when (and string (not (stringp string))) + (byte-compile-warn "third arg to `%s %s' is not a string: %s" + fun var string)) + (byte-compile-form-do-effect + (if (cddr form) ; `value' provided + ;; Quote with `quote' to prevent byte-compiling the body, + ;; which would lead to an inf-loop. + `(funcall '(lambda (,byte-compile-tmp-var) + (,fun ,var ,byte-compile-tmp-var ,@(nthcdr 3 form))) + ,value) + (if (eq fun 'defconst) + ;; This will signal an appropriate error at runtime. + `(eval ',form) + ;; A simple (defvar foo) just returns foo. + `',var))))) (defun byte-compile-autoload (form) (byte-compile-set-symbol-position 'autoload) diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el index b0bfde8b4b7..dbacba6cd29 100644 --- a/lisp/emacs-lisp/easy-mmode.el +++ b/lisp/emacs-lisp/easy-mmode.el @@ -86,9 +86,18 @@ replacing its case-insensitive matches with the literal string in LIGHTER." ;;;###autoload (defmacro define-minor-mode (mode doc &optional init-value lighter keymap &rest body) "Define a new minor mode MODE. -This defines the control variable MODE and the toggle command MODE. +This defines the toggle command MODE and (by default) a control variable +MODE (you can override this with the :variable keyword, see below). DOC is the documentation for the mode toggle command. +The defined mode command takes one optional (prefix) argument. +Interactively with no prefix argument it toggles the mode. +With a prefix argument, it enables the mode if the argument is +positive and otherwise disables it. When called from Lisp, it +enables the mode if the argument is omitted or nil, and toggles +the mode if the argument is `toggle'. If DOC is nil this +function adds a basic doc-string stating these facts. + Optional INIT-VALUE is the initial value of the mode's variable. Optional LIGHTER is displayed in the modeline when the mode is on. Optional KEYMAP is the default keymap bound to the mode keymap. @@ -113,15 +122,19 @@ BODY contains code to execute each time the mode is enabled or disabled. buffer-local, so don't make the variable MODE buffer-local. By default, the mode is buffer-local. :init-value VAL Same as the INIT-VALUE argument. + Not used if you also specify :variable. :lighter SPEC Same as the LIGHTER argument. :keymap MAP Same as the KEYMAP argument. :require SYM Same as in `defcustom'. -:variable PLACE The location (as can be used with `setf') to use instead - of the variable MODE to store the state of the mode. PLACE - can also be of the form (GET . SET) where GET is an expression - that returns the current state and SET is a function that takes - a new state and sets it. If you specify a :variable, this - function assumes it is defined elsewhere. +:variable PLACE The location to use instead of the variable MODE to store + the state of the mode. This can be simply a different + named variable, or more generally anything that can be used + with the CL macro `setf'. PLACE can also be of the form + \(GET . SET), where GET is an expression that returns the + current state, and SET is a function that takes one argument, + the new state, and sets it. If you specify a :variable, + this function does not define a MODE variable (nor any of + the terms used in :variable). For example, you could write (define-minor-mode foo-mode \"If enabled, foo on you!\" @@ -160,7 +173,7 @@ For example, you could write (hook (intern (concat mode-name "-hook"))) (hook-on (intern (concat mode-name "-on-hook"))) (hook-off (intern (concat mode-name "-off-hook"))) - keyw keymap-sym) + keyw keymap-sym tmp) ;; Check keys. (while (keywordp (setq keyw (car body))) @@ -177,7 +190,9 @@ For example, you could write (:require (setq require (pop body))) (:keymap (setq keymap (pop body))) (:variable (setq variable (pop body)) - (if (not (functionp (cdr-safe variable))) + (if (not (and (setq tmp (cdr-safe variable)) + (or (symbolp tmp) + (functionp tmp)))) ;; PLACE is not of the form (GET . SET). (setq mode variable) (setq mode (car variable)) @@ -235,7 +250,7 @@ or call the function `%s'.")))) (format (concat "Toggle %s on or off. With a prefix argument ARG, enable %s if ARG is positive, and disable it otherwise. If called from Lisp, enable -the mode if ARG is omitted or nil. +the mode if ARG is omitted or nil, and toggle it if ARG is `toggle'. \\{%s}") pretty-name pretty-name keymap-sym)) ;; Use `toggle' rather than (if ,mode 0 1) so that using ;; repeat-command still does the toggling correctly. @@ -286,7 +301,7 @@ the mode if ARG is omitted or nil. ,(if keymap keymap-sym `(if (boundp ',keymap-sym) ,keymap-sym)) nil - ,(unless (eq mode modefun) 'modefun))))))) + ,(unless (eq mode modefun) `',modefun))))))) ;;; ;;; make global minor mode diff --git a/lisp/emacs-lisp/ert-x.el b/lisp/emacs-lisp/ert-x.el index b9e97854349..257d0528cbc 100644 --- a/lisp/emacs-lisp/ert-x.el +++ b/lisp/emacs-lisp/ert-x.el @@ -167,8 +167,9 @@ test for `called-interactively' in the command will fail." (run-hooks 'pre-command-hook) (setq return-value (apply (car command) (cdr command))) (run-hooks 'post-command-hook) - (when deferred-action-list - (run-hooks 'deferred-action-function)) + (and (boundp 'deferred-action-list) + deferred-action-list + (run-hooks 'deferred-action-function)) (setq real-last-command (car command) last-command this-command) (when (boundp 'last-repeatable-command) diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el index 3d581e26758..95eb8c963be 100644 --- a/lisp/emacs-lisp/lisp-mode.el +++ b/lisp/emacs-lisp/lisp-mode.el @@ -34,8 +34,14 @@ (defvar font-lock-string-face) (defvar lisp-mode-abbrev-table nil) +(define-abbrev-table 'lisp-mode-abbrev-table () + "Abbrev table for Lisp mode.") -(define-abbrev-table 'lisp-mode-abbrev-table ()) +(defvar emacs-lisp-mode-abbrev-table nil) +(define-abbrev-table 'emacs-lisp-mode-abbrev-table () + "Abbrev table for Emacs Lisp mode. +It has `lisp-mode-abbrev-table' as its parent." + :parents (list lisp-mode-abbrev-table)) (defvar emacs-lisp-mode-syntax-table (let ((table (make-syntax-table)) @@ -206,7 +212,6 @@ score-mode.el. KEYWORDS-CASE-INSENSITIVE non-nil means that for font-lock keywords will not be case sensitive." (when lisp-syntax (set-syntax-table lisp-mode-syntax-table)) - (setq local-abbrev-table lisp-mode-abbrev-table) (make-local-variable 'paragraph-ignore-fill-prefix) (setq paragraph-ignore-fill-prefix t) (make-local-variable 'fill-paragraph-function) @@ -540,7 +545,8 @@ Semicolons start comments. \\{lisp-interaction-mode-map} Entry to this mode calls the value of `lisp-interaction-mode-hook' -if that value is non-nil.") +if that value is non-nil." + :abbrev-table nil) (defun eval-print-last-sexp () "Evaluate sexp before point; print value into current buffer. diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 881760216c3..d80454ba269 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -382,30 +382,37 @@ controls which package subdirectories may be loaded. In each valid package subdirectory, this function loads the description file containing a call to `define-package', which updates `package-alist' and `package-obsolete-alist'." - (let ((all (memq 'all package-load-list)) - (regexp (concat "\\`" package-subdirectory-regexp "\\'")) - name version force) + (let ((regexp (concat "\\`" package-subdirectory-regexp "\\'"))) (dolist (dir (cons package-user-dir package-directory-list)) (when (file-directory-p dir) (dolist (subdir (directory-files dir)) - (when (and (file-directory-p (expand-file-name subdir dir)) - (string-match regexp subdir)) - (setq name (intern (match-string 1 subdir)) - version (match-string 2 subdir) - force (assq name package-load-list)) - (when (cond - ((null force) - all) ; not in package-load-list - ((null (setq force (cadr force))) - nil) ; disabled - ((eq force t) - t) - ((stringp force) ; held - (version-list-= (version-to-list version) - (version-to-list force))) - (t - (error "Invalid element in `package-load-list'"))) - (package-load-descriptor dir subdir)))))))) + (when (string-match regexp subdir) + (package-maybe-load-descriptor (match-string 1 subdir) + (match-string 2 subdir) + dir))))))) + +(defun package-maybe-load-descriptor (name version dir) + "Maybe load a specific package from directory DIR. +NAME and VERSION are the package's name and version strings. +This function checks `package-load-list', before actually loading +the package by calling `package-load-descriptor'." + (let ((force (assq (intern name) package-load-list)) + (subdir (concat name "-" version))) + (and (file-directory-p (expand-file-name subdir dir)) + ;; Check `package-load-list': + (cond ((null force) + (memq 'all package-load-list)) + ((null (setq force (cadr force))) + nil) ; disabled + ((eq force t) + t) + ((stringp force) ; held + (version-list-= (version-to-list version) + (version-to-list force))) + (t + (error "Invalid element in `package-load-list'"))) + ;; Actually load the descriptor: + (package-load-descriptor dir subdir)))) (defsubst package-desc-vers (desc) "Extract version from a package description vector." @@ -861,7 +868,13 @@ using `package-compute-transaction'." (package-desc-doc desc) (package-desc-reqs desc))) (t - (error "Unknown package kind: %s" (symbol-name kind))))))) + (error "Unknown package kind: %s" (symbol-name kind)))) + ;; If package A depends on package B, then A may `require' B + ;; during byte compilation. So we need to activate B before + ;; unpacking A. + (package-maybe-load-descriptor (symbol-name elt) v-string + package-user-dir) + (package-activate elt (version-to-list v-string))))) (defvar package--initialized nil) @@ -876,6 +889,8 @@ archive in `package-archives'. Interactively, prompt for NAME." ;; symbols for completion. (unless package--initialized (package-initialize t)) + (unless package-archive-contents + (package-refresh-contents)) (list (intern (completing-read "Install package: " (mapcar (lambda (elt) @@ -889,9 +904,7 @@ archive in `package-archives'. Interactively, prompt for NAME." (symbol-name name))) (package-download-transaction (package-compute-transaction (list name) - (package-desc-reqs (cdr pkg-desc))))) - ;; Try to activate it. - (package-initialize)) + (package-desc-reqs (cdr pkg-desc)))))) (defun package-strip-rcs-id (str) "Strip RCS version ID from the version string STR. @@ -1090,7 +1103,7 @@ makes them available for download." (unless (file-exists-p package-user-dir) (make-directory package-user-dir t)) (dolist (archive package-archives) - (condition-case-no-debug nil + (condition-case-unless-debug nil (package--download-one-archive archive "archive-contents") (error (message "Failed to download `%s' archive." (car archive))))) @@ -1595,7 +1608,7 @@ packages marked for deletion are removed." delete-list ", ")))) (dolist (elt delete-list) - (condition-case-no-debug err + (condition-case-unless-debug err (package-delete (car elt) (cdr elt)) (error (message (cadr err))))) (error "Aborted"))) diff --git a/lisp/emacs-lisp/pp.el b/lisp/emacs-lisp/pp.el index c795d985b7e..48e0d6d6a21 100644 --- a/lisp/emacs-lisp/pp.el +++ b/lisp/emacs-lisp/pp.el @@ -41,17 +41,14 @@ "Return a string containing the pretty-printed representation of OBJECT. OBJECT can be any Lisp object. Quoting characters are used as needed to make output that `read' can handle, whenever this is possible." - (with-current-buffer (generate-new-buffer " pp-to-string") - (unwind-protect - (progn - (lisp-mode-variables nil) - (set-syntax-table emacs-lisp-mode-syntax-table) - (let ((print-escape-newlines pp-escape-newlines) - (print-quoted t)) - (prin1 object (current-buffer))) - (pp-buffer) - (buffer-string)) - (kill-buffer (current-buffer))))) + (with-temp-buffer + (lisp-mode-variables nil) + (set-syntax-table emacs-lisp-mode-syntax-table) + (let ((print-escape-newlines pp-escape-newlines) + (print-quoted t)) + (prin1 object (current-buffer))) + (pp-buffer) + (buffer-string))) ;;;###autoload (defun pp-buffer () @@ -60,9 +57,7 @@ to make output that `read' can handle, whenever this is possible." (while (not (eobp)) ;; (message "%06d" (- (point-max) (point))) (cond - ((condition-case err-var - (prog1 t (down-list 1)) - (error nil)) + ((ignore-errors (down-list 1) t) (save-excursion (backward-char 1) (skip-chars-backward "'`#^") @@ -71,10 +66,8 @@ to make output that `read' can handle, whenever this is possible." (point) (progn (skip-chars-backward " \t\n") (point))) (insert "\n")))) - ((condition-case err-var - (prog1 t (up-list 1)) - (error nil)) - (while (looking-at "\\s)") + ((ignore-errors (up-list 1) t) + (while (looking-at-p "\\s)") (forward-char 1)) (delete-region (point) @@ -154,7 +147,7 @@ Also add the value to the front of the list in the variable `values'." (save-excursion (forward-sexp -1) ;; If first line is commented, ignore all leading comments: - (if (save-excursion (beginning-of-line) (looking-at "[ \t]*;")) + (if (save-excursion (beginning-of-line) (looking-at-p "[ \t]*;")) (progn (setq exp (buffer-substring (point) pt)) (while (string-match "\n[ \t]*;+" exp start) diff --git a/lisp/emacs-lisp/smie.el b/lisp/emacs-lisp/smie.el index 4596052766f..2a12f03e514 100644 --- a/lisp/emacs-lisp/smie.el +++ b/lisp/emacs-lisp/smie.el @@ -56,7 +56,7 @@ ;; building the 2D precedence tables and then computing the precedence levels ;; from it) can be found in pages 187-194 of "Parsing techniques" by Dick Grune ;; and Ceriel Jacobs (BookBody.pdf available at -;; http://www.cs.vu.nl/~dick/PTAPG.html). +;; http://dickgrune.com/Books/PTAPG_1st_Edition/). ;; ;; OTOH we had to kill many chickens, read many coffee grounds, and practice ;; untold numbers of black magic spells, to come up with the indentation code. diff --git a/lisp/emacs-lisp/tabulated-list.el b/lisp/emacs-lisp/tabulated-list.el index 486635f7091..8fe514ab551 100644 --- a/lisp/emacs-lisp/tabulated-list.el +++ b/lisp/emacs-lisp/tabulated-list.el @@ -1,4 +1,4 @@ -;;; tabulated-list.el --- generic major mode for tabulated lists. +;;; tabulated-list.el --- generic major mode for tabulated lists -*- lexical-binding: t -*- ;; Copyright (C) 2011-2012 Free Software Foundation, Inc. @@ -362,7 +362,6 @@ as the ewoc pretty-printer." ;; Local Variables: ;; coding: utf-8 -;; lexical-binding: t ;; End: ;;; tabulated-list.el ends here diff --git a/lisp/emulation/tpu-edt.el b/lisp/emulation/tpu-edt.el index 6df8801e6b4..305e3e73be0 100644 --- a/lisp/emulation/tpu-edt.el +++ b/lisp/emulation/tpu-edt.el @@ -979,7 +979,10 @@ and the total number of lines in the buffer." ;;; ;;;###autoload (define-minor-mode tpu-edt-mode - "TPU/edt emulation." + "Toggle TPU/edt emulation on or off. +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil." :global t (if tpu-edt-mode (tpu-edt-on) (tpu-edt-off))) @@ -2437,11 +2440,14 @@ If FILE is nil, try to load a default file. The default file names are ;;;### (autoloads (tpu-set-cursor-bound tpu-set-cursor-free tpu-set-scroll-margins -;;;;;; tpu-cursor-free-mode) "tpu-extras" "tpu-extras.el" "512b5771d29a538e69567644413951a8") +;;;;;; tpu-cursor-free-mode) "tpu-extras" "tpu-extras.el" "76f06905db4c5bfb3b86491a51512a0e") ;;; Generated autoloads from tpu-extras.el (autoload 'tpu-cursor-free-mode "tpu-extras" "\ Minor mode to allow the cursor to move freely about the screen. +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil. \(fn &optional ARG)" t nil) diff --git a/lisp/emulation/tpu-extras.el b/lisp/emulation/tpu-extras.el index 53f617d8821..521b189e3bc 100644 --- a/lisp/emulation/tpu-extras.el +++ b/lisp/emulation/tpu-extras.el @@ -132,7 +132,10 @@ the previous line when starting from a line beginning." ;;;###autoload (define-minor-mode tpu-cursor-free-mode - "Minor mode to allow the cursor to move freely about the screen." + "Minor mode to allow the cursor to move freely about the screen. +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil." :init-value nil (if (not tpu-cursor-free-mode) (tpu-trim-line-ends)) diff --git a/lisp/epa-mail.el b/lisp/epa-mail.el index b63890e4e87..22bfe03cab0 100644 --- a/lisp/epa-mail.el +++ b/lisp/epa-mail.el @@ -47,7 +47,10 @@ ;;;###autoload (define-minor-mode epa-mail-mode - "A minor-mode for composing encrypted/clearsigned mails." + "A minor-mode for composing encrypted/clearsigned mails. +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil." nil " epa-mail" epa-mail-mode-map) (defun epa-mail--find-usable-key (keys usage) @@ -202,7 +205,10 @@ Don't use this command in Lisp programs!" ;;;###autoload (define-minor-mode epa-global-mail-mode - "Minor mode to hook EasyPG into Mail mode." + "Minor mode to hook EasyPG into Mail mode. +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil." :global t :init-value nil :group 'epa-mail :version "23.1" (remove-hook 'mail-mode-hook 'epa-mail-mode) (if epa-global-mail-mode diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog index d9b1cdf856e..af853c4e230 100644 --- a/lisp/erc/ChangeLog +++ b/lisp/erc/ChangeLog @@ -1,3 +1,9 @@ +2012-02-08 Glenn Morris + + * erc-backend.el (erc-coding-system-precedence): + * erc-join.el (erc-autojoin-delay, erc-autojoin-timing): + Add missing :version settings. + 2012-01-06 Glenn Morris * erc.el (erc-tls): Add autoload cookie. (Bug#10333) @@ -85,6 +91,10 @@ erc-button-next. (button, erc-button-next): Use it. +2011-04-20 Stefan Monnier + + * erc-hecomplete.el: Move to ../obsolete. + 2011-03-07 Chong Yidong * Version 23.3 released. diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el index 2c76b04e3ef..7bc56584eaf 100644 --- a/lisp/erc/erc-backend.el +++ b/lisp/erc/erc-backend.el @@ -329,6 +329,7 @@ Good luck." This will only be consulted if the coding system in `erc-server-coding-system' is `undecided'." :group 'erc-server + :version "24.1" :type '(repeat coding-system)) (defcustom erc-server-coding-system (if (and (fboundp 'coding-system-p) diff --git a/lisp/erc/erc-join.el b/lisp/erc/erc-join.el index 855dde75542..da894ba5977 100644 --- a/lisp/erc/erc-join.el +++ b/lisp/erc/erc-join.el @@ -75,6 +75,7 @@ If the value is `ident', autojoin after successful NickServ identification, or after `erc-autojoin-delay' seconds. Any other value means the same as `connect'." :group 'erc-autojoin + :version "24.1" :type '(choice (const :tag "On Connection" 'connect) (const :tag "When Identified" 'ident))) @@ -84,6 +85,7 @@ This only takes effect if `erc-autojoin-timing' is `ident'. If NickServ identification occurs before this delay expires, ERC autojoins immediately at that time." :group 'erc-autojoin + :version "24.1" :type 'integer) (defcustom erc-autojoin-domain-only t diff --git a/lisp/eshell/em-unix.el b/lisp/eshell/em-unix.el index f24180b5c7f..6ac53e30e86 100644 --- a/lisp/eshell/em-unix.el +++ b/lisp/eshell/em-unix.el @@ -599,7 +599,7 @@ symlink, then revert to the system's definition of cat." (let ((ext-cat (eshell-search-path "cat"))) (if ext-cat (throw 'eshell-replace-command - (eshell-parse-command ext-cat args)) + (eshell-parse-command (eshell-quote-argument ext-cat) args)) (if eshell-in-pipeline-p (error "Eshell's `cat' does not work in pipelines") (error "Eshell's `cat' cannot display one of the files given")))) @@ -792,8 +792,6 @@ external command." (funcall (or (pcomplete-find-completion-function (pcomplete-arg 1)) pcomplete-default-completion-function))) -(defalias 'pcomplete/ssh 'pcomplete/rsh) - (defvar block-size) (defvar by-bytes) (defvar dereference-links) @@ -857,7 +855,7 @@ external command." (file-remote-p (expand-file-name arg) 'method) "ftp") (throw 'have-ange-path t)))))) (throw 'eshell-replace-command - (eshell-parse-command ext-du args)) + (eshell-parse-command (eshell-quote-argument ext-du) args)) (eshell-eval-using-options "du" args '((?a "all" nil show-all diff --git a/lisp/eshell/esh-arg.el b/lisp/eshell/esh-arg.el index 8143f2d65be..ad52a5d4a71 100644 --- a/lisp/eshell/esh-arg.el +++ b/lisp/eshell/esh-arg.el @@ -202,6 +202,18 @@ If POS is nil, the location of point is checked." (or (= pos (point-max)) (memq (char-after pos) eshell-delimiter-argument-list)))) +(defun eshell-quote-argument (string) + "Return STRING with magic characters quoted. +Magic characters are those in `eshell-special-chars-outside-quoting'." + (let ((index 0)) + (mapconcat (lambda (c) + (prog1 + (or (eshell-quote-backslash string index) + (char-to-string c)) + (setq index (1+ index)))) + string + ""))) + ;; Argument parsing (defun eshell-parse-arguments (beg end) diff --git a/lisp/eshell/esh-ext.el b/lisp/eshell/esh-ext.el index a33ccc82978..f025c66df32 100644 --- a/lisp/eshell/esh-ext.el +++ b/lisp/eshell/esh-ext.el @@ -91,7 +91,7 @@ since nothing else but Eshell will be able to understand (defcustom eshell-windows-shell-file (if (eshell-under-windows-p) - (if (string-match "\\(\\`cmdproxy\\|sh\\)\\.\\(com\\|exe\\)" + (if (string-match "\\(cmdproxy\\|sh\\)\\.\\(com\\|exe\\)" shell-file-name) (or (eshell-search-path "cmd.exe") (eshell-search-path "command.com")) @@ -108,7 +108,9 @@ wholly ignored." ;; argument... (setcar args (subst-char-in-string ?/ ?\\ (car args))) (throw 'eshell-replace-command - (eshell-parse-command eshell-windows-shell-file (cons "/c" args)))) + (eshell-parse-command + (eshell-quote-argument eshell-windows-shell-file) + (cons "/c" args)))) (defcustom eshell-interpreter-alist (if (eshell-under-windows-p) diff --git a/lisp/eshell/esh-util.el b/lisp/eshell/esh-util.el index f111fd91230..8218e91ddc7 100644 --- a/lisp/eshell/esh-util.el +++ b/lisp/eshell/esh-util.el @@ -483,7 +483,7 @@ list." (insert-file-contents eshell-hosts-file) (goto-char (point-min)) (while (re-search-forward - "^\\(\\S-+\\)\\s-+\\(\\S-+\\)\\(\\s-*\\(\\S-+\\)\\)?" nil t) + "^\\([^#[:space:]]+\\)\\s-+\\(\\S-+\\)\\(\\s-*\\(\\S-+\\)\\)?" nil t) (if (match-string 1) (add-to-list 'hosts (match-string 1))) (if (match-string 2) diff --git a/lisp/face-remap.el b/lisp/face-remap.el index 146cea80a9e..3af9e31a6f7 100644 --- a/lisp/face-remap.el +++ b/lisp/face-remap.el @@ -205,6 +205,9 @@ Each positive or negative step scales the default face height by this amount." (define-minor-mode text-scale-mode "Minor mode for displaying buffer text in a larger/smaller font. +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil. The amount of scaling is determined by the variable `text-scale-mode-amount': one step scales the global default @@ -334,8 +337,10 @@ plist, etc." ;;;###autoload (define-minor-mode buffer-face-mode "Minor mode for a buffer-specific default face. -When enabled, the face specified by the variable -`buffer-face-mode-face' is used to display the buffer text." +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil. When enabled, the face specified by the +variable `buffer-face-mode-face' is used to display the buffer text." :lighter " BufFace" (when buffer-face-mode-remapping (face-remap-remove-relative buffer-face-mode-remapping)) diff --git a/lisp/facemenu.el b/lisp/facemenu.el index e5d14be15dd..743115839b2 100644 --- a/lisp/facemenu.el +++ b/lisp/facemenu.el @@ -519,17 +519,14 @@ filter out the color from the output." "Display names of defined colors, and show what they look like. If the optional argument LIST is non-nil, it should be a list of colors to display. Otherwise, this command computes a list of -colors that the current display can handle. +colors that the current display can handle. Customize +`list-colors-sort' to change the order in which colors are shown. -If the optional argument BUFFER-NAME is nil, it defaults to -*Colors*. +If the optional argument BUFFER-NAME is nil, it defaults to *Colors*. If the optional argument CALLBACK is non-nil, it should be a function to call each time the user types RET or clicks on a -color. The function should accept a single argument, the color -name. - -You can change the color sort order by customizing `list-colors-sort'." +color. The function should accept a single argument, the color name." (interactive) (when (and (null list) (> (display-color-cells) 0)) (setq list (list-colors-duplicates (defined-colors))) diff --git a/lisp/faces.el b/lisp/faces.el index 5d406ad7c0b..cd7f92bfad4 100644 --- a/lisp/faces.el +++ b/lisp/faces.el @@ -1513,11 +1513,12 @@ If SPEC is nil, return nil." (defun face-spec-reset-face (face &optional frame) "Reset all attributes of FACE on FRAME to unspecified." - (let (reset-args) - (dolist (attr-and-name face-attribute-name-alist) - (push 'unspecified reset-args) - (push (car attr-and-name) reset-args)) - (apply 'set-face-attribute face frame reset-args))) + (unless (eq face 'default) + (let (reset-args) + (dolist (attr-and-name face-attribute-name-alist) + (push 'unspecified reset-args) + (push (car attr-and-name) reset-args)) + (apply 'set-face-attribute face frame reset-args)))) (defun face-spec-set (face spec &optional for-defface) "Set FACE's face spec, which controls its appearance, to SPEC. diff --git a/lisp/files.el b/lisp/files.el index f15c523400d..87218c9a6e8 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -510,14 +510,36 @@ and ignores this variable." (other :tag "Query" other)) :group 'find-file) +;; This is an odd variable IMO. +;; You might wonder why it is needed, when we could just do: +;; (set (make-local-variable 'enable-local-variables) nil) +;; These two are not precisely the same. +;; Setting this variable does not cause -*- mode settings to be +;; ignored, whereas setting enable-local-variables does. +;; Only three places in Emacs use this variable: tar and arc modes, +;; and rmail. The first two don't need it. They already use +;; inhibit-local-variables-regexps, which is probably enough, and +;; could also just set enable-local-variables locally to nil. +;; Them setting it has the side-effect that dir-locals cannot apply to +;; eg tar files (?). FIXME Is this appropriate? +;; AFAICS, rmail is the only thing that needs this, and the only +;; reason it uses it is for BABYL files (which are obsolete). +;; These contain "-*- rmail -*-" in the first line, which rmail wants +;; to respect, so that find-file on a BABYL file will switch to +;; rmail-mode automatically (this is nice, but hardly essential, +;; since most people are used to explicitly running a command to +;; access their mail; M-x gnus etc). Rmail files may happen to +;; contain Local Variables sections in messages, which Rmail wants to +;; ignore. So AFAICS the only reason this variable exists is for a +;; minor convenience feature for handling of an obsolete Rmail file format. (defvar local-enable-local-variables t "Like `enable-local-variables' but meant for buffer-local bindings. The meaningful values are nil and non-nil. The default is non-nil. If a major mode sets this to nil, buffer-locally, then any local -variables list in the file will be ignored. +variables list in a file visited in that mode will be ignored. -This variable does not affect the use of major modes -specified in a -*- line.") +This variable does not affect the use of major modes specified +in a -*- line.") (defcustom enable-local-eval 'maybe "Control processing of the \"variable\" `eval' in a file's local variables. @@ -959,20 +981,18 @@ Tip: You can use this expansion of remote identifier components (defcustom remote-file-name-inhibit-cache 10 "Whether to use the remote file-name cache for read access. +When `nil', never expire cached values (caution) +When `t', never use the cache (safe, but may be slow) +A number means use cached values for that amount of seconds since caching. -When `nil', always use the cached values. -When `t', never use them. -A number means use them for that amount of seconds since they were -cached. +The attributes of remote files are cached for better performance. +If they are changed outside of Emacs's control, the cached values +become invalid, and must be reread. If you are sure that nothing +other than Emacs changes the files, you can set this variable to `nil'. -File attributes of remote files are cached for better performance. -If they are changed out of Emacs' control, the cached values -become invalid, and must be invalidated. - -In case a remote file is checked regularly, it might be -reasonable to let-bind this variable to a value less then the -time period between two checks. -Example: +If a remote file is checked regularly, it might be a good idea to +let-bind this variable to a value less than the interval between +consecutive checks. For example: (defun display-time-file-nonempty-p (file) (let ((remote-file-name-inhibit-cache (- display-time-interval 5))) @@ -2405,9 +2425,6 @@ If the element has the form (REGEXP FUNCTION NON-NIL), then after calling FUNCTION (if it's not nil), we delete the suffix that matched REGEXP and search the list again for another match. -If the file name matches `inhibit-first-line-modes-regexps', -then `auto-mode-alist' is not processed. - The extensions whose FUNCTION is `archive-mode' should also appear in `auto-coding-alist' with `no-conversion' coding system. @@ -2478,16 +2495,55 @@ of a script, mode MODE is enabled. See also `auto-mode-alist'.") -(defvar inhibit-first-line-modes-regexps - (mapcar 'purecopy '("\\.tar\\'" "\\.tgz\\'" "\\.tiff?\\'" - "\\.gif\\'" "\\.png\\'" "\\.jpe?g\\'")) - "List of regexps; if one matches a file name, don't look for `-*-'.") +(define-obsolete-variable-alias 'inhibit-first-line-modes-regexps + 'inhibit-file-local-variables-regexps "24.1") -(defvar inhibit-first-line-modes-suffixes nil - "List of regexps for what to ignore, for `inhibit-first-line-modes-regexps'. -When checking `inhibit-first-line-modes-regexps', we first discard +;; TODO really this should be a list of modes (eg tar-mode), not regexps, +;; because we are duplicating info from auto-mode-alist. +;; TODO many elements of this list are also in auto-coding-alist. +(defvar inhibit-local-variables-regexps + (mapcar 'purecopy '("\\.tar\\'" "\\.t[bg]z\\'" + "\\.arc\\'" "\\.zip\\'" "\\.lzh\\'" "\\.lha\\'" + "\\.zoo\\'" "\\.[jew]ar\\'" "\\.xpi\\'" "\\.rar\\'" + "\\.7z\\'" + "\\.sx[dmicw]\\'" "\\.odt\\'" + "\\.tiff?\\'" "\\.gif\\'" "\\.png\\'" "\\.jpe?g\\'")) + "List of regexps matching file names in which to ignore local variables. +This includes `-*-' lines as well as trailing \"Local Variables\" sections. +Files matching this list are typically binary file formats. +They may happen to contain sequences that look like local variable +specifications, but are not really, or they may be containers for +member files with their own local variable sections, which are +not appropriate for the containing file. +See also `inhibit-local-variables-suffixes'.") + +(define-obsolete-variable-alias 'inhibit-first-line-modes-suffixes + 'inhibit-local-variables-suffixes "24.1") + +(defvar inhibit-local-variables-suffixes nil + "List of regexps matching suffixes to remove from file names. +When checking `inhibit-local-variables-regexps', we first discard from the end of the file name anything that matches one of these regexps.") +;; TODO explicitly add case-fold-search t? +(defun inhibit-local-variables-p () + "Return non-nil if file local variables should be ignored. +This checks the file (or buffer) name against `inhibit-local-variables-regexps' +and `inhibit-local-variables-suffixes'." + (let ((temp inhibit-local-variables-regexps) + (name (if buffer-file-name + (file-name-sans-versions buffer-file-name) + (buffer-name)))) + (while (let ((sufs inhibit-local-variables-suffixes)) + (while (and sufs (not (string-match (car sufs) name))) + (setq sufs (cdr sufs))) + sufs) + (setq name (substring name 0 (match-beginning 0)))) + (while (and temp + (not (string-match (car temp) name))) + (setq temp (cdr temp))) + temp)) + (defvar auto-mode-interpreter-regexp (purecopy "#![ \t]?\\([^ \t\n]*\ /bin/env[ \t]\\)?\\([^ \t\n]+\\)") @@ -2550,21 +2606,24 @@ Also applies to `magic-fallback-mode-alist'.") (defun set-auto-mode (&optional keep-mode-if-same) "Select major mode appropriate for current buffer. -To find the right major mode, this function checks for a -*- mode tag, +To find the right major mode, this function checks for a -*- mode tag checks for a `mode:' entry in the Local Variables section of the file, checks if it uses an interpreter listed in `interpreter-mode-alist', matches the buffer beginning against `magic-mode-alist', compares the filename against the entries in `auto-mode-alist', then matches the buffer beginning against `magic-fallback-mode-alist'. -If `enable-local-variables' is nil, this function does not check for -any mode: tag anywhere in the file. +If `enable-local-variables' is nil, or if the file name matches +`inhibit-local-variables-regexps', this function does not check +for any mode: tag anywhere in the file. If `local-enable-local-variables' +is nil, then the only mode: tag that can be relevant is a -*- one. If the optional argument KEEP-MODE-IF-SAME is non-nil, then we set the major mode only if that would change it. In other words we don't actually set it to the same mode the buffer already has." ;; Look for -*-MODENAME-*- or -*- ... mode: MODENAME; ... -*- - (let (end done mode modes) + (let ((try-locals (not (inhibit-local-variables-p))) + end done mode modes) ;; Once we drop the deprecated feature where mode: is also allowed to ;; specify minor-modes (ie, there can be more than one "mode:"), we can ;; remove this section and just let (hack-local-variables t) handle it. @@ -2572,7 +2631,9 @@ we don't actually set it to the same mode the buffer already has." (save-excursion (goto-char (point-min)) (skip-chars-forward " \t\n") + ;; Note by design local-enable-local-variables does not matter here. (and enable-local-variables + try-locals (setq end (set-auto-mode-1)) (if (save-excursion (search-forward ":" end t)) ;; Find all specifications for the `mode:' variable @@ -2603,8 +2664,12 @@ we don't actually set it to the same mode the buffer already has." (or (set-auto-mode-0 mode keep-mode-if-same) ;; continuing would call minor modes again, toggling them off (throw 'nop nil)))))) + ;; hack-local-variables checks local-enable-local-variables etc, but + ;; we might as well be explicit here for the sake of clarity. (and (not done) enable-local-variables + local-enable-local-variables + try-locals (setq mode (hack-local-variables t)) (not (memq mode modes)) ; already tried and failed (if (not (functionp mode)) @@ -2714,38 +2779,24 @@ same, do nothing and return nil." (defun set-auto-mode-1 () "Find the -*- spec in the buffer. Call with point at the place to start searching from. -If one is found, set point to the beginning -and return the position of the end. -Otherwise, return nil; point may be changed." +If one is found, set point to the beginning and return the position +of the end. Otherwise, return nil; may change point. +The variable `inhibit-local-variables-regexps' can cause a -*- spec to +be ignored; but `enable-local-variables' and `local-enable-local-variables' +have no effect." (let (beg end) (and ;; Don't look for -*- if this file name matches any - ;; of the regexps in inhibit-first-line-modes-regexps. - (let ((temp inhibit-first-line-modes-regexps) - (name (if buffer-file-name - (file-name-sans-versions buffer-file-name) - (buffer-name)))) - (while (let ((sufs inhibit-first-line-modes-suffixes)) - (while (and sufs (not (string-match (car sufs) name))) - (setq sufs (cdr sufs))) - sufs) - (setq name (substring name 0 (match-beginning 0)))) - (while (and temp - (not (string-match (car temp) name))) - (setq temp (cdr temp))) - (not temp)) - + ;; of the regexps in inhibit-local-variables-regexps. + (not (inhibit-local-variables-p)) (search-forward "-*-" (line-end-position - ;; If the file begins with "#!" - ;; (exec interpreter magic), look - ;; for mode frobs in the first two - ;; lines. You cannot necessarily - ;; put them in the first line of - ;; such a file without screwing up - ;; the interpreter invocation. - ;; The same holds for - ;; '\" - ;; in man pages (preprocessor + ;; If the file begins with "#!" (exec + ;; interpreter magic), look for mode frobs + ;; in the first two lines. You cannot + ;; necessarily put them in the first line + ;; of such a file without screwing up the + ;; interpreter invocation. The same holds + ;; for '\" in man pages (preprocessor ;; magic for the `man' program). (and (looking-at "^\\(#!\\|'\\\\\"\\)") 2)) t) (progn @@ -3090,19 +3141,41 @@ Uses `hack-local-variables-apply' to apply the variables. If MODE-ONLY is non-nil, all we do is check whether a \"mode:\" is specified, and return the corresponding mode symbol, or nil. In this case, we try to ignore minor-modes, and only return a -major-mode." +major-mode. + +If `enable-local-variables' or `local-enable-local-variables' is nil, +this function does nothing. If `inhibit-local-variables-regexps' +applies to the file in question, the file is not scanned for +local variables, but directory-local variables may still be applied." + ;; We don't let inhibit-local-variables-p influence the value of + ;; enable-local-variables, because then it would affect dir-local + ;; variables. We don't want to search eg tar files for file local + ;; variable sections, but there is no reason dir-locals cannot apply + ;; to them. The real meaning of inhibit-local-variables-p is "do + ;; not scan this file for local variables". (let ((enable-local-variables (and local-enable-local-variables enable-local-variables)) result) (unless mode-only (setq file-local-variables-alist nil) (report-errors "Directory-local variables error: %s" + ;; Note this is a no-op if enable-local-variables is nil. (hack-dir-local-variables))) - (when (or mode-only enable-local-variables) - ;; If MODE-ONLY is non-nil, and the prop line specifies a mode, - ;; then we're done, and have no need to scan further. - (unless (and (setq result (hack-local-variables-prop-line mode-only)) - mode-only) + ;; This entire function is basically a no-op if enable-local-variables + ;; is nil. All it does is set file-local-variables-alist to nil. + (when enable-local-variables + ;; This part used to ignore enable-local-variables when mode-only + ;; was non-nil. That was inappropriate, eg consider the + ;; (artificial) example of: + ;; (setq local-enable-local-variables nil) + ;; Open a file foo.txt that contains "mode: sh". + ;; It correctly opens in text-mode. + ;; M-x set-visited-file name foo.c, and it incorrectly stays in text-mode. + (unless (or (inhibit-local-variables-p) + ;; If MODE-ONLY is non-nil, and the prop line specifies a + ;; mode, then we're done, and have no need to scan further. + (and (setq result (hack-local-variables-prop-line mode-only)) + mode-only)) ;; Look for "Local variables:" line in last page. (save-excursion (goto-char (point-max)) @@ -3192,14 +3265,13 @@ major-mode." (indirect-variable var)) val) result) (error nil))))) - (forward-line 1))))))))) - ;; Now we've read all the local variables. - ;; If MODE-ONLY is non-nil, return whether the mode was specified. - (cond (mode-only result) - ;; Otherwise, set the variables. - (enable-local-variables - (hack-local-variables-filter result nil) - (hack-local-variables-apply))))) + (forward-line 1)))))))) + ;; Now we've read all the local variables. + ;; If MODE-ONLY is non-nil, return whether the mode was specified. + (if mode-only result + ;; Otherwise, set the variables. + (hack-local-variables-filter result nil) + (hack-local-variables-apply))))) (defun hack-local-variables-apply () "Apply the elements of `file-local-variables-alist'. @@ -3611,7 +3683,7 @@ the old visited file has been renamed to the new name FILENAME." (interactive "FSet visited file name: ") (if (buffer-base-buffer) (error "An indirect buffer cannot visit a file")) - (let (truename) + (let (truename old-try-locals) (if filename (setq filename (if (string-equal filename "") @@ -3636,7 +3708,8 @@ the old visited file has been renamed to the new name FILENAME." (progn (and filename (lock-buffer filename)) (unlock-buffer))) - (setq buffer-file-name filename) + (setq old-try-locals (not (inhibit-local-variables-p)) + buffer-file-name filename) (if filename ; make buffer name reflect filename. (let ((new-name (file-name-nondirectory buffer-file-name))) (setq default-directory (file-name-directory buffer-file-name)) @@ -3656,59 +3729,63 @@ the old visited file has been renamed to the new name FILENAME." (setq buffer-file-number (if filename (nthcdr 10 (file-attributes buffer-file-name)) - nil))) - ;; write-file-functions is normally used for things like ftp-find-file - ;; that visit things that are not local files as if they were files. - ;; Changing to visit an ordinary local file instead should flush the hook. - (kill-local-variable 'write-file-functions) - (kill-local-variable 'local-write-file-hooks) - (kill-local-variable 'revert-buffer-function) - (kill-local-variable 'backup-inhibited) - ;; If buffer was read-only because of version control, - ;; that reason is gone now, so make it writable. - (if vc-mode - (setq buffer-read-only nil)) - (kill-local-variable 'vc-mode) - ;; Turn off backup files for certain file names. - ;; Since this is a permanent local, the major mode won't eliminate it. - (and buffer-file-name - backup-enable-predicate - (not (funcall backup-enable-predicate buffer-file-name)) - (progn - (make-local-variable 'backup-inhibited) - (setq backup-inhibited t))) - (let ((oauto buffer-auto-save-file-name)) - ;; If auto-save was not already on, turn it on if appropriate. - (if (not buffer-auto-save-file-name) - (and buffer-file-name auto-save-default - (auto-save-mode t)) - ;; If auto save is on, start using a new name. - ;; We deliberately don't rename or delete the old auto save - ;; for the old visited file name. This is because perhaps - ;; the user wants to save the new state and then compare with the - ;; previous state from the auto save file. - (setq buffer-auto-save-file-name - (make-auto-save-file-name))) - ;; Rename the old auto save file if any. - (and oauto buffer-auto-save-file-name - (file-exists-p oauto) - (rename-file oauto buffer-auto-save-file-name t))) - (and buffer-file-name - (not along-with-file) - (set-buffer-modified-p t)) - ;; Update the major mode, if the file name determines it. - (condition-case nil - ;; Don't change the mode if it is special. - (or (not change-major-mode-with-file-name) - (get major-mode 'mode-class) - ;; Don't change the mode if the local variable list specifies it. - (hack-local-variables t) - ;; TODO consider making normal-mode handle this case. - (let ((old major-mode)) - (set-auto-mode t) - (or (eq old major-mode) - (hack-local-variables)))) - (error nil))) + nil)) + ;; write-file-functions is normally used for things like ftp-find-file + ;; that visit things that are not local files as if they were files. + ;; Changing to visit an ordinary local file instead should flush the hook. + (kill-local-variable 'write-file-functions) + (kill-local-variable 'local-write-file-hooks) + (kill-local-variable 'revert-buffer-function) + (kill-local-variable 'backup-inhibited) + ;; If buffer was read-only because of version control, + ;; that reason is gone now, so make it writable. + (if vc-mode + (setq buffer-read-only nil)) + (kill-local-variable 'vc-mode) + ;; Turn off backup files for certain file names. + ;; Since this is a permanent local, the major mode won't eliminate it. + (and buffer-file-name + backup-enable-predicate + (not (funcall backup-enable-predicate buffer-file-name)) + (progn + (make-local-variable 'backup-inhibited) + (setq backup-inhibited t))) + (let ((oauto buffer-auto-save-file-name)) + ;; If auto-save was not already on, turn it on if appropriate. + (if (not buffer-auto-save-file-name) + (and buffer-file-name auto-save-default + (auto-save-mode t)) + ;; If auto save is on, start using a new name. + ;; We deliberately don't rename or delete the old auto save + ;; for the old visited file name. This is because perhaps + ;; the user wants to save the new state and then compare with the + ;; previous state from the auto save file. + (setq buffer-auto-save-file-name + (make-auto-save-file-name))) + ;; Rename the old auto save file if any. + (and oauto buffer-auto-save-file-name + (file-exists-p oauto) + (rename-file oauto buffer-auto-save-file-name t))) + (and buffer-file-name + (not along-with-file) + (set-buffer-modified-p t)) + ;; Update the major mode, if the file name determines it. + (condition-case nil + ;; Don't change the mode if it is special. + (or (not change-major-mode-with-file-name) + (get major-mode 'mode-class) + ;; Don't change the mode if the local variable list specifies it. + ;; The file name can influence whether the local variables apply. + (and old-try-locals + ;; h-l-v also checks it, but might as well be explicit. + (not (inhibit-local-variables-p)) + (hack-local-variables t)) + ;; TODO consider making normal-mode handle this case. + (let ((old major-mode)) + (set-auto-mode t) + (or (eq old major-mode) + (hack-local-variables)))) + (error nil)))) (defun write-file (filename &optional confirm) "Write current buffer into file FILENAME. @@ -4784,7 +4861,13 @@ like `write-region' does." (defun rename-uniquely () "Rename current buffer to a similar name not already taken. This function is useful for creating multiple shell process buffers -or multiple mail buffers, etc." +or multiple mail buffers, etc. + +Note that some commands, in particular those based on `compilation-mode' +\(`compile', `grep', etc.) will reuse the current buffer if it has the +appropriate mode even if it has been renamed. So as well as renaming +the buffer, you also need to switch buffers before running another +instance of such commands." (interactive) (save-match-data (let ((base-name (buffer-name))) @@ -5052,6 +5135,8 @@ revert buffers without querying for confirmation.) Optional third argument PRESERVE-MODES non-nil means don't alter the files modes. Normally we reinitialize them using `normal-mode'. +This function binds `revert-buffer-in-progress-p' non-nil while it operates. + If the value of `revert-buffer-function' is non-nil, it is called to do all the work for this command. Otherwise, the hooks `before-revert-hook' and `after-revert-hook' are run at the beginning diff --git a/lisp/font-lock.el b/lisp/font-lock.el index 95bdc815e18..9f9445bdea9 100644 --- a/lisp/font-lock.el +++ b/lisp/font-lock.el @@ -2272,7 +2272,7 @@ in which C preprocessor directives are used. e.g. `asm-mode' and "save-selected-window" "save-window-excursion" "save-match-data" "save-current-buffer" "combine-after-change-calls" "unwind-protect" - "condition-case" "condition-case-no-debug" + "condition-case" "condition-case-unless-debug" "track-mouse" "eval-after-load" "eval-and-compile" "eval-when-compile" "eval-when" "eval-next-after-load" "with-case-table" "with-category-table" @@ -2283,7 +2283,7 @@ in which C preprocessor directives are used. e.g. `asm-mode' and "with-selected-window" "with-selected-frame" "with-silent-modifications" "with-syntax-table" "with-temp-buffer" "with-temp-file" "with-temp-message" - "with-timeout" "with-timeout-handler") t) + "with-timeout" "with-timeout-handler" "with-wrapper-hook") t) "\\>") . 1) ;; Control structures. Common Lisp forms. diff --git a/lisp/frame.el b/lisp/frame.el index 842d07abf50..1cd6c0cf181 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -39,8 +39,12 @@ function to this list, which should take an alist of parameters as its argument.") (defvar window-system-default-frame-alist nil - "Alist of window-system dependent default frame parameters. -Parameters specified here supersede the values given in + "Window-system dependent default frame parameters. +The value should be an alist of elements (WINDOW-SYSTEM . ALIST), +where WINDOW-SYSTEM is a window system symbol (see `window-system') +and ALIST is a frame parameter alist like `default-frame-alist'. +Then, for frames on WINDOW-SYSTEM, any parameters specified in +ALIST supersede the corresponding parameters specified in `default-frame-alist'.") ;; The initial value given here used to ask for a minibuffer. @@ -1048,15 +1052,23 @@ If FRAME is omitted, describe the currently selected frame." (pattern &optional face frame maximum width)) (define-obsolete-function-alias 'set-default-font 'set-frame-font "23.1") -(defun set-frame-font (font-name &optional keep-size) - "Set the font of the selected frame to FONT-NAME. -When called interactively, prompt for the name of the font to use. -To get the frame's current default font, use `frame-parameters'. -The default behavior is to keep the numbers of lines and columns in -the frame, thus may change its pixel size. If optional KEEP-SIZE is -non-nil (interactively, prefix argument) the current frame size (in -pixels) is kept by adjusting the numbers of the lines and columns." +(defun set-frame-font (font-name &optional keep-size frames) + "Set the default font to FONT-NAME. +When called interactively, prompt for the name of a font, and use +that font on the selected frame. + +If KEEP-SIZE is nil, keep the number of frame lines and columns +fixed. If KEEP-SIZE is non-nil (or with a prefix argument), try +to keep the current frame size fixed (in pixels) by adjusting the +number of lines and columns. + +If FRAMES is nil, apply the font to the selected frame only. +If FRAMES is non-nil, it should be a list of frames to act upon, +or t meaning all graphical frames. Also, if FRAME is non-nil, +alter the user's Customization settings as though the +font-related attributes of the `default' face had been \"set in +this session\", so that the font is applied to future frames." (interactive (let* ((completion-ignore-case t) (font (completing-read "Font name: " @@ -1065,19 +1077,57 @@ pixels) is kept by adjusting the numbers of the lines and columns." (x-list-fonts "*" nil (selected-frame)) nil nil nil nil (frame-parameter nil 'font)))) - (list font current-prefix-arg))) - (let (fht fwd) - (if keep-size - (setq fht (* (frame-parameter nil 'height) (frame-char-height)) - fwd (* (frame-parameter nil 'width) (frame-char-width)))) - (modify-frame-parameters (selected-frame) - (list (cons 'font font-name))) - (if keep-size - (modify-frame-parameters - (selected-frame) - (list (cons 'height (round fht (frame-char-height))) - (cons 'width (round fwd (frame-char-width))))))) - (run-hooks 'after-setting-font-hook 'after-setting-font-hooks)) + (list font current-prefix-arg nil))) + (when (stringp font-name) + (let* ((this-frame (selected-frame)) + ;; FRAMES nil means affect the selected frame. + (frame-list (cond ((null frames) + (list this-frame)) + ((eq frames t) + (frame-list)) + (t frames))) + height width) + (dolist (f frame-list) + (when (display-multi-font-p f) + (if keep-size + (setq height (* (frame-parameter f 'height) + (frame-char-height f)) + width (* (frame-parameter f 'width) + (frame-char-width f)))) + ;; When set-face-attribute is called for :font, Emacs + ;; guesses the best font according to other face attributes + ;; (:width, :weight, etc.) so reset them too (Bug#2476). + (set-face-attribute 'default f + :width 'normal :weight 'normal + :slant 'normal :font font-name) + (if keep-size + (modify-frame-parameters + f + (list (cons 'height (round height (frame-char-height f))) + (cons 'width (round width (frame-char-width f)))))))) + (when frames + ;; Alter the user's Custom setting of the `default' face, but + ;; only for font-related attributes. + (let ((specs (cadr (assq 'user (get 'default 'theme-face)))) + (attrs '(:family :foundry :slant :weight :height :width)) + (new-specs nil)) + (if (null specs) (setq specs '((t nil)))) + (dolist (spec specs) + ;; Each SPEC has the form (DISPLAY ATTRIBUTE-PLIST) + (let ((display (nth 0 spec)) + (plist (copy-tree (nth 1 spec)))) + ;; Alter only DISPLAY conditions matching this frame. + (when (or (memq display '(t default)) + (face-spec-set-match-display display this-frame)) + (dolist (attr attrs) + (setq plist (plist-put plist attr + (face-attribute 'default attr))))) + (push (list display plist) new-specs))) + (setq new-specs (nreverse new-specs)) + (put 'default 'customized-face new-specs) + (custom-push-theme 'theme-face 'default 'user 'set new-specs) + (put 'default 'face-modified nil)))) + (run-hooks 'after-setting-font-hook 'after-setting-font-hooks))) (defun set-frame-parameter (frame parameter value) "Set frame parameter PARAMETER to VALUE on FRAME. @@ -1108,7 +1158,11 @@ To get the frame's current foreground color, use `frame-parameters'." (defun set-cursor-color (color-name) "Set the text cursor color of the selected frame to COLOR-NAME. When called interactively, prompt for the name of the color to use. -To get the frame's current cursor color, use `frame-parameters'." +This works by setting the `cursor-color' frame parameter on the +selected frame. + +You can also set the text cursor color, for all frames, by +customizing the `cursor' face." (interactive (list (read-color "Cursor color: "))) (modify-frame-parameters (selected-frame) (list (cons 'cursor-color color-name)))) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index c7358779818..38b9139b7dd 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,202 @@ +2012-02-10 Lars Ingebrigtsen + + * message.el (message-default-send-mail-function): Made into own + function for reuse by emacsbug.el. + +2012-02-09 Juanma Barranquero + + * gnus.el (gnus-method-ephemeral-p): Move after declaration of defsubst + `gnus-sloppily-equal-method-parameters' to avoid a warning. + +2012-02-09 Lars Ingebrigtsen + + * gnus-msg.el (gnus-msg-mail): Use `message-mail' if Gnus isn't + running. + + * nnimap.el (nnimap-wait-for-response): Minor fixup of message string. + + * gnus.el (gnus-server-extend-method): Don't add an -address component + if the method already has one (bug#9676). + +2012-02-08 Lars Ingebrigtsen + + * gnus-sum.el (gnus-summary-insert-old-articles): Use a default instead + of an initial-input for consistency (bug#10757). + + * shr.el: Inhibit getting and sending cookies when fetching pictures. + + * gnus-html.el (gnus-html-schedule-image-fetching): Ditto. + +2012-02-07 Lars Ingebrigtsen + + * shr.el (shr-remove-trailing-whitespace): Don't strip whitespace from + lines that are narrower than the window width. Otherwise background + "blocks" will look less readable. + +2012-02-07 Katsumi Yamaoka + + * gnus-sum.el (gnus-summary-show-thread): Revert last two changes. + +2012-02-07 Lars Ingebrigtsen + + * nnimap.el (nnimap-transform-headers): Remove unused variable. + (nnimap-transform-headers): Fix parsing BODYSTRUCTURE elements that + have newlines within the strings, and where the UID comes after the + BODYSTRUCTURE element (bug#10537). + + * shr-color.el (shr-color-set-minimum-interval): Renamed to add prefix + (bug#10732). + + * shr.el (shr-insert-document): Add doc string. + (shr-visit-file): Ditto. + (shr-remove-trailing-whitespace): New function. + (shr-insert-document): Use it to clean up trailing whitespace as the + final step (bug#10714). + +2012-02-06 Lars Ingebrigtsen + + * gnus-sum.el (gnus-summary-exit-no-update): Really deaden the summary + buffer if `gnus-kill-summary-on-exit' is nil. + +2012-02-06 Katsumi Yamaoka + + * gnus-sum.el (gnus-summary-show-thread): + next-single-char-property-change may return nil in XEmacs. + +2012-02-06 Lars Ingebrigtsen + + * gnus-sum.el (gnus-handle-ephemeral-exit): Allow exiting from Gnus + when just reading a single group from "without" Gnus. + +2012-02-06 Chong Yidong + + * gnus-sum.el (gnus-summary-show-thread): + next-single-char-property-change never returns nil (Bug#8657). + +2012-02-05 Lars Ingebrigtsen + + * nnimap.el (nnimap-open-server): Allow switching the nnoo server + without reconnecting. + (nnimap-possibly-change-group): Ditto. + (nnimap-finish-retrieve-group-infos): Don't reconnect if the server + connection has died before being called. + +2012-02-02 Lars Ingebrigtsen + + * nnimap.el (nnimap-retrieve-group-data-early): Don't say we're doing + an initial sync unless we're really doing one. + + * gnus-group.el (gnus-group-read-ephemeral-group): Don't add a new + address parameter if one already exists (bug#9676). + + * gnus-msg.el (gnus-summary-mail-forward): Respect the process marks, + not the prefix, as documented (bug#10689). + +2012-02-01 Lars Ingebrigtsen + + * gnus.el (gnus-valid-select-methods): nnmaildir also saves marks in + the "server". + + * gnus-group.el (gnus-group-get-new-news-this-group): Don't overwrite + the real error message with the useless "previously known to be down". + Which isn't even correct. + + * nntp.el (nntp-open-connection): Report the error message if the nntp + server can't be reached. + + * nnimap.el (nnimap-retrieve-group-data-early): Keep track of how many + groups we do a total scan for. + (nnimap-wait-for-response): Say that we're doing a total scan, if we're + doing that. + +2012-01-31 Jim Meyering + + * gnus-agent.el (gnus-agent-expire-unagentized-dirs): + Correct a comment (insert "not") and hide nominally-doubled "to". + +2012-01-30 Philipp Haselwarter (tiny change) + + * gnus-agent.el (gnus-agent-auto-agentize-methods): Point to the Agent + section in the manual. + +2012-01-30 Lars Ingebrigtsen + + * rfc2047.el (rfc2047-encode-region): Allow not folding the encoded + words. + (rfc2047-encode-string): Ditto. + (rfc2047-encode-parameter): Don't fold parameters. Some MUAs do not + understand folded filename="..." parameters, for instance. + + * nnimap.el (nnimap-wait-for-response): Include the imap server name in + the message for greater debuggability. + +2012-01-28 Lars Ingebrigtsen + + * mm-view.el (mm-display-inline-fontify): Bind `font-lock-support-mode' + instead of setting it locally, since the latter doesn't seem to have + any effect (most of the time). + +2012-01-27 Elias Pipping (tiny change) + + * shr.el (shr-browse-url): Fix the name of the `browse-url-mail' + function call. + +2012-01-27 Vida Gábor (tiny change) + + * gnus-demon.el (gnus-demon-run-callback, gnus-demon-init): Convert to + seconds, and make the repeat clause with HH:MM specs work as + documented. + +2012-01-27 Lars Ingebrigtsen + + * gnus-start.el (gnus-get-unread-articles): Clear out "early" methods + so that previous errors don't prohibit getting new news. + + * nnimap.el (nnimap-retrieve-group-data-early): Ditto. + + * nntp.el (nntp-retrieve-group-data-early): Ditto. + +2012-01-26 Katsumi Yamaoka + + * gnus-sum.el (gnus-summary-mode): Don't make bidi-paragraph-direction + bound globally in old Emacsen and XEmacsen. + +2012-01-26 Nick Alcock (tiny change) + + * gnus.el (gnus-group-find-parameter): Check for liveness of the + buffer, not of the string which is its name. + +2012-01-26 Lars Ingebrigtsen + + * gnus-sum.el (gnus-summary-move-article): Don't propagate marks to + non-server-marks groups. + (gnus-group-make-articles-read): Ditto. + + * gnus-srvr.el (gnus-server-prepare): Use it to avoid showing ephemeral + methods (bug#9676). + + * gnus.el (gnus-method-ephemeral-p): New function. + +2012-01-26 Katsumi Yamaoka + + * gnus-sum.el (gnus-summary-mode): Force paragraph direction to be + left-to-right. + +2012-01-26 Lars Ingebrigtsen + + * nnimap.el (nnir-search-thread): Autoload to avoid a compilation + warning. + +2012-01-25 Lars Ingebrigtsen + + * gnus-sum.el (gnus-summary-line-format-alist): Don't try to + macroexpand the nnir things, since they haven't been defined yet, and + nnir requires gnus-sum. + +2012-01-21 Lars Magne Ingebrigtsen + + * mm-decode.el (mm-interactively-view-part): Fix prompt. + 2012-01-10 Teodor Zlatanov * nntp.el (nntp-send-authinfo): Query `auth-source-search' with the @@ -46,7 +245,7 @@ * gnus.el (gnus-parameters): Doc fix. -2012-01-06 Dave Abrahams (tiny change) +2012-01-06 Dave Abrahams * gnus-sum.el (gnus-summary-refer-thread): If the subtree is hidden, show the thread after expansion. @@ -312,7 +511,7 @@ * nnir.el (gnus-registry-enabled): Defvar to keep the compiler happy. * nnmairix.el (gnus-registry-enabled): Ditto. -2011-10-17 Dave Abrahams (tiny change) +2011-10-17 Dave Abrahams * gnus-registry.el (gnus-registry-enabled): Add new variable (bug#9691). (gnus-registry-install-shortcuts): Set `gnus-registry-install' to 'ask @@ -566,7 +765,7 @@ * gnus.el (gnus-variable-list): Don't save `gnus-format-specs' in the newsrc file. It doesn't seem like an important optimization any more. -2011-09-10 Dave Abrahams (tiny change) +2011-09-10 Dave Abrahams * nnimap.el (nnimap-transform-headers): Fix regexp to be less prone to overflows. @@ -843,7 +1042,7 @@ * spam.el (spam-fetch-field-fast): Rewrite slightly for clarity. -2011-07-31 Dave Abrahams (tiny change) +2011-07-31 Dave Abrahams * gnus-sum.el (gnus-summary-refer-thread): Since lambdas aren't closures, quote the form properly (bug#9194). @@ -1300,7 +1499,7 @@ 2011-06-21 Andrew Cohen - * nnimap.el (nnimap-find-article-by-message-id): return nil when no + * nnimap.el (nnimap-find-article-by-message-id): Return nil when no article found. 2011-06-18 Teodor Zlatanov @@ -7070,7 +7269,7 @@ "failed" all the time. * gnus.el: Throughout all files, replace (save-excursion (set-buffer - ...)) with (with-current-buffer ... ). + ...)) with (with-current-buffer ...). * nntp.el (nntp-open-server): Return whether the open was successful or not. diff --git a/lisp/gnus/gnus-agent.el b/lisp/gnus/gnus-agent.el index 70772bb1d0d..5178220af8f 100644 --- a/lisp/gnus/gnus-agent.el +++ b/lisp/gnus/gnus-agent.el @@ -186,7 +186,7 @@ When found, offer to remove them." (defcustom gnus-agent-auto-agentize-methods nil "Initially, all servers from these methods are agentized. The user may remove or add servers using the Server buffer. -See Info node `(gnus)Server Buffer'." +See Info nodes `(gnus)Server Buffer', `(gnus)Agent Variables'." :version "22.1" :type '(repeat symbol) :group 'gnus-agent) @@ -3618,7 +3618,7 @@ articles in every agentized group? ")) (setq r d d (directory-file-name d))) ;; if ANY ancestor was NOT in keep hash and - ;; it's already in to-remove, add it to + ;; it's not already in to-remove, add it to ;; to-remove. (if (and r (not (member r to-remove))) diff --git a/lisp/gnus/gnus-demon.el b/lisp/gnus/gnus-demon.el index 2f9952241aa..c91c725658a 100644 --- a/lisp/gnus/gnus-demon.el +++ b/lisp/gnus/gnus-demon.el @@ -102,6 +102,7 @@ Emacs has been idle for IDLE `gnus-demon-timestep's." "Run FUNC if Emacs has been idle for longer than IDLE seconds." (unless gnus-inhibit-demon (when (or (not idle) + (and (eq idle t) (> (gnus-demon-idle-since) 0)) (<= idle (gnus-demon-idle-since))) (with-local-quit (ignore-errors @@ -115,6 +116,7 @@ Emacs has been idle for IDLE `gnus-demon-timestep's." ;; Set up the timer. (let* ((func (nth 0 handler)) (time (nth 1 handler)) + (time-type (type-of time)) (idle (nth 2 handler)) ;; Compute time according with timestep. ;; If t, replace by 1 @@ -123,33 +125,32 @@ Emacs has been idle for IDLE `gnus-demon-timestep's." ((null time) nil) ((stringp time) - (gnus-demon-time-to-step time)) + (* (gnus-demon-time-to-step time) gnus-demon-timestep)) (t (* time gnus-demon-timestep)))) + (idle (if (numberp idle) + (* idle gnus-demon-timestep) + idle)) + (timer (cond - ;; (func number t) - ;; Call when Emacs has been idle for `time' - ((and (numberp time) (eq idle t)) - (run-with-timer time time 'gnus-demon-run-callback func time)) - ;; (func number number) - ;; Call every `time' when Emacs has been idle for `idle' - ((and (numberp time) (numberp idle)) - (run-with-timer time time 'gnus-demon-run-callback func idle)) ;; (func nil number) ;; Only call when Emacs has been idle for `idle' ((and (null time) (numberp idle)) (run-with-idle-timer (* idle gnus-demon-timestep) t 'gnus-demon-run-callback func)) - ;; (func number nil) + ;; (func number any) ;; Call every `time' - ((and (numberp time) (null idle)) - (run-with-timer time time 'gnus-demon-run-callback func))))) + ((eq time-type 'integer) + (run-with-timer time time 'gnus-demon-run-callback func idle)) + ;; (func string any) + ((eq time-type 'string) + (run-with-timer time (* 24 60 60) 'gnus-demon-run-callback func idle))))) (when timer (add-to-list 'gnus-demon-timers timer))))) (defun gnus-demon-time-to-step (time) - "Find out how many seconds to TIME, which is on the form \"17:43\"." + "Find out how many steps to TIME, which is on the form \"17:43\"." (let* ((now (current-time)) ;; obtain NOW as discrete components -- make a vector for speed (nowParts (decode-time now)) diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el index 3327bbea5a0..f97d9a69eae 100644 --- a/lisp/gnus/gnus-group.el +++ b/lisp/gnus/gnus-group.el @@ -2295,10 +2295,15 @@ Return the name of the group if selection was successful." (gnus-no-server)) (when (stringp method) (setq method (gnus-server-to-method method))) - (setq method - `(,(car method) ,(concat (cadr method) "-ephemeral") - (,(intern (format "%s-address" (car method))) ,(cadr method)) - ,@(cddr method))) + (let ((address-slot + (intern (format "%s-address" (car method))))) + (setq method + (if (assq address-slot (cddr method)) + `(,(car method) ,(concat (cadr method) "-ephemeral") + ,@(cddr method)) + `(,(car method) ,(concat (cadr method) "-ephemeral") + (,address-slot ,(cadr method)) + ,@(cddr method))))) (let ((group (if (gnus-group-foreign-p group) group (gnus-group-prefixed-name (gnus-group-real-name group) method)))) @@ -4070,10 +4075,7 @@ If DONT-SCAN is non-nil, scan non-activated groups as well." (gnus-agent-save-group-info method (gnus-group-real-name group) active)) (gnus-group-update-group group nil t)) - (if (eq (gnus-server-status (gnus-find-method-for-group group)) - 'denied) - (gnus-error 3 "Server previously determined to be down; not retrying") - (gnus-error 3 "%s error: %s" group (gnus-status-message group))))) + (gnus-error 3 "%s error: %s" group (gnus-status-message group)))) (when beg (goto-char beg)) (when gnus-goto-next-group-when-activating diff --git a/lisp/gnus/gnus-html.el b/lisp/gnus/gnus-html.el index 5bbb9e10e04..770904fa1c4 100644 --- a/lisp/gnus/gnus-html.el +++ b/lisp/gnus/gnus-html.el @@ -390,7 +390,7 @@ Use ALT-TEXT for the image string." (if (fboundp 'url-queue-retrieve) (url-queue-retrieve (car image) 'gnus-html-image-fetched - (list buffer image) t) + (list buffer image) t t) (ignore-errors (url-retrieve (car image) 'gnus-html-image-fetched diff --git a/lisp/gnus/gnus-msg.el b/lisp/gnus/gnus-msg.el index c825c4251bb..f92dc5e91d0 100644 --- a/lisp/gnus/gnus-msg.el +++ b/lisp/gnus/gnus-msg.el @@ -478,22 +478,26 @@ Thank you for your help in stamping out bugs. ;;;###autoload (defun gnus-msg-mail (&optional to subject other-headers continue - switch-action yank-action send-actions return-action) + switch-action yank-action send-actions return-action) "Start editing a mail message to be sent. Like `message-mail', but with Gnus paraphernalia, particularly the -Gcc: header for archiving purposes." +Gcc: header for archiving purposes. +If Gnus isn't running, a plain `message-mail' setup is used +instead." (interactive) - (let ((buf (current-buffer)) - mail-buf) - (gnus-setup-message 'message - (message-mail to subject other-headers continue - nil yank-action send-actions return-action)) - (when switch-action - (setq mail-buf (current-buffer)) - (switch-to-buffer buf) - (apply switch-action mail-buf nil))) - ;; COMPOSEFUNC should return t if succeed. Undocumented ??? - t) + (if (not (gnus-alive-p)) + (message-mail) + (let ((buf (current-buffer)) + mail-buf) + (gnus-setup-message 'message + (message-mail to subject other-headers continue + nil yank-action send-actions return-action)) + (when switch-action + (setq mail-buf (current-buffer)) + (switch-to-buffer buf) + (apply switch-action mail-buf nil)) + ;; COMPOSEFUNC should return t if succeed. Undocumented ??? + t))) ;;;###autoload (defun gnus-button-mailto (address) @@ -1230,7 +1234,7 @@ For the \"inline\" alternatives, also see the variable (interactive "P") (if (cdr (gnus-summary-work-articles nil)) ;; Process marks are given. - (gnus-uu-digest-mail-forward arg post) + (gnus-uu-digest-mail-forward nil post) ;; No process marks. (let ((message-forward-as-mime message-forward-as-mime) (message-forward-show-mml message-forward-show-mml)) diff --git a/lisp/gnus/gnus-srvr.el b/lisp/gnus/gnus-srvr.el index 34a16a21dc5..66509c939dc 100644 --- a/lisp/gnus/gnus-srvr.el +++ b/lisp/gnus/gnus-srvr.el @@ -330,7 +330,7 @@ The following commands are available: (dolist (open gnus-opened-servers) (when (and (not (member (car open) done)) ;; Just ignore ephemeral servers. - (not (member (car open) gnus-ephemeral-servers))) + (not (gnus-method-ephemeral-p (car open)))) (push (car open) done) (gnus-server-insert-server-line (setq op-ser (format "%s:%s" (caar open) (nth 1 (car open)))) diff --git a/lisp/gnus/gnus-start.el b/lisp/gnus/gnus-start.el index 07409162ab8..9b1d5681e6c 100644 --- a/lisp/gnus/gnus-start.el +++ b/lisp/gnus/gnus-start.el @@ -1714,6 +1714,21 @@ backend check whether the group actually exists." (with-current-buffer nntp-server-buffer (gnus-read-active-file-1 method nil))))) + ;; Clear out all the early methods. + (dolist (elem type-cache) + (destructuring-bind (method method-type infos dummy) elem + (when (and method + infos + (gnus-check-backend-function + 'retrieve-group-data-early (car method)) + (not (gnus-method-denied-p method))) + (when (ignore-errors (gnus-get-function method 'open-server)) + (unless (gnus-server-opened method) + (gnus-open-server method)) + (when (gnus-server-opened method) + ;; Just mark this server as "cleared". + (gnus-retrieve-group-data-early method nil)))))) + ;; Start early async retrieval of data. (let ((done-methods nil) sanity-spec) diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index 878a96b9264..63482eea1c4 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el @@ -1371,15 +1371,12 @@ the normal Gnus MIME machinery." (?c (or (mail-header-chars gnus-tmp-header) 0) ?d) (?k (gnus-summary-line-message-size gnus-tmp-header) ?s) (?L gnus-tmp-lines ?s) - (?Z (or ,(gnus-macroexpand-all - '(nnir-article-rsv (mail-header-number gnus-tmp-header))) + (?Z (or (nnir-article-rsv (mail-header-number gnus-tmp-header)) 0) ?d) - (?G (or ,(gnus-macroexpand-all - '(nnir-article-group (mail-header-number gnus-tmp-header))) + (?G (or (nnir-article-group (mail-header-number gnus-tmp-header)) "") ?s) - (?g (or ,(gnus-macroexpand-all - '(gnus-group-short-name - (nnir-article-group (mail-header-number gnus-tmp-header)))) + (?g (or (gnus-group-short-name + (nnir-article-group (mail-header-number gnus-tmp-header))) "") ?s) (?O gnus-tmp-downloaded ?c) (?I gnus-tmp-indentation ?s) @@ -3062,6 +3059,7 @@ When FORCE, rebuild the tool bar." (declare-function turn-on-gnus-mailing-list-mode "gnus-ml" ()) (defvar bookmark-make-record-function) +(defvar bidi-paragraph-direction) (defun gnus-summary-mode (&optional group) "Major mode for reading articles. @@ -3101,6 +3099,9 @@ The following commands are available: (setq buffer-read-only t ;Disable modification show-trailing-whitespace nil) (setq truncate-lines t) + ;; Force paragraph direction to be left-to-right. Don't make it + ;; bound globally in old Emacsen and XEmacsen. + (set (make-local-variable 'bidi-paragraph-direction) 'left-to-right) (add-to-invisibility-spec '(gnus-sum . t)) (gnus-summary-set-display-table) (gnus-set-default-directory) @@ -6282,13 +6283,19 @@ The resulting hash table is returned, or nil if no Xrefs were found." (entry (gnus-group-entry group)) (info (nth 2 entry)) (active (gnus-active group)) + (set-marks + (or gnus-propagate-marks + (gnus-method-option-p + (gnus-find-method-for-group group) + 'server-marks))) range) (if (not entry) ;; Group that Gnus doesn't know exists, but still allow the ;; backend to set marks. - (gnus-request-set-mark - group (list (list (gnus-compress-sequence (sort articles #'<)) - 'add '(read)))) + (when set-marks + (gnus-request-set-mark + group (list (list (gnus-compress-sequence (sort articles #'<)) + 'add '(read))))) ;; Normal, subscribed groups. (setq range (gnus-compute-read-articles group articles)) (with-current-buffer gnus-group-buffer @@ -6297,11 +6304,14 @@ The resulting hash table is returned, or nil if no Xrefs were found." (gnus-info-set-marks ',info ',(gnus-info-marks info) t) (gnus-info-set-read ',info ',(gnus-info-read info)) (gnus-get-unread-articles-in-group ',info (gnus-active ,group)) - (gnus-request-set-mark ,group (list (list ',range 'del '(read)))) + (when ,set-marks + (gnus-request-set-mark + ,group (list (list ',range 'del '(read))))) (gnus-group-update-group ,group t)))) ;; Add the read articles to the range. (gnus-info-set-read info range) - (gnus-request-set-mark group (list (list range 'add '(read)))) + (when set-marks + (gnus-request-set-mark group (list (list range 'add '(read))))) ;; Then we have to re-compute how many unread ;; articles there are in this group. (when active @@ -7318,9 +7328,11 @@ If FORCE (the prefix), also save the .newsrc file(s)." (gnus-kill-buffer gnus-original-article-buffer) (setq gnus-article-current nil)) ;; Return to the group buffer. - (gnus-configure-windows 'group 'force) (if (not gnus-kill-summary-on-exit) - (gnus-deaden-summary) + (progn + (gnus-deaden-summary) + (gnus-configure-windows 'group 'force)) + (gnus-configure-windows 'group 'force) (gnus-close-group group) (gnus-kill-buffer gnus-summary-buffer)) (unless gnus-single-article-buffer @@ -7342,7 +7354,7 @@ If FORCE (the prefix), also save the .newsrc file(s)." (defun gnus-handle-ephemeral-exit (quit-config) "Handle movement when leaving an ephemeral group. The state which existed when entering the ephemeral is reset." - (if (not (buffer-name (car quit-config))) + (if (not (buffer-live-p (car quit-config))) (gnus-configure-windows 'group 'force) (set-buffer (car quit-config)) (unless (eq (cdr quit-config) 'group) @@ -10060,7 +10072,11 @@ ACTION can be either `move' (the default), `crosspost' or `copy'." (gnus-add-marked-articles to-group 'expire (list to-article) info)) - (when to-marks + (when (and to-marks + (or gnus-propagate-marks + (gnus-method-option-p + (gnus-find-method-for-group to-group) + 'server-marks))) (gnus-request-set-mark to-group (list (list (list to-article) 'add to-marks))))) @@ -11565,6 +11581,7 @@ Returns nil if no thread was there to be shown." (beg (progn (beginning-of-line) (if (bobp) (point) (1- (point))))) (eoi (when end (if (fboundp 'next-single-char-property-change) + ;; Note: XEmacs version of n-s-c-p-c may return nil (or (next-single-char-property-change end 'invisible) (point-max)) (while (progn @@ -12839,6 +12856,7 @@ If ALL is a number, fetch this number of articles." (gnus-group-decoded-name gnus-newsgroup-name) (if initial "max" "default") len) + nil nil (if initial (cons (number-to-string initial) 0))))) diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el index 2d48f515f3e..cc4f2eb1e7a 100644 --- a/lisp/gnus/gnus.el +++ b/lisp/gnus/gnus.el @@ -1626,7 +1626,7 @@ slower." ("nnagent" post-mail) ("nnimap" post-mail address prompt-address physical-address respool server-marks) - ("nnmaildir" mail respool address) + ("nnmaildir" mail respool address server-marks) ("nnnil" none)) "*An alist of valid select methods. The first element of each list lists should be a string with the name @@ -3609,6 +3609,13 @@ that that variable is buffer-local to the summary buffers." ;; If p2 now is empty, they were equal. (null p2)))) +(defun gnus-method-ephemeral-p (method) + (let ((equal nil)) + (dolist (ephemeral gnus-ephemeral-servers) + (when (gnus-sloppily-equal-method-parameters method ephemeral) + (setq equal t))) + equal)) + (defun gnus-methods-sloppily-equal (m1 m2) ;; Same method. (or @@ -3877,7 +3884,7 @@ If SYMBOL, return the value of that symbol in the group parameters. If you call this function inside a loop, consider using the faster `gnus-group-fast-parameter' instead." - (with-current-buffer (if (buffer-live-p gnus-group-buffer) + (with-current-buffer (if (buffer-live-p (get-buffer gnus-group-buffer)) gnus-group-buffer (current-buffer)) (if symbol @@ -4116,12 +4123,17 @@ parameters." (if (or (not (inline (gnus-similar-server-opened method))) (not (cddr method))) method - (setq method - `(,(car method) ,(concat (cadr method) "+" group) - (,(intern (format "%s-address" (car method))) ,(cadr method)) - ,@(cddr method))) - (push method gnus-extended-servers) - method)) + (let ((address-slot + (intern (format "%s-address" (car method))))) + (setq method + (if (assq address-slot (cddr method)) + `(,(car method) ,(concat (cadr method) "+" group) + ,@(cddr method)) + `(,(car method) ,(concat (cadr method) "+" group) + (,address-slot ,(cadr method)) + ,@(cddr method)))) + (push method gnus-extended-servers) + method))) (defun gnus-server-status (method) "Return the status of METHOD." diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el index 5678acc5a2f..2d8bb36f94a 100644 --- a/lisp/gnus/message.el +++ b/lisp/gnus/message.el @@ -655,14 +655,16 @@ Done before generating the new subject of a forward." (t (error "Don't know how to send mail. Please customize `message-send-mail-function'")))) -;; Useful to set in site-init.el -(defcustom message-send-mail-function +(defun message-default-send-mail-function () (cond ((eq send-mail-function 'smtpmail-send-it) 'message-smtpmail-send-it) ((eq send-mail-function 'feedmail-send-it) 'feedmail-send-it) ((eq send-mail-function 'sendmail-query-once) 'sendmail-query-once) ((eq send-mail-function 'mailclient-send-it) 'message-send-mail-with-mailclient) - (t (message-send-mail-function))) + (t (message-send-mail-function)))) + +;; Useful to set in site-init.el +(defcustom message-send-mail-function (message-default-send-mail-function) "Function to call to send the current buffer as mail. The headers should be delimited by a line whose contents match the variable `mail-header-separator'. diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el index 10e0fa2861c..dd3eb6c9d96 100644 --- a/lisp/gnus/mm-decode.el +++ b/lisp/gnus/mm-decode.el @@ -1353,7 +1353,7 @@ Use CMD as the process." (mailcap-mime-info type 'all))) (method (let ((minibuffer-local-completion-map mm-viewer-completion-map)) - (completing-read "Viewer" methods)))) + (completing-read "Viewer: " methods)))) (when (string= method "") (error "No method given")) (if (string-match "^[^% \t]+$" method) diff --git a/lisp/gnus/mm-view.el b/lisp/gnus/mm-view.el index 18ee3b5047f..1d7b174d5a4 100644 --- a/lisp/gnus/mm-view.el +++ b/lisp/gnus/mm-view.el @@ -600,11 +600,11 @@ If MODE is not set, try to find mode automatically." text))) (require 'font-lock) ;; I find font-lock a bit too verbose. - (let ((font-lock-verbose nil)) + (let ((font-lock-verbose nil) + (font-lock-support-mode nil)) ;; Disable support modes, e.g., jit-lock, lazy-lock, etc. ;; Note: XEmacs people use `font-lock-mode-hook' to run those modes. (set (make-local-variable 'font-lock-mode-hook) nil) - (set (make-local-variable 'font-lock-support-mode) nil) (setq buffer-file-name (mm-handle-filename handle)) (set (make-local-variable 'enable-local-variables) nil) (with-demoted-errors diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el index 0b0fc918c87..de4d248c624 100644 --- a/lisp/gnus/nnimap.el +++ b/lisp/gnus/nnimap.el @@ -134,7 +134,7 @@ textual parts.") (defstruct nnimap group process commands capabilities select-result newlinep server - last-command-time greeting examined stream-type) + last-command-time greeting examined stream-type initial-resync) (defvar nnimap-object nil) @@ -189,25 +189,32 @@ textual parts.") (defun nnimap-transform-headers () (goto-char (point-min)) - (let (article bytes lines size string) + (let (article lines size string) (block nil (while (not (eobp)) - (while (not (looking-at "\\* [0-9]+ FETCH.+?UID \\([0-9]+\\)")) + (while (not (looking-at "\\* [0-9]+ FETCH")) (delete-region (point) (progn (forward-line 1) (point))) (when (eobp) (return))) - (setq article (match-string 1)) + (goto-char (match-end 0)) ;; Unfold quoted {number} strings. - (while (re-search-forward "[^]][ (]{\\([0-9]+\\)}\r?\n" - (1+ (line-end-position)) t) + (while (re-search-forward + "[^]][ (]{\\([0-9]+\\)}\r?\n" + (save-excursion + (or (re-search-forward "\\* [0-9]+ FETCH" nil t) + (point-max))) + t) (setq size (string-to-number (match-string 1))) (delete-region (+ (match-beginning 0) 2) (point)) (setq string (buffer-substring (point) (+ (point) size))) (delete-region (point) (+ (point) size)) - (insert (format "%S" string))) - (setq bytes (nnimap-get-length) - lines nil) + (insert (format "%S" (mm-subst-char-in-string ?\n ?\s string)))) (beginning-of-line) + (setq article + (and (re-search-forward "UID \\([0-9]+\\)" (line-end-position) + t) + (match-string 1))) + (setq lines nil) (setq size (and (re-search-forward "RFC822.SIZE \\([0-9]+\\)" (line-end-position) @@ -269,14 +276,16 @@ textual parts.") result)) (mapconcat #'identity (nreverse result) ","))))) -(deffoo nnimap-open-server (server &optional defs) +(deffoo nnimap-open-server (server &optional defs no-reconnect) (if (nnimap-server-opened server) t (unless (assq 'nnimap-address defs) (setq defs (append defs (list (list 'nnimap-address server))))) (nnoo-change-server 'nnimap server defs) - (or (nnimap-find-connection nntp-server-buffer) - (nnimap-open-connection nntp-server-buffer)))) + (if no-reconnect + (nnimap-find-connection nntp-server-buffer) + (or (nnimap-find-connection nntp-server-buffer) + (nnimap-open-connection nntp-server-buffer))))) (defun nnimap-make-process-buffer (buffer) (with-current-buffer @@ -288,7 +297,8 @@ textual parts.") (gnus-add-buffer) (set (make-local-variable 'after-change-functions) nil) (set (make-local-variable 'nnimap-object) - (make-nnimap :server (nnoo-current-server 'nnimap))) + (make-nnimap :server (nnoo-current-server 'nnimap) + :initial-resync 0)) (push (list buffer (current-buffer)) nnimap-connection-alist) (push (current-buffer) nnimap-process-buffers) (current-buffer))) @@ -1213,10 +1223,12 @@ textual parts.") t))) (deffoo nnimap-retrieve-group-data-early (server infos) - (when (nnimap-possibly-change-group nil server) + (when (and (nnimap-possibly-change-group nil server) + infos) (with-current-buffer (nnimap-buffer) (erase-buffer) (setf (nnimap-group nnimap-object) nil) + (setf (nnimap-initial-resync nnimap-object) 0) (let ((qresyncp (nnimap-capability "QRESYNC")) params groups sequences active uidvalidity modseq group) ;; Go through the infos and gather the data needed to know @@ -1241,12 +1253,7 @@ textual parts.") 'qresync nil group 'qresync) sequences) - (let ((start - (if (and active uidvalidity) - ;; Fetch the last 100 flags. - (max 1 (- (cdr active) 100)) - 1)) - (command + (let ((command (if uidvalidity "EXAMINE" ;; If we don't have a UIDVALIDITY, then this is @@ -1254,7 +1261,14 @@ textual parts.") ;; have to do a SELECT (which is slower than an ;; examine), but will tell us whether the group ;; is read-only or not. - "SELECT"))) + "SELECT")) + start) + (if (and active uidvalidity) + ;; Fetch the last 100 flags. + (setq start (max 1 (- (cdr active) 100))) + (setf (nnimap-initial-resync nnimap-object) + (1+ (nnimap-initial-resync nnimap-object))) + (setq start 1)) (push (list (nnimap-send-command "%s %S" command (utf7-encode group t)) (nnimap-send-command "UID FETCH %d:* FLAGS" start) @@ -1273,7 +1287,7 @@ textual parts.") (deffoo nnimap-finish-retrieve-group-infos (server infos sequences) (when (and sequences - (nnimap-possibly-change-group nil server) + (nnimap-possibly-change-group nil server t) ;; Check that the process is still alive. (get-buffer-process (nnimap-buffer)) (memq (process-status (get-buffer-process (nnimap-buffer))) @@ -1610,6 +1624,8 @@ textual parts.") (declare-function gnus-fetch-headers "gnus-sum" (articles &optional limit force-new dependencies)) +(autoload 'nnir-search-thread "nnir") + (deffoo nnimap-request-thread (header &optional group server) (when group (setq group (nnimap-decode-gnus-group group))) @@ -1626,11 +1642,11 @@ textual parts.") (cdr (assoc "SEARCH" (cdr result)))))) nil t)))))) -(defun nnimap-possibly-change-group (group server) +(defun nnimap-possibly-change-group (group server &optional no-reconnect) (let ((open-result t)) (when (and server (not (nnimap-server-opened server))) - (setq open-result (nnimap-open-server server))) + (setq open-result (nnimap-open-server server nil no-reconnect))) (cond ((not open-result) nil) @@ -1735,9 +1751,18 @@ textual parts.") (not (looking-at (format "%d .*\n" sequence))))) (when messagep (nnheader-message-maybe - 7 "nnimap read %dk" (/ (buffer-size) 1000))) + 7 "nnimap read %dk from %s%s" (/ (buffer-size) 1000) + nnimap-address + (if (not (zerop (nnimap-initial-resync nnimap-object))) + (format " (initial sync of %d group%s; please wait)" + (nnimap-initial-resync nnimap-object) + (if (= (nnimap-initial-resync nnimap-object) 1) + "" + "s")) + ""))) (nnheader-accept-process-output process) (goto-char (point-max))) + (setf (nnimap-initial-resync nnimap-object) 0) openp) (quit (when debug-on-quit diff --git a/lisp/gnus/nntp.el b/lisp/gnus/nntp.el index c740f614356..98393a61764 100644 --- a/lisp/gnus/nntp.el +++ b/lisp/gnus/nntp.el @@ -772,7 +772,11 @@ command whose response triggered the error." "Retrieve group info on INFOS." (nntp-with-open-group nil server (let ((buffer (nntp-find-connection-buffer nntp-server-buffer))) + (unless infos + (with-current-buffer buffer + (setq nntp-retrieval-in-progress nil))) (when (and buffer + infos (with-current-buffer buffer (not nntp-retrieval-in-progress))) ;; The first time this is run, this variable is `try'. So we @@ -1381,6 +1385,10 @@ password contained in '~/.nntp-authinfo'." (nnheader-cancel-timer timer)) (when (and process (not (memq (process-status process) '(open run)))) + (with-current-buffer pbuffer + (goto-char (point-min)) + (nnheader-report 'nntp "Error when connecting: %s" + (buffer-substring (point) (line-end-position)))) (setq process nil)) (unless process (nntp-kill-buffer pbuffer)) diff --git a/lisp/gnus/rfc2047.el b/lisp/gnus/rfc2047.el index a275df7701b..e881256f386 100644 --- a/lisp/gnus/rfc2047.el +++ b/lisp/gnus/rfc2047.el @@ -362,7 +362,7 @@ The buffer may be narrowed." (modify-syntax-entry ?@ "." table) table)) -(defun rfc2047-encode-region (b e) +(defun rfc2047-encode-region (b e &optional dont-fold) "Encode words in region B to E that need encoding. By default, the region is treated as containing RFC2822 addresses. Dynamically bind `rfc2047-encoding-type' to change that." @@ -546,16 +546,17 @@ Dynamically bind `rfc2047-encoding-type' to change that." (signal (car err) (cdr err)) (error "Invalid data for rfc2047 encoding: %s" (mm-replace-in-string orig-text "[ \t\n]+" " ")))))))) - (rfc2047-fold-region b (point)) + (unless dont-fold + (rfc2047-fold-region b (point))) (goto-char (point-max)))) -(defun rfc2047-encode-string (string) +(defun rfc2047-encode-string (string &optional dont-fold) "Encode words in STRING. By default, the string is treated as containing addresses (see `rfc2047-encoding-type')." (mm-with-multibyte-buffer (insert string) - (rfc2047-encode-region (point-min) (point-max)) + (rfc2047-encode-region (point-min) (point-max) dont-fold) (buffer-string))) ;; From RFC 2047: @@ -850,7 +851,7 @@ This is a substitution for the `rfc2231-encode-string' function, that is the standard but many mailers don't support it." (let ((rfc2047-encoding-type 'mime) (rfc2047-encode-max-chars nil)) - (rfc2045-encode-string param (rfc2047-encode-string value)))) + (rfc2045-encode-string param (rfc2047-encode-string value t)))) ;;; ;;; Functions for decoding RFC2047 messages diff --git a/lisp/gnus/shr-color.el b/lisp/gnus/shr-color.el index e23ab57965e..7011034d242 100644 --- a/lisp/gnus/shr-color.el +++ b/lisp/gnus/shr-color.el @@ -267,7 +267,8 @@ Like rgb() or hsl()." (t nil)))) -(defun set-minimum-interval (val1 val2 min max interval &optional fixed) +(defun shr-color-set-minimum-interval (val1 val2 min max interval + &optional fixed) "Set minimum interval between VAL1 and VAL2 to INTERVAL. The values are bound by MIN and MAX. If FIXED is t, then VAL1 will not be touched." @@ -341,9 +342,9 @@ color will be adapted to be visible on BG." (>= luminance-distance shr-color-visible-luminance-min)) (list bg fg) ;; Not visible, try to change luminance to make them visible - (let ((Ls (set-minimum-interval (car bg-lab) (car fg-lab) 0 100 - shr-color-visible-luminance-min - fixed-background))) + (let ((Ls (shr-color-set-minimum-interval + (car bg-lab) (car fg-lab) 0 100 + shr-color-visible-luminance-min fixed-background))) (unless fixed-background (setcar bg-lab (car Ls))) (setcar fg-lab (cadr Ls)) diff --git a/lisp/gnus/shr.el b/lisp/gnus/shr.el index 969d893c2d4..386c9c62b67 100644 --- a/lisp/gnus/shr.el +++ b/lisp/gnus/shr.el @@ -128,6 +128,7 @@ cid: URL as the argument.") ;; Public functions and commands. (defun shr-visit-file (file) + "Parse FILE as an HTML document, and render it in a new buffer." (interactive "fHTML file name: ") (pop-to-buffer "*html*") (erase-buffer) @@ -139,12 +140,30 @@ cid: URL as the argument.") ;;;###autoload (defun shr-insert-document (dom) + "Render the parsed document DOM into the current buffer. +DOM should be a parse tree as generated by +`libxml-parse-html-region' or similar." (setq shr-content-cache nil) - (let ((shr-state nil) + (let ((start (point)) + (shr-state nil) (shr-start nil) (shr-base nil) (shr-width (or shr-width (window-width)))) - (shr-descend (shr-transform-dom dom)))) + (shr-descend (shr-transform-dom dom)) + (shr-remove-trailing-whitespace start (point)))) + +(defun shr-remove-trailing-whitespace (start end) + (let ((width (window-width))) + (save-restriction + (narrow-to-region start end) + (goto-char start) + (while (not (eobp)) + (end-of-line) + (when (> (current-column) width) + (dolist (overlay (overlays-at (point))) + (when (overlay-get overlay 'before-string) + (overlay-put overlay 'before-string nil)))) + (forward-line 1))))) (defun shr-copy-url () "Copy the URL under point to the kill ring. @@ -169,7 +188,8 @@ redirects somewhere else." (when (re-search-forward ".utm_.*" nil t) (replace-match "" t t)) (message "Copied %s" (buffer-string)) - (copy-region-as-kill (point-min) (point-max))))))) + (copy-region-as-kill (point-min) (point-max))))) + nil t)) ;; Copy the URL to the kill ring. (t (with-temp-buffer @@ -212,7 +232,7 @@ the URL of the image to the kill buffer instead." (message "Inserting %s..." url) (url-retrieve url 'shr-image-fetched (list (current-buffer) (1- (point)) (point-marker)) - t)))) + t t)))) ;;; Utility functions. @@ -480,7 +500,7 @@ the URL of the image to the kill buffer instead." ((not url) (message "No link under point")) ((string-match "^mailto:" url) - (browse-url-mailto url)) + (browse-url-mail url)) (t (browse-url url))))) @@ -491,7 +511,8 @@ the URL of the image to the kill buffer instead." (if (not url) (message "No link under point") (url-retrieve (shr-encode-url url) - 'shr-store-contents (list url directory))))) + 'shr-store-contents (list url directory) + nil t)))) (defun shr-store-contents (status url directory) (unless (plist-get status :error) @@ -566,7 +587,7 @@ the URL of the image to the kill buffer instead." ;; url-cache-extract autoloads url-cache. (declare-function url-cache-create-filename "url-cache" (url)) (autoload 'mm-disable-multibyte "mm-util") -(autoload 'browse-url-mailto "browse-url") +(autoload 'browse-url-mail "browse-url") (defun shr-get-image-data (url) "Get image data for URL. @@ -598,7 +619,7 @@ START, and END. Note that START and END should be markers." (delete-region (point) end)))) (url-retrieve url 'shr-image-fetched (list (current-buffer) start end) - t))))) + t t))))) (defun shr-heading (cont &rest types) (shr-ensure-paragraph) @@ -908,13 +929,10 @@ ones, in case fg and bg are nil." (let ((file (url-cache-create-filename (shr-encode-url url)))) (when (file-exists-p file) (delete-file file)))) - (funcall - (if (fboundp 'url-queue-retrieve) - 'url-queue-retrieve - 'url-retrieve) + (url-queue-retrieve (shr-encode-url url) 'shr-image-fetched (list (current-buffer) start (set-marker (make-marker) (1- (point)))) - t))) + t t))) (when (zerop shr-table-depth) ;; We are not in a table. (put-text-property start (point) 'keymap shr-map) (put-text-property start (point) 'shr-alt alt) diff --git a/lisp/help-fns.el b/lisp/help-fns.el index 183253878f5..0175ffa4d9a 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -707,12 +707,19 @@ it is displayed along with the global value." (with-current-buffer standard-output (setq val-start-pos (point)) (princ "value is ") - (let ((from (point))) - (terpri) - (pp val) - (if (< (point) (+ 68 (line-beginning-position 0))) - (delete-region from (1+ from)) - (delete-region (1- from) from)) + (let ((from (point)) + (line-beg (line-beginning-position)) + ;; + (print-rep + (let ((print-quoted t)) + (prin1-to-string val)))) + (if (< (+ (length print-rep) (point) (- line-beg)) 68) + (insert print-rep) + (terpri) + (pp val) + (if (< (point) (+ 68 (line-beginning-position 0))) + (delete-region from (1+ from)) + (delete-region (1- from) from))) (let* ((sv (get variable 'standard-value)) (origval (and (consp sv) (condition-case nil diff --git a/lisp/help-macro.el b/lisp/help-macro.el index 0bd6f3c4798..112c72778bc 100644 --- a/lisp/help-macro.el +++ b/lisp/help-macro.el @@ -184,9 +184,12 @@ and then returns." (when config (set-window-configuration config) (setq config nil)) - ;; `defn' must make sure that its frame is - ;; selected, so we won't iconify it below. - (call-interactively defn) + ;; Temporarily rebind `minor-mode-map-alist' + ;; to `new-minor-mode-map-alist' (Bug#10454). + (let ((minor-mode-map-alist new-minor-mode-map-alist)) + ;; `defn' must make sure that its frame is + ;; selected, so we won't iconify it below. + (call-interactively defn)) (when new-frame ;; Do not iconify the selected frame. (unless (eq new-frame (selected-frame)) diff --git a/lisp/ido.el b/lisp/ido.el index 4be9807af96..5813aff0f21 100644 --- a/lisp/ido.el +++ b/lisp/ido.el @@ -4148,7 +4148,6 @@ in a separate window. \\[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-vc] Toggle version control for this file. \\[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'." diff --git a/lisp/iimage.el b/lisp/iimage.el index 674e885a243..a6180b263c7 100644 --- a/lisp/iimage.el +++ b/lisp/iimage.el @@ -137,8 +137,7 @@ Examples of image filename patterns to match: '(display modification-hooks)))))))))) ;;;###autoload -(define-minor-mode iimage-mode - "Toggle inline image minor mode." +(define-minor-mode iimage-mode nil :group 'iimage :lighter " iImg" :keymap iimage-mode-map (iimage-mode-buffer iimage-mode)) diff --git a/lisp/image-mode.el b/lisp/image-mode.el index a9a8d15e6a0..900cd725b92 100644 --- a/lisp/image-mode.el +++ b/lisp/image-mode.el @@ -482,7 +482,7 @@ Remove text properties that display the image." "Show the image of the image file. Turn the image data into a real image, but only if the whole file was inserted." - (unless (derived-mode-p 'image-mode major-mode) + (unless (derived-mode-p 'image-mode) (error "The buffer is not in Image mode")) (let* ((filename (buffer-file-name)) (data-p (not (and filename @@ -557,13 +557,15 @@ the image by calling `image-mode'." ;;; Animated images (defcustom image-animate-loop nil - "Whether to play animated images on a loop in Image mode." + "Non-nil means animated images loop forever, rather than playing once." :type 'boolean :version "24.1" :group 'image) (defun image-toggle-animation () - "Start or stop animating the current image." + "Start or stop animating the current image. +If `image-animate-loop' is non-nil, animation loops forever. +Otherwise it plays once, then stops." (interactive) (let ((image (image-get-display-property)) animation) @@ -605,22 +607,27 @@ the image by calling `image-mode'." (image-toggle-display)))) -(defvar image-transform-minor-mode-map - (let ((map (make-sparse-keymap))) - ;; (define-key map [(control ?+)] 'image-scale-in) - ;; (define-key map [(control ?-)] 'image-scale-out) - ;; (define-key map [(control ?=)] 'image-scale-none) - ;; (define-key map "c f h" 'image-scale-fit-height) - ;; (define-key map "c ]" 'image-rotate-right) - map) - "Minor mode keymap `image-transform-mode'.") +;; Not yet implemented. +;;; (defvar image-transform-minor-mode-map +;;; (let ((map (make-sparse-keymap))) +;;; ;; (define-key map [(control ?+)] 'image-scale-in) +;;; ;; (define-key map [(control ?-)] 'image-scale-out) +;;; ;; (define-key map [(control ?=)] 'image-scale-none) +;;; ;; (define-key map "c f h" 'image-scale-fit-height) +;;; ;; (define-key map "c ]" 'image-rotate-right) +;;; map) +;;; "Minor mode keymap `image-transform-mode'.") +;;; +;;; (define-minor-mode image-transform-mode +;;; "Minor mode for scaling and rotating images. +;;; With a prefix argument ARG, enable the mode if ARG is positive, +;;; and disable it otherwise. If called from Lisp, enable the mode +;;; if ARG is omitted or nil. This minor mode requires Emacs to have +;;; been compiled with ImageMagick support." +;;; nil "image-transform" image-transform-minor-mode-map) -(define-minor-mode image-transform-mode - "Minor mode for scaling and rotating images. -This minor mode has no effect unless Emacs is compiled with -ImageMagick support." - nil "image-transform" image-transform-minor-mode-map) +;; FIXME this doesn't seem mature yet. Document in manual when it is. (defvar image-transform-resize nil "The image resize operation. Its value should be one of the following: @@ -662,6 +669,7 @@ compiled with ImageMagick support." ,@(if (not (equal 0.0 image-transform-rotation)) (list :rotation image-transform-rotation)))))) +;; FIXME 2 works, but eg 1.9 or 0.5 don't? (defun image-transform-set-scale (scale) "Prompt for a number, and resize the current image by that amount. This command has no effect unless Emacs is compiled with diff --git a/lisp/image.el b/lisp/image.el index 15b82d12dcd..ab3f437a971 100644 --- a/lisp/image.el +++ b/lisp/image.el @@ -207,6 +207,8 @@ compatibility with versions of Emacs that lack the variable (delete image-directory (copy-sequence (or path load-path)))))) +;; Used to be in image-type-header-regexps, but now not used anywhere +;; (since 2009-08-28). (defun image-jpeg-p (data) "Value is non-nil if DATA, a string, consists of JFIF image data. We accept the tag Exif because that is the same format." @@ -329,6 +331,10 @@ Optional DATA-P non-nil means SOURCE is a string containing image data." type) +(if (fboundp 'image-metadata) ; eg not --without-x + (define-obsolete-function-alias 'image-extension-data + 'image-metadata' "24.1")) + (define-obsolete-variable-alias 'image-library-alist 'dynamic-library-alist "24.1") @@ -595,13 +601,15 @@ Example: "List of supported animated image types.") (defun image-animated-p (image) - "Return non-nil if image can be animated. -Actually, the return value is a cons (NIMAGES . DELAY), where -NIMAGES is the number of sub-images in the animated image and -DELAY is the delay in second until the next sub-image shall be -displayed." + "Return non-nil if IMAGE can be animated. +To be capable of being animated, an image must be of a type +listed in `image-animated-types', and contain more than one +sub-image, with a specified animation delay. The actual return +value is a cons (NIMAGES . DELAY), where NIMAGES is the number +of sub-images in the animated image and DELAY is the delay in +seconds until the next sub-image should be displayed." (cond - ((eq (plist-get (cdr image) :type) 'gif) + ((memq (plist-get (cdr image) :type) image-animated-types) (let* ((metadata (image-metadata image)) (images (plist-get metadata 'count)) (delay (plist-get metadata 'delay))) @@ -609,6 +617,7 @@ displayed." (if (< delay 0) (setq delay 0.1)) (cons images delay)))))) +;; "Destructively"? (defun image-animate (image &optional index limit) "Start animating IMAGE. Animation occurs by destructively altering the IMAGE spec list. @@ -639,16 +648,20 @@ number, play until that number of seconds has elapsed." (setq timer nil))) timer)) +;; FIXME? The delay may not be the same for different sub-images, +;; hence we need to call image-animated-p to return it. +;; But it also returns count, so why do we bother passing that as an +;; argument? (defun image-animate-timeout (image n count time-elapsed limit) "Display animation frame N of IMAGE. N=0 refers to the initial animation frame. COUNT is the total number of frames in the animation. -DELAY is the time between animation frames, in seconds. TIME-ELAPSED is the total time that has elapsed since `image-animate-start' was called. LIMIT determines when to stop. If t, loop forever. If nil, stop after displaying the last animation frame. Otherwise, stop - after LIMIT seconds have elapsed." + after LIMIT seconds have elapsed. +The minimum delay between successive frames is 0.01s." (plist-put (cdr image) :index n) (force-window-update) (setq n (1+ n)) @@ -675,13 +688,16 @@ LIMIT determines when to stop. If t, loop forever. If nil, stop '(C HTML HTM TXT PDF) "ImageMagick types that Emacs should not use ImageMagick to handle. This should be a list of symbols, each of which has the same -names as one of the format tags used internally by ImageMagick; +name as one of the format tags used internally by ImageMagick; see `imagemagick-types'. Entries in this list are excluded from -being registered by `imagemagick-register-types'. +being registered by `imagemagick-register-types', so if you change +this variable you must do so before you call that function. If Emacs is compiled without ImageMagick, this variable has no effect." :type '(choice (const :tag "Let ImageMagick handle all types it can" nil) (repeat symbol)) + ;; Ideally, would have a :set function that checks if we already did + ;; imagemagick-register-types, and if so undoes it, then redoes it. :version "24.1" :group 'image) diff --git a/lisp/international/iso-ascii.el b/lisp/international/iso-ascii.el index f994a93c043..0566b8ead5c 100644 --- a/lisp/international/iso-ascii.el +++ b/lisp/international/iso-ascii.el @@ -1,6 +1,6 @@ ;;; iso-ascii.el --- set up char tables for ISO 8859/1 on ASCII terminals -;; Copyright (C) 1987, 1995, 1998, 2001-2012 Free Software Foundation, Inc. +;; Copyright (C) 1987, 1995, 1998, 2001-2012 Free Software Foundation, Inc. ;; Author: Howard Gayle ;; Maintainer: FSF @@ -163,7 +163,10 @@ (iso-ascii-display 255 "\"y") ; small y with diaeresis or umlaut mark (define-minor-mode iso-ascii-mode - "Toggle ISO-ASCII mode." + "Toggle ISO-ASCII mode. +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil." :variable (eq standard-display-table iso-ascii-display-table) (unless standard-display-table (setq standard-display-table iso-ascii-standard-display-table))) diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el index cbe548c2ccf..378cbc9badd 100644 --- a/lisp/international/mule-cmds.el +++ b/lisp/international/mule-cmds.el @@ -418,7 +418,10 @@ To prefer, for instance, utf-8, say the following: (if (memq eol-type '(0 1 2)) (setq base (coding-system-change-eol-conversion base eol-type))) - (set-default-coding-systems base))) + (set-default-coding-systems base) + (if (called-interactively-p 'interactive) + (or (eq base default-file-name-coding-system) + (message "The default value of `file-name-coding-system' was not changed because the specified coding system is not suitable for file names."))))) (defvar sort-coding-systems-predicate nil "If non-nil, a predicate function to sort coding systems. diff --git a/lisp/international/mule.el b/lisp/international/mule.el index 17163071d3f..d4dd4e4cf24 100644 --- a/lisp/international/mule.el +++ b/lisp/international/mule.el @@ -1668,6 +1668,7 @@ in-place." ;;; FILE I/O +;; TODO many elements of this list are also in inhibit-local-variables-regexps. (defcustom auto-coding-alist ;; .exe and .EXE are added to support archive-mode looking at DOS ;; self-extracting exe archives. @@ -1677,7 +1678,7 @@ arc\\|zip\\|lzh\\|lha\\|zoo\\|[jew]ar\\|xpi\\|rar\\|7z\\|\ ARC\\|ZIP\\|LZH\\|LHA\\|ZOO\\|[JEW]AR\\|XPI\\|RAR\\|7Z\\)\\'" . no-conversion-multibyte) ("\\.\\(exe\\|EXE\\)\\'" . no-conversion) - ("\\.\\(sx[dmicw]\\|odt\\|tar\\|tgz\\)\\'" . no-conversion) + ("\\.\\(sx[dmicw]\\|odt\\|tar\\|t[bg]z\\)\\'" . no-conversion) ("\\.\\(gz\\|Z\\|bz\\|bz2\\|xz\\|gpg\\)\\'" . no-conversion) ("\\.\\(jpe?g\\|png\\|gif\\|tiff?\\|p[bpgn]m\\)\\'" . no-conversion) ("\\.pdf\\'" . no-conversion) diff --git a/lisp/isearch.el b/lisp/isearch.el index a6cc69be9a6..27b82940043 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -102,7 +102,7 @@ in Isearch mode is always downcased." :group 'isearch) (defcustom search-nonincremental-instead t - "If non-nil, do a nonincremental search instead if exiting immediately. + "If non-nil, do a nonincremental search instead of exiting immediately. Actually, `isearch-edit-string' is called to let you enter the search string, and RET terminates editing and does a nonincremental search." :type 'boolean @@ -835,7 +835,8 @@ It is called by the function `isearch-forward' and other related functions." ;; Some high level utilities. Others below. (defun isearch-update () - ;; Called after each command to update the display. + "This is called after every isearch command to update the display. +The last thing it does is to run `isearch-update-post-hook'." (if (and (null unread-command-events) (null executing-kbd-macro)) (progn diff --git a/lisp/jka-cmpr-hook.el b/lisp/jka-cmpr-hook.el index d09e64634c3..e4743ada045 100644 --- a/lisp/jka-cmpr-hook.el +++ b/lisp/jka-cmpr-hook.el @@ -119,7 +119,7 @@ based on the filename itself and `jka-compr-compression-info-list'." (defun jka-compr-install () "Install jka-compr. This adds entries to `file-name-handler-alist' and `auto-mode-alist' -and `inhibit-first-line-modes-suffixes'." +and `inhibit-local-variables-suffixes'." (setq jka-compr-file-name-handler-entry (cons (jka-compr-build-file-regexp) 'jka-compr-handler)) @@ -145,12 +145,12 @@ and `inhibit-first-line-modes-suffixes'." ;; are chosen right according to the file names ;; sans `.gz'. (push (list (jka-compr-info-regexp x) nil 'jka-compr) auto-mode-alist) - ;; Also add these regexps to - ;; inhibit-first-line-modes-suffixes, so that a - ;; -*- line in the first file of a compressed tar - ;; file doesn't override tar-mode. + ;; Also add these regexps to inhibit-local-variables-suffixes, + ;; so that a -*- line in the first file of a compressed tar file, + ;; or a Local Variables section in a member file at the end of + ;; the tar file don't override tar-mode. (push (jka-compr-info-regexp x) - inhibit-first-line-modes-suffixes))) + inhibit-local-variables-suffixes))) (setq auto-mode-alist (append auto-mode-alist jka-compr-mode-alist-additions)) @@ -234,6 +234,14 @@ options through Custom does this automatically." "compressing" "gzip" ("-c" "-q") "uncompressing" "gzip" ("-c" "-q" "-d") t t "\037\213"] + ["\\.lz\\'" + "Lzip compressing" "lzip" ("-c" "-q") + "Lzip uncompressing" "lzip" ("-c" "-q" "-d") + t t "LZIP"] + ["\\.lzma\\'" + "LZMA compressing" "lzma" ("-c" "-q" "-z") + "LZMA uncompressing" "lzma" ("-c" "-q" "-d") + t t ""] ["\\.xz\\'" "XZ compressing" "xz" ("-c" "-q") "XZ uncompressing" "xz" ("-c" "-q" "-d") diff --git a/lisp/jka-compr.el b/lisp/jka-compr.el index 786e4292d5f..8a8d7cdbb52 100644 --- a/lisp/jka-compr.el +++ b/lisp/jka-compr.el @@ -657,16 +657,15 @@ It is not recommended to set this variable permanently to anything but nil.") (defun jka-compr-uninstall () "Uninstall jka-compr. This removes the entries in `file-name-handler-alist' and `auto-mode-alist' -and `inhibit-first-line-modes-suffixes' that were added +and `inhibit-local-variables-suffixes' that were added by `jka-compr-installed'." - ;; Delete from inhibit-first-line-modes-suffixes - ;; what jka-compr-install added. + ;; Delete from inhibit-local-variables-suffixes what jka-compr-install added. (mapc (function (lambda (x) (and (jka-compr-info-strip-extension x) - (setq inhibit-first-line-modes-suffixes + (setq inhibit-local-variables-suffixes (delete (jka-compr-info-regexp x) - inhibit-first-line-modes-suffixes))))) + inhibit-local-variables-suffixes))))) jka-compr-compression-info-list--internal) (let* ((fnha (cons nil file-name-handler-alist)) diff --git a/lisp/language/thai-util.el b/lisp/language/thai-util.el index 4cfee92e0e7..ff5eac86480 100644 --- a/lisp/language/thai-util.el +++ b/lisp/language/thai-util.el @@ -1,6 +1,6 @@ ;;; thai-util.el --- utilities for Thai -*- coding: utf-8; -*- -;; Copyright (C) 2000-2012 Free Software Foundation, Inc. +;; Copyright (C) 2000-2012 Free Software Foundation, Inc. ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, ;; 2005, 2006, 2007, 2008, 2009, 2010, 2011 ;; National Institute of Advanced Industrial Science and Technology (AIST) @@ -257,7 +257,11 @@ positions (integers or markers) specifying the region." (define-minor-mode thai-word-mode "Minor mode to make word-oriented commands aware of Thai words. -The commands affected are \\[forward-word], \\[backward-word], \\[kill-word], \\[backward-kill-word], \\[transpose-words], and \\[fill-paragraph]." +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil. The commands affected are +\\[forward-word], \\[backward-word], \\[kill-word], \\[backward-kill-word], +\\[transpose-words], and \\[fill-paragraph]." :global t :group 'mule (cond (thai-word-mode ;; This enables linebreak between Thai characters. diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el index 754764b9758..9d5e69ba9d9 100644 --- a/lisp/ldefs-boot.el +++ b/lisp/ldefs-boot.el @@ -5,7 +5,7 @@ ;;;### (autoloads (5x5-crack 5x5-crack-xor-mutate 5x5-crack-mutating-best ;;;;;; 5x5-crack-mutating-current 5x5-crack-randomly 5x5) "5x5" -;;;;;; "play/5x5.el" (20168 57844)) +;;;;;; "play/5x5.el" (20229 34587)) ;;; Generated autoloads from play/5x5.el (autoload '5x5 "5x5" "\ @@ -68,7 +68,7 @@ should return a grid vector array that is the new solution. ;;;*** ;;;### (autoloads (ada-mode ada-add-extensions) "ada-mode" "progmodes/ada-mode.el" -;;;;;; (20197 58064)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/ada-mode.el (autoload 'ada-add-extensions "ada-mode" "\ @@ -88,7 +88,7 @@ Ada mode is the major mode for editing Ada code. ;;;*** ;;;### (autoloads (ada-header) "ada-stmt" "progmodes/ada-stmt.el" -;;;;;; (20209 49217)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/ada-stmt.el (autoload 'ada-header "ada-stmt" "\ @@ -99,7 +99,7 @@ Insert a descriptive header at the top of the file. ;;;*** ;;;### (autoloads (ada-find-file) "ada-xref" "progmodes/ada-xref.el" -;;;;;; (20222 61246)) +;;;;;; (20236 7740)) ;;; Generated autoloads from progmodes/ada-xref.el (autoload 'ada-find-file "ada-xref" "\ @@ -114,7 +114,7 @@ Completion is available. ;;;;;; add-change-log-entry-other-window add-change-log-entry find-change-log ;;;;;; prompt-for-change-log-name add-log-mailing-address add-log-full-name ;;;;;; add-log-current-defun-function) "add-log" "vc/add-log.el" -;;;;;; (20033 22846)) +;;;;;; (20229 34587)) ;;; Generated autoloads from vc/add-log.el (put 'change-log-default-name 'safe-local-variable 'string-or-null-p) @@ -253,7 +253,7 @@ old-style time formats for entries are supported. ;;;### (autoloads (defadvice ad-activate ad-add-advice ad-disable-advice ;;;;;; ad-enable-advice ad-default-compilation-action ad-redefinition-action) -;;;;;; "advice" "emacs-lisp/advice.el" (20179 28130)) +;;;;;; "advice" "emacs-lisp/advice.el" (20229 34587)) ;;; Generated autoloads from emacs-lisp/advice.el (defvar ad-redefinition-action 'warn "\ @@ -398,7 +398,7 @@ usage: (defadvice FUNCTION (CLASS NAME [POSITION] [ARGLIST] FLAG...) ;;;### (autoloads (align-newline-and-indent align-unhighlight-rule ;;;;;; align-highlight-rule align-current align-entire align-regexp -;;;;;; align) "align" "align.el" (20188 43079)) +;;;;;; align) "align" "align.el" (20229 34587)) ;;; Generated autoloads from align.el (autoload 'align "align" "\ @@ -489,7 +489,7 @@ A replacement function for `newline-and-indent', aligning as it goes. ;;;### (autoloads (outlineify-sticky allout-mode allout-mode-p allout-auto-activation ;;;;;; allout-setup allout-auto-activation-helper) "allout" "allout.el" -;;;;;; (20207 7484)) +;;;;;; (20229 34587)) ;;; Generated autoloads from allout.el (autoload 'allout-auto-activation-helper "allout" "\ @@ -850,7 +850,7 @@ for details on preparing Emacs for automatic allout activation. ;;;### (autoloads (allout-widgets-mode allout-widgets-auto-activation ;;;;;; allout-widgets-setup allout-widgets) "allout-widgets" "allout-widgets.el" -;;;;;; (20221 40442)) +;;;;;; (20229 34587)) ;;; Generated autoloads from allout-widgets.el (let ((loads (get 'allout-widgets 'custom-loads))) (if (member '"allout-widgets" loads) nil (put 'allout-widgets 'custom-loads (cons '"allout-widgets" loads)))) @@ -910,7 +910,7 @@ outline hot-spot navigation (see `allout-mode'). ;;;*** ;;;### (autoloads (ange-ftp-hook-function ange-ftp-reread-dir) "ange-ftp" -;;;;;; "net/ange-ftp.el" (20213 46266)) +;;;;;; "net/ange-ftp.el" (20261 10951)) ;;; Generated autoloads from net/ange-ftp.el (defalias 'ange-ftp-re-read-dir 'ange-ftp-reread-dir) @@ -932,7 +932,7 @@ directory, so that Emacs will know its current contents. ;;;*** ;;;### (autoloads (animate-birthday-present animate-sequence animate-string) -;;;;;; "animate" "play/animate.el" (20164 60780)) +;;;;;; "animate" "play/animate.el" (20229 34587)) ;;; Generated autoloads from play/animate.el (autoload 'animate-string "animate" "\ @@ -965,7 +965,7 @@ the buffer *Birthday-Present-for-Name*. ;;;*** ;;;### (autoloads (ansi-color-process-output ansi-color-for-comint-mode-on) -;;;;;; "ansi-color" "ansi-color.el" (20204 31303)) +;;;;;; "ansi-color" "ansi-color.el" (20229 34587)) ;;; Generated autoloads from ansi-color.el (autoload 'ansi-color-for-comint-mode-on "ansi-color" "\ @@ -991,7 +991,7 @@ This is a good function to put in `comint-output-filter-functions'. ;;;*** ;;;### (autoloads (antlr-set-tabs antlr-mode antlr-show-makefile-rules) -;;;;;; "antlr-mode" "progmodes/antlr-mode.el" (19890 42850)) +;;;;;; "antlr-mode" "progmodes/antlr-mode.el" (20229 34587)) ;;; Generated autoloads from progmodes/antlr-mode.el (autoload 'antlr-show-makefile-rules "antlr-mode" "\ @@ -1027,7 +1027,7 @@ Used in `antlr-mode'. Also a useful function in `java-mode-hook'. ;;;*** ;;;### (autoloads (appt-activate appt-add) "appt" "calendar/appt.el" -;;;;;; (20188 43079)) +;;;;;; (20229 34587)) ;;; Generated autoloads from calendar/appt.el (autoload 'appt-add "appt" "\ @@ -1050,7 +1050,7 @@ ARG is positive, otherwise off. ;;;### (autoloads (apropos-documentation apropos-value apropos-library ;;;;;; apropos apropos-documentation-property apropos-command apropos-variable -;;;;;; apropos-read-pattern) "apropos" "apropos.el" (20161 45793)) +;;;;;; apropos-read-pattern) "apropos" "apropos.el" (20229 34587)) ;;; Generated autoloads from apropos.el (autoload 'apropos-read-pattern "apropos" "\ @@ -1158,8 +1158,8 @@ Returns list of symbols and documentation found. ;;;*** -;;;### (autoloads (archive-mode) "arc-mode" "arc-mode.el" (20201 -;;;;;; 55112)) +;;;### (autoloads (archive-mode) "arc-mode" "arc-mode.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from arc-mode.el (autoload 'archive-mode "arc-mode" "\ @@ -1179,7 +1179,7 @@ archive. ;;;*** -;;;### (autoloads (array-mode) "array" "array.el" (19845 45374)) +;;;### (autoloads (array-mode) "array" "array.el" (20229 34587)) ;;; Generated autoloads from array.el (autoload 'array-mode "array" "\ @@ -1250,8 +1250,8 @@ Entering array mode calls the function `array-mode-hook'. ;;;*** -;;;### (autoloads (artist-mode) "artist" "textmodes/artist.el" (20204 -;;;;;; 31303)) +;;;### (autoloads (artist-mode) "artist" "textmodes/artist.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from textmodes/artist.el (autoload 'artist-mode "artist" "\ @@ -1457,8 +1457,8 @@ Keymap summary ;;;*** -;;;### (autoloads (asm-mode) "asm-mode" "progmodes/asm-mode.el" (19890 -;;;;;; 42850)) +;;;### (autoloads (asm-mode) "asm-mode" "progmodes/asm-mode.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from progmodes/asm-mode.el (autoload 'asm-mode "asm-mode" "\ @@ -1486,7 +1486,7 @@ Special commands: ;;;*** ;;;### (autoloads (auth-source-cache-expiry) "auth-source" "gnus/auth-source.el" -;;;;;; (20089 47591)) +;;;;;; (20236 48737)) ;;; Generated autoloads from gnus/auth-source.el (defvar auth-source-cache-expiry 7200 "\ @@ -1499,7 +1499,7 @@ let-binding.") ;;;*** ;;;### (autoloads (autoarg-kp-mode autoarg-mode) "autoarg" "autoarg.el" -;;;;;; (20127 62865)) +;;;;;; (20229 34587)) ;;; Generated autoloads from autoarg.el (defvar autoarg-mode nil "\ @@ -1560,7 +1560,7 @@ This is similar to `autoarg-mode' but rebinds the keypad keys ;;;*** ;;;### (autoloads (autoconf-mode) "autoconf" "progmodes/autoconf.el" -;;;;;; (20163 39903)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/autoconf.el (autoload 'autoconf-mode "autoconf" "\ @@ -1571,7 +1571,7 @@ Major mode for editing Autoconf configure.in files. ;;;*** ;;;### (autoloads (auto-insert-mode define-auto-insert auto-insert) -;;;;;; "autoinsert" "autoinsert.el" (20127 62865)) +;;;;;; "autoinsert" "autoinsert.el" (20229 34587)) ;;; Generated autoloads from autoinsert.el (autoload 'auto-insert "autoinsert" "\ @@ -1611,7 +1611,7 @@ insert a template for the file depending on the mode of the buffer. ;;;### (autoloads (batch-update-autoloads update-directory-autoloads ;;;;;; update-file-autoloads) "autoload" "emacs-lisp/autoload.el" -;;;;;; (20173 35732)) +;;;;;; (20229 34587)) ;;; Generated autoloads from emacs-lisp/autoload.el (put 'generated-autoload-file 'safe-local-variable 'stringp) @@ -1662,7 +1662,7 @@ should be non-nil). ;;;### (autoloads (global-auto-revert-mode turn-on-auto-revert-tail-mode ;;;;;; auto-revert-tail-mode turn-on-auto-revert-mode auto-revert-mode) -;;;;;; "autorevert" "autorevert.el" (20168 57844)) +;;;;;; "autorevert" "autorevert.el" (20229 34587)) ;;; Generated autoloads from autorevert.el (autoload 'auto-revert-mode "autorevert" "\ @@ -1751,7 +1751,7 @@ specifies in the mode line. ;;;*** ;;;### (autoloads (mouse-avoidance-mode mouse-avoidance-mode) "avoid" -;;;;;; "avoid.el" (19845 45374)) +;;;;;; "avoid.el" (20229 34587)) ;;; Generated autoloads from avoid.el (defvar mouse-avoidance-mode nil "\ @@ -1792,7 +1792,7 @@ definition of \"random distance\".) ;;;*** ;;;### (autoloads (display-battery-mode battery) "battery" "battery.el" -;;;;;; (20211 4536)) +;;;;;; (20229 34587)) ;;; Generated autoloads from battery.el (put 'battery-mode-line-string 'risky-local-variable t) @@ -1828,7 +1828,7 @@ seconds. ;;;*** ;;;### (autoloads (benchmark benchmark-run-compiled benchmark-run) -;;;;;; "benchmark" "emacs-lisp/benchmark.el" (19981 40664)) +;;;;;; "benchmark" "emacs-lisp/benchmark.el" (20229 34587)) ;;; Generated autoloads from emacs-lisp/benchmark.el (autoload 'benchmark-run "benchmark" "\ @@ -1861,7 +1861,7 @@ For non-interactive use see also `benchmark-run' and ;;;*** ;;;### (autoloads (bibtex-search-entry bibtex-mode bibtex-initialize) -;;;;;; "bibtex" "textmodes/bibtex.el" (20221 40442)) +;;;;;; "bibtex" "textmodes/bibtex.el" (20261 10951)) ;;; Generated autoloads from textmodes/bibtex.el (autoload 'bibtex-initialize "bibtex" "\ @@ -1950,7 +1950,7 @@ A prefix arg negates the value of `bibtex-search-entry-globally'. ;;;*** ;;;### (autoloads (bibtex-style-mode) "bibtex-style" "textmodes/bibtex-style.el" -;;;;;; (19863 8742)) +;;;;;; (20229 34587)) ;;; Generated autoloads from textmodes/bibtex-style.el (autoload 'bibtex-style-mode "bibtex-style" "\ @@ -1962,7 +1962,7 @@ Major mode for editing BibTeX style files. ;;;### (autoloads (binhex-decode-region binhex-decode-region-external ;;;;;; binhex-decode-region-internal) "binhex" "mail/binhex.el" -;;;;;; (20174 10230)) +;;;;;; (20229 34587)) ;;; Generated autoloads from mail/binhex.el (defconst binhex-begin-line "^:...............................................................$" "\ @@ -1986,8 +1986,8 @@ Binhex decode region between START and END. ;;;*** -;;;### (autoloads (blackbox) "blackbox" "play/blackbox.el" (19845 -;;;;;; 45374)) +;;;### (autoloads (blackbox) "blackbox" "play/blackbox.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from play/blackbox.el (autoload 'blackbox "blackbox" "\ @@ -2110,7 +2110,7 @@ a reflection. ;;;;;; bookmark-save bookmark-write bookmark-delete bookmark-insert ;;;;;; bookmark-rename bookmark-insert-location bookmark-relocate ;;;;;; bookmark-jump-other-window bookmark-jump bookmark-set) "bookmark" -;;;;;; "bookmark.el" (20178 7273)) +;;;;;; "bookmark.el" (20229 34587)) ;;; Generated autoloads from bookmark.el (define-key ctl-x-r-map "b" 'bookmark-jump) (define-key ctl-x-r-map "m" 'bookmark-set) @@ -2311,7 +2311,7 @@ Incremental search of bookmarks, hiding the non-matches as we go. ;;;;;; browse-url-xdg-open browse-url-at-mouse browse-url-at-point ;;;;;; browse-url browse-url-of-region browse-url-of-dired-file ;;;;;; browse-url-of-buffer browse-url-of-file browse-url-browser-function) -;;;;;; "browse-url" "net/browse-url.el" (20168 57844)) +;;;;;; "browse-url" "net/browse-url.el" (20229 34587)) ;;; Generated autoloads from net/browse-url.el (defvar browse-url-browser-function 'browse-url-default-browser "\ @@ -2624,8 +2624,8 @@ from `browse-url-elinks-wrapper'. ;;;*** -;;;### (autoloads (snarf-bruces bruce) "bruce" "play/bruce.el" (20165 -;;;;;; 31925)) +;;;### (autoloads (snarf-bruces bruce) "bruce" "play/bruce.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from play/bruce.el (autoload 'bruce "bruce" "\ @@ -2641,7 +2641,7 @@ Return a vector containing the lines from `bruce-phrases-file'. ;;;*** ;;;### (autoloads (bs-show bs-customize bs-cycle-previous bs-cycle-next) -;;;;;; "bs" "bs.el" (20161 45793)) +;;;;;; "bs" "bs.el" (20229 34587)) ;;; Generated autoloads from bs.el (autoload 'bs-cycle-next "bs" "\ @@ -2681,7 +2681,7 @@ name of buffer configuration. ;;;*** -;;;### (autoloads (bubbles) "bubbles" "play/bubbles.el" (20166 16092)) +;;;### (autoloads (bubbles) "bubbles" "play/bubbles.el" (20229 34587)) ;;; Generated autoloads from play/bubbles.el (autoload 'bubbles "bubbles" "\ @@ -2703,7 +2703,7 @@ columns on its right towards the left. ;;;*** ;;;### (autoloads (bug-reference-prog-mode bug-reference-mode) "bug-reference" -;;;;;; "progmodes/bug-reference.el" (20127 62865)) +;;;;;; "progmodes/bug-reference.el" (20229 34587)) ;;; Generated autoloads from progmodes/bug-reference.el (put 'bug-reference-url-format 'safe-local-variable (lambda (s) (or (stringp s) (and (symbolp s) (get s 'bug-reference-url-format))))) @@ -2727,7 +2727,7 @@ Like `bug-reference-mode', but only buttonize in comments and strings. ;;;;;; batch-byte-compile-if-not-done display-call-tree byte-compile ;;;;;; compile-defun byte-compile-file byte-recompile-directory ;;;;;; byte-force-recompile byte-compile-enable-warning byte-compile-disable-warning) -;;;;;; "bytecomp" "emacs-lisp/bytecomp.el" (20224 16567)) +;;;;;; "bytecomp" "emacs-lisp/bytecomp.el" (20230 55355)) ;;; 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) @@ -2847,8 +2847,8 @@ and corresponding effects. ;;;*** -;;;### (autoloads nil "cal-china" "calendar/cal-china.el" (19885 -;;;;;; 24894)) +;;;### (autoloads nil "cal-china" "calendar/cal-china.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from calendar/cal-china.el (put 'calendar-chinese-time-zone 'risky-local-variable t) @@ -2857,7 +2857,7 @@ and corresponding effects. ;;;*** -;;;### (autoloads nil "cal-dst" "calendar/cal-dst.el" (19885 24894)) +;;;### (autoloads nil "cal-dst" "calendar/cal-dst.el" (20229 34587)) ;;; Generated autoloads from calendar/cal-dst.el (put 'calendar-daylight-savings-starts 'risky-local-variable t) @@ -2869,7 +2869,7 @@ and corresponding effects. ;;;*** ;;;### (autoloads (calendar-hebrew-list-yahrzeits) "cal-hebrew" "calendar/cal-hebrew.el" -;;;;;; (19885 24894)) +;;;;;; (20229 34587)) ;;; Generated autoloads from calendar/cal-hebrew.el (autoload 'calendar-hebrew-list-yahrzeits "cal-hebrew" "\ @@ -2885,8 +2885,8 @@ from the cursor position. ;;;### (autoloads (defmath calc-embedded-activate calc-embedded calc-grab-rectangle ;;;;;; calc-grab-region full-calc-keypad calc-keypad calc-eval quick-calc -;;;;;; full-calc calc calc-dispatch) "calc" "calc/calc.el" (20172 -;;;;;; 54913)) +;;;;;; full-calc calc calc-dispatch) "calc" "calc/calc.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from calc/calc.el (define-key ctl-x-map "*" 'calc-dispatch) @@ -2970,8 +2970,8 @@ See Info node `(calc)Defining Functions'. ;;;*** -;;;### (autoloads (calc-undo) "calc-undo" "calc/calc-undo.el" (19845 -;;;;;; 45374)) +;;;### (autoloads (calc-undo) "calc-undo" "calc/calc-undo.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from calc/calc-undo.el (autoload 'calc-undo "calc-undo" "\ @@ -2981,8 +2981,8 @@ See Info node `(calc)Defining Functions'. ;;;*** -;;;### (autoloads (calculator) "calculator" "calculator.el" (20187 -;;;;;; 22214)) +;;;### (autoloads (calculator) "calculator" "calculator.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from calculator.el (autoload 'calculator "calculator" "\ @@ -2993,8 +2993,8 @@ See the documentation for `calculator-mode' for more information. ;;;*** -;;;### (autoloads (calendar) "calendar" "calendar/calendar.el" (20141 -;;;;;; 9296)) +;;;### (autoloads (calendar) "calendar" "calendar/calendar.el" (20230 +;;;;;; 18463)) ;;; Generated autoloads from calendar/calendar.el (autoload 'calendar "calendar" "\ @@ -3038,7 +3038,7 @@ This function is suitable for execution in a .emacs file. ;;;*** ;;;### (autoloads (canlock-verify canlock-insert-header) "canlock" -;;;;;; "gnus/canlock.el" (19845 45374)) +;;;;;; "gnus/canlock.el" (20229 34587)) ;;; Generated autoloads from gnus/canlock.el (autoload 'canlock-insert-header "canlock" "\ @@ -3056,7 +3056,7 @@ it fails. ;;;*** ;;;### (autoloads (capitalized-words-mode) "cap-words" "progmodes/cap-words.el" -;;;;;; (20127 62865)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/cap-words.el (autoload 'capitalized-words-mode "cap-words" "\ @@ -3095,15 +3095,15 @@ Obsoletes `c-forward-into-nomenclature'. ;;;*** -;;;### (autoloads nil "cc-compat" "progmodes/cc-compat.el" (19845 -;;;;;; 45374)) +;;;### (autoloads nil "cc-compat" "progmodes/cc-compat.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from progmodes/cc-compat.el (put 'c-indent-level 'safe-local-variable 'integerp) ;;;*** ;;;### (autoloads (c-guess-basic-syntax) "cc-engine" "progmodes/cc-engine.el" -;;;;;; (20222 61246)) +;;;;;; (20264 31805)) ;;; Generated autoloads from progmodes/cc-engine.el (autoload 'c-guess-basic-syntax "cc-engine" "\ @@ -3115,7 +3115,7 @@ Return the syntactic context of the current line. ;;;### (autoloads (c-guess-install c-guess-region-no-install c-guess-region ;;;;;; c-guess-buffer-no-install c-guess-buffer c-guess-no-install -;;;;;; c-guess) "cc-guess" "progmodes/cc-guess.el" (19981 40664)) +;;;;;; c-guess) "cc-guess" "progmodes/cc-guess.el" (20229 34587)) ;;; Generated autoloads from progmodes/cc-guess.el (defvar c-guess-guessed-offsets-alist nil "\ @@ -3215,7 +3215,7 @@ the absolute file name of the file if STYLE-NAME is nil. ;;;### (autoloads (awk-mode pike-mode idl-mode java-mode objc-mode ;;;;;; c++-mode c-mode c-initialize-cc-mode) "cc-mode" "progmodes/cc-mode.el" -;;;;;; (20221 40442)) +;;;;;; (20247 64512)) ;;; Generated autoloads from progmodes/cc-mode.el (autoload 'c-initialize-cc-mode "cc-mode" "\ @@ -3392,7 +3392,7 @@ Key bindings: ;;;*** ;;;### (autoloads (c-set-offset c-add-style c-set-style) "cc-styles" -;;;;;; "progmodes/cc-styles.el" (19981 40664)) +;;;;;; "progmodes/cc-styles.el" (20229 34587)) ;;; Generated autoloads from progmodes/cc-styles.el (autoload 'c-set-style "cc-styles" "\ @@ -3443,7 +3443,7 @@ and exists only for compatibility reasons. ;;;*** -;;;### (autoloads nil "cc-vars" "progmodes/cc-vars.el" (20189 63932)) +;;;### (autoloads nil "cc-vars" "progmodes/cc-vars.el" (20229 34587)) ;;; Generated autoloads from progmodes/cc-vars.el (put 'c-basic-offset 'safe-local-variable 'integerp) (put 'c-backslash-column 'safe-local-variable 'integerp) @@ -3453,7 +3453,7 @@ and exists only for compatibility reasons. ;;;### (autoloads (ccl-execute-with-args check-ccl-program define-ccl-program ;;;;;; declare-ccl-program ccl-dump ccl-compile) "ccl" "international/ccl.el" -;;;;;; (20201 55112)) +;;;;;; (20229 34587)) ;;; Generated autoloads from international/ccl.el (autoload 'ccl-compile "ccl" "\ @@ -3714,7 +3714,7 @@ See the documentation of `define-ccl-program' for the detail of CCL program. ;;;*** ;;;### (autoloads (cconv-closure-convert) "cconv" "emacs-lisp/cconv.el" -;;;;;; (20178 7273)) +;;;;;; (20229 34587)) ;;; Generated autoloads from emacs-lisp/cconv.el (autoload 'cconv-closure-convert "cconv" "\ @@ -3729,7 +3729,7 @@ Returns a form where all lambdas don't have any free variables. ;;;*** ;;;### (autoloads (cfengine-auto-mode cfengine2-mode cfengine3-mode) -;;;;;; "cfengine" "progmodes/cfengine.el" (20211 4536)) +;;;;;; "cfengine" "progmodes/cfengine.el" (20229 34587)) ;;; Generated autoloads from progmodes/cfengine.el (autoload 'cfengine3-mode "cfengine" "\ @@ -3759,7 +3759,7 @@ on the buffer contents ;;;*** ;;;### (autoloads (check-declare-directory check-declare-file) "check-declare" -;;;;;; "emacs-lisp/check-declare.el" (19906 31087)) +;;;;;; "emacs-lisp/check-declare.el" (20229 34587)) ;;; Generated autoloads from emacs-lisp/check-declare.el (autoload 'check-declare-file "check-declare" "\ @@ -3784,7 +3784,7 @@ Returns non-nil if any false statements are found. ;;;;;; checkdoc-comments checkdoc-continue checkdoc-start checkdoc-current-buffer ;;;;;; checkdoc-eval-current-buffer checkdoc-message-interactive ;;;;;; checkdoc-interactive checkdoc checkdoc-list-of-strings-p) -;;;;;; "checkdoc" "emacs-lisp/checkdoc.el" (20168 57844)) +;;;;;; "checkdoc" "emacs-lisp/checkdoc.el" (20237 28610)) ;;; Generated autoloads from emacs-lisp/checkdoc.el (put 'checkdoc-force-docstrings-flag 'safe-local-variable 'booleanp) (put 'checkdoc-force-history-flag 'safe-local-variable 'booleanp) @@ -3980,7 +3980,7 @@ checking of documentation strings. ;;;### (autoloads (pre-write-encode-hz post-read-decode-hz encode-hz-buffer ;;;;;; encode-hz-region decode-hz-buffer decode-hz-region) "china-util" -;;;;;; "language/china-util.el" (19845 45374)) +;;;;;; "language/china-util.el" (20229 34587)) ;;; Generated autoloads from language/china-util.el (autoload 'decode-hz-region "china-util" "\ @@ -4018,7 +4018,7 @@ Encode the text in the current buffer to HZ. ;;;*** ;;;### (autoloads (command-history list-command-history repeat-matching-complex-command) -;;;;;; "chistory" "chistory.el" (19845 45374)) +;;;;;; "chistory" "chistory.el" (20229 34587)) ;;; Generated autoloads from chistory.el (autoload 'repeat-matching-complex-command "chistory" "\ @@ -4057,7 +4057,7 @@ and runs the normal hook `command-history-hook'. ;;;*** -;;;### (autoloads nil "cl" "emacs-lisp/cl.el" (20137 45833)) +;;;### (autoloads nil "cl" "emacs-lisp/cl.el" (20229 34587)) ;;; Generated autoloads from emacs-lisp/cl.el (defvar custom-print-functions nil "\ @@ -4073,7 +4073,7 @@ a future Emacs interpreter will be able to use it.") ;;;*** ;;;### (autoloads (common-lisp-indent-function) "cl-indent" "emacs-lisp/cl-indent.el" -;;;;;; (20170 64186)) +;;;;;; (20229 34587)) ;;; Generated autoloads from emacs-lisp/cl-indent.el (autoload 'common-lisp-indent-function "cl-indent" "\ @@ -4152,7 +4152,7 @@ For example, the function `case' has an indent property ;;;*** ;;;### (autoloads (c-macro-expand) "cmacexp" "progmodes/cmacexp.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/cmacexp.el (autoload 'c-macro-expand "cmacexp" "\ @@ -4172,8 +4172,8 @@ For use inside Lisp programs, see also `c-macro-expansion'. ;;;*** -;;;### (autoloads (run-scheme) "cmuscheme" "cmuscheme.el" (20092 -;;;;;; 23754)) +;;;### (autoloads (run-scheme) "cmuscheme" "cmuscheme.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from cmuscheme.el (autoload 'run-scheme "cmuscheme" "\ @@ -4193,7 +4193,7 @@ is run). ;;;*** -;;;### (autoloads (color-name-to-rgb) "color" "color.el" (20175 31160)) +;;;### (autoloads (color-name-to-rgb) "color" "color.el" (20254 62269)) ;;; Generated autoloads from color.el (autoload 'color-name-to-rgb "color" "\ @@ -4215,7 +4215,7 @@ If FRAME cannot display COLOR, return nil. ;;;### (autoloads (comint-redirect-results-list-from-process comint-redirect-results-list ;;;;;; comint-redirect-send-command-to-process comint-redirect-send-command ;;;;;; comint-run make-comint make-comint-in-buffer) "comint" "comint.el" -;;;;;; (20197 58064)) +;;;;;; (20229 34587)) ;;; Generated autoloads from comint.el (defvar comint-output-filter-functions '(comint-postoutput-scroll-to-bottom comint-watch-for-password-prompt) "\ @@ -4310,7 +4310,7 @@ REGEXP-GROUP is the regular expression group in REGEXP to use. ;;;*** ;;;### (autoloads (compare-windows) "compare-w" "vc/compare-w.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from vc/compare-w.el (autoload 'compare-windows "compare-w" "\ @@ -4347,8 +4347,8 @@ on third call it again advances points to the next difference and so on. ;;;;;; compilation-shell-minor-mode compilation-mode compilation-start ;;;;;; compile compilation-disable-input compile-command compilation-search-path ;;;;;; compilation-ask-about-save compilation-window-height compilation-start-hook -;;;;;; compilation-mode-hook) "compile" "progmodes/compile.el" (20167 -;;;;;; 36967)) +;;;;;; compilation-mode-hook) "compile" "progmodes/compile.el" (20265 +;;;;;; 7997)) ;;; Generated autoloads from progmodes/compile.el (defvar compilation-mode-hook nil "\ @@ -4528,7 +4528,7 @@ This is the value of `next-error-function' in Compilation buffers. ;;;*** ;;;### (autoloads (dynamic-completion-mode) "completion" "completion.el" -;;;;;; (19886 45771)) +;;;;;; (20229 34587)) ;;; Generated autoloads from completion.el (defvar dynamic-completion-mode nil "\ @@ -4550,7 +4550,7 @@ Enable dynamic word-completion. ;;;### (autoloads (conf-xdefaults-mode conf-ppd-mode conf-colon-mode ;;;;;; conf-space-keywords conf-space-mode conf-javaprop-mode conf-windows-mode ;;;;;; conf-unix-mode conf-mode) "conf-mode" "textmodes/conf-mode.el" -;;;;;; (20178 7273)) +;;;;;; (20229 34587)) ;;; Generated autoloads from textmodes/conf-mode.el (autoload 'conf-mode "conf-mode" "\ @@ -4706,7 +4706,7 @@ For details see `conf-mode'. Example: ;;;*** ;;;### (autoloads (shuffle-vector cookie-snarf cookie-insert cookie) -;;;;;; "cookie1" "play/cookie1.el" (20222 61246)) +;;;;;; "cookie1" "play/cookie1.el" (20229 34587)) ;;; Generated autoloads from play/cookie1.el (autoload 'cookie "cookie1" "\ @@ -4738,8 +4738,8 @@ Randomly permute the elements of VECTOR (all permutations equally likely). ;;;*** ;;;### (autoloads (copyright-update-directory copyright copyright-fix-years -;;;;;; copyright-update) "copyright" "emacs-lisp/copyright.el" (19845 -;;;;;; 45374)) +;;;;;; copyright-update) "copyright" "emacs-lisp/copyright.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from emacs-lisp/copyright.el (put 'copyright-at-end-flag 'safe-local-variable 'booleanp) (put 'copyright-names-regexp 'safe-local-variable 'stringp) @@ -4778,7 +4778,7 @@ If FIX is non-nil, run `copyright-fix-years' instead. ;;;*** ;;;### (autoloads (cperl-perldoc-at-point cperl-perldoc cperl-mode) -;;;;;; "cperl-mode" "progmodes/cperl-mode.el" (20201 55112)) +;;;;;; "cperl-mode" "progmodes/cperl-mode.el" (20229 34587)) ;;; Generated autoloads from progmodes/cperl-mode.el (put 'cperl-indent-level 'safe-local-variable 'integerp) (put 'cperl-brace-offset 'safe-local-variable 'integerp) @@ -4977,7 +4977,7 @@ Run a `perldoc' on the word around point. ;;;*** ;;;### (autoloads (cpp-parse-edit cpp-highlight-buffer) "cpp" "progmodes/cpp.el" -;;;;;; (20104 14925)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/cpp.el (autoload 'cpp-highlight-buffer "cpp" "\ @@ -4996,7 +4996,7 @@ Edit display information for cpp conditionals. ;;;*** ;;;### (autoloads (crisp-mode crisp-mode) "crisp" "emulation/crisp.el" -;;;;;; (20161 45793)) +;;;;;; (20229 34587)) ;;; Generated autoloads from emulation/crisp.el (defvar crisp-mode nil "\ @@ -5022,7 +5022,7 @@ if ARG is omitted or nil. ;;;*** ;;;### (autoloads (completing-read-multiple) "crm" "emacs-lisp/crm.el" -;;;;;; (20222 61246)) +;;;;;; (20229 34587)) ;;; Generated autoloads from emacs-lisp/crm.el (autoload 'completing-read-multiple "crm" "\ @@ -5057,8 +5057,8 @@ INHERIT-INPUT-METHOD. ;;;*** -;;;### (autoloads (css-mode) "css-mode" "textmodes/css-mode.el" (19978 -;;;;;; 37530)) +;;;### (autoloads (css-mode) "css-mode" "textmodes/css-mode.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from textmodes/css-mode.el (autoload 'css-mode "css-mode" "\ @@ -5069,7 +5069,7 @@ Major mode to edit Cascading Style Sheets. ;;;*** ;;;### (autoloads (cua-selection-mode cua-mode) "cua-base" "emulation/cua-base.el" -;;;;;; (20222 61246)) +;;;;;; (20229 34587)) ;;; Generated autoloads from emulation/cua-base.el (defvar cua-mode nil "\ @@ -5129,7 +5129,7 @@ Enable CUA selection mode without the C-z/C-x/C-c/C-v bindings. ;;;;;; customize-mode customize customize-push-and-save customize-save-variable ;;;;;; customize-set-variable customize-set-value custom-menu-sort-alphabetically ;;;;;; custom-buffer-sort-alphabetically custom-browse-sort-alphabetically) -;;;;;; "cus-edit" "cus-edit.el" (20179 28130)) +;;;;;; "cus-edit" "cus-edit.el" (20259 55615)) ;;; Generated autoloads from cus-edit.el (defvar custom-browse-sort-alphabetically nil "\ @@ -5312,7 +5312,7 @@ suggest to customize that face, if it's customizable. \(fn &optional FACE)" t nil) (autoload 'customize-unsaved "cus-edit" "\ -Customize all user options set in this session but not saved. +Customize all options and faces set in this session but not saved. \(fn)" t nil) @@ -5322,7 +5322,7 @@ Customize all user variables modified outside customize. \(fn)" t nil) (autoload 'customize-saved "cus-edit" "\ -Customize all already saved user options. +Customize all saved options and faces. \(fn)" t nil) @@ -5445,8 +5445,8 @@ The format is suitable for use with `easy-menu-define'. ;;;*** ;;;### (autoloads (customize-themes describe-theme custom-theme-visit-theme -;;;;;; customize-create-theme) "cus-theme" "cus-theme.el" (20059 -;;;;;; 26455)) +;;;;;; customize-create-theme) "cus-theme" "cus-theme.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from cus-theme.el (autoload 'customize-create-theme "cus-theme" "\ @@ -5478,7 +5478,7 @@ omitted, a buffer named *Custom Themes* is used. ;;;*** ;;;### (autoloads (cvs-status-mode) "cvs-status" "vc/cvs-status.el" -;;;;;; (20174 10230)) +;;;;;; (20229 34587)) ;;; Generated autoloads from vc/cvs-status.el (autoload 'cvs-status-mode "cvs-status" "\ @@ -5489,7 +5489,7 @@ Mode used for cvs status output. ;;;*** ;;;### (autoloads (global-cwarn-mode turn-on-cwarn-mode cwarn-mode) -;;;;;; "cwarn" "progmodes/cwarn.el" (20168 57844)) +;;;;;; "cwarn" "progmodes/cwarn.el" (20263 52669)) ;;; Generated autoloads from progmodes/cwarn.el (autoload 'cwarn-mode "cwarn" "\ @@ -5538,7 +5538,7 @@ See `cwarn-mode' for more information on Cwarn mode. ;;;### (autoloads (standard-display-cyrillic-translit cyrillic-encode-alternativnyj-char ;;;;;; cyrillic-encode-koi8-r-char) "cyril-util" "language/cyril-util.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from language/cyril-util.el (autoload 'cyrillic-encode-koi8-r-char "cyril-util" "\ @@ -5567,7 +5567,7 @@ If the argument is nil, we return the display table to its standard state. ;;;*** ;;;### (autoloads (dabbrev-expand dabbrev-completion) "dabbrev" "dabbrev.el" -;;;;;; (19989 34789)) +;;;;;; (20229 34587)) ;;; Generated autoloads from dabbrev.el (put 'dabbrev-case-fold-search 'risky-local-variable t) (put 'dabbrev-case-replace 'risky-local-variable t) @@ -5614,7 +5614,7 @@ See also `dabbrev-abbrev-char-regexp' and \\[dabbrev-completion]. ;;;*** ;;;### (autoloads (data-debug-new-buffer) "data-debug" "cedet/data-debug.el" -;;;;;; (20207 7484)) +;;;;;; (20229 34587)) ;;; Generated autoloads from cedet/data-debug.el (autoload 'data-debug-new-buffer "data-debug" "\ @@ -5624,8 +5624,8 @@ Create a new data-debug buffer with NAME. ;;;*** -;;;### (autoloads (dbus-handle-event) "dbus" "net/dbus.el" (20197 -;;;;;; 58064)) +;;;### (autoloads (dbus-handle-event) "dbus" "net/dbus.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from net/dbus.el (autoload 'dbus-handle-event "dbus" "\ @@ -5638,8 +5638,8 @@ If the HANDLER returns a `dbus-error', it is propagated as return message. ;;;*** -;;;### (autoloads (dcl-mode) "dcl-mode" "progmodes/dcl-mode.el" (20187 -;;;;;; 22214)) +;;;### (autoloads (dcl-mode) "dcl-mode" "progmodes/dcl-mode.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from progmodes/dcl-mode.el (autoload 'dcl-mode "dcl-mode" "\ @@ -5766,7 +5766,7 @@ There is some minimal font-lock support (see vars ;;;*** ;;;### (autoloads (cancel-debug-on-entry debug-on-entry debug) "debug" -;;;;;; "emacs-lisp/debug.el" (20098 62550)) +;;;;;; "emacs-lisp/debug.el" (20229 34587)) ;;; Generated autoloads from emacs-lisp/debug.el (setq debugger 'debug) @@ -5810,7 +5810,7 @@ To specify a nil argument interactively, exit with an empty minibuffer. ;;;*** ;;;### (autoloads (decipher-mode decipher) "decipher" "play/decipher.el" -;;;;;; (20164 60780)) +;;;;;; (20229 34587)) ;;; Generated autoloads from play/decipher.el (autoload 'decipher "decipher" "\ @@ -5839,8 +5839,8 @@ The most useful commands are: ;;;*** ;;;### (autoloads (delimit-columns-rectangle delimit-columns-region -;;;;;; delimit-columns-customize) "delim-col" "delim-col.el" (20197 -;;;;;; 58064)) +;;;;;; delimit-columns-customize) "delim-col" "delim-col.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from delim-col.el (autoload 'delimit-columns-customize "delim-col" "\ @@ -5864,8 +5864,8 @@ START and END delimits the corners of text rectangle. ;;;*** -;;;### (autoloads (delphi-mode) "delphi" "progmodes/delphi.el" (20153 -;;;;;; 32900)) +;;;### (autoloads (delphi-mode) "delphi" "progmodes/delphi.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from progmodes/delphi.el (autoload 'delphi-mode "delphi" "\ @@ -5916,8 +5916,8 @@ with no args, if that value is non-nil. ;;;*** -;;;### (autoloads (delete-selection-mode) "delsel" "delsel.el" (20187 -;;;;;; 22214)) +;;;### (autoloads (delete-selection-mode) "delsel" "delsel.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from delsel.el (defalias 'pending-delete-mode 'delete-selection-mode) @@ -5947,7 +5947,7 @@ any selection. ;;;*** ;;;### (autoloads (derived-mode-init-mode-variables define-derived-mode) -;;;;;; "derived" "emacs-lisp/derived.el" (20137 12290)) +;;;;;; "derived" "emacs-lisp/derived.el" (20229 34587)) ;;; Generated autoloads from emacs-lisp/derived.el (autoload 'define-derived-mode "derived" "\ @@ -6014,7 +6014,7 @@ the first time the mode is used. ;;;*** ;;;### (autoloads (describe-char describe-text-properties) "descr-text" -;;;;;; "descr-text.el" (20189 63932)) +;;;;;; "descr-text.el" (20259 55615)) ;;; Generated autoloads from descr-text.el (autoload 'describe-text-properties "descr-text" "\ @@ -6028,12 +6028,21 @@ otherwise. \(fn POS &optional OUTPUT-BUFFER BUFFER)" t nil) (autoload 'describe-char "descr-text" "\ -Describe the character after POS (interactively, the character after point). -Is POS is taken to be in buffer BUFFER or current buffer if nil. -The information includes character code, charset and code points in it, -syntax, category, how the character is encoded in a file, -character composition information (if relevant), -as well as widgets, buttons, overlays, and text properties. +Describe position POS (interactively, point) and the char after POS. +POS is taken to be in BUFFER, or the current buffer if BUFFER is nil. +The information is displayed in buffer `*Help*'. + +The position information includes POS; the total size of BUFFER; the +region limits, if narrowed; the column number; and the horizontal +scroll amount, if the buffer is horizontally scrolled. + +The character information includes the character code; charset and +code points in it; syntax; category; how the character is encoded in +BUFFER and in BUFFER's file; character composition information (if +relevant); the font and font glyphs used to display the character; +the character's canonical name and other properties defined by the +Unicode Data Base; and widgets, buttons, overlays, and text properties +relevant to POS. \(fn POS &optional BUFFER)" t nil) @@ -6042,7 +6051,7 @@ as well as widgets, buttons, overlays, and text properties. ;;;### (autoloads (desktop-revert desktop-save-in-desktop-dir desktop-change-dir ;;;;;; desktop-load-default desktop-read desktop-remove desktop-save ;;;;;; desktop-clear desktop-locals-to-save desktop-save-mode) "desktop" -;;;;;; "desktop.el" (20212 25403)) +;;;;;; "desktop.el" (20229 34587)) ;;; Generated autoloads from desktop.el (defvar desktop-save-mode nil "\ @@ -6229,7 +6238,7 @@ Revert to the last loaded desktop. ;;;### (autoloads (gnus-article-outlook-deuglify-article gnus-outlook-deuglify-article ;;;;;; gnus-article-outlook-repair-attribution gnus-article-outlook-unwrap-lines) -;;;;;; "deuglify" "gnus/deuglify.el" (19845 45374)) +;;;;;; "deuglify" "gnus/deuglify.el" (20229 34587)) ;;; Generated autoloads from gnus/deuglify.el (autoload 'gnus-article-outlook-unwrap-lines "deuglify" "\ @@ -6262,7 +6271,7 @@ Deuglify broken Outlook (Express) articles and redisplay. ;;;*** ;;;### (autoloads (diary-mode diary-mail-entries diary) "diary-lib" -;;;;;; "calendar/diary-lib.el" (20168 57844)) +;;;;;; "calendar/diary-lib.el" (20229 34587)) ;;; Generated autoloads from calendar/diary-lib.el (autoload 'diary "diary-lib" "\ @@ -6305,7 +6314,7 @@ Major mode for editing the diary file. ;;;*** ;;;### (autoloads (diff-buffer-with-file diff-backup diff diff-command -;;;;;; diff-switches) "diff" "vc/diff.el" (19999 41597)) +;;;;;; diff-switches) "diff" "vc/diff.el" (20229 34587)) ;;; Generated autoloads from vc/diff.el (defvar diff-switches (purecopy "-c") "\ @@ -6349,7 +6358,7 @@ This requires the external program `diff' to be in your `exec-path'. ;;;*** ;;;### (autoloads (diff-minor-mode diff-mode) "diff-mode" "vc/diff-mode.el" -;;;;;; (20181 13366)) +;;;;;; (20229 34587)) ;;; Generated autoloads from vc/diff-mode.el (autoload 'diff-mode "diff-mode" "\ @@ -6381,7 +6390,7 @@ the mode if ARG is omitted or nil. ;;;*** -;;;### (autoloads (dig) "dig" "net/dig.el" (19845 45374)) +;;;### (autoloads (dig) "dig" "net/dig.el" (20229 34587)) ;;; Generated autoloads from net/dig.el (autoload 'dig "dig" "\ @@ -6393,7 +6402,7 @@ Optional arguments are passed to `dig-invoke'. ;;;*** ;;;### (autoloads (dired-mode dired-noselect dired-other-frame dired-other-window -;;;;;; dired dired-listing-switches) "dired" "dired.el" (20189 63932)) +;;;;;; dired dired-listing-switches) "dired" "dired.el" (20259 55615)) ;;; Generated autoloads from dired.el (defvar dired-listing-switches (purecopy "-al") "\ @@ -6515,7 +6524,7 @@ Keybindings: ;;;*** ;;;### (autoloads (dirtrack dirtrack-mode) "dirtrack" "dirtrack.el" -;;;;;; (20127 62865)) +;;;;;; (20229 34587)) ;;; Generated autoloads from dirtrack.el (autoload 'dirtrack-mode "dirtrack" "\ @@ -6524,29 +6533,29 @@ With a prefix argument ARG, enable Dirtrack mode if ARG is positive, and disable it otherwise. If called from Lisp, enable the mode if ARG is omitted or nil. -This method requires that your shell prompt contain the full -current working directory at all times, and that `dirtrack-list' -is set to match the prompt. This is an alternative to -`shell-dirtrack-mode', which works differently, by tracking `cd' -and similar commands which change the shell working directory. +This method requires that your shell prompt contain the current +working directory at all times, and that you set the variable +`dirtrack-list' to match the prompt. + +This is an alternative to `shell-dirtrack-mode', which works by +tracking `cd' and similar commands which change the shell working +directory. \(fn &optional ARG)" t nil) (autoload 'dirtrack "dirtrack" "\ -Determine the current directory by scanning the process output for a prompt. -The prompt to look for is the first item in `dirtrack-list'. - -You can toggle directory tracking by using the function `dirtrack-mode'. - -If directory tracking does not seem to be working, you can use the -function `dirtrack-debug-mode' to turn on debugging output. +Determine the current directory from the process output for a prompt. +This filter function is used by `dirtrack-mode'. It looks for +the prompt specified by `dirtrack-list', and calls +`shell-process-cd' if the directory seems to have changed away +from `default-directory'. \(fn INPUT)" nil nil) ;;;*** -;;;### (autoloads (disassemble) "disass" "emacs-lisp/disass.el" (19931 -;;;;;; 11784)) +;;;### (autoloads (disassemble) "disass" "emacs-lisp/disass.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from emacs-lisp/disass.el (autoload 'disassemble "disass" "\ @@ -6565,7 +6574,7 @@ redefine OBJECT if it is a symbol. ;;;;;; standard-display-g1 standard-display-ascii standard-display-default ;;;;;; standard-display-8bit describe-current-display-table describe-display-table ;;;;;; set-display-table-slot display-table-slot make-display-table) -;;;;;; "disp-table" "disp-table.el" (19984 16846)) +;;;;;; "disp-table" "disp-table.el" (20229 34587)) ;;; Generated autoloads from disp-table.el (autoload 'make-display-table "disp-table" "\ @@ -6687,7 +6696,7 @@ in `.emacs'. ;;;*** ;;;### (autoloads (dissociated-press) "dissociate" "play/dissociate.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from play/dissociate.el (autoload 'dissociated-press "dissociate" "\ @@ -6703,7 +6712,7 @@ Default is 2. ;;;*** -;;;### (autoloads (dnd-protocol-alist) "dnd" "dnd.el" (19886 45771)) +;;;### (autoloads (dnd-protocol-alist) "dnd" "dnd.el" (20229 34587)) ;;; 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)) "\ @@ -6724,7 +6733,7 @@ if some action was made, or nil if the URL is ignored.") ;;;*** ;;;### (autoloads (dns-mode-soa-increment-serial dns-mode) "dns-mode" -;;;;;; "textmodes/dns-mode.el" (19845 45374)) +;;;;;; "textmodes/dns-mode.el" (20229 34587)) ;;; Generated autoloads from textmodes/dns-mode.el (autoload 'dns-mode "dns-mode" "\ @@ -6748,8 +6757,8 @@ Locate SOA record and increment the serial field. ;;;*** ;;;### (autoloads (doc-view-bookmark-jump doc-view-minor-mode doc-view-mode-maybe -;;;;;; doc-view-mode doc-view-mode-p) "doc-view" "doc-view.el" (20172 -;;;;;; 54913)) +;;;;;; doc-view-mode doc-view-mode-p) "doc-view" "doc-view.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from doc-view.el (autoload 'doc-view-mode-p "doc-view" "\ @@ -6795,7 +6804,7 @@ See the command `doc-view-mode' for more information on this mode. ;;;*** -;;;### (autoloads (doctor) "doctor" "play/doctor.el" (20077 56412)) +;;;### (autoloads (doctor) "doctor" "play/doctor.el" (20230 15291)) ;;; Generated autoloads from play/doctor.el (autoload 'doctor "doctor" "\ @@ -6805,7 +6814,7 @@ Switch to *doctor* buffer and start giving psychotherapy. ;;;*** -;;;### (autoloads (double-mode) "double" "double.el" (20127 62865)) +;;;### (autoloads (double-mode) "double" "double.el" (20229 34587)) ;;; Generated autoloads from double.el (autoload 'double-mode "double" "\ @@ -6821,7 +6830,7 @@ strings when pressed twice. See `double-map' for details. ;;;*** -;;;### (autoloads (dunnet) "dunnet" "play/dunnet.el" (20221 40442)) +;;;### (autoloads (dunnet) "dunnet" "play/dunnet.el" (20229 34587)) ;;; Generated autoloads from play/dunnet.el (autoload 'dunnet "dunnet" "\ @@ -6833,14 +6842,15 @@ Switch to *dungeon* buffer and start game. ;;;### (autoloads (easy-mmode-defsyntax easy-mmode-defmap easy-mmode-define-keymap ;;;;;; define-globalized-minor-mode define-minor-mode) "easy-mmode" -;;;;;; "emacs-lisp/easy-mmode.el" (20179 28130)) +;;;;;; "emacs-lisp/easy-mmode.el" (20264 40969)) ;;; Generated autoloads from emacs-lisp/easy-mmode.el (defalias 'easy-mmode-define-minor-mode 'define-minor-mode) (autoload 'define-minor-mode "easy-mmode" "\ Define a new minor mode MODE. -This defines the control variable MODE and the toggle command MODE. +This defines the toggle command MODE and (by default) a control variable +MODE (you can override this with the :variable keyword, see below). DOC is the documentation for the mode toggle command. Optional INIT-VALUE is the initial value of the mode's variable. @@ -6867,15 +6877,19 @@ BODY contains code to execute each time the mode is enabled or disabled. buffer-local, so don't make the variable MODE buffer-local. By default, the mode is buffer-local. :init-value VAL Same as the INIT-VALUE argument. + Not used if you also specify :variable. :lighter SPEC Same as the LIGHTER argument. :keymap MAP Same as the KEYMAP argument. :require SYM Same as in `defcustom'. -:variable PLACE The location (as can be used with `setf') to use instead - of the variable MODE to store the state of the mode. PLACE - can also be of the form (GET . SET) where GET is an expression - that returns the current state and SET is a function that takes - a new state and sets it. If you specify a :variable, this - function assumes it is defined elsewhere. +:variable PLACE The location to use instead of the variable MODE to store + the state of the mode. This can be simply a different + named variable, or more generally anything that can be used + with the CL macro `setf'. PLACE can also be of the form + (GET . SET), where GET is an expression that returns the + current state, and SET is a function that takes one argument, + the new state, and sets it. If you specify a :variable, + this function does not define a MODE variable (nor any of + the terms used in :variable). For example, you could write (define-minor-mode foo-mode \"If enabled, foo on you!\" @@ -6944,8 +6958,8 @@ CSS contains a list of syntax specifications of the form (CHAR . SYNTAX). ;;;*** ;;;### (autoloads (easy-menu-change easy-menu-create-menu easy-menu-do-define -;;;;;; easy-menu-define) "easymenu" "emacs-lisp/easymenu.el" (19845 -;;;;;; 45374)) +;;;;;; easy-menu-define) "easymenu" "emacs-lisp/easymenu.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from emacs-lisp/easymenu.el (autoload 'easy-menu-define "easymenu" "\ @@ -7099,7 +7113,7 @@ To implement dynamic menus, either call this from ;;;;;; ebnf-eps-file ebnf-eps-directory ebnf-spool-region ebnf-spool-buffer ;;;;;; ebnf-spool-file ebnf-spool-directory ebnf-print-region ebnf-print-buffer ;;;;;; ebnf-print-file ebnf-print-directory ebnf-customize) "ebnf2ps" -;;;;;; "progmodes/ebnf2ps.el" (20203 10426)) +;;;;;; "progmodes/ebnf2ps.el" (20229 34587)) ;;; Generated autoloads from progmodes/ebnf2ps.el (autoload 'ebnf-customize "ebnf2ps" "\ @@ -7373,8 +7387,8 @@ See `ebnf-style-database' documentation. ;;;;;; ebrowse-tags-find-declaration-other-window ebrowse-tags-find-definition ;;;;;; ebrowse-tags-view-definition ebrowse-tags-find-declaration ;;;;;; ebrowse-tags-view-declaration ebrowse-member-mode ebrowse-electric-choose-tree -;;;;;; ebrowse-tree-mode) "ebrowse" "progmodes/ebrowse.el" (20104 -;;;;;; 14925)) +;;;;;; ebrowse-tree-mode) "ebrowse" "progmodes/ebrowse.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from progmodes/ebrowse.el (autoload 'ebrowse-tree-mode "ebrowse" "\ @@ -7523,7 +7537,7 @@ Display statistics for a class tree. ;;;*** ;;;### (autoloads (electric-buffer-list) "ebuff-menu" "ebuff-menu.el" -;;;;;; (20104 14925)) +;;;;;; (20229 34587)) ;;; Generated autoloads from ebuff-menu.el (autoload 'electric-buffer-list "ebuff-menu" "\ @@ -7548,7 +7562,7 @@ Run hooks in `electric-buffer-menu-mode-hook' on entry. ;;;*** ;;;### (autoloads (Electric-command-history-redo-expression) "echistory" -;;;;;; "echistory.el" (19886 45771)) +;;;;;; "echistory.el" (20229 34587)) ;;; Generated autoloads from echistory.el (autoload 'Electric-command-history-redo-expression "echistory" "\ @@ -7560,7 +7574,7 @@ With prefix arg NOCONFIRM, execute current line as-is without editing. ;;;*** ;;;### (autoloads (ecomplete-setup) "ecomplete" "gnus/ecomplete.el" -;;;;;; (20110 24804)) +;;;;;; (20229 34587)) ;;; Generated autoloads from gnus/ecomplete.el (autoload 'ecomplete-setup "ecomplete" "\ @@ -7570,7 +7584,7 @@ With prefix arg NOCONFIRM, execute current line as-is without editing. ;;;*** -;;;### (autoloads (global-ede-mode) "ede" "cedet/ede.el" (20168 57844)) +;;;### (autoloads (global-ede-mode) "ede" "cedet/ede.el" (20240 47305)) ;;; Generated autoloads from cedet/ede.el (defvar global-ede-mode nil "\ @@ -7597,7 +7611,7 @@ an EDE controlled project. ;;;### (autoloads (edebug-all-forms edebug-all-defs edebug-eval-top-level-form ;;;;;; edebug-basic-spec edebug-all-forms edebug-all-defs) "edebug" -;;;;;; "emacs-lisp/edebug.el" (20187 22214)) +;;;;;; "emacs-lisp/edebug.el" (20229 34587)) ;;; Generated autoloads from emacs-lisp/edebug.el (defvar edebug-all-defs nil "\ @@ -7670,7 +7684,7 @@ Toggle edebugging of all forms. ;;;;;; ediff-merge-directories-with-ancestor ediff-merge-directories ;;;;;; ediff-directories3 ediff-directory-revisions ediff-directories ;;;;;; ediff-buffers3 ediff-buffers ediff-backup ediff-current-file -;;;;;; ediff-files3 ediff-files) "ediff" "vc/ediff.el" (19996 8027)) +;;;;;; ediff-files3 ediff-files) "ediff" "vc/ediff.el" (20229 34587)) ;;; Generated autoloads from vc/ediff.el (autoload 'ediff-files "ediff" "\ @@ -7902,7 +7916,7 @@ With optional NODE, goes to that node. ;;;*** ;;;### (autoloads (ediff-customize) "ediff-help" "vc/ediff-help.el" -;;;;;; (20178 7273)) +;;;;;; (20229 34587)) ;;; Generated autoloads from vc/ediff-help.el (autoload 'ediff-customize "ediff-help" "\ @@ -7913,7 +7927,7 @@ With optional NODE, goes to that node. ;;;*** ;;;### (autoloads (ediff-show-registry) "ediff-mult" "vc/ediff-mult.el" -;;;;;; (20168 57844)) +;;;;;; (20229 34587)) ;;; Generated autoloads from vc/ediff-mult.el (autoload 'ediff-show-registry "ediff-mult" "\ @@ -7926,7 +7940,7 @@ Display Ediff's registry. ;;;*** ;;;### (autoloads (ediff-toggle-use-toolbar ediff-toggle-multiframe) -;;;;;; "ediff-util" "vc/ediff-util.el" (20175 31160)) +;;;;;; "ediff-util" "vc/ediff-util.el" (20229 34587)) ;;; Generated autoloads from vc/ediff-util.el (autoload 'ediff-toggle-multiframe "ediff-util" "\ @@ -7947,7 +7961,7 @@ To change the default, set the variable `ediff-use-toolbar-p', which see. ;;;### (autoloads (format-kbd-macro read-kbd-macro edit-named-kbd-macro ;;;;;; edit-last-kbd-macro edit-kbd-macro) "edmacro" "edmacro.el" -;;;;;; (19886 45771)) +;;;;;; (20229 34587)) ;;; Generated autoloads from edmacro.el (autoload 'edit-kbd-macro "edmacro" "\ @@ -7996,7 +8010,7 @@ or nil, use a compact 80-column format. ;;;*** ;;;### (autoloads (edt-emulation-on edt-set-scroll-margins) "edt" -;;;;;; "emulation/edt.el" (20154 24929)) +;;;;;; "emulation/edt.el" (20229 34587)) ;;; Generated autoloads from emulation/edt.el (autoload 'edt-set-scroll-margins "edt" "\ @@ -8014,7 +8028,7 @@ Turn on EDT Emulation. ;;;*** ;;;### (autoloads (electric-helpify with-electric-help) "ehelp" "ehelp.el" -;;;;;; (19865 50420)) +;;;;;; (20229 34587)) ;;; Generated autoloads from ehelp.el (autoload 'with-electric-help "ehelp" "\ @@ -8051,7 +8065,7 @@ BUFFER is put back into its original major mode. ;;;*** ;;;### (autoloads (turn-on-eldoc-mode eldoc-mode eldoc-minor-mode-string) -;;;;;; "eldoc" "emacs-lisp/eldoc.el" (20161 45793)) +;;;;;; "eldoc" "emacs-lisp/eldoc.el" (20229 34587)) ;;; Generated autoloads from emacs-lisp/eldoc.el (defvar eldoc-minor-mode-string (purecopy " ElDoc") "\ @@ -8098,7 +8112,7 @@ Emacs Lisp mode) that support ElDoc.") ;;;*** ;;;### (autoloads (electric-layout-mode electric-pair-mode electric-indent-mode) -;;;;;; "electric" "electric.el" (20187 22214)) +;;;;;; "electric" "electric.el" (20229 34587)) ;;; Generated autoloads from electric.el (defvar electric-indent-chars '(10) "\ @@ -8162,8 +8176,8 @@ Automatically insert newlines around some chars. ;;;*** -;;;### (autoloads (elide-head) "elide-head" "elide-head.el" (19845 -;;;;;; 45374)) +;;;### (autoloads (elide-head) "elide-head" "elide-head.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from elide-head.el (autoload 'elide-head "elide-head" "\ @@ -8180,7 +8194,7 @@ This is suitable as an entry on `find-file-hook' or appropriate mode hooks. ;;;### (autoloads (elint-initialize elint-defun elint-current-buffer ;;;;;; elint-directory elint-file) "elint" "emacs-lisp/elint.el" -;;;;;; (20172 54913)) +;;;;;; (20229 34587)) ;;; Generated autoloads from emacs-lisp/elint.el (autoload 'elint-file "elint" "\ @@ -8216,8 +8230,8 @@ optional prefix argument REINIT is non-nil. ;;;*** ;;;### (autoloads (elp-results elp-instrument-package elp-instrument-list -;;;;;; elp-instrument-function) "elp" "emacs-lisp/elp.el" (19981 -;;;;;; 40664)) +;;;;;; elp-instrument-function) "elp" "emacs-lisp/elp.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from emacs-lisp/elp.el (autoload 'elp-instrument-function "elp" "\ @@ -8252,7 +8266,7 @@ displayed. ;;;*** ;;;### (autoloads (emacs-lock-mode) "emacs-lock" "emacs-lock.el" -;;;;;; (20127 62865)) +;;;;;; (20237 28610)) ;;; Generated autoloads from emacs-lock.el (autoload 'emacs-lock-mode "emacs-lock" "\ @@ -8280,7 +8294,7 @@ Other values are interpreted as usual. ;;;*** ;;;### (autoloads (report-emacs-bug-query-existing-bugs report-emacs-bug) -;;;;;; "emacsbug" "mail/emacsbug.el" (20197 58064)) +;;;;;; "emacsbug" "mail/emacsbug.el" (20259 55615)) ;;; Generated autoloads from mail/emacsbug.el (autoload 'report-emacs-bug "emacsbug" "\ @@ -8362,7 +8376,7 @@ Emerge two RCS revisions of a file, with another revision as ancestor. ;;;*** ;;;### (autoloads (enriched-decode enriched-encode enriched-mode) -;;;;;; "enriched" "textmodes/enriched.el" (19845 45374)) +;;;;;; "enriched" "textmodes/enriched.el" (20229 34587)) ;;; Generated autoloads from textmodes/enriched.el (autoload 'enriched-mode "enriched" "\ @@ -8397,8 +8411,8 @@ Commands: ;;;;;; epa-sign-region epa-verify-cleartext-in-region epa-verify-region ;;;;;; epa-decrypt-armor-in-region epa-decrypt-region epa-encrypt-file ;;;;;; epa-sign-file epa-verify-file epa-decrypt-file epa-select-keys -;;;;;; epa-list-secret-keys epa-list-keys) "epa" "epa.el" (20104 -;;;;;; 14925)) +;;;;;; epa-list-secret-keys epa-list-keys) "epa" "epa.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from epa.el (autoload 'epa-list-keys "epa" "\ @@ -8576,7 +8590,7 @@ Insert selected KEYS after the point. ;;;*** ;;;### (autoloads (epa-dired-do-encrypt epa-dired-do-sign epa-dired-do-verify -;;;;;; epa-dired-do-decrypt) "epa-dired" "epa-dired.el" (20197 58064)) +;;;;;; epa-dired-do-decrypt) "epa-dired" "epa-dired.el" (20229 34587)) ;;; Generated autoloads from epa-dired.el (autoload 'epa-dired-do-decrypt "epa-dired" "\ @@ -8602,7 +8616,7 @@ Encrypt marked files. ;;;*** ;;;### (autoloads (epa-file-disable epa-file-enable epa-file-handler) -;;;;;; "epa-file" "epa-file.el" (20197 58064)) +;;;;;; "epa-file" "epa-file.el" (20229 34587)) ;;; Generated autoloads from epa-file.el (autoload 'epa-file-handler "epa-file" "\ @@ -8624,7 +8638,7 @@ Encrypt marked files. ;;;### (autoloads (epa-global-mail-mode epa-mail-import-keys epa-mail-encrypt ;;;;;; epa-mail-sign epa-mail-verify epa-mail-decrypt epa-mail-mode) -;;;;;; "epa-mail" "epa-mail.el" (20043 38232)) +;;;;;; "epa-mail" "epa-mail.el" (20229 34587)) ;;; Generated autoloads from epa-mail.el (autoload 'epa-mail-mode "epa-mail" "\ @@ -8688,7 +8702,7 @@ Minor mode to hook EasyPG into Mail mode. ;;;*** -;;;### (autoloads (epg-make-context) "epg" "epg.el" (20172 54913)) +;;;### (autoloads (epg-make-context) "epg" "epg.el" (20241 25657)) ;;; Generated autoloads from epg.el (autoload 'epg-make-context "epg" "\ @@ -8699,7 +8713,7 @@ Return a context object. ;;;*** ;;;### (autoloads (epg-expand-group epg-check-configuration epg-configuration) -;;;;;; "epg-config" "epg-config.el" (19845 45374)) +;;;;;; "epg-config" "epg-config.el" (20229 34587)) ;;; Generated autoloads from epg-config.el (autoload 'epg-configuration "epg-config" "\ @@ -8719,8 +8733,8 @@ Look at CONFIG and try to expand GROUP. ;;;*** -;;;### (autoloads (erc-handle-irc-url erc erc-select-read-args) "erc" -;;;;;; "erc/erc.el" (20172 54913)) +;;;### (autoloads (erc-handle-irc-url erc-tls erc erc-select-read-args) +;;;;;; "erc" "erc/erc.el" (20230 55355)) ;;; Generated autoloads from erc/erc.el (autoload 'erc-select-read-args "erc" "\ @@ -8753,6 +8767,12 @@ be invoked for the values of the other parameters. (defalias 'erc-select 'erc) +(autoload 'erc-tls "erc" "\ +Interactively select TLS connection parameters and run ERC. +Arguments are the same as for `erc'. + +\(fn &rest R)" t nil) + (autoload 'erc-handle-irc-url "erc" "\ Use ERC to IRC on HOST:PORT in CHANNEL as USER with PASSWORD. If ERC is already connected to HOST:PORT, simply /join CHANNEL. @@ -8762,33 +8782,33 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL. ;;;*** -;;;### (autoloads nil "erc-autoaway" "erc/erc-autoaway.el" (20161 -;;;;;; 45793)) +;;;### (autoloads nil "erc-autoaway" "erc/erc-autoaway.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from erc/erc-autoaway.el (autoload 'erc-autoaway-mode "erc-autoaway") ;;;*** -;;;### (autoloads nil "erc-button" "erc/erc-button.el" (20093 44623)) +;;;### (autoloads nil "erc-button" "erc/erc-button.el" (20229 34587)) ;;; Generated autoloads from erc/erc-button.el (autoload 'erc-button-mode "erc-button" nil t) ;;;*** -;;;### (autoloads nil "erc-capab" "erc/erc-capab.el" (19845 45374)) +;;;### (autoloads nil "erc-capab" "erc/erc-capab.el" (20229 34587)) ;;; Generated autoloads from erc/erc-capab.el (autoload 'erc-capab-identify-mode "erc-capab" nil t) ;;;*** -;;;### (autoloads nil "erc-compat" "erc/erc-compat.el" (19845 45374)) +;;;### (autoloads nil "erc-compat" "erc/erc-compat.el" (20229 34587)) ;;; Generated autoloads from erc/erc-compat.el (autoload 'erc-define-minor-mode "erc-compat") ;;;*** ;;;### (autoloads (erc-ctcp-query-DCC pcomplete/erc-mode/DCC erc-cmd-DCC) -;;;;;; "erc-dcc" "erc/erc-dcc.el" (20179 28130)) +;;;;;; "erc-dcc" "erc/erc-dcc.el" (20229 34587)) ;;; Generated autoloads from erc/erc-dcc.el (autoload 'erc-dcc-mode "erc-dcc") @@ -8821,7 +8841,7 @@ that subcommand. ;;;;;; erc-ezb-add-session erc-ezb-end-of-session-list erc-ezb-init-session-list ;;;;;; erc-ezb-identify erc-ezb-notice-autodetect erc-ezb-lookup-action ;;;;;; erc-ezb-get-login erc-cmd-ezb) "erc-ezbounce" "erc/erc-ezbounce.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from erc/erc-ezbounce.el (autoload 'erc-cmd-ezb "erc-ezbounce" "\ @@ -8883,8 +8903,8 @@ Add EZBouncer convenience functions to ERC. ;;;*** -;;;### (autoloads (erc-fill) "erc-fill" "erc/erc-fill.el" (20127 -;;;;;; 62865)) +;;;### (autoloads (erc-fill) "erc-fill" "erc/erc-fill.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from erc/erc-fill.el (autoload 'erc-fill-mode "erc-fill" nil t) @@ -8897,7 +8917,7 @@ You can put this on `erc-insert-modify-hook' and/or `erc-send-modify-hook'. ;;;*** ;;;### (autoloads (erc-identd-stop erc-identd-start) "erc-identd" -;;;;;; "erc/erc-identd.el" (19845 45374)) +;;;;;; "erc/erc-identd.el" (20229 34587)) ;;; Generated autoloads from erc/erc-identd.el (autoload 'erc-identd-mode "erc-identd") @@ -8919,7 +8939,7 @@ system. ;;;*** ;;;### (autoloads (erc-create-imenu-index) "erc-imenu" "erc/erc-imenu.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from erc/erc-imenu.el (autoload 'erc-create-imenu-index "erc-imenu" "\ @@ -8929,20 +8949,20 @@ system. ;;;*** -;;;### (autoloads nil "erc-join" "erc/erc-join.el" (19845 45374)) +;;;### (autoloads nil "erc-join" "erc/erc-join.el" (20229 34587)) ;;; Generated autoloads from erc/erc-join.el (autoload 'erc-autojoin-mode "erc-join" nil t) ;;;*** -;;;### (autoloads nil "erc-list" "erc/erc-list.el" (19845 45374)) +;;;### (autoloads nil "erc-list" "erc/erc-list.el" (20229 34587)) ;;; Generated autoloads from erc/erc-list.el (autoload 'erc-list-mode "erc-list") ;;;*** ;;;### (autoloads (erc-save-buffer-in-logs erc-logging-enabled) "erc-log" -;;;;;; "erc/erc-log.el" (20168 57844)) +;;;;;; "erc/erc-log.el" (20229 34587)) ;;; Generated autoloads from erc/erc-log.el (autoload 'erc-log-mode "erc-log" nil t) @@ -8974,7 +8994,7 @@ You can save every individual message by putting this function on ;;;### (autoloads (erc-delete-dangerous-host erc-add-dangerous-host ;;;;;; erc-delete-keyword erc-add-keyword erc-delete-fool erc-add-fool ;;;;;; erc-delete-pal erc-add-pal) "erc-match" "erc/erc-match.el" -;;;;;; (20168 57844)) +;;;;;; (20229 34587)) ;;; Generated autoloads from erc/erc-match.el (autoload 'erc-match-mode "erc-match") @@ -9020,14 +9040,14 @@ Delete dangerous-host interactively to `erc-dangerous-hosts'. ;;;*** -;;;### (autoloads nil "erc-menu" "erc/erc-menu.el" (19845 45374)) +;;;### (autoloads nil "erc-menu" "erc/erc-menu.el" (20229 34587)) ;;; Generated autoloads from erc/erc-menu.el (autoload 'erc-menu-mode "erc-menu" nil t) ;;;*** ;;;### (autoloads (erc-cmd-WHOLEFT) "erc-netsplit" "erc/erc-netsplit.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from erc/erc-netsplit.el (autoload 'erc-netsplit-mode "erc-netsplit") @@ -9039,7 +9059,7 @@ Show who's gone. ;;;*** ;;;### (autoloads (erc-server-select erc-determine-network) "erc-networks" -;;;;;; "erc/erc-networks.el" (19845 45374)) +;;;;;; "erc/erc-networks.el" (20229 34587)) ;;; Generated autoloads from erc/erc-networks.el (autoload 'erc-determine-network "erc-networks" "\ @@ -9057,7 +9077,7 @@ Interactively select a server to connect to using `erc-server-alist'. ;;;*** ;;;### (autoloads (pcomplete/erc-mode/NOTIFY erc-cmd-NOTIFY) "erc-notify" -;;;;;; "erc/erc-notify.el" (20161 45793)) +;;;;;; "erc/erc-notify.el" (20229 34587)) ;;; Generated autoloads from erc/erc-notify.el (autoload 'erc-notify-mode "erc-notify" nil t) @@ -9075,33 +9095,33 @@ with args, toggle notify status of people. ;;;*** -;;;### (autoloads nil "erc-page" "erc/erc-page.el" (19845 45374)) +;;;### (autoloads nil "erc-page" "erc/erc-page.el" (20237 28610)) ;;; Generated autoloads from erc/erc-page.el (autoload 'erc-page-mode "erc-page") ;;;*** -;;;### (autoloads nil "erc-pcomplete" "erc/erc-pcomplete.el" (19936 -;;;;;; 52203)) +;;;### (autoloads nil "erc-pcomplete" "erc/erc-pcomplete.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from erc/erc-pcomplete.el (autoload 'erc-completion-mode "erc-pcomplete" nil t) ;;;*** -;;;### (autoloads nil "erc-replace" "erc/erc-replace.el" (19845 45374)) +;;;### (autoloads nil "erc-replace" "erc/erc-replace.el" (20229 34587)) ;;; Generated autoloads from erc/erc-replace.el (autoload 'erc-replace-mode "erc-replace") ;;;*** -;;;### (autoloads nil "erc-ring" "erc/erc-ring.el" (19845 45374)) +;;;### (autoloads nil "erc-ring" "erc/erc-ring.el" (20229 34587)) ;;; Generated autoloads from erc/erc-ring.el (autoload 'erc-ring-mode "erc-ring" nil t) ;;;*** ;;;### (autoloads (erc-nickserv-identify erc-nickserv-identify-mode) -;;;;;; "erc-services" "erc/erc-services.el" (19845 45374)) +;;;;;; "erc-services" "erc/erc-services.el" (20229 34587)) ;;; Generated autoloads from erc/erc-services.el (autoload 'erc-services-mode "erc-services" nil t) @@ -9118,14 +9138,14 @@ When called interactively, read the password using `read-passwd'. ;;;*** -;;;### (autoloads nil "erc-sound" "erc/erc-sound.el" (19845 45374)) +;;;### (autoloads nil "erc-sound" "erc/erc-sound.el" (20229 34587)) ;;; Generated autoloads from erc/erc-sound.el (autoload 'erc-sound-mode "erc-sound") ;;;*** ;;;### (autoloads (erc-speedbar-browser) "erc-speedbar" "erc/erc-speedbar.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from erc/erc-speedbar.el (autoload 'erc-speedbar-browser "erc-speedbar" "\ @@ -9136,21 +9156,21 @@ This will add a speedbar major display mode. ;;;*** -;;;### (autoloads nil "erc-spelling" "erc/erc-spelling.el" (19845 -;;;;;; 45374)) +;;;### (autoloads nil "erc-spelling" "erc/erc-spelling.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from erc/erc-spelling.el (autoload 'erc-spelling-mode "erc-spelling" nil t) ;;;*** -;;;### (autoloads nil "erc-stamp" "erc/erc-stamp.el" (19845 45374)) +;;;### (autoloads nil "erc-stamp" "erc/erc-stamp.el" (20229 34587)) ;;; Generated autoloads from erc/erc-stamp.el (autoload 'erc-timestamp-mode "erc-stamp" nil t) ;;;*** ;;;### (autoloads (erc-track-minor-mode) "erc-track" "erc/erc-track.el" -;;;;;; (20168 57844)) +;;;;;; (20229 34587)) ;;; Generated autoloads from erc/erc-track.el (defvar erc-track-minor-mode nil "\ @@ -9176,7 +9196,7 @@ keybindings will not do anything useful. ;;;*** ;;;### (autoloads (erc-truncate-buffer erc-truncate-buffer-to-size) -;;;;;; "erc-truncate" "erc/erc-truncate.el" (19845 45374)) +;;;;;; "erc-truncate" "erc/erc-truncate.el" (20229 34587)) ;;; Generated autoloads from erc/erc-truncate.el (autoload 'erc-truncate-mode "erc-truncate" nil t) @@ -9196,7 +9216,7 @@ Meant to be used in hooks, like `erc-insert-post-hook'. ;;;*** ;;;### (autoloads (erc-xdcc-add-file) "erc-xdcc" "erc/erc-xdcc.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from erc/erc-xdcc.el (autoload 'erc-xdcc-mode "erc-xdcc") @@ -9209,7 +9229,7 @@ Add a file to `erc-xdcc-files'. ;;;### (autoloads (ert-describe-test ert-run-tests-interactively ;;;;;; ert-run-tests-batch-and-exit ert-run-tests-batch ert-deftest) -;;;;;; "ert" "emacs-lisp/ert.el" (20168 57844)) +;;;;;; "ert" "emacs-lisp/ert.el" (20229 34587)) ;;; Generated autoloads from emacs-lisp/ert.el (autoload 'ert-deftest "ert" "\ @@ -9279,7 +9299,7 @@ Display the documentation for TEST-OR-TEST-NAME (a symbol or ert-test). ;;;*** ;;;### (autoloads (ert-kill-all-test-buffers) "ert-x" "emacs-lisp/ert-x.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from emacs-lisp/ert-x.el (put 'ert-with-test-buffer 'lisp-indent-function 1) @@ -9291,8 +9311,8 @@ Kill all test buffers that are still live. ;;;*** -;;;### (autoloads (eshell-mode) "esh-mode" "eshell/esh-mode.el" (20164 -;;;;;; 60780)) +;;;### (autoloads (eshell-mode) "esh-mode" "eshell/esh-mode.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from eshell/esh-mode.el (autoload 'eshell-mode "esh-mode" "\ @@ -9305,7 +9325,7 @@ Emacs shell interactive mode. ;;;*** ;;;### (autoloads (eshell-command-result eshell-command eshell) "eshell" -;;;;;; "eshell/eshell.el" (20116 6099)) +;;;;;; "eshell/eshell.el" (20229 34587)) ;;; Generated autoloads from eshell/eshell.el (autoload 'eshell "eshell" "\ @@ -9346,7 +9366,7 @@ corresponding to a successful execution. ;;;;;; visit-tags-table tags-table-mode find-tag-default-function ;;;;;; find-tag-hook tags-add-tables tags-compression-info-list ;;;;;; tags-table-list tags-case-fold-search) "etags" "progmodes/etags.el" -;;;;;; (20168 57844)) +;;;;;; (20237 28610)) ;;; Generated autoloads from progmodes/etags.el (defvar tags-file-name nil "\ @@ -9664,7 +9684,7 @@ for \\[find-tag] (which see). ;;;;;; ethio-fidel-to-sera-marker ethio-fidel-to-sera-region ethio-fidel-to-sera-buffer ;;;;;; ethio-sera-to-fidel-marker ethio-sera-to-fidel-region ethio-sera-to-fidel-buffer ;;;;;; setup-ethiopic-environment-internal) "ethio-util" "language/ethio-util.el" -;;;;;; (20201 55112)) +;;;;;; (20229 34587)) ;;; Generated autoloads from language/ethio-util.el (autoload 'setup-ethiopic-environment-internal "ethio-util" "\ @@ -9834,7 +9854,7 @@ With ARG, insert that many delimiters. ;;;### (autoloads (eudc-load-eudc eudc-query-form eudc-expand-inline ;;;;;; eudc-get-phone eudc-get-email eudc-set-server) "eudc" "net/eudc.el" -;;;;;; (19931 11784)) +;;;;;; (20229 34587)) ;;; Generated autoloads from net/eudc.el (autoload 'eudc-set-server "eudc" "\ @@ -9890,7 +9910,7 @@ This does nothing except loading eudc by autoload side-effect. ;;;### (autoloads (eudc-display-jpeg-as-button eudc-display-jpeg-inline ;;;;;; eudc-display-sound eudc-display-mail eudc-display-url eudc-display-generic-binary) -;;;;;; "eudc-bob" "net/eudc-bob.el" (19845 45374)) +;;;;;; "eudc-bob" "net/eudc-bob.el" (20229 34587)) ;;; Generated autoloads from net/eudc-bob.el (autoload 'eudc-display-generic-binary "eudc-bob" "\ @@ -9926,7 +9946,7 @@ Display a button for the JPEG DATA. ;;;*** ;;;### (autoloads (eudc-try-bbdb-insert eudc-insert-record-at-point-into-bbdb) -;;;;;; "eudc-export" "net/eudc-export.el" (20175 31160)) +;;;;;; "eudc-export" "net/eudc-export.el" (20229 34587)) ;;; Generated autoloads from net/eudc-export.el (autoload 'eudc-insert-record-at-point-into-bbdb "eudc-export" "\ @@ -9943,7 +9963,7 @@ Call `eudc-insert-record-at-point-into-bbdb' if on a record. ;;;*** ;;;### (autoloads (eudc-edit-hotlist) "eudc-hotlist" "net/eudc-hotlist.el" -;;;;;; (20162 19074)) +;;;;;; (20229 34587)) ;;; Generated autoloads from net/eudc-hotlist.el (autoload 'eudc-edit-hotlist "eudc-hotlist" "\ @@ -9953,8 +9973,8 @@ Edit the hotlist of directory servers in a specialized buffer. ;;;*** -;;;### (autoloads (ewoc-create) "ewoc" "emacs-lisp/ewoc.el" (19845 -;;;;;; 45374)) +;;;### (autoloads (ewoc-create) "ewoc" "emacs-lisp/ewoc.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from emacs-lisp/ewoc.el (autoload 'ewoc-create "ewoc" "\ @@ -9983,7 +10003,7 @@ fourth arg NOSEP non-nil inhibits this. ;;;### (autoloads (executable-make-buffer-file-executable-if-script-p ;;;;;; executable-self-display executable-set-magic executable-interpret ;;;;;; executable-command-find-posix-p) "executable" "progmodes/executable.el" -;;;;;; (20160 63745)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/executable.el (autoload 'executable-command-find-posix-p "executable" "\ @@ -10026,7 +10046,7 @@ file modes. ;;;### (autoloads (expand-jump-to-next-slot expand-jump-to-previous-slot ;;;;;; expand-abbrev-hook expand-add-abbrevs) "expand" "expand.el" -;;;;;; (20164 29468)) +;;;;;; (20229 34587)) ;;; Generated autoloads from expand.el (autoload 'expand-add-abbrevs "expand" "\ @@ -10075,7 +10095,7 @@ This is used only in conjunction with `expand-add-abbrevs'. ;;;*** -;;;### (autoloads (f90-mode) "f90" "progmodes/f90.el" (20178 7273)) +;;;### (autoloads (f90-mode) "f90" "progmodes/f90.el" (20257 13883)) ;;; Generated autoloads from progmodes/f90.el (autoload 'f90-mode "f90" "\ @@ -10145,8 +10165,8 @@ with no args, if that value is non-nil. ;;;### (autoloads (variable-pitch-mode buffer-face-toggle buffer-face-set ;;;;;; buffer-face-mode text-scale-adjust text-scale-decrease text-scale-increase ;;;;;; text-scale-set face-remap-set-base face-remap-reset-base -;;;;;; face-remap-add-relative) "face-remap" "face-remap.el" (20127 -;;;;;; 62865)) +;;;;;; face-remap-add-relative) "face-remap" "face-remap.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from face-remap.el (autoload 'face-remap-add-relative "face-remap" "\ @@ -10340,7 +10360,7 @@ you can set `feedmail-queue-reminder-alist' to nil. ;;;*** ;;;### (autoloads (ffap-bindings dired-at-point ffap-at-mouse ffap-menu -;;;;;; find-file-at-point ffap-next) "ffap" "ffap.el" (20164 60780)) +;;;;;; find-file-at-point ffap-next) "ffap" "ffap.el" (20229 34587)) ;;; Generated autoloads from ffap.el (autoload 'ffap-next "ffap" "\ @@ -10404,7 +10424,7 @@ Evaluate the forms in variable `ffap-bindings'. ;;;### (autoloads (file-cache-minibuffer-complete file-cache-add-directory-recursively ;;;;;; file-cache-add-directory-using-locate file-cache-add-directory-using-find ;;;;;; file-cache-add-file file-cache-add-directory-list file-cache-add-directory) -;;;;;; "filecache" "filecache.el" (19845 45374)) +;;;;;; "filecache" "filecache.el" (20229 34587)) ;;; Generated autoloads from filecache.el (autoload 'file-cache-add-directory "filecache" "\ @@ -10464,7 +10484,7 @@ the name is considered already unique; only the second substitution ;;;;;; copy-file-locals-to-dir-locals delete-dir-local-variable ;;;;;; add-dir-local-variable delete-file-local-variable-prop-line ;;;;;; add-file-local-variable-prop-line delete-file-local-variable -;;;;;; add-file-local-variable) "files-x" "files-x.el" (20167 36967)) +;;;;;; add-file-local-variable) "files-x" "files-x.el" (20229 34587)) ;;; Generated autoloads from files-x.el (autoload 'add-file-local-variable "files-x" "\ @@ -10529,8 +10549,8 @@ Copy directory-local variables to the -*- line. ;;;*** -;;;### (autoloads (filesets-init) "filesets" "filesets.el" (20201 -;;;;;; 55112)) +;;;### (autoloads (filesets-init) "filesets" "filesets.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from filesets.el (autoload 'filesets-init "filesets" "\ @@ -10541,7 +10561,7 @@ Set up hooks, load the cache file -- if existing -- and build the menu. ;;;*** -;;;### (autoloads (find-cmd) "find-cmd" "find-cmd.el" (19845 45374)) +;;;### (autoloads (find-cmd) "find-cmd" "find-cmd.el" (20229 34587)) ;;; Generated autoloads from find-cmd.el (autoload 'find-cmd "find-cmd" "\ @@ -10561,7 +10581,7 @@ result is a string that should be ready for the command line. ;;;*** ;;;### (autoloads (find-grep-dired find-name-dired find-dired) "find-dired" -;;;;;; "find-dired.el" (19980 19797)) +;;;;;; "find-dired.el" (20239 38674)) ;;; Generated autoloads from find-dired.el (autoload 'find-dired "find-dired" "\ @@ -10601,7 +10621,7 @@ use in place of \"-ls\" as the final argument. ;;;### (autoloads (ff-mouse-find-other-file-other-window ff-mouse-find-other-file ;;;;;; ff-find-other-file ff-get-other-file) "find-file" "find-file.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from find-file.el (defvar ff-special-constructs `((,(purecopy "^#\\s *\\(include\\|import\\)\\s +[<\"]\\(.*\\)[>\"]") lambda nil (buffer-substring (match-beginning 2) (match-end 2)))) "\ @@ -10695,7 +10715,7 @@ Visit the file you click on in another window. ;;;;;; find-variable find-variable-noselect find-function-other-frame ;;;;;; find-function-other-window find-function find-function-noselect ;;;;;; find-function-search-for-symbol find-library) "find-func" -;;;;;; "emacs-lisp/find-func.el" (20153 32815)) +;;;;;; "emacs-lisp/find-func.el" (20229 34587)) ;;; Generated autoloads from emacs-lisp/find-func.el (autoload 'find-library "find-func" "\ @@ -10854,7 +10874,7 @@ Define some key bindings for the find-function family of functions. ;;;*** ;;;### (autoloads (find-lisp-find-dired-filter find-lisp-find-dired-subdirectories -;;;;;; find-lisp-find-dired) "find-lisp" "find-lisp.el" (19886 45771)) +;;;;;; find-lisp-find-dired) "find-lisp" "find-lisp.el" (20229 34587)) ;;; Generated autoloads from find-lisp.el (autoload 'find-lisp-find-dired "find-lisp" "\ @@ -10875,7 +10895,7 @@ Change the filter on a find-lisp-find-dired buffer to REGEXP. ;;;*** ;;;### (autoloads (finder-by-keyword finder-commentary finder-list-keywords) -;;;;;; "finder" "finder.el" (19893 19022)) +;;;;;; "finder" "finder.el" (20229 34587)) ;;; Generated autoloads from finder.el (autoload 'finder-list-keywords "finder" "\ @@ -10897,7 +10917,7 @@ Find packages matching a given keyword. ;;;*** ;;;### (autoloads (enable-flow-control-on enable-flow-control) "flow-ctrl" -;;;;;; "flow-ctrl.el" (19845 45374)) +;;;;;; "flow-ctrl.el" (20229 34587)) ;;; Generated autoloads from flow-ctrl.el (autoload 'enable-flow-control "flow-ctrl" "\ @@ -10919,7 +10939,7 @@ to get the effect of a C-q. ;;;*** ;;;### (autoloads (fill-flowed fill-flowed-encode) "flow-fill" "gnus/flow-fill.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from gnus/flow-fill.el (autoload 'fill-flowed-encode "flow-fill" "\ @@ -10935,7 +10955,7 @@ to get the effect of a C-q. ;;;*** ;;;### (autoloads (flymake-find-file-hook flymake-mode-off flymake-mode-on -;;;;;; flymake-mode) "flymake" "progmodes/flymake.el" (19984 16846)) +;;;;;; flymake-mode) "flymake" "progmodes/flymake.el" (20229 34587)) ;;; Generated autoloads from progmodes/flymake.el (autoload 'flymake-mode "flymake" "\ @@ -10964,7 +10984,7 @@ Turn flymake mode off. ;;;### (autoloads (flyspell-buffer flyspell-region flyspell-mode-off ;;;;;; turn-off-flyspell turn-on-flyspell flyspell-mode flyspell-prog-mode) -;;;;;; "flyspell" "textmodes/flyspell.el" (20174 10230)) +;;;;;; "flyspell" "textmodes/flyspell.el" (20229 34587)) ;;; Generated autoloads from textmodes/flyspell.el (autoload 'flyspell-prog-mode "flyspell" "\ @@ -11036,7 +11056,7 @@ Flyspell whole buffer. ;;;### (autoloads (follow-delete-other-windows-and-split follow-mode ;;;;;; turn-off-follow-mode turn-on-follow-mode) "follow" "follow.el" -;;;;;; (20187 22214)) +;;;;;; (20229 34587)) ;;; Generated autoloads from follow.el (autoload 'turn-on-follow-mode "follow" "\ @@ -11112,8 +11132,8 @@ in your `~/.emacs' file, replacing [f7] by your favorite key: ;;;*** -;;;### (autoloads (footnote-mode) "footnote" "mail/footnote.el" (20170 -;;;;;; 13157)) +;;;### (autoloads (footnote-mode) "footnote" "mail/footnote.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from mail/footnote.el (autoload 'footnote-mode "footnote" "\ @@ -11132,7 +11152,7 @@ play around with the following keys: ;;;*** ;;;### (autoloads (forms-find-file-other-window forms-find-file forms-mode) -;;;;;; "forms" "forms.el" (20197 58064)) +;;;;;; "forms" "forms.el" (20229 34587)) ;;; Generated autoloads from forms.el (autoload 'forms-mode "forms" "\ @@ -11169,7 +11189,7 @@ Visit a file in Forms mode in other window. ;;;*** ;;;### (autoloads (fortran-mode) "fortran" "progmodes/fortran.el" -;;;;;; (20178 7273)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/fortran.el (autoload 'fortran-mode "fortran" "\ @@ -11247,7 +11267,7 @@ with no args, if that value is non-nil. ;;;*** ;;;### (autoloads (fortune fortune-to-signature fortune-compile fortune-from-region -;;;;;; fortune-add-fortune) "fortune" "play/fortune.el" (20165 31925)) +;;;;;; fortune-add-fortune) "fortune" "play/fortune.el" (20229 34587)) ;;; Generated autoloads from play/fortune.el (autoload 'fortune-add-fortune "fortune" "\ @@ -11296,7 +11316,7 @@ and choose the directory as the fortune-file. ;;;*** ;;;### (autoloads (gdb gdb-enable-debug) "gdb-mi" "progmodes/gdb-mi.el" -;;;;;; (20218 64194)) +;;;;;; (20264 32142)) ;;; Generated autoloads from progmodes/gdb-mi.el (defvar gdb-enable-debug nil "\ @@ -11363,8 +11383,8 @@ detailed description of this mode. ;;;*** ;;;### (autoloads (generic-make-keywords-list generic-mode generic-mode-internal -;;;;;; define-generic-mode) "generic" "emacs-lisp/generic.el" (19845 -;;;;;; 45374)) +;;;;;; define-generic-mode) "generic" "emacs-lisp/generic.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from emacs-lisp/generic.el (defvar generic-mode-list nil "\ @@ -11441,7 +11461,7 @@ regular expression that can be used as an element of ;;;*** ;;;### (autoloads (glasses-mode) "glasses" "progmodes/glasses.el" -;;;;;; (19906 31087)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/glasses.el (autoload 'glasses-mode "glasses" "\ @@ -11455,7 +11475,7 @@ at places they belong to. ;;;### (autoloads (gmm-tool-bar-from-list gmm-widget-p gmm-error ;;;;;; gmm-message gmm-regexp-concat) "gmm-utils" "gnus/gmm-utils.el" -;;;;;; (20175 31160)) +;;;;;; (20229 34587)) ;;; Generated autoloads from gnus/gmm-utils.el (autoload 'gmm-regexp-concat "gmm-utils" "\ @@ -11510,7 +11530,7 @@ DEFAULT-MAP specifies the default key map for ICON-LIST. ;;;*** ;;;### (autoloads (gnus gnus-other-frame gnus-slave gnus-no-server -;;;;;; gnus-slave-no-server) "gnus" "gnus/gnus.el" (20187 22214)) +;;;;;; gnus-slave-no-server) "gnus" "gnus/gnus.el" (20258 34747)) ;;; Generated autoloads from gnus/gnus.el (when (fboundp 'custom-autoload) (custom-autoload 'gnus-select-method "gnus")) @@ -11563,7 +11583,7 @@ prompt the user for the name of an NNTP server to use. ;;;;;; gnus-agent-get-undownloaded-list gnus-agent-delete-group ;;;;;; gnus-agent-rename-group gnus-agent-possibly-save-gcc gnus-agentize ;;;;;; gnus-slave-unplugged gnus-plugged gnus-unplugged) "gnus-agent" -;;;;;; "gnus/gnus-agent.el" (20221 40442)) +;;;;;; "gnus/gnus-agent.el" (20265 7997)) ;;; Generated autoloads from gnus/gnus-agent.el (autoload 'gnus-unplugged "gnus-agent" "\ @@ -11654,7 +11674,7 @@ If CLEAN, obsolete (ignore). ;;;*** ;;;### (autoloads (gnus-article-prepare-display) "gnus-art" "gnus/gnus-art.el" -;;;;;; (20207 7484)) +;;;;;; (20232 10689)) ;;; Generated autoloads from gnus/gnus-art.el (autoload 'gnus-article-prepare-display "gnus-art" "\ @@ -11665,7 +11685,7 @@ Make the current buffer look like a nice article. ;;;*** ;;;### (autoloads (gnus-bookmark-bmenu-list gnus-bookmark-jump gnus-bookmark-set) -;;;;;; "gnus-bookmark" "gnus/gnus-bookmark.el" (19845 45374)) +;;;;;; "gnus-bookmark" "gnus/gnus-bookmark.el" (20229 34587)) ;;; Generated autoloads from gnus/gnus-bookmark.el (autoload 'gnus-bookmark-set "gnus-bookmark" "\ @@ -11690,8 +11710,8 @@ deletion, or > if it is flagged for displaying. ;;;### (autoloads (gnus-cache-delete-group gnus-cache-rename-group ;;;;;; gnus-cache-generate-nov-databases gnus-cache-generate-active -;;;;;; gnus-jog-cache) "gnus-cache" "gnus/gnus-cache.el" (19845 -;;;;;; 45374)) +;;;;;; gnus-jog-cache) "gnus-cache" "gnus/gnus-cache.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from gnus/gnus-cache.el (autoload 'gnus-jog-cache "gnus-cache" "\ @@ -11733,7 +11753,7 @@ supported. ;;;*** ;;;### (autoloads (gnus-delay-initialize gnus-delay-send-queue gnus-delay-article) -;;;;;; "gnus-delay" "gnus/gnus-delay.el" (19931 11784)) +;;;;;; "gnus-delay" "gnus/gnus-delay.el" (20229 34587)) ;;; Generated autoloads from gnus/gnus-delay.el (autoload 'gnus-delay-article "gnus-delay" "\ @@ -11769,7 +11789,7 @@ Checking delayed messages is skipped if optional arg NO-CHECK is non-nil. ;;;*** ;;;### (autoloads (gnus-user-format-function-D gnus-user-format-function-d) -;;;;;; "gnus-diary" "gnus/gnus-diary.el" (20161 45793)) +;;;;;; "gnus-diary" "gnus/gnus-diary.el" (20229 34587)) ;;; Generated autoloads from gnus/gnus-diary.el (autoload 'gnus-user-format-function-d "gnus-diary" "\ @@ -11785,7 +11805,7 @@ Checking delayed messages is skipped if optional arg NO-CHECK is non-nil. ;;;*** ;;;### (autoloads (turn-on-gnus-dired-mode) "gnus-dired" "gnus/gnus-dired.el" -;;;;;; (20167 36967)) +;;;;;; (20229 34587)) ;;; Generated autoloads from gnus/gnus-dired.el (autoload 'turn-on-gnus-dired-mode "gnus-dired" "\ @@ -11796,7 +11816,7 @@ Convenience method to turn on gnus-dired-mode. ;;;*** ;;;### (autoloads (gnus-draft-reminder) "gnus-draft" "gnus/gnus-draft.el" -;;;;;; (19981 40664)) +;;;;;; (20229 34587)) ;;; Generated autoloads from gnus/gnus-draft.el (autoload 'gnus-draft-reminder "gnus-draft" "\ @@ -11808,8 +11828,8 @@ Reminder user if there are unsent drafts. ;;;### (autoloads (gnus-convert-png-to-face gnus-convert-face-to-png ;;;;;; gnus-face-from-file gnus-x-face-from-file gnus-insert-random-x-face-header -;;;;;; gnus-random-x-face) "gnus-fun" "gnus/gnus-fun.el" (20187 -;;;;;; 22214)) +;;;;;; gnus-random-x-face) "gnus-fun" "gnus/gnus-fun.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from gnus/gnus-fun.el (autoload 'gnus-random-x-face "gnus-fun" "\ @@ -11854,7 +11874,7 @@ FILE should be a PNG file that's 48x48 and smaller than or equal to ;;;*** ;;;### (autoloads (gnus-treat-mail-gravatar gnus-treat-from-gravatar) -;;;;;; "gnus-gravatar" "gnus/gnus-gravatar.el" (19845 45374)) +;;;;;; "gnus-gravatar" "gnus/gnus-gravatar.el" (20229 34587)) ;;; Generated autoloads from gnus/gnus-gravatar.el (autoload 'gnus-treat-from-gravatar "gnus-gravatar" "\ @@ -11872,7 +11892,7 @@ If gravatars are already displayed, remove them. ;;;*** ;;;### (autoloads (gnus-fetch-group-other-frame gnus-fetch-group) -;;;;;; "gnus-group" "gnus/gnus-group.el" (20201 55112)) +;;;;;; "gnus-group" "gnus/gnus-group.el" (20232 10689)) ;;; Generated autoloads from gnus/gnus-group.el (autoload 'gnus-fetch-group "gnus-group" "\ @@ -11890,7 +11910,7 @@ Pop up a frame and enter GROUP. ;;;*** ;;;### (autoloads (gnus-html-prefetch-images gnus-article-html) "gnus-html" -;;;;;; "gnus/gnus-html.el" (20050 11479)) +;;;;;; "gnus/gnus-html.el" (20229 34587)) ;;; Generated autoloads from gnus/gnus-html.el (autoload 'gnus-article-html "gnus-html" "\ @@ -11906,7 +11926,7 @@ Pop up a frame and enter GROUP. ;;;*** ;;;### (autoloads (gnus-batch-score) "gnus-kill" "gnus/gnus-kill.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from gnus/gnus-kill.el (defalias 'gnus-batch-kill 'gnus-batch-score) @@ -11921,7 +11941,7 @@ Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score ;;;### (autoloads (gnus-mailing-list-mode gnus-mailing-list-insinuate ;;;;;; turn-on-gnus-mailing-list-mode) "gnus-ml" "gnus/gnus-ml.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from gnus/gnus-ml.el (autoload 'turn-on-gnus-mailing-list-mode "gnus-ml" "\ @@ -11946,7 +11966,7 @@ Minor mode for providing mailing-list commands. ;;;### (autoloads (gnus-group-split-fancy gnus-group-split gnus-group-split-update ;;;;;; gnus-group-split-setup) "gnus-mlspl" "gnus/gnus-mlspl.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from gnus/gnus-mlspl.el (autoload 'gnus-group-split-setup "gnus-mlspl" "\ @@ -12047,7 +12067,7 @@ Calling (gnus-group-split-fancy nil nil \"mail.others\") returns: ;;;*** ;;;### (autoloads (gnus-button-reply gnus-button-mailto gnus-msg-mail) -;;;;;; "gnus-msg" "gnus/gnus-msg.el" (20207 7484)) +;;;;;; "gnus-msg" "gnus/gnus-msg.el" (20230 55355)) ;;; Generated autoloads from gnus/gnus-msg.el (autoload 'gnus-msg-mail "gnus-msg" "\ @@ -12073,7 +12093,7 @@ Like `message-reply'. ;;;### (autoloads (gnus-treat-newsgroups-picon gnus-treat-mail-picon ;;;;;; gnus-treat-from-picon) "gnus-picon" "gnus/gnus-picon.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from gnus/gnus-picon.el (autoload 'gnus-treat-from-picon "gnus-picon" "\ @@ -12100,7 +12120,7 @@ If picons are already displayed, remove them. ;;;;;; gnus-sorted-nintersection gnus-sorted-range-intersection ;;;;;; gnus-sorted-intersection gnus-intersection gnus-sorted-complement ;;;;;; gnus-sorted-ndifference gnus-sorted-difference) "gnus-range" -;;;;;; "gnus/gnus-range.el" (19845 45374)) +;;;;;; "gnus/gnus-range.el" (20229 34587)) ;;; Generated autoloads from gnus/gnus-range.el (autoload 'gnus-sorted-difference "gnus-range" "\ @@ -12168,7 +12188,7 @@ Add NUM into sorted LIST by side effect. ;;;*** ;;;### (autoloads (gnus-registry-install-hooks gnus-registry-initialize) -;;;;;; "gnus-registry" "gnus/gnus-registry.el" (20143 51029)) +;;;;;; "gnus-registry" "gnus/gnus-registry.el" (20229 34587)) ;;; Generated autoloads from gnus/gnus-registry.el (autoload 'gnus-registry-initialize "gnus-registry" "\ @@ -12184,8 +12204,8 @@ Install the registry hooks. ;;;*** ;;;### (autoloads (gnus-sieve-article-add-rule gnus-sieve-generate -;;;;;; gnus-sieve-update) "gnus-sieve" "gnus/gnus-sieve.el" (19845 -;;;;;; 45374)) +;;;;;; gnus-sieve-update) "gnus-sieve" "gnus/gnus-sieve.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from gnus/gnus-sieve.el (autoload 'gnus-sieve-update "gnus-sieve" "\ @@ -12213,7 +12233,7 @@ See the documentation for these variables and functions for details. ;;;*** ;;;### (autoloads (gnus-update-format) "gnus-spec" "gnus/gnus-spec.el" -;;;;;; (20207 7484)) +;;;;;; (20229 34587)) ;;; Generated autoloads from gnus/gnus-spec.el (autoload 'gnus-update-format "gnus-spec" "\ @@ -12224,7 +12244,7 @@ Update the format specification near point. ;;;*** ;;;### (autoloads (gnus-declare-backend) "gnus-start" "gnus/gnus-start.el" -;;;;;; (20176 51947)) +;;;;;; (20259 55615)) ;;; Generated autoloads from gnus/gnus-start.el (autoload 'gnus-declare-backend "gnus-start" "\ @@ -12235,7 +12255,7 @@ Declare back end NAME with ABILITIES as a Gnus back end. ;;;*** ;;;### (autoloads (gnus-summary-bookmark-jump) "gnus-sum" "gnus/gnus-sum.el" -;;;;;; (20222 61246)) +;;;;;; (20258 34747)) ;;; Generated autoloads from gnus/gnus-sum.el (autoload 'gnus-summary-bookmark-jump "gnus-sum" "\ @@ -12247,7 +12267,7 @@ BOOKMARK is a bookmark name or a bookmark record. ;;;*** ;;;### (autoloads (gnus-sync-install-hooks gnus-sync-initialize) -;;;;;; "gnus-sync" "gnus/gnus-sync.el" (19845 45374)) +;;;;;; "gnus-sync" "gnus/gnus-sync.el" (20229 34587)) ;;; Generated autoloads from gnus/gnus-sync.el (autoload 'gnus-sync-initialize "gnus-sync" "\ @@ -12263,7 +12283,7 @@ Install the sync hooks. ;;;*** ;;;### (autoloads (gnus-add-configuration) "gnus-win" "gnus/gnus-win.el" -;;;;;; (20207 7484)) +;;;;;; (20232 10689)) ;;; Generated autoloads from gnus/gnus-win.el (autoload 'gnus-add-configuration "gnus-win" "\ @@ -12274,7 +12294,7 @@ Add the window configuration CONF to `gnus-buffer-configuration'. ;;;*** ;;;### (autoloads (gnutls-min-prime-bits) "gnutls" "net/gnutls.el" -;;;;;; (20176 51947)) +;;;;;; (20229 34587)) ;;; Generated autoloads from net/gnutls.el (defvar gnutls-min-prime-bits nil "\ @@ -12290,7 +12310,7 @@ A value of nil says to use the default gnutls value.") ;;;*** -;;;### (autoloads (gomoku) "gomoku" "play/gomoku.el" (20178 7273)) +;;;### (autoloads (gomoku) "gomoku" "play/gomoku.el" (20229 34587)) ;;; Generated autoloads from play/gomoku.el (autoload 'gomoku "gomoku" "\ @@ -12317,8 +12337,8 @@ Use \\[describe-mode] for more info. ;;;*** ;;;### (autoloads (goto-address-prog-mode goto-address-mode goto-address -;;;;;; goto-address-at-point) "goto-addr" "net/goto-addr.el" (20127 -;;;;;; 62865)) +;;;;;; goto-address-at-point) "goto-addr" "net/goto-addr.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from net/goto-addr.el (define-obsolete-function-alias 'goto-address-at-mouse 'goto-address-at-point "22.1") @@ -12357,7 +12377,7 @@ Like `goto-address-mode', but only for comments and strings. ;;;*** ;;;### (autoloads (gravatar-retrieve-synchronously gravatar-retrieve) -;;;;;; "gravatar" "gnus/gravatar.el" (19845 45374)) +;;;;;; "gravatar" "gnus/gravatar.el" (20229 34587)) ;;; Generated autoloads from gnus/gravatar.el (autoload 'gravatar-retrieve "gravatar" "\ @@ -12375,7 +12395,7 @@ Retrieve MAIL-ADDRESS gravatar and returns it. ;;;### (autoloads (zrgrep rgrep lgrep grep-find grep grep-mode grep-compute-defaults ;;;;;; grep-process-setup grep-setup-hook grep-find-command grep-command -;;;;;; grep-window-height) "grep" "progmodes/grep.el" (20212 25403)) +;;;;;; grep-window-height) "grep" "progmodes/grep.el" (20255 25045)) ;;; Generated autoloads from progmodes/grep.el (defvar grep-window-height nil "\ @@ -12537,7 +12557,7 @@ file name to `*.gz', and sets `grep-highlight-matches' to `always'. ;;;*** -;;;### (autoloads (gs-load-image) "gs" "gs.el" (20188 43079)) +;;;### (autoloads (gs-load-image) "gs" "gs.el" (20229 34587)) ;;; Generated autoloads from gs.el (autoload 'gs-load-image "gs" "\ @@ -12551,7 +12571,7 @@ the form \"WINDOW-ID PIXMAP-ID\". Value is non-nil if successful. ;;;*** ;;;### (autoloads (gud-tooltip-mode gdb-script-mode jdb pdb perldb -;;;;;; xdb dbx sdb gud-gdb) "gud" "progmodes/gud.el" (20215 1592)) +;;;;;; xdb dbx sdb gud-gdb) "gud" "progmodes/gud.el" (20261 10951)) ;;; Generated autoloads from progmodes/gud.el (autoload 'gud-gdb "gud" "\ @@ -12639,8 +12659,8 @@ it if ARG is omitted or nil. ;;;*** -;;;### (autoloads (handwrite) "handwrite" "play/handwrite.el" (19889 -;;;;;; 21967)) +;;;### (autoloads (handwrite) "handwrite" "play/handwrite.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from play/handwrite.el (autoload 'handwrite "handwrite" "\ @@ -12687,7 +12707,7 @@ to be updated. ;;;### (autoloads (mail-check-payment mail-add-payment-async mail-add-payment ;;;;;; hashcash-verify-payment hashcash-insert-payment-async hashcash-insert-payment) -;;;;;; "hashcash" "mail/hashcash.el" (19845 45374)) +;;;;;; "hashcash" "mail/hashcash.el" (20229 34587)) ;;; Generated autoloads from mail/hashcash.el (autoload 'hashcash-insert-payment "hashcash" "\ @@ -12732,7 +12752,7 @@ Prefix arg sets default accept amount temporarily. ;;;### (autoloads (scan-buf-previous-region scan-buf-next-region ;;;;;; scan-buf-move-to-region help-at-pt-display-when-idle help-at-pt-set-timer ;;;;;; help-at-pt-cancel-timer display-local-help help-at-pt-kbd-string -;;;;;; help-at-pt-string) "help-at-pt" "help-at-pt.el" (19845 45374)) +;;;;;; help-at-pt-string) "help-at-pt" "help-at-pt.el" (20229 34587)) ;;; Generated autoloads from help-at-pt.el (autoload 'help-at-pt-string "help-at-pt" "\ @@ -12862,7 +12882,7 @@ different regions. With numeric argument ARG, behaves like ;;;### (autoloads (doc-file-to-info doc-file-to-man describe-categories ;;;;;; describe-syntax describe-variable variable-at-point describe-function-1 ;;;;;; find-lisp-object-file-name help-C-file-name describe-function) -;;;;;; "help-fns" "help-fns.el" (20161 45793)) +;;;;;; "help-fns" "help-fns.el" (20229 34587)) ;;; Generated autoloads from help-fns.el (autoload 'describe-function "help-fns" "\ @@ -12942,7 +12962,7 @@ Produce a texinfo buffer with sorted doc-strings from the DOC file. ;;;*** ;;;### (autoloads (three-step-help) "help-macro" "help-macro.el" -;;;;;; (19845 45374)) +;;;;;; (20249 19777)) ;;; Generated autoloads from help-macro.el (defvar three-step-help nil "\ @@ -12958,8 +12978,8 @@ gives the window that lists the options.") ;;;### (autoloads (help-xref-on-pp help-insert-xref-button help-xref-button ;;;;;; help-make-xrefs help-buffer help-setup-xref help-mode-finish -;;;;;; help-mode-setup help-mode) "help-mode" "help-mode.el" (20167 -;;;;;; 36967)) +;;;;;; help-mode-setup help-mode) "help-mode" "help-mode.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from help-mode.el (autoload 'help-mode "help-mode" "\ @@ -13052,7 +13072,7 @@ Add xrefs for symbols in `pp's output between FROM and TO. ;;;*** ;;;### (autoloads (Helper-help Helper-describe-bindings) "helper" -;;;;;; "emacs-lisp/helper.el" (19845 45374)) +;;;;;; "emacs-lisp/helper.el" (20229 34587)) ;;; Generated autoloads from emacs-lisp/helper.el (autoload 'Helper-describe-bindings "helper" "\ @@ -13068,7 +13088,7 @@ Provide help for current mode. ;;;*** ;;;### (autoloads (hexlify-buffer hexl-find-file hexl-mode) "hexl" -;;;;;; "hexl.el" (19865 50420)) +;;;;;; "hexl.el" (20229 34587)) ;;; Generated autoloads from hexl.el (autoload 'hexl-mode "hexl" "\ @@ -13165,7 +13185,7 @@ This discards the buffer's undo information. ;;;### (autoloads (hi-lock-write-interactive-patterns hi-lock-unface-buffer ;;;;;; hi-lock-face-phrase-buffer hi-lock-face-buffer hi-lock-line-face-buffer ;;;;;; global-hi-lock-mode hi-lock-mode) "hi-lock" "hi-lock.el" -;;;;;; (20127 62865)) +;;;;;; (20229 34587)) ;;; Generated autoloads from hi-lock.el (autoload 'hi-lock-mode "hi-lock" "\ @@ -13304,7 +13324,7 @@ be found in variable `hi-lock-interactive-patterns'. ;;;*** ;;;### (autoloads (hide-ifdef-mode) "hideif" "progmodes/hideif.el" -;;;;;; (20197 58064)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/hideif.el (autoload 'hide-ifdef-mode "hideif" "\ @@ -13348,7 +13368,7 @@ Several variables affect how the hiding is done: ;;;*** ;;;### (autoloads (turn-off-hideshow hs-minor-mode) "hideshow" "progmodes/hideshow.el" -;;;;;; (20172 54913)) +;;;;;; (20237 28610)) ;;; Generated autoloads from progmodes/hideshow.el (defvar hs-special-modes-alist (mapcar 'purecopy '((c-mode "{" "}" "/[*/]" nil nil) (c++-mode "{" "}" "/[*/]" nil nil) (bibtex-mode ("@\\S(*\\(\\s(\\)" 1)) (java-mode "{" "}" "/[*/]" nil nil) (js-mode "{" "}" "/[*/]" nil))) "\ @@ -13410,8 +13430,8 @@ Unconditionally turn off `hs-minor-mode'. ;;;;;; highlight-compare-buffers highlight-changes-rotate-faces ;;;;;; highlight-changes-previous-change highlight-changes-next-change ;;;;;; highlight-changes-remove-highlight highlight-changes-visible-mode -;;;;;; highlight-changes-mode) "hilit-chg" "hilit-chg.el" (20188 -;;;;;; 43079)) +;;;;;; highlight-changes-mode) "hilit-chg" "hilit-chg.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from hilit-chg.el (autoload 'highlight-changes-mode "hilit-chg" "\ @@ -13546,7 +13566,7 @@ See `highlight-changes-mode' for more information on Highlight-Changes mode. ;;;;;; hippie-expand-ignore-buffers hippie-expand-max-buffers hippie-expand-no-restriction ;;;;;; hippie-expand-dabbrev-as-symbol hippie-expand-dabbrev-skip-space ;;;;;; hippie-expand-verbose hippie-expand-try-functions-list) "hippie-exp" -;;;;;; "hippie-exp.el" (20167 36967)) +;;;;;; "hippie-exp.el" (20229 34587)) ;;; Generated autoloads from hippie-exp.el (defvar hippie-expand-try-functions-list '(try-complete-file-name-partially try-complete-file-name try-expand-all-abbrevs try-expand-list try-expand-line try-expand-dabbrev try-expand-dabbrev-all-buffers try-expand-dabbrev-from-kill try-complete-lisp-symbol-partially try-complete-lisp-symbol) "\ @@ -13619,7 +13639,7 @@ argument VERBOSE non-nil makes the function verbose. ;;;*** ;;;### (autoloads (global-hl-line-mode hl-line-mode) "hl-line" "hl-line.el" -;;;;;; (20127 62865)) +;;;;;; (20229 34587)) ;;; Generated autoloads from hl-line.el (autoload 'hl-line-mode "hl-line" "\ @@ -13672,7 +13692,7 @@ Global-Hl-Line mode uses the functions `global-hl-line-unhighlight' and ;;;;;; holiday-bahai-holidays holiday-islamic-holidays holiday-christian-holidays ;;;;;; holiday-hebrew-holidays holiday-other-holidays holiday-local-holidays ;;;;;; holiday-oriental-holidays holiday-general-holidays) "holidays" -;;;;;; "calendar/holidays.el" (20209 49217)) +;;;;;; "calendar/holidays.el" (20229 34587)) ;;; Generated autoloads from calendar/holidays.el (define-obsolete-variable-alias 'general-holidays 'holiday-general-holidays "23.1") @@ -13820,8 +13840,8 @@ The optional LABEL is used to label the buffer created. ;;;*** -;;;### (autoloads (html2text) "html2text" "gnus/html2text.el" (20164 -;;;;;; 60780)) +;;;### (autoloads (html2text) "html2text" "gnus/html2text.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from gnus/html2text.el (autoload 'html2text "html2text" "\ @@ -13832,7 +13852,7 @@ Convert HTML to plain text in the current buffer. ;;;*** ;;;### (autoloads (htmlfontify-copy-and-link-dir htmlfontify-buffer) -;;;;;; "htmlfontify" "htmlfontify.el" (20188 43079)) +;;;;;; "htmlfontify" "htmlfontify.el" (20237 28610)) ;;; Generated autoloads from htmlfontify.el (autoload 'htmlfontify-buffer "htmlfontify" "\ @@ -13865,8 +13885,8 @@ You may also want to set `hfy-page-header' and `hfy-page-footer'. ;;;*** ;;;### (autoloads (define-ibuffer-filter define-ibuffer-op define-ibuffer-sorter -;;;;;; define-ibuffer-column) "ibuf-macs" "ibuf-macs.el" (19845 -;;;;;; 45374)) +;;;;;; define-ibuffer-column) "ibuf-macs" "ibuf-macs.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from ibuf-macs.el (autoload 'define-ibuffer-column "ibuf-macs" "\ @@ -13963,7 +13983,7 @@ bound to the current value of the filter. ;;;*** ;;;### (autoloads (ibuffer ibuffer-other-window ibuffer-list-buffers) -;;;;;; "ibuffer" "ibuffer.el" (20197 58671)) +;;;;;; "ibuffer" "ibuffer.el" (20232 10689)) ;;; Generated autoloads from ibuffer.el (autoload 'ibuffer-list-buffers "ibuffer" "\ @@ -14004,7 +14024,7 @@ FORMATS is the value to use for `ibuffer-formats'. ;;;### (autoloads (icalendar-import-buffer icalendar-import-file ;;;;;; icalendar-export-region icalendar-export-file) "icalendar" -;;;;;; "calendar/icalendar.el" (20164 29468)) +;;;;;; "calendar/icalendar.el" (20229 34587)) ;;; Generated autoloads from calendar/icalendar.el (autoload 'icalendar-export-file "icalendar" "\ @@ -14056,8 +14076,8 @@ buffer `*icalendar-errors*'. ;;;*** -;;;### (autoloads (icomplete-mode) "icomplete" "icomplete.el" (20127 -;;;;;; 62865)) +;;;### (autoloads (icomplete-mode) "icomplete" "icomplete.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from icomplete.el (defvar icomplete-mode nil "\ @@ -14079,7 +14099,7 @@ the mode if ARG is omitted or nil. ;;;*** -;;;### (autoloads (icon-mode) "icon" "progmodes/icon.el" (19890 42850)) +;;;### (autoloads (icon-mode) "icon" "progmodes/icon.el" (20229 34587)) ;;; Generated autoloads from progmodes/icon.el (autoload 'icon-mode "icon" "\ @@ -14120,7 +14140,7 @@ with no args, if that value is non-nil. ;;;*** ;;;### (autoloads (idlwave-shell) "idlw-shell" "progmodes/idlw-shell.el" -;;;;;; (20178 7273)) +;;;;;; (20237 28610)) ;;; Generated autoloads from progmodes/idlw-shell.el (autoload 'idlwave-shell "idlw-shell" "\ @@ -14146,7 +14166,7 @@ See also the variable `idlwave-shell-prompt-pattern'. ;;;*** ;;;### (autoloads (idlwave-mode) "idlwave" "progmodes/idlwave.el" -;;;;;; (20221 40442)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/idlwave.el (autoload 'idlwave-mode "idlwave" "\ @@ -14280,8 +14300,8 @@ The main features of this mode are ;;;;;; ido-find-alternate-file ido-find-file-other-window ido-find-file ;;;;;; ido-find-file-in-dir ido-switch-buffer-other-frame ido-insert-buffer ;;;;;; ido-kill-buffer ido-display-buffer ido-switch-buffer-other-window -;;;;;; ido-switch-buffer ido-mode ido-mode) "ido" "ido.el" (20203 -;;;;;; 10426)) +;;;;;; ido-switch-buffer ido-mode ido-mode) "ido" "ido.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from ido.el (defvar ido-mode nil "\ @@ -14542,7 +14562,7 @@ DEF, if non-nil, is the default value. ;;;*** -;;;### (autoloads (ielm) "ielm" "ielm.el" (20077 56412)) +;;;### (autoloads (ielm) "ielm" "ielm.el" (20229 34587)) ;;; Generated autoloads from ielm.el (autoload 'ielm "ielm" "\ @@ -14553,7 +14573,7 @@ Switches to the buffer `*ielm*', or creates it if it does not exist. ;;;*** -;;;### (autoloads (iimage-mode) "iimage" "iimage.el" (19845 45374)) +;;;### (autoloads (iimage-mode) "iimage" "iimage.el" (20229 34587)) ;;; Generated autoloads from iimage.el (define-obsolete-function-alias 'turn-on-iimage-mode 'iimage-mode "24.1") @@ -14570,7 +14590,7 @@ Toggle inline image minor mode. ;;;;;; create-image image-type-auto-detected-p image-type-available-p ;;;;;; image-type image-type-from-file-name image-type-from-file-header ;;;;;; image-type-from-buffer image-type-from-data) "image" "image.el" -;;;;;; (20084 29660)) +;;;;;; (20229 34587)) ;;; Generated autoloads from image.el (autoload 'image-type-from-data "image" "\ @@ -14767,7 +14787,7 @@ If Emacs is compiled without ImageMagick support, do nothing. ;;;;;; image-dired-jump-thumbnail-buffer image-dired-delete-tag ;;;;;; image-dired-tag-files image-dired-show-all-from-dir image-dired-display-thumbs ;;;;;; image-dired-dired-with-window-configuration image-dired-dired-toggle-marked-thumbs) -;;;;;; "image-dired" "image-dired.el" (20168 57844)) +;;;;;; "image-dired" "image-dired.el" (20229 34587)) ;;; Generated autoloads from image-dired.el (autoload 'image-dired-dired-toggle-marked-thumbs "image-dired" "\ @@ -14905,7 +14925,7 @@ easy-to-use form. ;;;### (autoloads (auto-image-file-mode insert-image-file image-file-name-regexp ;;;;;; image-file-name-regexps image-file-name-extensions) "image-file" -;;;;;; "image-file.el" (20127 62865)) +;;;;;; "image-file.el" (20229 34587)) ;;; Generated autoloads from image-file.el (defvar image-file-name-extensions (purecopy '("png" "jpeg" "jpg" "gif" "tiff" "tif" "xbm" "xpm" "pbm" "pgm" "ppm" "pnm" "svg")) "\ @@ -14968,7 +14988,7 @@ An image file is one whose name has an extension in ;;;*** ;;;### (autoloads (image-bookmark-jump image-mode-as-text image-minor-mode -;;;;;; image-mode) "image-mode" "image-mode.el" (20160 63745)) +;;;;;; image-mode) "image-mode" "image-mode.el" (20229 34587)) ;;; Generated autoloads from image-mode.el (autoload 'image-mode "image-mode" "\ @@ -15013,7 +15033,7 @@ on these modes. ;;;*** ;;;### (autoloads (imenu imenu-add-menubar-index imenu-add-to-menubar -;;;;;; imenu-sort-function) "imenu" "imenu.el" (19845 45374)) +;;;;;; imenu-sort-function) "imenu" "imenu.el" (20229 34587)) ;;; Generated autoloads from imenu.el (defvar imenu-sort-function nil "\ @@ -15130,7 +15150,7 @@ for more information. ;;;### (autoloads (indian-2-column-to-ucs-region in-is13194-pre-write-conversion ;;;;;; in-is13194-post-read-conversion indian-compose-string indian-compose-region) -;;;;;; "ind-util" "language/ind-util.el" (20097 41737)) +;;;;;; "ind-util" "language/ind-util.el" (20229 34587)) ;;; Generated autoloads from language/ind-util.el (autoload 'indian-compose-region "ind-util" "\ @@ -15162,7 +15182,7 @@ Convert old Emacs Devanagari characters to UCS. ;;;### (autoloads (inferior-lisp inferior-lisp-prompt inferior-lisp-load-command ;;;;;; inferior-lisp-program inferior-lisp-filter-regexp) "inf-lisp" -;;;;;; "progmodes/inf-lisp.el" (20197 58064)) +;;;;;; "progmodes/inf-lisp.el" (20229 34587)) ;;; Generated autoloads from progmodes/inf-lisp.el (defvar inferior-lisp-filter-regexp (purecopy "\\`\\s *\\(:\\(\\w\\|\\s_\\)\\)?\\s *\\'") "\ @@ -15229,7 +15249,7 @@ of `inferior-lisp-program'). Runs the hooks from ;;;;;; Info-goto-emacs-key-command-node Info-goto-emacs-command-node ;;;;;; Info-mode info-finder info-apropos Info-index Info-directory ;;;;;; Info-on-current-buffer info-standalone info-emacs-manual -;;;;;; info info-other-window) "info" "info.el" (20184 46008)) +;;;;;; info info-other-window) "info" "info.el" (20242 46528)) ;;; Generated autoloads from info.el (autoload 'info-other-window "info" "\ @@ -15415,7 +15435,7 @@ Go to Info buffer that displays MANUAL, creating it if none already exists. ;;;### (autoloads (info-complete-file info-complete-symbol info-lookup-file ;;;;;; info-lookup-symbol info-lookup-reset) "info-look" "info-look.el" -;;;;;; (19984 16846)) +;;;;;; (20229 34587)) ;;; Generated autoloads from info-look.el (autoload 'info-lookup-reset "info-look" "\ @@ -15464,7 +15484,7 @@ Perform completion on file preceding point. ;;;### (autoloads (info-xref-docstrings info-xref-check-all-custom ;;;;;; info-xref-check-all info-xref-check) "info-xref" "info-xref.el" -;;;;;; (20168 57844)) +;;;;;; (20229 34587)) ;;; Generated autoloads from info-xref.el (autoload 'info-xref-check "info-xref" "\ @@ -15547,7 +15567,7 @@ the sources handy. ;;;*** ;;;### (autoloads (batch-info-validate Info-validate Info-split Info-split-threshold -;;;;;; Info-tagify) "informat" "informat.el" (19886 45771)) +;;;;;; Info-tagify) "informat" "informat.el" (20229 34587)) ;;; Generated autoloads from informat.el (autoload 'Info-tagify "informat" "\ @@ -15594,7 +15614,7 @@ For example, invoke \"emacs -batch -f batch-info-validate $info/ ~/*.info\" ;;;### (autoloads (isearch-process-search-multibyte-characters isearch-toggle-input-method ;;;;;; isearch-toggle-specified-input-method) "isearch-x" "international/isearch-x.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from international/isearch-x.el (autoload 'isearch-toggle-specified-input-method "isearch-x" "\ @@ -15614,8 +15634,8 @@ Toggle input method in interactive search. ;;;*** -;;;### (autoloads (isearchb-activate) "isearchb" "isearchb.el" (19845 -;;;;;; 45374)) +;;;### (autoloads (isearchb-activate) "isearchb" "isearchb.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from isearchb.el (autoload 'isearchb-activate "isearchb" "\ @@ -15631,7 +15651,7 @@ accessed via isearchb. ;;;### (autoloads (iso-cvt-define-menu iso-cvt-write-only iso-cvt-read-only ;;;;;; iso-sgml2iso iso-iso2sgml iso-iso2duden iso-iso2gtex iso-gtex2iso ;;;;;; iso-tex2iso iso-iso2tex iso-german iso-spanish) "iso-cvt" -;;;;;; "international/iso-cvt.el" (19845 45374)) +;;;;;; "international/iso-cvt.el" (20229 34587)) ;;; Generated autoloads from international/iso-cvt.el (autoload 'iso-spanish "iso-cvt" "\ @@ -15722,7 +15742,7 @@ Add submenus to the File menu, to convert to and from various formats. ;;;*** ;;;### (autoloads nil "iso-transl" "international/iso-transl.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from international/iso-transl.el (or key-translation-map (setq key-translation-map (make-sparse-keymap))) (define-key key-translation-map "\C-x8" 'iso-transl-ctl-x-8-map) @@ -15734,7 +15754,7 @@ Add submenus to the File menu, to convert to and from various formats. ;;;;;; ispell-complete-word ispell-continue ispell-buffer ispell-comments-and-strings ;;;;;; ispell-region ispell-change-dictionary ispell-kill-ispell ;;;;;; ispell-help ispell-pdict-save ispell-word ispell-personal-dictionary) -;;;;;; "ispell" "textmodes/ispell.el" (20187 22214)) +;;;;;; "ispell" "textmodes/ispell.el" (20229 34587)) ;;; Generated autoloads from textmodes/ispell.el (put 'ispell-check-comments 'safe-local-variable (lambda (a) (memq a '(nil t exclusive)))) @@ -15960,8 +15980,8 @@ You can bind this to the key C-c i in GNUS or mail by adding to ;;;*** -;;;### (autoloads (iswitchb-mode) "iswitchb" "iswitchb.el" (20168 -;;;;;; 57844)) +;;;### (autoloads (iswitchb-mode) "iswitchb" "iswitchb.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from iswitchb.el (defvar iswitchb-mode nil "\ @@ -15989,7 +16009,7 @@ between buffers using substrings. See `iswitchb' for details. ;;;### (autoloads (read-hiragana-string japanese-zenkaku-region japanese-hankaku-region ;;;;;; japanese-hiragana-region japanese-katakana-region japanese-zenkaku ;;;;;; japanese-hankaku japanese-hiragana japanese-katakana setup-japanese-environment-internal) -;;;;;; "japan-util" "language/japan-util.el" (19845 45374)) +;;;;;; "japan-util" "language/japan-util.el" (20229 34587)) ;;; Generated autoloads from language/japan-util.el (autoload 'setup-japanese-environment-internal "japan-util" "\ @@ -16067,7 +16087,7 @@ If non-nil, second arg INITIAL-INPUT is a string to insert before reading. ;;;*** ;;;### (autoloads (jka-compr-uninstall jka-compr-handler) "jka-compr" -;;;;;; "jka-compr.el" (20000 30139)) +;;;;;; "jka-compr.el" (20250 40679)) ;;; Generated autoloads from jka-compr.el (defvar jka-compr-inhibit nil "\ @@ -16083,14 +16103,14 @@ It is not recommended to set this variable permanently to anything but nil.") (autoload 'jka-compr-uninstall "jka-compr" "\ Uninstall jka-compr. This removes the entries in `file-name-handler-alist' and `auto-mode-alist' -and `inhibit-first-line-modes-suffixes' that were added +and `inhibit-local-variables-suffixes' that were added by `jka-compr-installed'. \(fn)" nil nil) ;;;*** -;;;### (autoloads (js-mode) "js" "progmodes/js.el" (20222 61246)) +;;;### (autoloads (js-mode) "js" "progmodes/js.el" (20229 34587)) ;;; Generated autoloads from progmodes/js.el (autoload 'js-mode "js" "\ @@ -16104,7 +16124,7 @@ Major mode for editing JavaScript. ;;;### (autoloads (keypad-setup keypad-numlock-shifted-setup keypad-shifted-setup ;;;;;; keypad-numlock-setup keypad-setup) "keypad" "emulation/keypad.el" -;;;;;; (19845 45374)) +;;;;;; (20237 28610)) ;;; Generated autoloads from emulation/keypad.el (defvar keypad-setup nil "\ @@ -16160,7 +16180,7 @@ the decimal key on the keypad is mapped to DECIMAL instead of `.' ;;;*** ;;;### (autoloads (kinsoku) "kinsoku" "international/kinsoku.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from international/kinsoku.el (autoload 'kinsoku "kinsoku" "\ @@ -16181,8 +16201,8 @@ the context of text formatting. ;;;*** -;;;### (autoloads (kkc-region) "kkc" "international/kkc.el" (19845 -;;;;;; 45374)) +;;;### (autoloads (kkc-region) "kkc" "international/kkc.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from international/kkc.el (defvar kkc-after-update-conversion-functions nil "\ @@ -16207,7 +16227,7 @@ and the return value is the length of the conversion. ;;;### (autoloads (kmacro-end-call-mouse kmacro-end-and-call-macro ;;;;;; kmacro-end-or-call-macro kmacro-start-macro-or-insert-counter ;;;;;; kmacro-call-macro kmacro-end-macro kmacro-start-macro kmacro-exec-ring-item) -;;;;;; "kmacro" "kmacro.el" (20187 22214)) +;;;;;; "kmacro" "kmacro.el" (20229 34587)) ;;; Generated autoloads from kmacro.el (global-set-key "\C-x(" 'kmacro-start-macro) (global-set-key "\C-x)" 'kmacro-end-macro) @@ -16318,7 +16338,7 @@ If kbd macro currently being defined end it before activating it. ;;;*** ;;;### (autoloads (setup-korean-environment-internal) "korea-util" -;;;;;; "language/korea-util.el" (19845 45374)) +;;;;;; "language/korea-util.el" (20229 34587)) ;;; Generated autoloads from language/korea-util.el (defvar default-korean-keyboard (purecopy (if (string-match "3" (or (getenv "HANGUL_KEYBOARD_TYPE") "")) "3" "")) "\ @@ -16333,7 +16353,7 @@ If kbd macro currently being defined end it before activating it. ;;;*** ;;;### (autoloads (landmark landmark-test-run) "landmark" "play/landmark.el" -;;;;;; (20178 7273)) +;;;;;; (20229 34587)) ;;; Generated autoloads from play/landmark.el (defalias 'landmark-repeat 'landmark-test-run) @@ -16365,7 +16385,7 @@ Use \\[describe-mode] for more info. ;;;### (autoloads (lao-compose-region lao-composition-function lao-transcribe-roman-to-lao-string ;;;;;; lao-transcribe-single-roman-syllable-to-lao lao-compose-string) -;;;;;; "lao-util" "language/lao-util.el" (20188 43079)) +;;;;;; "lao-util" "language/lao-util.el" (20229 34587)) ;;; Generated autoloads from language/lao-util.el (autoload 'lao-compose-string "lao-util" "\ @@ -16404,7 +16424,7 @@ Transcribe Romanized Lao string STR to Lao character string. ;;;### (autoloads (latexenc-find-file-coding-system latexenc-coding-system-to-inputenc ;;;;;; latexenc-inputenc-to-coding-system latex-inputenc-coding-alist) -;;;;;; "latexenc" "international/latexenc.el" (19845 45374)) +;;;;;; "latexenc" "international/latexenc.el" (20229 34587)) ;;; Generated autoloads from international/latexenc.el (defvar latex-inputenc-coding-alist (purecopy '(("ansinew" . windows-1252) ("applemac" . mac-roman) ("ascii" . us-ascii) ("cp1250" . windows-1250) ("cp1252" . windows-1252) ("cp1257" . cp1257) ("cp437de" . cp437) ("cp437" . cp437) ("cp850" . cp850) ("cp852" . cp852) ("cp858" . cp858) ("cp865" . cp865) ("latin1" . iso-8859-1) ("latin2" . iso-8859-2) ("latin3" . iso-8859-3) ("latin4" . iso-8859-4) ("latin5" . iso-8859-5) ("latin9" . iso-8859-15) ("next" . next) ("utf8" . utf-8) ("utf8x" . utf-8))) "\ @@ -16436,7 +16456,7 @@ coding system names is determined from `latex-inputenc-coding-alist'. ;;;*** ;;;### (autoloads (latin1-display-ucs-per-lynx latin1-display latin1-display) -;;;;;; "latin1-disp" "international/latin1-disp.el" (19845 45374)) +;;;;;; "latin1-disp" "international/latin1-disp.el" (20229 34587)) ;;; Generated autoloads from international/latin1-disp.el (defvar latin1-display nil "\ @@ -16478,7 +16498,7 @@ use either \\[customize] or the function `latin1-display'.") ;;;*** ;;;### (autoloads (ld-script-mode) "ld-script" "progmodes/ld-script.el" -;;;;;; (19961 55377)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/ld-script.el (autoload 'ld-script-mode "ld-script" "\ @@ -16489,7 +16509,7 @@ A major mode to edit GNU ld script files ;;;*** ;;;### (autoloads (ledit-from-lisp-mode ledit-mode) "ledit" "ledit.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from ledit.el (defconst ledit-save-files t "\ @@ -16524,7 +16544,7 @@ do (setq lisp-mode-hook 'ledit-from-lisp-mode) ;;;*** -;;;### (autoloads (life) "life" "play/life.el" (19845 45374)) +;;;### (autoloads (life) "life" "play/life.el" (20229 34587)) ;;; Generated autoloads from play/life.el (autoload 'life "life" "\ @@ -16538,7 +16558,7 @@ generations (this defaults to 1). ;;;*** ;;;### (autoloads (global-linum-mode linum-mode linum-format) "linum" -;;;;;; "linum.el" (20127 62865)) +;;;;;; "linum.el" (20229 34587)) ;;; Generated autoloads from linum.el (defvar linum-format 'dynamic "\ @@ -16583,8 +16603,8 @@ See `linum-mode' for more information on Linum mode. ;;;*** -;;;### (autoloads (unload-feature) "loadhist" "loadhist.el" (20203 -;;;;;; 10426)) +;;;### (autoloads (unload-feature) "loadhist" "loadhist.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from loadhist.el (autoload 'unload-feature "loadhist" "\ @@ -16616,7 +16636,7 @@ something strange, such as redefining an Emacs function. ;;;*** ;;;### (autoloads (locate-with-filter locate locate-ls-subdir-switches) -;;;;;; "locate" "locate.el" (19886 45771)) +;;;;;; "locate" "locate.el" (20229 34587)) ;;; Generated autoloads from locate.el (defvar locate-ls-subdir-switches (purecopy "-al") "\ @@ -16668,7 +16688,7 @@ except that FILTER is not optional. ;;;*** -;;;### (autoloads (log-edit) "log-edit" "vc/log-edit.el" (20138 33157)) +;;;### (autoloads (log-edit) "log-edit" "vc/log-edit.el" (20229 34587)) ;;; Generated autoloads from vc/log-edit.el (autoload 'log-edit "log-edit" "\ @@ -16695,8 +16715,8 @@ uses the current buffer. ;;;*** -;;;### (autoloads (log-view-mode) "log-view" "vc/log-view.el" (19946 -;;;;;; 1612)) +;;;### (autoloads (log-view-mode) "log-view" "vc/log-view.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from vc/log-view.el (autoload 'log-view-mode "log-view" "\ @@ -16706,8 +16726,8 @@ Major mode for browsing CVS log output. ;;;*** -;;;### (autoloads (longlines-mode) "longlines" "longlines.el" (20127 -;;;;;; 62865)) +;;;### (autoloads (longlines-mode) "longlines" "longlines.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from longlines.el (autoload 'longlines-mode "longlines" "\ @@ -16733,8 +16753,8 @@ newlines are indicated with a symbol. ;;;*** ;;;### (autoloads (print-region lpr-region print-buffer lpr-buffer -;;;;;; lpr-command lpr-switches printer-name) "lpr" "lpr.el" (20174 -;;;;;; 10230)) +;;;;;; lpr-command lpr-switches printer-name) "lpr" "lpr.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from lpr.el (defvar lpr-windows-system (memq system-type '(ms-dos windows-nt)) "\ @@ -16830,7 +16850,7 @@ for further customization of the printer command. ;;;*** ;;;### (autoloads (ls-lisp-support-shell-wildcards) "ls-lisp" "ls-lisp.el" -;;;;;; (19886 45771)) +;;;;;; (20229 34587)) ;;; Generated autoloads from ls-lisp.el (defvar ls-lisp-support-shell-wildcards t "\ @@ -16841,8 +16861,8 @@ Otherwise they are treated as Emacs regexps (for backward compatibility).") ;;;*** -;;;### (autoloads (lunar-phases) "lunar" "calendar/lunar.el" (19845 -;;;;;; 45374)) +;;;### (autoloads (lunar-phases) "lunar" "calendar/lunar.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from calendar/lunar.el (autoload 'lunar-phases "lunar" "\ @@ -16856,8 +16876,8 @@ This function is suitable for execution in a .emacs file. ;;;*** -;;;### (autoloads (m4-mode) "m4-mode" "progmodes/m4-mode.el" (19845 -;;;;;; 45374)) +;;;### (autoloads (m4-mode) "m4-mode" "progmodes/m4-mode.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from progmodes/m4-mode.el (autoload 'm4-mode "m4-mode" "\ @@ -16868,7 +16888,7 @@ A major mode to edit m4 macro files. ;;;*** ;;;### (autoloads (macroexpand-all) "macroexp" "emacs-lisp/macroexp.el" -;;;;;; (19930 13389)) +;;;;;; (20229 34587)) ;;; Generated autoloads from emacs-lisp/macroexp.el (autoload 'macroexpand-all "macroexp" "\ @@ -16882,7 +16902,7 @@ definitions to shadow the loaded ones for use in file byte-compilation. ;;;*** ;;;### (autoloads (apply-macro-to-region-lines kbd-macro-query insert-kbd-macro -;;;;;; name-last-kbd-macro) "macros" "macros.el" (19886 45771)) +;;;;;; name-last-kbd-macro) "macros" "macros.el" (20229 34587)) ;;; Generated autoloads from macros.el (autoload 'name-last-kbd-macro "macros" "\ @@ -16971,7 +16991,7 @@ and then select the region of un-tablified names and use ;;;*** ;;;### (autoloads (what-domain mail-extract-address-components) "mail-extr" -;;;;;; "mail/mail-extr.el" (20160 63745)) +;;;;;; "mail/mail-extr.el" (20237 28610)) ;;; Generated autoloads from mail/mail-extr.el (autoload 'mail-extract-address-components "mail-extr" "\ @@ -17003,7 +17023,7 @@ Convert mail domain DOMAIN to the country it corresponds to. ;;;### (autoloads (mail-hist-put-headers-into-history mail-hist-keep-history ;;;;;; mail-hist-enable mail-hist-define-keys) "mail-hist" "mail/mail-hist.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from mail/mail-hist.el (autoload 'mail-hist-define-keys "mail-hist" "\ @@ -17035,7 +17055,7 @@ This function normally would be called when the message is sent. ;;;### (autoloads (mail-fetch-field mail-unquote-printable-region ;;;;;; mail-unquote-printable mail-quote-printable-region mail-quote-printable ;;;;;; mail-file-babyl-p mail-dont-reply-to-names mail-use-rfc822) -;;;;;; "mail-utils" "mail/mail-utils.el" (19922 19303)) +;;;;;; "mail-utils" "mail/mail-utils.el" (20229 34587)) ;;; Generated autoloads from mail/mail-utils.el (defvar mail-use-rfc822 nil "\ @@ -17107,8 +17127,8 @@ matches may be returned from the message body. ;;;*** ;;;### (autoloads (define-mail-abbrev build-mail-abbrevs mail-abbrevs-setup -;;;;;; mail-abbrevs-mode) "mailabbrev" "mail/mailabbrev.el" (20127 -;;;;;; 62865)) +;;;;;; mail-abbrevs-mode) "mailabbrev" "mail/mailabbrev.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from mail/mailabbrev.el (defvar mail-abbrevs-mode nil "\ @@ -17159,7 +17179,7 @@ double-quotes. ;;;### (autoloads (mail-complete mail-completion-at-point-function ;;;;;; define-mail-alias expand-mail-aliases mail-complete-style) -;;;;;; "mailalias" "mail/mailalias.el" (19881 27850)) +;;;;;; "mailalias" "mail/mailalias.el" (20229 34587)) ;;; Generated autoloads from mail/mailalias.el (defvar mail-complete-style 'angles "\ @@ -17211,7 +17231,7 @@ current header, calls `mail-complete-function' and passes prefix ARG if any. ;;;*** ;;;### (autoloads (mailclient-send-it) "mailclient" "mail/mailclient.el" -;;;;;; (19845 45374)) +;;;;;; (20237 28610)) ;;; Generated autoloads from mail/mailclient.el (autoload 'mailclient-send-it "mailclient" "\ @@ -17225,7 +17245,7 @@ The mail client is taken to be the handler of mailto URLs. ;;;### (autoloads (makefile-imake-mode makefile-bsdmake-mode makefile-makepp-mode ;;;;;; makefile-gmake-mode makefile-automake-mode makefile-mode) -;;;;;; "make-mode" "progmodes/make-mode.el" (20199 13366)) +;;;;;; "make-mode" "progmodes/make-mode.el" (20229 34587)) ;;; Generated autoloads from progmodes/make-mode.el (autoload 'makefile-mode "make-mode" "\ @@ -17342,8 +17362,8 @@ An adapted `makefile-mode' that knows about imake. ;;;*** -;;;### (autoloads (make-command-summary) "makesum" "makesum.el" (19886 -;;;;;; 45771)) +;;;### (autoloads (make-command-summary) "makesum" "makesum.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from makesum.el (autoload 'make-command-summary "makesum" "\ @@ -17355,7 +17375,7 @@ Previous contents of that buffer are killed first. ;;;*** ;;;### (autoloads (Man-bookmark-jump man-follow man) "man" "man.el" -;;;;;; (20203 10426)) +;;;;;; (20229 34587)) ;;; Generated autoloads from man.el (defalias 'manual-entry 'man) @@ -17409,7 +17429,7 @@ Default bookmark handler for Man buffers. ;;;*** -;;;### (autoloads (master-mode) "master" "master.el" (20127 62865)) +;;;### (autoloads (master-mode) "master" "master.el" (20229 34587)) ;;; Generated autoloads from master.el (autoload 'master-mode "master" "\ @@ -17432,7 +17452,7 @@ yourself the value of `master-of' by calling `master-show-slave'. ;;;*** ;;;### (autoloads (minibuffer-depth-indicate-mode) "mb-depth" "mb-depth.el" -;;;;;; (20127 62865)) +;;;;;; (20229 34587)) ;;; Generated autoloads from mb-depth.el (defvar minibuffer-depth-indicate-mode nil "\ @@ -17465,7 +17485,7 @@ recursion depth in the minibuffer prompt. This is only useful if ;;;;;; message-forward-make-body message-forward message-recover ;;;;;; message-supersede message-cancel-news message-followup message-wide-reply ;;;;;; message-reply message-news message-mail message-mode) "message" -;;;;;; "gnus/message.el" (20222 61246)) +;;;;;; "gnus/message.el" (20229 34587)) ;;; 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) @@ -17631,7 +17651,7 @@ which specify the range to operate on. ;;;*** ;;;### (autoloads (metapost-mode metafont-mode) "meta-mode" "progmodes/meta-mode.el" -;;;;;; (20222 61246)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/meta-mode.el (autoload 'metafont-mode "meta-mode" "\ @@ -17648,7 +17668,7 @@ Major mode for editing MetaPost sources. ;;;### (autoloads (metamail-region metamail-buffer metamail-interpret-body ;;;;;; metamail-interpret-header) "metamail" "mail/metamail.el" -;;;;;; (20168 57844)) +;;;;;; (20229 34587)) ;;; Generated autoloads from mail/metamail.el (autoload 'metamail-interpret-header "metamail" "\ @@ -17693,7 +17713,7 @@ redisplayed as output is inserted. ;;;### (autoloads (mh-fully-kill-draft mh-send-letter mh-user-agent-compose ;;;;;; mh-smail-batch mh-smail-other-window mh-smail) "mh-comp" -;;;;;; "mh-e/mh-comp.el" (20160 63745)) +;;;;;; "mh-e/mh-comp.el" (20229 34587)) ;;; Generated autoloads from mh-e/mh-comp.el (autoload 'mh-smail "mh-comp" "\ @@ -17783,7 +17803,7 @@ delete the draft message. ;;;*** -;;;### (autoloads (mh-version) "mh-e" "mh-e/mh-e.el" (20222 61246)) +;;;### (autoloads (mh-version) "mh-e" "mh-e/mh-e.el" (20229 34587)) ;;; Generated autoloads from mh-e/mh-e.el (put 'mh-progs 'risky-local-variable t) @@ -17800,7 +17820,7 @@ Display version information about MH-E and the MH mail handling system. ;;;*** ;;;### (autoloads (mh-folder-mode mh-nmail mh-rmail) "mh-folder" -;;;;;; "mh-e/mh-folder.el" (20004 2139)) +;;;;;; "mh-e/mh-folder.el" (20229 34587)) ;;; Generated autoloads from mh-e/mh-folder.el (autoload 'mh-rmail "mh-folder" "\ @@ -17882,7 +17902,7 @@ perform the operation on all messages in that region. ;;;*** ;;;### (autoloads (midnight-delay-set clean-buffer-list) "midnight" -;;;;;; "midnight.el" (19853 59245)) +;;;;;; "midnight.el" (20229 34587)) ;;; Generated autoloads from midnight.el (autoload 'clean-buffer-list "midnight" "\ @@ -17909,7 +17929,7 @@ to its second argument TM. ;;;*** ;;;### (autoloads (minibuffer-electric-default-mode) "minibuf-eldef" -;;;;;; "minibuf-eldef.el" (20127 62865)) +;;;;;; "minibuf-eldef.el" (20229 34587)) ;;; Generated autoloads from minibuf-eldef.el (defvar minibuffer-electric-default-mode nil "\ @@ -17939,7 +17959,7 @@ is modified to remove the default indication. ;;;*** ;;;### (autoloads (list-dynamic-libraries butterfly) "misc" "misc.el" -;;;;;; (19968 28627)) +;;;;;; (20229 34587)) ;;; Generated autoloads from misc.el (autoload 'butterfly "misc" "\ @@ -17969,7 +17989,7 @@ The return value is always nil. ;;;### (autoloads (multi-isearch-files-regexp multi-isearch-files ;;;;;; multi-isearch-buffers-regexp multi-isearch-buffers multi-isearch-setup) -;;;;;; "misearch" "misearch.el" (20168 57844)) +;;;;;; "misearch" "misearch.el" (20229 34587)) ;;; Generated autoloads from misearch.el (add-hook 'isearch-mode-hook 'multi-isearch-setup) @@ -18051,7 +18071,7 @@ whose file names match the specified wildcard. ;;;*** ;;;### (autoloads (mixal-mode) "mixal-mode" "progmodes/mixal-mode.el" -;;;;;; (20162 19074)) +;;;;;; (20237 28610)) ;;; Generated autoloads from progmodes/mixal-mode.el (autoload 'mixal-mode "mixal-mode" "\ @@ -18062,7 +18082,7 @@ Major mode for the mixal asm language. ;;;*** ;;;### (autoloads (mm-default-file-encoding) "mm-encode" "gnus/mm-encode.el" -;;;;;; (20075 14682)) +;;;;;; (20229 34587)) ;;; Generated autoloads from gnus/mm-encode.el (autoload 'mm-default-file-encoding "mm-encode" "\ @@ -18073,7 +18093,7 @@ Return a default encoding for FILE. ;;;*** ;;;### (autoloads (mm-inline-external-body mm-extern-cache-contents) -;;;;;; "mm-extern" "gnus/mm-extern.el" (19845 45374)) +;;;;;; "mm-extern" "gnus/mm-extern.el" (20229 34587)) ;;; Generated autoloads from gnus/mm-extern.el (autoload 'mm-extern-cache-contents "mm-extern" "\ @@ -18092,7 +18112,7 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing. ;;;*** ;;;### (autoloads (mm-inline-partial) "mm-partial" "gnus/mm-partial.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from gnus/mm-partial.el (autoload 'mm-inline-partial "mm-partial" "\ @@ -18106,7 +18126,7 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing. ;;;*** ;;;### (autoloads (mm-url-insert-file-contents-external mm-url-insert-file-contents) -;;;;;; "mm-url" "gnus/mm-url.el" (19877 30798)) +;;;;;; "mm-url" "gnus/mm-url.el" (20229 34587)) ;;; Generated autoloads from gnus/mm-url.el (autoload 'mm-url-insert-file-contents "mm-url" "\ @@ -18123,7 +18143,7 @@ Insert file contents of URL using `mm-url-program'. ;;;*** ;;;### (autoloads (mm-uu-dissect-text-parts mm-uu-dissect) "mm-uu" -;;;;;; "gnus/mm-uu.el" (19845 45374)) +;;;;;; "gnus/mm-uu.el" (20229 34587)) ;;; Generated autoloads from gnus/mm-uu.el (autoload 'mm-uu-dissect "mm-uu" "\ @@ -18143,7 +18163,7 @@ Assume text has been decoded if DECODED is non-nil. ;;;*** ;;;### (autoloads (mml-attach-file mml-to-mime) "mml" "gnus/mml.el" -;;;;;; (20183 25152)) +;;;;;; (20229 34587)) ;;; Generated autoloads from gnus/mml.el (autoload 'mml-to-mime "mml" "\ @@ -18168,7 +18188,7 @@ body) or \"attachment\" (separate from the body). ;;;*** ;;;### (autoloads (mml1991-sign mml1991-encrypt) "mml1991" "gnus/mml1991.el" -;;;;;; (20124 236)) +;;;;;; (20229 34587)) ;;; Generated autoloads from gnus/mml1991.el (autoload 'mml1991-encrypt "mml1991" "\ @@ -18185,7 +18205,7 @@ body) or \"attachment\" (separate from the body). ;;;### (autoloads (mml2015-self-encrypt mml2015-sign mml2015-encrypt ;;;;;; mml2015-verify-test mml2015-verify mml2015-decrypt-test mml2015-decrypt) -;;;;;; "mml2015" "gnus/mml2015.el" (20124 236)) +;;;;;; "mml2015" "gnus/mml2015.el" (20229 34587)) ;;; Generated autoloads from gnus/mml2015.el (autoload 'mml2015-decrypt "mml2015" "\ @@ -18260,7 +18280,7 @@ followed by the first character of the construct. ;;;*** ;;;### (autoloads (denato-region nato-region unmorse-region morse-region) -;;;;;; "morse" "play/morse.el" (19869 36706)) +;;;;;; "morse" "play/morse.el" (20229 34587)) ;;; Generated autoloads from play/morse.el (autoload 'morse-region "morse" "\ @@ -18286,7 +18306,7 @@ Convert NATO phonetic alphabet in region to ordinary ASCII text. ;;;*** ;;;### (autoloads (mouse-drag-drag mouse-drag-throw) "mouse-drag" -;;;;;; "mouse-drag.el" (19890 42850)) +;;;;;; "mouse-drag.el" (20229 34587)) ;;; Generated autoloads from mouse-drag.el (autoload 'mouse-drag-throw "mouse-drag" "\ @@ -18333,8 +18353,8 @@ To test this function, evaluate: ;;;*** -;;;### (autoloads (mouse-sel-mode) "mouse-sel" "mouse-sel.el" (20168 -;;;;;; 57844)) +;;;### (autoloads (mouse-sel-mode) "mouse-sel" "mouse-sel.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from mouse-sel.el (defvar mouse-sel-mode nil "\ @@ -18377,7 +18397,7 @@ kill ring; mouse-1 or mouse-3 kills it. ;;;*** -;;;### (autoloads (mpc) "mpc" "mpc.el" (20222 61246)) +;;;### (autoloads (mpc) "mpc" "mpc.el" (20229 34587)) ;;; Generated autoloads from mpc.el (autoload 'mpc "mpc" "\ @@ -18387,7 +18407,7 @@ Main entry point for MPC. ;;;*** -;;;### (autoloads (mpuz) "mpuz" "play/mpuz.el" (19890 42850)) +;;;### (autoloads (mpuz) "mpuz" "play/mpuz.el" (20229 34587)) ;;; Generated autoloads from play/mpuz.el (autoload 'mpuz "mpuz" "\ @@ -18397,7 +18417,7 @@ Multiplication puzzle with GNU Emacs. ;;;*** -;;;### (autoloads (msb-mode) "msb" "msb.el" (20127 62865)) +;;;### (autoloads (msb-mode) "msb" "msb.el" (20229 34587)) ;;; Generated autoloads from msb.el (defvar msb-mode nil "\ @@ -18427,7 +18447,7 @@ different buffer menu using the function `msb'. ;;;;;; describe-current-coding-system describe-current-coding-system-briefly ;;;;;; describe-coding-system describe-character-set list-charset-chars ;;;;;; read-charset list-character-sets) "mule-diag" "international/mule-diag.el" -;;;;;; (20160 63745)) +;;;;;; (20229 34587)) ;;; Generated autoloads from international/mule-diag.el (autoload 'list-character-sets "mule-diag" "\ @@ -18564,7 +18584,7 @@ The default is 20. If LIMIT is negative, do not limit the listing. ;;;;;; coding-system-translation-table-for-decode coding-system-pre-write-conversion ;;;;;; coding-system-post-read-conversion lookup-nested-alist set-nested-alist ;;;;;; truncate-string-to-width store-substring string-to-sequence) -;;;;;; "mule-util" "international/mule-util.el" (20197 58064)) +;;;;;; "mule-util" "international/mule-util.el" (20229 34587)) ;;; Generated autoloads from international/mule-util.el (autoload 'string-to-sequence "mule-util" "\ @@ -18704,8 +18724,8 @@ per-character basis, this may not be accurate. ;;;### (autoloads (network-connection network-connection-to-service ;;;;;; whois-reverse-lookup whois finger ftp run-dig dns-lookup-host ;;;;;; nslookup nslookup-host ping traceroute route arp netstat -;;;;;; iwconfig ifconfig) "net-utils" "net/net-utils.el" (19845 -;;;;;; 45374)) +;;;;;; iwconfig ifconfig) "net-utils" "net/net-utils.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from net/net-utils.el (autoload 'ifconfig "net-utils" "\ @@ -18799,8 +18819,8 @@ Open a network connection to HOST on PORT. ;;;*** -;;;### (autoloads (netrc-credentials) "netrc" "net/netrc.el" (20188 -;;;;;; 43079)) +;;;### (autoloads (netrc-credentials) "netrc" "net/netrc.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from net/netrc.el (autoload 'netrc-credentials "netrc" "\ @@ -18813,7 +18833,7 @@ listed in the PORTS list. ;;;*** ;;;### (autoloads (open-network-stream) "network-stream" "net/network-stream.el" -;;;;;; (20188 43079)) +;;;;;; (20236 7740)) ;;; Generated autoloads from net/network-stream.el (autoload 'open-network-stream "network-stream" "\ @@ -18909,7 +18929,7 @@ functionality. ;;;;;; uncomment-region comment-kill comment-set-column comment-indent ;;;;;; comment-indent-default comment-normalize-vars comment-multi-line ;;;;;; comment-padding comment-style comment-column) "newcomment" -;;;;;; "newcomment.el" (20087 5852)) +;;;;;; "newcomment.el" (20229 34587)) ;;; Generated autoloads from newcomment.el (defalias 'indent-for-comment 'comment-indent) @@ -19109,7 +19129,7 @@ unless optional argument SOFT is non-nil. ;;;*** ;;;### (autoloads (newsticker-start newsticker-running-p) "newst-backend" -;;;;;; "net/newst-backend.el" (19918 22236)) +;;;;;; "net/newst-backend.el" (20229 34587)) ;;; Generated autoloads from net/newst-backend.el (autoload 'newsticker-running-p "newst-backend" "\ @@ -19131,7 +19151,7 @@ Run `newsticker-start-hook' if newsticker was not running already. ;;;*** ;;;### (autoloads (newsticker-plainview) "newst-plainview" "net/newst-plainview.el" -;;;;;; (20167 36967)) +;;;;;; (20229 34587)) ;;; Generated autoloads from net/newst-plainview.el (autoload 'newsticker-plainview "newst-plainview" "\ @@ -19142,7 +19162,7 @@ Start newsticker plainview. ;;;*** ;;;### (autoloads (newsticker-show-news) "newst-reader" "net/newst-reader.el" -;;;;;; (20094 65493)) +;;;;;; (20229 34587)) ;;; Generated autoloads from net/newst-reader.el (autoload 'newsticker-show-news "newst-reader" "\ @@ -19153,7 +19173,7 @@ Start reading news. You may want to bind this to a key. ;;;*** ;;;### (autoloads (newsticker-start-ticker newsticker-ticker-running-p) -;;;;;; "newst-ticker" "net/newst-ticker.el" (19845 45374)) +;;;;;; "newst-ticker" "net/newst-ticker.el" (20229 34587)) ;;; Generated autoloads from net/newst-ticker.el (autoload 'newsticker-ticker-running-p "newst-ticker" "\ @@ -19174,7 +19194,7 @@ running already. ;;;*** ;;;### (autoloads (newsticker-treeview) "newst-treeview" "net/newst-treeview.el" -;;;;;; (20168 57844)) +;;;;;; (20229 34587)) ;;; Generated autoloads from net/newst-treeview.el (autoload 'newsticker-treeview "newst-treeview" "\ @@ -19185,7 +19205,7 @@ Start newsticker treeview. ;;;*** ;;;### (autoloads (nndiary-generate-nov-databases) "nndiary" "gnus/nndiary.el" -;;;;;; (20221 40442)) +;;;;;; (20229 34587)) ;;; Generated autoloads from gnus/nndiary.el (autoload 'nndiary-generate-nov-databases "nndiary" "\ @@ -19195,8 +19215,8 @@ Generate NOV databases in all nndiary directories. ;;;*** -;;;### (autoloads (nndoc-add-type) "nndoc" "gnus/nndoc.el" (19845 -;;;;;; 45374)) +;;;### (autoloads (nndoc-add-type) "nndoc" "gnus/nndoc.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from gnus/nndoc.el (autoload 'nndoc-add-type "nndoc" "\ @@ -19211,7 +19231,7 @@ symbol in the alist. ;;;*** ;;;### (autoloads (nnfolder-generate-active-file) "nnfolder" "gnus/nnfolder.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from gnus/nnfolder.el (autoload 'nnfolder-generate-active-file "nnfolder" "\ @@ -19223,7 +19243,7 @@ This command does not work if you use short group names. ;;;*** ;;;### (autoloads (nnml-generate-nov-databases) "nnml" "gnus/nnml.el" -;;;;;; (20178 7273)) +;;;;;; (20229 34587)) ;;; Generated autoloads from gnus/nnml.el (autoload 'nnml-generate-nov-databases "nnml" "\ @@ -19234,7 +19254,7 @@ Generate NOV databases in all nnml directories. ;;;*** ;;;### (autoloads (disable-command enable-command disabled-command-function) -;;;;;; "novice" "novice.el" (19845 45374)) +;;;;;; "novice" "novice.el" (20229 34587)) ;;; Generated autoloads from novice.el (defvar disabled-command-function 'disabled-command-function "\ @@ -19267,7 +19287,7 @@ to future sessions. ;;;*** ;;;### (autoloads (nroff-mode) "nroff-mode" "textmodes/nroff-mode.el" -;;;;;; (20127 62865)) +;;;;;; (20229 34587)) ;;; Generated autoloads from textmodes/nroff-mode.el (autoload 'nroff-mode "nroff-mode" "\ @@ -19282,7 +19302,7 @@ closing requests for requests that are used in matched pairs. ;;;*** ;;;### (autoloads (nxml-glyph-display-string) "nxml-glyph" "nxml/nxml-glyph.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from nxml/nxml-glyph.el (autoload 'nxml-glyph-display-string "nxml-glyph" "\ @@ -19294,8 +19314,8 @@ Return nil if the face cannot display a glyph for N. ;;;*** -;;;### (autoloads (nxml-mode) "nxml-mode" "nxml/nxml-mode.el" (19927 -;;;;;; 37225)) +;;;### (autoloads (nxml-mode) "nxml-mode" "nxml/nxml-mode.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from nxml/nxml-mode.el (autoload 'nxml-mode "nxml-mode" "\ @@ -19357,7 +19377,7 @@ Many aspects this mode can be customized using ;;;*** ;;;### (autoloads (nxml-enable-unicode-char-name-sets) "nxml-uchnm" -;;;;;; "nxml/nxml-uchnm.el" (19845 45374)) +;;;;;; "nxml/nxml-uchnm.el" (20229 34587)) ;;; Generated autoloads from nxml/nxml-uchnm.el (autoload 'nxml-enable-unicode-char-name-sets "nxml-uchnm" "\ @@ -19371,16 +19391,16 @@ the variable `nxml-enabled-unicode-blocks'. ;;;### (autoloads (org-babel-mark-block org-babel-previous-src-block ;;;;;; org-babel-next-src-block org-babel-goto-named-result org-babel-goto-named-src-block -;;;;;; org-babel-goto-src-block-head org-babel-hide-result-toggle-maybe -;;;;;; org-babel-sha1-hash org-babel-execute-subtree org-babel-execute-buffer -;;;;;; org-babel-map-inline-src-blocks org-babel-map-src-blocks -;;;;;; org-babel-open-src-block-result org-babel-switch-to-session-with-code -;;;;;; org-babel-switch-to-session org-babel-initiate-session org-babel-load-in-session +;;;;;; org-babel-goto-src-block-head org-babel-sha1-hash org-babel-execute-subtree +;;;;;; org-babel-execute-buffer org-babel-map-call-lines org-babel-map-inline-src-blocks +;;;;;; org-babel-map-src-blocks org-babel-open-src-block-result +;;;;;; org-babel-switch-to-session-with-code org-babel-switch-to-session +;;;;;; org-babel-initiate-session org-babel-load-in-session org-babel-insert-header-arg ;;;;;; org-babel-check-src-block org-babel-expand-src-block org-babel-execute-src-block ;;;;;; org-babel-pop-to-session-maybe org-babel-load-in-session-maybe ;;;;;; org-babel-expand-src-block-maybe org-babel-view-src-block-info ;;;;;; org-babel-execute-maybe org-babel-execute-safely-maybe) "ob" -;;;;;; "org/ob.el" (20189 63932)) +;;;;;; "org/ob.el" (20230 13182)) ;;; Generated autoloads from org/ob.el (autoload 'org-babel-execute-safely-maybe "ob" "\ @@ -19427,9 +19447,8 @@ Insert the results of execution into the buffer. Source code execution and the collection and formatting of results can be controlled through a variety of header arguments. -With prefix argument ARG, force re-execution even if an -existing result cached in the buffer would otherwise have been -returned. +With prefix argument ARG, force re-execution even if an existing +result cached in the buffer would otherwise have been returned. Optionally supply a value for INFO in the form returned by `org-babel-get-src-block-info'. @@ -19452,6 +19471,11 @@ Check for misspelled header arguments in the current code block. \(fn)" t nil) +(autoload 'org-babel-insert-header-arg "ob" "\ +Insert a header argument selecting from lists of common args and values. + +\(fn)" t nil) + (autoload 'org-babel-load-in-session "ob" "\ Load the body of the current source-code block. Evaluate the header arguments for the source block before @@ -19524,6 +19548,15 @@ buffer. (put 'org-babel-map-inline-src-blocks 'lisp-indent-function '1) +(autoload 'org-babel-map-call-lines "ob" "\ +Evaluate BODY forms on each call line in FILE. +If FILE is nil evaluate BODY forms on source blocks in current +buffer. + +\(fn FILE &rest BODY)" nil (quote macro)) + +(put 'org-babel-map-call-lines 'lisp-indent-function '1) + (autoload 'org-babel-execute-buffer "ob" "\ Execute source code blocks in a buffer. Call `org-babel-execute-src-block' on every source block in @@ -19543,11 +19576,6 @@ Generate an sha1 hash based on the value of info. \(fn &optional INFO)" t nil) -(autoload 'org-babel-hide-result-toggle-maybe "ob" "\ -Toggle visibility of result at point. - -\(fn)" t nil) - (autoload 'org-babel-goto-src-block-head "ob" "\ Go to the beginning of the current code block. @@ -19583,7 +19611,7 @@ Mark current src block ;;;*** ;;;### (autoloads (org-babel-describe-bindings) "ob-keys" "org/ob-keys.el" -;;;;;; (20045 30710)) +;;;;;; (20229 34587)) ;;; Generated autoloads from org/ob-keys.el (autoload 'org-babel-describe-bindings "ob-keys" "\ @@ -19594,7 +19622,7 @@ Describe all keybindings behind `org-babel-key-prefix'. ;;;*** ;;;### (autoloads (org-babel-lob-get-info org-babel-lob-execute-maybe -;;;;;; org-babel-lob-ingest) "ob-lob" "org/ob-lob.el" (20045 31431)) +;;;;;; org-babel-lob-ingest) "ob-lob" "org/ob-lob.el" (20229 34587)) ;;; Generated autoloads from org/ob-lob.el (autoload 'org-babel-lob-ingest "ob-lob" "\ @@ -19619,7 +19647,7 @@ Return a Library of Babel function call as a string. ;;;### (autoloads (org-babel-tangle org-babel-tangle-file org-babel-load-file ;;;;;; org-babel-tangle-lang-exts) "ob-tangle" "org/ob-tangle.el" -;;;;;; (20045 30712)) +;;;;;; (20229 34587)) ;;; Generated autoloads from org/ob-tangle.el (defvar org-babel-tangle-lang-exts '(("emacs-lisp" . "el")) "\ @@ -19661,7 +19689,7 @@ exported source code blocks by language. ;;;*** ;;;### (autoloads (inferior-octave) "octave-inf" "progmodes/octave-inf.el" -;;;;;; (20135 56947)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/octave-inf.el (autoload 'inferior-octave "octave-inf" "\ @@ -19684,7 +19712,7 @@ startup file, `~/.emacs-octave'. ;;;*** ;;;### (autoloads (octave-mode) "octave-mod" "progmodes/octave-mod.el" -;;;;;; (20135 56947)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/octave-mod.el (autoload 'octave-mode "octave-mod" "\ @@ -19772,7 +19800,7 @@ including a reproducible test case and send the message. ;;;;;; org-insert-link-global org-store-link org-run-like-in-org-mode ;;;;;; turn-on-orgstruct++ turn-on-orgstruct orgstruct-mode org-global-cycle ;;;;;; org-mode org-babel-do-load-languages) "org" "org/org.el" -;;;;;; (20197 58064)) +;;;;;; (20236 7740)) ;;; Generated autoloads from org/org.el (autoload 'org-babel-do-load-languages "org" "\ @@ -19911,6 +19939,9 @@ SCOPE determines the scope of this command. It can be any of: nil The current buffer, respecting the restriction if any tree The subtree started with the entry at point region The entries within the active region, if any +region-start-level + The entries within the active region, but only those at + the same level than the first one. file The current buffer, without restriction file-with-archives The current buffer, and any archives associated with it @@ -19944,7 +19975,7 @@ a *different* entry, you cannot use these techniques. (autoload 'org-switchb "org" "\ Switch between Org buffers. -With a prefix argument, restrict available to files. +With one prefix argument, restrict available buffers to files. With two prefix arguments, restrict available buffers to agenda files. Defaults to `iswitchb' for buffer name completion. @@ -19996,7 +20027,7 @@ Call the customize function with org as argument. ;;;;;; org-diary org-agenda-list-stuck-projects org-tags-view org-todo-list ;;;;;; org-search-view org-agenda-list org-batch-store-agenda-views ;;;;;; org-store-agenda-views org-batch-agenda-csv org-batch-agenda -;;;;;; org-agenda) "org-agenda" "org/org-agenda.el" (20187 22214)) +;;;;;; org-agenda) "org-agenda" "org/org-agenda.el" (20236 7740)) ;;; Generated autoloads from org/org-agenda.el (autoload 'org-agenda "org-agenda" "\ @@ -20098,13 +20129,13 @@ The view will be for the current day or week, but from the overview buffer you will be able to go to other days/weeks. With a numeric prefix argument in an interactive call, the agenda will -span INCLUDE-ALL days. Lisp programs should instead specify SPAN to change +span ARG days. Lisp programs should instead specify SPAN to change the number of days. SPAN defaults to `org-agenda-span'. START-DAY defaults to TODAY, or to the most recent match for the weekday given in `org-agenda-start-on-weekday'. -\(fn &optional INCLUDE-ALL START-DAY SPAN)" t nil) +\(fn &optional ARG START-DAY SPAN)" t nil) (autoload 'org-search-view "org-agenda" "\ Show all entries that contain a phrase or words or regular expressions. @@ -20226,6 +20257,10 @@ expression, and filter out entries that don't match it. If FILTER is a string, use this string as a regular expression for filtering entries out. +If FILTER is a function, filter out entries against which +calling the function returns nil. This function takes one +argument: an entry from `org-agenda-get-day-entries'. + FILTER can also be an alist with the car of each cell being either 'headline or 'category. For example: @@ -20235,13 +20270,18 @@ either 'headline or 'category. For example: will only add headlines containing IMPORTANT or headlines belonging to the \"Work\" category. -\(fn &optional REFRESH FILTER)" t nil) +ARGS are symbols indicating what kind of entries to consider. +By default `org-agenda-to-appt' will use :deadline, :scheduled +and :timestamp entries. See the docstring of `org-diary' for +details and examples. + +\(fn &optional REFRESH FILTER &rest ARGS)" t nil) ;;;*** ;;;### (autoloads (org-archive-subtree-default-with-confirmation ;;;;;; org-archive-subtree-default) "org-archive" "org/org-archive.el" -;;;;;; (20045 30713)) +;;;;;; (20229 34587)) ;;; Generated autoloads from org/org-archive.el (autoload 'org-archive-subtree-default "org-archive" "\ @@ -20261,8 +20301,8 @@ This command is set with the variable `org-archive-default-command'. ;;;### (autoloads (org-export-as-ascii org-export-region-as-ascii ;;;;;; org-replace-region-by-ascii org-export-as-ascii-to-buffer ;;;;;; org-export-as-utf8-to-buffer org-export-as-utf8 org-export-as-latin1-to-buffer -;;;;;; org-export-as-latin1) "org-ascii" "org/org-ascii.el" (20045 -;;;;;; 30713)) +;;;;;; org-export-as-latin1) "org-ascii" "org/org-ascii.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from org/org-ascii.el (autoload 'org-export-as-latin1 "org-ascii" "\ @@ -20335,8 +20375,8 @@ publishing directory. ;;;*** -;;;### (autoloads (org-attach) "org-attach" "org/org-attach.el" (20045 -;;;;;; 30713)) +;;;### (autoloads (org-attach) "org-attach" "org/org-attach.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from org/org-attach.el (autoload 'org-attach "org-attach" "\ @@ -20348,7 +20388,7 @@ Shows a list of commands and prompts for another key to execute a command. ;;;*** ;;;### (autoloads (org-bbdb-anniversaries) "org-bbdb" "org/org-bbdb.el" -;;;;;; (20164 29468)) +;;;;;; (20230 13182)) ;;; Generated autoloads from org/org-bbdb.el (autoload 'org-bbdb-anniversaries "org-bbdb" "\ @@ -20359,7 +20399,7 @@ Extract anniversaries from BBDB for display in the agenda. ;;;*** ;;;### (autoloads (org-capture-import-remember-templates org-capture-insert-template-here -;;;;;; org-capture) "org-capture" "org/org-capture.el" (20168 57844)) +;;;;;; org-capture) "org-capture" "org/org-capture.el" (20236 7740)) ;;; Generated autoloads from org/org-capture.el (autoload 'org-capture "org-capture" "\ @@ -20397,7 +20437,7 @@ Set org-capture-templates to be similar to `org-remember-templates'. ;;;*** ;;;### (autoloads (org-clock-persistence-insinuate org-get-clocktable) -;;;;;; "org-clock" "org/org-clock.el" (20187 22214)) +;;;;;; "org-clock" "org/org-clock.el" (20236 7740)) ;;; Generated autoloads from org/org-clock.el (autoload 'org-get-clocktable "org-clock" "\ @@ -20415,7 +20455,7 @@ Set up hooks for clock persistence. ;;;*** ;;;### (autoloads (org-datetree-find-date-create) "org-datetree" -;;;;;; "org/org-datetree.el" (20045 30713)) +;;;;;; "org/org-datetree.el" (20229 34587)) ;;; Generated autoloads from org/org-datetree.el (autoload 'org-datetree-find-date-create "org-datetree" "\ @@ -20431,7 +20471,7 @@ tree can be found. ;;;### (autoloads (org-export-as-docbook org-export-as-docbook-pdf-and-open ;;;;;; org-export-as-docbook-pdf org-export-region-as-docbook org-replace-region-by-docbook ;;;;;; org-export-as-docbook-to-buffer org-export-as-docbook-batch) -;;;;;; "org-docbook" "org/org-docbook.el" (20045 30713)) +;;;;;; "org-docbook" "org/org-docbook.el" (20229 34587)) ;;; Generated autoloads from org/org-docbook.el (autoload 'org-export-as-docbook-batch "org-docbook" "\ @@ -20508,7 +20548,7 @@ publishing directory. ;;;### (autoloads (org-insert-export-options-template org-export-as-org ;;;;;; org-export-visible org-export) "org-exp" "org/org-exp.el" -;;;;;; (20221 40442)) +;;;;;; (20236 7740)) ;;; Generated autoloads from org/org-exp.el (autoload 'org-export "org-exp" "\ @@ -20569,8 +20609,8 @@ Insert into the buffer a template with information for exporting. ;;;*** ;;;### (autoloads (org-feed-show-raw-feed org-feed-goto-inbox org-feed-update -;;;;;; org-feed-update-all) "org-feed" "org/org-feed.el" (20065 -;;;;;; 65310)) +;;;;;; org-feed-update-all) "org-feed" "org/org-feed.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from org/org-feed.el (autoload 'org-feed-update-all "org-feed" "\ @@ -20598,7 +20638,7 @@ Show the raw feed buffer of a feed. ;;;*** ;;;### (autoloads (org-footnote-normalize org-footnote-action) "org-footnote" -;;;;;; "org/org-footnote.el" (20161 45793)) +;;;;;; "org/org-footnote.el" (20229 34587)) ;;; Generated autoloads from org/org-footnote.el (autoload 'org-footnote-action "org-footnote" "\ @@ -20630,11 +20670,11 @@ If Org is amidst an export process, EXPORT-PROPS will hold the export properties of the buffer. When EXPORT-PROPS is non-nil, the default action is to insert -normalized footnotes towards the end of the pre-processing buffer. -Some exporters like docbook, odt, etc. expect that footnote -definitions be available before any references to them. Such -exporters can let bind `org-footnote-insert-pos-for-preprocessor' to -symbol 'point-min to achieve the desired behavior. +normalized footnotes towards the end of the pre-processing +buffer. Some exporters (docbook, odt...) expect footnote +definitions to be available before any references to them. Such +exporters can let bind `org-footnote-insert-pos-for-preprocessor' +to symbol `point-min' to achieve the desired behaviour. Additional note on `org-footnote-insert-pos-for-preprocessor': 1. This variable has not effect when FOR-PREPROCESSOR is nil. @@ -20649,7 +20689,7 @@ Additional note on `org-footnote-insert-pos-for-preprocessor': ;;;### (autoloads (org-freemind-to-org-mode org-freemind-from-org-sparse-tree ;;;;;; org-freemind-from-org-mode org-freemind-from-org-mode-node ;;;;;; org-freemind-show org-export-as-freemind) "org-freemind" -;;;;;; "org/org-freemind.el" (20172 54913)) +;;;;;; "org/org-freemind.el" (20229 34587)) ;;; Generated autoloads from org/org-freemind.el (autoload 'org-export-as-freemind "org-freemind" "\ @@ -20710,7 +20750,7 @@ Convert FreeMind file MM-FILE to `org-mode' file ORG-FILE. ;;;### (autoloads (org-export-htmlize-generate-css org-export-as-html ;;;;;; org-export-region-as-html org-replace-region-by-html org-export-as-html-to-buffer ;;;;;; org-export-as-html-batch org-export-as-html-and-open) "org-html" -;;;;;; "org/org-html.el" (20065 65310)) +;;;;;; "org/org-html.el" (20229 34587)) ;;; Generated autoloads from org/org-html.el (put 'org-export-html-style-include-default 'safe-local-variable 'booleanp) @@ -20804,7 +20844,7 @@ that uses these same face definitions. ;;;### (autoloads (org-export-icalendar-combine-agenda-files org-export-icalendar-all-agenda-files ;;;;;; org-export-icalendar-this-file) "org-icalendar" "org/org-icalendar.el" -;;;;;; (20164 29468)) +;;;;;; (20229 34587)) ;;; Generated autoloads from org/org-icalendar.el (autoload 'org-export-icalendar-this-file "org-icalendar" "\ @@ -20832,7 +20872,7 @@ The file is stored under the name `org-combined-agenda-icalendar-file'. ;;;### (autoloads (org-id-store-link org-id-find-id-file org-id-find ;;;;;; org-id-goto org-id-get-with-outline-drilling org-id-get-with-outline-path-completion ;;;;;; org-id-get org-id-copy org-id-get-create) "org-id" "org/org-id.el" -;;;;;; (20065 65310)) +;;;;;; (20229 34587)) ;;; Generated autoloads from org/org-id.el (autoload 'org-id-get-create "org-id" "\ @@ -20901,22 +20941,25 @@ Store a link to the current entry, using its ID. ;;;*** ;;;### (autoloads (org-indent-mode) "org-indent" "org/org-indent.el" -;;;;;; (20045 30716)) +;;;;;; (20229 34587)) ;;; Generated autoloads from org/org-indent.el (autoload 'org-indent-mode "org-indent" "\ When active, indent text according to outline structure. -Internally this works by adding `line-prefix' properties to all non-headlines. -These properties are updated locally in idle time. -FIXME: How to update when broken? +Internally this works by adding `line-prefix' and `wrap-prefix' +properties, after each buffer modification, on the modified zone. + +The process is synchronous. Though, initial indentation of +buffer, which can take a few seconds on large buffers, is done +during idle time. \(fn &optional ARG)" t nil) ;;;*** ;;;### (autoloads (org-irc-store-link) "org-irc" "org/org-irc.el" -;;;;;; (20065 65310)) +;;;;;; (20229 34587)) ;;; Generated autoloads from org/org-irc.el (autoload 'org-irc-store-link "org-irc" "\ @@ -20929,7 +20972,7 @@ Dispatch to the appropriate function to store a link to an IRC session. ;;;### (autoloads (org-export-as-pdf-and-open org-export-as-pdf org-export-as-latex ;;;;;; org-export-region-as-latex org-replace-region-by-latex org-export-as-latex-to-buffer ;;;;;; org-export-as-latex-batch) "org-latex" "org/org-latex.el" -;;;;;; (20164 29468)) +;;;;;; (20229 34587)) ;;; Generated autoloads from org/org-latex.el (autoload 'org-export-as-latex-batch "org-latex" "\ @@ -21006,11 +21049,69 @@ Export as LaTeX, then process through to PDF, and open. \(fn ARG)" t nil) +;;;*** + +;;;### (autoloads (org-lparse-region org-replace-region-by org-lparse-to-buffer +;;;;;; org-lparse-batch org-lparse-and-open) "org-lparse" "org/org-lparse.el" +;;;;;; (20236 7740)) +;;; Generated autoloads from org/org-lparse.el + +(autoload 'org-lparse-and-open "org-lparse" "\ +Export outline to TARGET-BACKEND via NATIVE-BACKEND and open exported file. +If there is an active region, export only the region. The prefix +ARG specifies how many levels of the outline should become +headlines. The default is 3. Lower levels will become bulleted +lists. + +\(fn TARGET-BACKEND NATIVE-BACKEND ARG &optional FILE-OR-BUF)" nil nil) + +(autoload 'org-lparse-batch "org-lparse" "\ +Call the function `org-lparse'. +This function can be used in batch processing as: +emacs --batch + --load=$HOME/lib/emacs/org.el + --eval \"(setq org-export-headline-levels 2)\" + --visit=MyFile --funcall org-lparse-batch + +\(fn TARGET-BACKEND &optional NATIVE-BACKEND)" nil nil) + +(autoload 'org-lparse-to-buffer "org-lparse" "\ +Call `org-lparse' with output to a temporary buffer. +No file is created. The prefix ARG is passed through to +`org-lparse'. + +\(fn BACKEND ARG)" nil nil) + +(autoload 'org-replace-region-by "org-lparse" "\ +Assume the current region has org-mode syntax, and convert it to HTML. +This can be used in any buffer. For example, you could write an +itemized list in org-mode syntax in an HTML buffer and then use +this command to convert it. + +\(fn BACKEND BEG END)" nil nil) + +(autoload 'org-lparse-region "org-lparse" "\ +Convert region from BEG to END in org-mode buffer to HTML. +If prefix arg BODY-ONLY is set, omit file header, footer, and table of +contents, and only produce the region of converted text, useful for +cut-and-paste operations. +If BUFFER is a buffer or a string, use/create that buffer as a target +of the converted HTML. If BUFFER is the symbol `string', return the +produced HTML as a string and leave not buffer behind. For example, +a Lisp program could call this function in the following way: + + (setq html (org-lparse-region \"html\" beg end t 'string)) + +When called interactively, the output buffer is selected, and shown +in a window. A non-interactive call will only return the buffer. + +\(fn BACKEND BEG END &optional BODY-ONLY BUFFER)" nil nil) + ;;;*** ;;;### (autoloads (org-mobile-create-sumo-agenda org-mobile-pull -;;;;;; org-mobile-push) "org-mobile" "org/org-mobile.el" (20065 -;;;;;; 65310)) +;;;;;; org-mobile-push) "org-mobile" "org/org-mobile.el" (20230 +;;;;;; 13182)) ;;; Generated autoloads from org/org-mobile.el (autoload 'org-mobile-push "org-mobile" "\ @@ -21032,10 +21133,113 @@ Create a file that contains all custom agenda views. \(fn)" t nil) +;;;*** + +;;;### (autoloads (org-export-as-odf-and-open org-export-as-odf org-export-odt-convert +;;;;;; org-export-as-odt org-export-region-as-odt org-replace-region-by-odt +;;;;;; org-export-as-odt-to-buffer org-export-as-odt-batch org-export-as-odt-and-open) +;;;;;; "org-odt" "org/org-odt.el" (20236 7740)) +;;; Generated autoloads from org/org-odt.el + +(autoload 'org-export-as-odt-and-open "org-odt" "\ +Export the outline as ODT and immediately open it with a browser. +If there is an active region, export only the region. +The prefix ARG specifies how many levels of the outline should become +headlines. The default is 3. Lower levels will become bulleted lists. + +\(fn ARG)" t nil) + +(autoload 'org-export-as-odt-batch "org-odt" "\ +Call the function `org-lparse-batch'. +This function can be used in batch processing as: +emacs --batch + --load=$HOME/lib/emacs/org.el + --eval \"(setq org-export-headline-levels 2)\" + --visit=MyFile --funcall org-export-as-odt-batch + +\(fn)" nil nil) + +(autoload 'org-export-as-odt-to-buffer "org-odt" "\ +Call `org-lparse-odt` with output to a temporary buffer. +No file is created. The prefix ARG is passed through to `org-lparse-to-buffer'. + +\(fn ARG)" t nil) + +(autoload 'org-replace-region-by-odt "org-odt" "\ +Assume the current region has org-mode syntax, and convert it to ODT. +This can be used in any buffer. For example, you could write an +itemized list in org-mode syntax in an ODT buffer and then use this +command to convert it. + +\(fn BEG END)" t nil) + +(autoload 'org-export-region-as-odt "org-odt" "\ +Convert region from BEG to END in org-mode buffer to ODT. +If prefix arg BODY-ONLY is set, omit file header, footer, and table of +contents, and only produce the region of converted text, useful for +cut-and-paste operations. +If BUFFER is a buffer or a string, use/create that buffer as a target +of the converted ODT. If BUFFER is the symbol `string', return the +produced ODT as a string and leave not buffer behind. For example, +a Lisp program could call this function in the following way: + + (setq odt (org-export-region-as-odt beg end t 'string)) + +When called interactively, the output buffer is selected, and shown +in a window. A non-interactive call will only return the buffer. + +\(fn BEG END &optional BODY-ONLY BUFFER)" t nil) + +(autoload 'org-export-as-odt "org-odt" "\ +Export the outline as a OpenDocumentText file. +If there is an active region, export only the region. The prefix +ARG specifies how many levels of the outline should become +headlines. The default is 3. Lower levels will become bulleted +lists. HIDDEN is obsolete and does nothing. +EXT-PLIST is a property list with external parameters overriding +org-mode's default settings, but still inferior to file-local +settings. When TO-BUFFER is non-nil, create a buffer with that +name and export to that buffer. If TO-BUFFER is the symbol +`string', don't leave any buffer behind but just return the +resulting XML as a string. When BODY-ONLY is set, don't produce +the file header and footer, simply return the content of +..., without even the body tags themselves. When +PUB-DIR is set, use this as the publishing directory. + +\(fn ARG &optional HIDDEN EXT-PLIST TO-BUFFER BODY-ONLY PUB-DIR)" t nil) + +(autoload 'org-export-odt-convert "org-odt" "\ +Convert IN-FILE to format OUT-FMT using a command line converter. +IN-FILE is the file to be converted. If unspecified, it defaults +to variable `buffer-file-name'. OUT-FMT is the desired output +format. Use `org-export-odt-convert-process' as the converter. +If PREFIX-ARG is non-nil then the newly converted file is opened +using `org-open-file'. + +\(fn &optional IN-FILE OUT-FMT PREFIX-ARG)" t nil) + +(autoload 'org-export-as-odf "org-odt" "\ +Export LATEX-FRAG as OpenDocument formula file ODF-FILE. +Use `org-create-math-formula' to convert LATEX-FRAG first to +MathML. When invoked as an interactive command, use +`org-latex-regexps' to infer LATEX-FRAG from currently active +region. If no LaTeX fragments are found, prompt for it. Push +MathML source to kill ring, if `org-export-copy-to-kill-ring' is +non-nil. + +\(fn LATEX-FRAG &optional ODF-FILE)" t nil) + +(autoload 'org-export-as-odf-and-open "org-odt" "\ +Export LaTeX fragment as OpenDocument formula and immediately open it. +Use `org-export-as-odf' to read LaTeX fragment and OpenDocument +formula file. + +\(fn)" t nil) + ;;;*** ;;;### (autoloads (org-plot/gnuplot) "org-plot" "org/org-plot.el" -;;;;;; (20157 54694)) +;;;;;; (20229 34587)) ;;; Generated autoloads from org/org-plot.el (autoload 'org-plot/gnuplot "org-plot" "\ @@ -21049,7 +21253,7 @@ line directly before or after the table. ;;;### (autoloads (org-publish-current-project org-publish-current-file ;;;;;; org-publish-all org-publish) "org-publish" "org/org-publish.el" -;;;;;; (20189 63932)) +;;;;;; (20236 7740)) ;;; Generated autoloads from org/org-publish.el (defalias 'org-publish-project 'org-publish) @@ -21083,7 +21287,7 @@ the project. ;;;### (autoloads (org-remember-handler org-remember org-remember-apply-template ;;;;;; org-remember-annotation org-remember-insinuate) "org-remember" -;;;;;; "org/org-remember.el" (20165 31925)) +;;;;;; "org/org-remember.el" (20229 34587)) ;;; Generated autoloads from org/org-remember.el (autoload 'org-remember-insinuate "org-remember" "\ @@ -21159,7 +21363,7 @@ See also the variable `org-reverse-note-order'. ;;;*** ;;;### (autoloads (org-table-to-lisp orgtbl-mode turn-on-orgtbl) -;;;;;; "org-table" "org/org-table.el" (20222 61246)) +;;;;;; "org-table" "org/org-table.el" (20236 7740)) ;;; Generated autoloads from org/org-table.el (autoload 'turn-on-orgtbl "org-table" "\ @@ -21183,7 +21387,7 @@ The table is taken from the parameter TXT, or from the buffer at point. ;;;*** ;;;### (autoloads (org-export-as-taskjuggler-and-open org-export-as-taskjuggler) -;;;;;; "org-taskjuggler" "org/org-taskjuggler.el" (20187 22214)) +;;;;;; "org-taskjuggler" "org/org-taskjuggler.el" (20236 7740)) ;;; Generated autoloads from org/org-taskjuggler.el (autoload 'org-export-as-taskjuggler "org-taskjuggler" "\ @@ -21211,7 +21415,7 @@ with the TaskJuggler GUI. ;;;### (autoloads (org-timer-set-timer org-timer-item org-timer-change-times-in-region ;;;;;; org-timer org-timer-start) "org-timer" "org/org-timer.el" -;;;;;; (20045 30718)) +;;;;;; (20229 34587)) ;;; Generated autoloads from org/org-timer.el (autoload 'org-timer-start "org-timer" "\ @@ -21272,7 +21476,7 @@ replace any running timer. ;;;*** ;;;### (autoloads (org-export-as-xoxo) "org-xoxo" "org/org-xoxo.el" -;;;;;; (20045 30719)) +;;;;;; (20229 34587)) ;;; Generated autoloads from org/org-xoxo.el (autoload 'org-export-as-xoxo "org-xoxo" "\ @@ -21284,7 +21488,7 @@ The XOXO buffer is named *xoxo-* ;;;*** ;;;### (autoloads (outline-minor-mode outline-mode) "outline" "outline.el" -;;;;;; (20162 63140)) +;;;;;; (20229 34587)) ;;; Generated autoloads from outline.el (put 'outline-regexp 'safe-local-variable 'stringp) (put 'outline-heading-end-regexp 'safe-local-variable 'stringp) @@ -21348,7 +21552,7 @@ See the command `outline-mode' for more information on this mode. ;;;### (autoloads (list-packages describe-package package-initialize ;;;;;; package-refresh-contents package-install-file package-install-from-buffer ;;;;;; package-install package-enable-at-startup) "package" "emacs-lisp/package.el" -;;;;;; (20189 63932)) +;;;;;; (20259 55615)) ;;; Generated autoloads from emacs-lisp/package.el (defvar package-enable-at-startup t "\ @@ -21418,7 +21622,7 @@ The list is displayed in a buffer named `*Packages*'. ;;;*** -;;;### (autoloads (show-paren-mode) "paren" "paren.el" (20127 62865)) +;;;### (autoloads (show-paren-mode) "paren" "paren.el" (20229 34587)) ;;; Generated autoloads from paren.el (defvar show-paren-mode nil "\ @@ -21445,7 +21649,7 @@ matching parenthesis is highlighted in `show-paren-style' after ;;;*** ;;;### (autoloads (parse-time-string) "parse-time" "calendar/parse-time.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from calendar/parse-time.el (put 'parse-time-rules 'risky-local-variable t) @@ -21458,8 +21662,8 @@ unknown are returned as nil. ;;;*** -;;;### (autoloads (pascal-mode) "pascal" "progmodes/pascal.el" (20200 -;;;;;; 34235)) +;;;### (autoloads (pascal-mode) "pascal" "progmodes/pascal.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from progmodes/pascal.el (autoload 'pascal-mode "pascal" "\ @@ -21512,7 +21716,7 @@ no args, if that value is non-nil. ;;;*** ;;;### (autoloads (password-in-cache-p password-cache-expiry password-cache) -;;;;;; "password-cache" "password-cache.el" (20089 47591)) +;;;;;; "password-cache" "password-cache.el" (20229 34587)) ;;; Generated autoloads from password-cache.el (defvar password-cache t "\ @@ -21534,7 +21738,7 @@ Check if KEY is in the cache. ;;;*** ;;;### (autoloads (pcase-let pcase-let* pcase) "pcase" "emacs-lisp/pcase.el" -;;;;;; (20222 61246)) +;;;;;; (20229 34587)) ;;; Generated autoloads from emacs-lisp/pcase.el (autoload 'pcase "pcase" "\ @@ -21593,8 +21797,8 @@ of the form (UPAT EXP). ;;;*** -;;;### (autoloads (pcomplete/cvs) "pcmpl-cvs" "pcmpl-cvs.el" (20100 -;;;;;; 17869)) +;;;### (autoloads (pcomplete/cvs) "pcmpl-cvs" "pcmpl-cvs.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from pcmpl-cvs.el (autoload 'pcomplete/cvs "pcmpl-cvs" "\ @@ -21605,7 +21809,7 @@ Completion rules for the `cvs' command. ;;;*** ;;;### (autoloads (pcomplete/tar pcomplete/make pcomplete/bzip2 pcomplete/gzip) -;;;;;; "pcmpl-gnu" "pcmpl-gnu.el" (20193 60993)) +;;;;;; "pcmpl-gnu" "pcmpl-gnu.el" (20254 62253)) ;;; Generated autoloads from pcmpl-gnu.el (autoload 'pcomplete/gzip "pcmpl-gnu" "\ @@ -21633,7 +21837,7 @@ Completion for the GNU tar utility. ;;;*** ;;;### (autoloads (pcomplete/mount pcomplete/umount pcomplete/kill) -;;;;;; "pcmpl-linux" "pcmpl-linux.el" (19986 58615)) +;;;;;; "pcmpl-linux" "pcmpl-linux.el" (20229 34587)) ;;; Generated autoloads from pcmpl-linux.el (autoload 'pcomplete/kill "pcmpl-linux" "\ @@ -21653,8 +21857,8 @@ Completion for GNU/Linux `mount'. ;;;*** -;;;### (autoloads (pcomplete/rpm) "pcmpl-rpm" "pcmpl-rpm.el" (19961 -;;;;;; 55377)) +;;;### (autoloads (pcomplete/rpm) "pcmpl-rpm" "pcmpl-rpm.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from pcmpl-rpm.el (autoload 'pcomplete/rpm "pcmpl-rpm" "\ @@ -21666,7 +21870,7 @@ Completion for the `rpm' command. ;;;### (autoloads (pcomplete/scp pcomplete/ssh pcomplete/chgrp pcomplete/chown ;;;;;; pcomplete/which pcomplete/xargs pcomplete/rm pcomplete/rmdir -;;;;;; pcomplete/cd) "pcmpl-unix" "pcmpl-unix.el" (20121 24048)) +;;;;;; pcomplete/cd) "pcmpl-unix" "pcmpl-unix.el" (20259 55615)) ;;; Generated autoloads from pcmpl-unix.el (autoload 'pcomplete/cd "pcmpl-unix" "\ @@ -21723,8 +21927,8 @@ Includes files as well as host names followed by a colon. ;;;### (autoloads (pcomplete-shell-setup pcomplete-comint-setup pcomplete-list ;;;;;; pcomplete-help pcomplete-expand pcomplete-continue pcomplete-expand-and-complete -;;;;;; pcomplete-reverse pcomplete) "pcomplete" "pcomplete.el" (20106 -;;;;;; 17429)) +;;;;;; pcomplete-reverse pcomplete) "pcomplete" "pcomplete.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from pcomplete.el (autoload 'pcomplete "pcomplete" "\ @@ -21783,7 +21987,7 @@ Setup `shell-mode' to use pcomplete. ;;;### (autoloads (cvs-dired-use-hook cvs-dired-action cvs-status ;;;;;; cvs-update cvs-examine cvs-quickdir cvs-checkout) "pcvs" -;;;;;; "vc/pcvs.el" (20187 22214)) +;;;;;; "vc/pcvs.el" (20253 16827)) ;;; Generated autoloads from vc/pcvs.el (autoload 'cvs-checkout "pcvs" "\ @@ -21858,7 +22062,7 @@ The exact behavior is determined also by `cvs-dired-use-hook'." (when (stringp d ;;;*** -;;;### (autoloads nil "pcvs-defs" "vc/pcvs-defs.el" (20174 10230)) +;;;### (autoloads nil "pcvs-defs" "vc/pcvs-defs.el" (20229 34587)) ;;; Generated autoloads from vc/pcvs-defs.el (defvar cvs-global-menu (let ((m (make-sparse-keymap "PCL-CVS"))) (define-key m [status] `(menu-item ,(purecopy "Directory Status") cvs-status :help ,(purecopy "A more verbose status of a workarea"))) (define-key m [checkout] `(menu-item ,(purecopy "Checkout Module") cvs-checkout :help ,(purecopy "Check out a module from the repository"))) (define-key m [update] `(menu-item ,(purecopy "Update Directory") cvs-update :help ,(purecopy "Fetch updates from the repository"))) (define-key m [examine] `(menu-item ,(purecopy "Examine Directory") cvs-examine :help ,(purecopy "Examine the current state of a workarea"))) (fset 'cvs-global-menu m)) "\ @@ -21867,7 +22071,7 @@ Global menu used by PCL-CVS.") ;;;*** ;;;### (autoloads (perl-mode) "perl-mode" "progmodes/perl-mode.el" -;;;;;; (20108 12033)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/perl-mode.el (put 'perl-indent-level 'safe-local-variable 'integerp) (put 'perl-continued-statement-offset 'safe-local-variable 'integerp) @@ -21929,7 +22133,7 @@ Turning on Perl mode runs the normal hook `perl-mode-hook'. ;;;*** ;;;### (autoloads (picture-mode) "picture" "textmodes/picture.el" -;;;;;; (20188 43079)) +;;;;;; (20229 34587)) ;;; Generated autoloads from textmodes/picture.el (autoload 'picture-mode "picture" "\ @@ -22009,8 +22213,8 @@ they are not by default assigned to keys. ;;;*** -;;;### (autoloads (plstore-open) "plstore" "gnus/plstore.el" (20197 -;;;;;; 58064)) +;;;### (autoloads (plstore-open) "plstore" "gnus/plstore.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from gnus/plstore.el (autoload 'plstore-open "plstore" "\ @@ -22021,7 +22225,7 @@ Create a plstore instance associated with FILE. ;;;*** ;;;### (autoloads (po-find-file-coding-system) "po" "textmodes/po.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from textmodes/po.el (autoload 'po-find-file-coding-system "po" "\ @@ -22032,7 +22236,7 @@ Called through `file-coding-system-alist', before the file is visited for real. ;;;*** -;;;### (autoloads (pong) "pong" "play/pong.el" (19845 45374)) +;;;### (autoloads (pong) "pong" "play/pong.el" (20229 34587)) ;;; Generated autoloads from play/pong.el (autoload 'pong "pong" "\ @@ -22048,7 +22252,7 @@ pong-mode keybindings:\\ ;;;*** -;;;### (autoloads (pop3-movemail) "pop3" "gnus/pop3.el" (20178 7273)) +;;;### (autoloads (pop3-movemail) "pop3" "gnus/pop3.el" (20229 34587)) ;;; Generated autoloads from gnus/pop3.el (autoload 'pop3-movemail "pop3" "\ @@ -22061,7 +22265,7 @@ Use streaming commands. ;;;### (autoloads (pp-macroexpand-last-sexp pp-eval-last-sexp pp-macroexpand-expression ;;;;;; pp-eval-expression pp pp-buffer pp-to-string) "pp" "emacs-lisp/pp.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from emacs-lisp/pp.el (autoload 'pp-to-string "pp" "\ @@ -22129,7 +22333,7 @@ Ignores leading comment characters. ;;;;;; pr-ps-buffer-print pr-ps-buffer-using-ghostscript pr-ps-buffer-preview ;;;;;; pr-ps-directory-ps-print pr-ps-directory-print pr-ps-directory-using-ghostscript ;;;;;; pr-ps-directory-preview pr-interface) "printing" "printing.el" -;;;;;; (20201 55112)) +;;;;;; (20229 34587)) ;;; Generated autoloads from printing.el (autoload 'pr-interface "printing" "\ @@ -22716,7 +22920,7 @@ are both set to t. ;;;*** -;;;### (autoloads (proced) "proced" "proced.el" (20197 58064)) +;;;### (autoloads (proced) "proced" "proced.el" (20229 34587)) ;;; Generated autoloads from proced.el (autoload 'proced "proced" "\ @@ -22732,7 +22936,7 @@ See `proced-mode' for a description of features available in Proced buffers. ;;;*** ;;;### (autoloads (run-prolog mercury-mode prolog-mode) "prolog" -;;;;;; "progmodes/prolog.el" (20221 40442)) +;;;;;; "progmodes/prolog.el" (20229 34587)) ;;; Generated autoloads from progmodes/prolog.el (autoload 'prolog-mode "prolog" "\ @@ -22767,8 +22971,8 @@ With prefix argument ARG, restart the Prolog process if running before. ;;;*** -;;;### (autoloads (bdf-directory-list) "ps-bdf" "ps-bdf.el" (19845 -;;;;;; 45374)) +;;;### (autoloads (bdf-directory-list) "ps-bdf" "ps-bdf.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from ps-bdf.el (defvar bdf-directory-list (if (memq system-type '(ms-dos windows-nt)) (list (expand-file-name "fonts/bdf" installation-directory)) '("/usr/local/share/emacs/fonts/bdf")) "\ @@ -22779,8 +22983,8 @@ The default value is '(\"/usr/local/share/emacs/fonts/bdf\").") ;;;*** -;;;### (autoloads (ps-mode) "ps-mode" "progmodes/ps-mode.el" (20167 -;;;;;; 36967)) +;;;### (autoloads (ps-mode) "ps-mode" "progmodes/ps-mode.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from progmodes/ps-mode.el (autoload 'ps-mode "ps-mode" "\ @@ -22831,8 +23035,8 @@ Typing \\\\[ps-run-goto-error] when the cursor is at the number ;;;;;; ps-spool-region ps-spool-buffer-with-faces ps-spool-buffer ;;;;;; ps-print-region-with-faces ps-print-region ps-print-buffer-with-faces ;;;;;; ps-print-buffer ps-print-customize ps-print-color-p ps-paper-type -;;;;;; ps-page-dimensions-database) "ps-print" "ps-print.el" (20222 -;;;;;; 61437)) +;;;;;; ps-page-dimensions-database) "ps-print" "ps-print.el" (20229 +;;;;;; 36386)) ;;; Generated autoloads from ps-print.el (defvar ps-page-dimensions-database (purecopy (list (list 'a4 (/ (* 72 21.0) 2.54) (/ (* 72 29.7) 2.54) "A4") (list 'a3 (/ (* 72 29.7) 2.54) (/ (* 72 42.0) 2.54) "A3") (list 'letter (* 72 8.5) (* 72 11.0) "Letter") (list 'legal (* 72 8.5) (* 72 14.0) "Legal") (list 'letter-small (* 72 7.68) (* 72 10.16) "LetterSmall") (list 'tabloid (* 72 11.0) (* 72 17.0) "Tabloid") (list 'ledger (* 72 17.0) (* 72 11.0) "Ledger") (list 'statement (* 72 5.5) (* 72 8.5) "Statement") (list 'executive (* 72 7.5) (* 72 10.0) "Executive") (list 'a4small (* 72 7.47) (* 72 10.85) "A4Small") (list 'b4 (* 72 10.125) (* 72 14.33) "B4") (list 'b5 (* 72 7.16) (* 72 10.125) "B5") '(addresslarge 236.0 99.0 "AddressLarge") '(addresssmall 236.0 68.0 "AddressSmall") '(cuthanging13 90.0 222.0 "CutHanging13") '(cuthanging15 90.0 114.0 "CutHanging15") '(diskette 181.0 136.0 "Diskette") '(eurofilefolder 139.0 112.0 "EuropeanFilefolder") '(eurofoldernarrow 526.0 107.0 "EuroFolderNarrow") '(eurofolderwide 526.0 136.0 "EuroFolderWide") '(euronamebadge 189.0 108.0 "EuroNameBadge") '(euronamebadgelarge 223.0 136.0 "EuroNameBadgeLarge") '(filefolder 230.0 37.0 "FileFolder") '(jewelry 76.0 136.0 "Jewelry") '(mediabadge 180.0 136.0 "MediaBadge") '(multipurpose 126.0 68.0 "MultiPurpose") '(retaillabel 90.0 104.0 "RetailLabel") '(shipping 271.0 136.0 "Shipping") '(slide35mm 26.0 104.0 "Slide35mm") '(spine8mm 187.0 26.0 "Spine8mm") '(topcoated 425.19685 136.0 "TopCoatedPaper") '(topcoatedpaper 396.0 136.0 "TopcoatedPaper150") '(vhsface 205.0 127.0 "VHSFace") '(vhsspine 400.0 50.0 "VHSSpine") '(zipdisk 156.0 136.0 "ZipDisk"))) "\ @@ -23029,7 +23233,7 @@ If EXTENSION is any other symbol, it is ignored. ;;;*** ;;;### (autoloads (jython-mode python-mode python-after-info-look -;;;;;; run-python) "python" "progmodes/python.el" (20204 31303)) +;;;;;; run-python) "python" "progmodes/python.el" (20261 10951)) ;;; Generated autoloads from progmodes/python.el (add-to-list 'interpreter-mode-alist (cons (purecopy "jython") 'jython-mode)) @@ -23115,7 +23319,7 @@ Runs `jython-mode-hook' after `python-mode-hook'. ;;;*** ;;;### (autoloads (quoted-printable-decode-region) "qp" "gnus/qp.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from gnus/qp.el (autoload 'quoted-printable-decode-region "qp" "\ @@ -23138,7 +23342,7 @@ them into characters should be done separately. ;;;;;; quail-defrule quail-install-decode-map quail-install-map ;;;;;; quail-define-rules quail-show-keyboard-layout quail-set-keyboard-layout ;;;;;; quail-define-package quail-use-package quail-title) "quail" -;;;;;; "international/quail.el" (20201 55112)) +;;;;;; "international/quail.el" (20229 34587)) ;;; Generated autoloads from international/quail.el (autoload 'quail-title "quail" "\ @@ -23369,8 +23573,8 @@ of each directory. ;;;### (autoloads (quickurl-list quickurl-list-mode quickurl-edit-urls ;;;;;; quickurl-browse-url-ask quickurl-browse-url quickurl-add-url -;;;;;; quickurl-ask quickurl) "quickurl" "net/quickurl.el" (20168 -;;;;;; 57844)) +;;;;;; quickurl-ask quickurl) "quickurl" "net/quickurl.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from net/quickurl.el (defconst quickurl-reread-hook-postfix "\n;; Local Variables:\n;; eval: (progn (require 'quickurl) (add-hook 'local-write-file-hooks (lambda () (quickurl-read) nil)))\n;; End:\n" "\ @@ -23442,7 +23646,7 @@ Display `quickurl-list' as a formatted list using `quickurl-list-mode'. ;;;*** ;;;### (autoloads (rcirc-track-minor-mode rcirc-connect rcirc) "rcirc" -;;;;;; "net/rcirc.el" (20170 13157)) +;;;;;; "net/rcirc.el" (20229 34587)) ;;; Generated autoloads from net/rcirc.el (autoload 'rcirc "rcirc" "\ @@ -23477,8 +23681,8 @@ Global minor mode for tracking activity in rcirc buffers. ;;;*** -;;;### (autoloads (remote-compile) "rcompile" "net/rcompile.el" (19845 -;;;;;; 45374)) +;;;### (autoloads (remote-compile) "rcompile" "net/rcompile.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from net/rcompile.el (autoload 'remote-compile "rcompile" "\ @@ -23490,7 +23694,7 @@ See \\[compile]. ;;;*** ;;;### (autoloads (re-builder) "re-builder" "emacs-lisp/re-builder.el" -;;;;;; (19975 1875)) +;;;;;; (20229 34587)) ;;; Generated autoloads from emacs-lisp/re-builder.el (defalias 'regexp-builder 're-builder) @@ -23508,7 +23712,7 @@ matching parts of the target buffer will be highlighted. ;;;*** -;;;### (autoloads (recentf-mode) "recentf" "recentf.el" (20167 36967)) +;;;### (autoloads (recentf-mode) "recentf" "recentf.el" (20229 34587)) ;;; Generated autoloads from recentf.el (defvar recentf-mode nil "\ @@ -23538,7 +23742,7 @@ were operated on recently. ;;;;;; string-rectangle delete-whitespace-rectangle open-rectangle ;;;;;; insert-rectangle yank-rectangle kill-rectangle extract-rectangle ;;;;;; delete-extract-rectangle delete-rectangle) "rect" "rect.el" -;;;;;; (19999 41597)) +;;;;;; (20229 34587)) ;;; Generated autoloads from rect.el (define-key ctl-x-r-map "c" 'clear-rectangle) (define-key ctl-x-r-map "k" 'kill-rectangle) @@ -23674,8 +23878,8 @@ with a prefix argument, prompt for START-AT and FORMAT. ;;;*** -;;;### (autoloads (refill-mode) "refill" "textmodes/refill.el" (20127 -;;;;;; 62865)) +;;;### (autoloads (refill-mode) "refill" "textmodes/refill.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from textmodes/refill.el (autoload 'refill-mode "refill" "\ @@ -23696,7 +23900,7 @@ For true \"word wrap\" behavior, use `visual-line-mode' instead. ;;;*** ;;;### (autoloads (reftex-reset-scanning-information reftex-mode -;;;;;; turn-on-reftex) "reftex" "textmodes/reftex.el" (20164 60780)) +;;;;;; turn-on-reftex) "reftex" "textmodes/reftex.el" (20229 34587)) ;;; Generated autoloads from textmodes/reftex.el (autoload 'turn-on-reftex "reftex" "\ @@ -23752,7 +23956,7 @@ This enforces rescanning the buffer on next use. ;;;*** ;;;### (autoloads (reftex-citation) "reftex-cite" "textmodes/reftex-cite.el" -;;;;;; (20168 57844)) +;;;;;; (20229 34587)) ;;; Generated autoloads from textmodes/reftex-cite.el (autoload 'reftex-citation "reftex-cite" "\ @@ -23782,7 +23986,7 @@ While entering the regexp, completion on knows citation keys is possible. ;;;*** ;;;### (autoloads (reftex-isearch-minor-mode) "reftex-global" "textmodes/reftex-global.el" -;;;;;; (20164 60780)) +;;;;;; (20229 34587)) ;;; Generated autoloads from textmodes/reftex-global.el (autoload 'reftex-isearch-minor-mode "reftex-global" "\ @@ -23799,7 +24003,7 @@ With no argument, this command toggles ;;;*** ;;;### (autoloads (reftex-index-phrases-mode) "reftex-index" "textmodes/reftex-index.el" -;;;;;; (20162 63140)) +;;;;;; (20229 34587)) ;;; Generated autoloads from textmodes/reftex-index.el (autoload 'reftex-index-phrases-mode "reftex-index" "\ @@ -23832,7 +24036,7 @@ Here are all local bindings. ;;;*** ;;;### (autoloads (reftex-all-document-files) "reftex-parse" "textmodes/reftex-parse.el" -;;;;;; (20161 45793)) +;;;;;; (20229 34587)) ;;; Generated autoloads from textmodes/reftex-parse.el (autoload 'reftex-all-document-files "reftex-parse" "\ @@ -23844,8 +24048,8 @@ of master file. ;;;*** -;;;### (autoloads nil "reftex-vars" "textmodes/reftex-vars.el" (20221 -;;;;;; 40442)) +;;;### (autoloads nil "reftex-vars" "textmodes/reftex-vars.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from textmodes/reftex-vars.el (put 'reftex-vref-is-default 'safe-local-variable (lambda (x) (or (stringp x) (symbolp x)))) (put 'reftex-fref-is-default 'safe-local-variable (lambda (x) (or (stringp x) (symbolp x)))) @@ -23855,7 +24059,7 @@ of master file. ;;;*** ;;;### (autoloads (regexp-opt-depth regexp-opt) "regexp-opt" "emacs-lisp/regexp-opt.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from emacs-lisp/regexp-opt.el (autoload 'regexp-opt "regexp-opt" "\ @@ -23886,7 +24090,7 @@ This means the number of non-shy regexp grouping constructs ;;;### (autoloads (remember-diary-extract-entries remember-clipboard ;;;;;; remember-other-frame remember) "remember" "textmodes/remember.el" -;;;;;; (20209 49217)) +;;;;;; (20229 34587)) ;;; Generated autoloads from textmodes/remember.el (autoload 'remember "remember" "\ @@ -23917,7 +24121,7 @@ Extract diary entries from the region. ;;;*** -;;;### (autoloads (repeat) "repeat" "repeat.el" (20172 54913)) +;;;### (autoloads (repeat) "repeat" "repeat.el" (20229 34587)) ;;; Generated autoloads from repeat.el (autoload 'repeat "repeat" "\ @@ -23940,7 +24144,7 @@ recently executed command not bound to an input event\". ;;;*** ;;;### (autoloads (reporter-submit-bug-report) "reporter" "mail/reporter.el" -;;;;;; (20076 35541)) +;;;;;; (20229 34587)) ;;; Generated autoloads from mail/reporter.el (autoload 'reporter-submit-bug-report "reporter" "\ @@ -23972,7 +24176,7 @@ mail-sending package is used for editing and sending the message. ;;;*** ;;;### (autoloads (reposition-window) "reposition" "reposition.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from reposition.el (autoload 'reposition-window "reposition" "\ @@ -23999,7 +24203,7 @@ first comment line visible (if point is in a comment). ;;;*** ;;;### (autoloads (global-reveal-mode reveal-mode) "reveal" "reveal.el" -;;;;;; (20207 7484)) +;;;;;; (20229 34587)) ;;; Generated autoloads from reveal.el (autoload 'reveal-mode "reveal" "\ @@ -24035,7 +24239,7 @@ the mode if ARG is omitted or nil. ;;;*** ;;;### (autoloads (make-ring ring-p) "ring" "emacs-lisp/ring.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from emacs-lisp/ring.el (autoload 'ring-p "ring" "\ @@ -24050,7 +24254,7 @@ Make a ring that can contain SIZE elements. ;;;*** -;;;### (autoloads (rlogin) "rlogin" "net/rlogin.el" (20077 56412)) +;;;### (autoloads (rlogin) "rlogin" "net/rlogin.el" (20229 34587)) ;;; Generated autoloads from net/rlogin.el (autoload 'rlogin "rlogin" "\ @@ -24099,7 +24303,7 @@ variable. ;;;;;; rmail-secondary-file-directory rmail-primary-inbox-list rmail-highlighted-headers ;;;;;; rmail-retry-ignored-headers rmail-displayed-headers rmail-ignored-headers ;;;;;; rmail-user-mail-address-regexp rmail-movemail-variant-p) -;;;;;; "rmail" "mail/rmail.el" (20222 61246)) +;;;;;; "rmail" "mail/rmail.el" (20259 55615)) ;;; Generated autoloads from mail/rmail.el (autoload 'rmail-movemail-variant-p "rmail" "\ @@ -24283,7 +24487,7 @@ Set PASSWORD to be used for retrieving mail from a POP or IMAP server. ;;;*** ;;;### (autoloads (rmail-output-body-to-file rmail-output-as-seen -;;;;;; rmail-output) "rmailout" "mail/rmailout.el" (20172 54913)) +;;;;;; rmail-output) "rmailout" "mail/rmailout.el" (20229 34587)) ;;; Generated autoloads from mail/rmailout.el (put 'rmail-output-file-alist 'risky-local-variable t) @@ -24348,7 +24552,7 @@ than appending to it. Deletes the message after writing if ;;;*** ;;;### (autoloads (rng-c-load-schema) "rng-cmpct" "nxml/rng-cmpct.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from nxml/rng-cmpct.el (autoload 'rng-c-load-schema "rng-cmpct" "\ @@ -24360,7 +24564,7 @@ Return a pattern. ;;;*** ;;;### (autoloads (rng-nxml-mode-init) "rng-nxml" "nxml/rng-nxml.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from nxml/rng-nxml.el (autoload 'rng-nxml-mode-init "rng-nxml" "\ @@ -24373,7 +24577,7 @@ Validation will be enabled if `rng-nxml-auto-validate-flag' is non-nil. ;;;*** ;;;### (autoloads (rng-validate-mode) "rng-valid" "nxml/rng-valid.el" -;;;;;; (20221 40442)) +;;;;;; (20229 34587)) ;;; Generated autoloads from nxml/rng-valid.el (autoload 'rng-validate-mode "rng-valid" "\ @@ -24403,8 +24607,8 @@ to use for finding the schema. ;;;*** -;;;### (autoloads (rng-xsd-compile) "rng-xsd" "nxml/rng-xsd.el" (19930 -;;;;;; 13389)) +;;;### (autoloads (rng-xsd-compile) "rng-xsd" "nxml/rng-xsd.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from nxml/rng-xsd.el (put 'http://www\.w3\.org/2001/XMLSchema-datatypes 'rng-dt-compile 'rng-xsd-compile) @@ -24465,7 +24669,7 @@ Start using robin package NAME, which is a string. ;;;*** ;;;### (autoloads (toggle-rot13-mode rot13-other-window rot13-region -;;;;;; rot13-string rot13) "rot13" "rot13.el" (20154 24929)) +;;;;;; rot13-string rot13) "rot13" "rot13.el" (20229 34587)) ;;; Generated autoloads from rot13.el (autoload 'rot13 "rot13" "\ @@ -24503,7 +24707,7 @@ Toggle the use of ROT13 encoding for the current window. ;;;*** ;;;### (autoloads (rst-minor-mode rst-mode) "rst" "textmodes/rst.el" -;;;;;; (20221 40442)) +;;;;;; (20229 34587)) ;;; Generated autoloads from textmodes/rst.el (add-to-list 'auto-mode-alist (purecopy '("\\.re?st\\'" . rst-mode))) @@ -24540,7 +24744,7 @@ for modes derived from Text mode, like Mail mode. ;;;*** ;;;### (autoloads (ruby-mode) "ruby-mode" "progmodes/ruby-mode.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/ruby-mode.el (autoload 'ruby-mode "ruby-mode" "\ @@ -24561,8 +24765,8 @@ The variable `ruby-indent-level' controls the amount of indentation. ;;;*** -;;;### (autoloads (ruler-mode) "ruler-mode" "ruler-mode.el" (20127 -;;;;;; 62865)) +;;;### (autoloads (ruler-mode) "ruler-mode" "ruler-mode.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from ruler-mode.el (defvar ruler-mode nil "\ @@ -24579,8 +24783,8 @@ if ARG is omitted or nil. ;;;*** -;;;### (autoloads (rx rx-to-string) "rx" "emacs-lisp/rx.el" (20161 -;;;;;; 45793)) +;;;### (autoloads (rx rx-to-string) "rx" "emacs-lisp/rx.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from emacs-lisp/rx.el (autoload 'rx-to-string "rx" "\ @@ -24891,8 +25095,8 @@ enclosed in `(and ...)'. ;;;*** -;;;### (autoloads (savehist-mode) "savehist" "savehist.el" (20127 -;;;;;; 62865)) +;;;### (autoloads (savehist-mode) "savehist" "savehist.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from savehist.el (defvar savehist-mode nil "\ @@ -24924,7 +25128,7 @@ histories, which is probably undesirable. ;;;*** ;;;### (autoloads (dsssl-mode scheme-mode) "scheme" "progmodes/scheme.el" -;;;;;; (20079 39251)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/scheme.el (autoload 'scheme-mode "scheme" "\ @@ -24966,7 +25170,7 @@ that variable's value is a string. ;;;*** ;;;### (autoloads (gnus-score-mode) "score-mode" "gnus/score-mode.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from gnus/score-mode.el (autoload 'gnus-score-mode "score-mode" "\ @@ -24980,7 +25184,7 @@ This mode is an extended emacs-lisp mode. ;;;*** ;;;### (autoloads (scroll-all-mode) "scroll-all" "scroll-all.el" -;;;;;; (20127 62865)) +;;;;;; (20229 34587)) ;;; Generated autoloads from scroll-all.el (defvar scroll-all-mode nil "\ @@ -25006,7 +25210,7 @@ one window apply to all visible windows in the same frame. ;;;*** ;;;### (autoloads (scroll-lock-mode) "scroll-lock" "scroll-lock.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from scroll-lock.el (autoload 'scroll-lock-mode "scroll-lock" "\ @@ -25020,7 +25224,7 @@ during scrolling. ;;;*** -;;;### (autoloads nil "secrets" "net/secrets.el" (20175 31160)) +;;;### (autoloads nil "secrets" "net/secrets.el" (20229 34587)) ;;; Generated autoloads from net/secrets.el (when (featurep 'dbusbind) (autoload 'secrets-show-secrets "secrets" nil t)) @@ -25028,7 +25232,7 @@ during scrolling. ;;;*** ;;;### (autoloads (semantic-mode semantic-default-submodes) "semantic" -;;;;;; "cedet/semantic.el" (20187 22214)) +;;;;;; "cedet/semantic.el" (20229 34587)) ;;; Generated autoloads from cedet/semantic.el (defvar semantic-default-submodes '(global-semantic-idle-scheduler-mode global-semanticdb-minor-mode) "\ @@ -25082,7 +25286,7 @@ Semantic mode. ;;;;;; mail-personal-alias-file mail-default-reply-to mail-archive-file-name ;;;;;; mail-header-separator send-mail-function mail-interactive ;;;;;; mail-self-blind mail-specify-envelope-from mail-from-style) -;;;;;; "sendmail" "mail/sendmail.el" (20122 44898)) +;;;;;; "sendmail" "mail/sendmail.el" (20238 49468)) ;;; Generated autoloads from mail/sendmail.el (defvar mail-from-style 'default "\ @@ -25364,8 +25568,8 @@ Like `mail' command, but display mail buffer in another frame. ;;;*** ;;;### (autoloads (server-save-buffers-kill-terminal server-mode -;;;;;; server-force-delete server-start) "server" "server.el" (20188 -;;;;;; 43079)) +;;;;;; server-force-delete server-start) "server" "server.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from server.el (put 'server-host 'risky-local-variable t) @@ -25432,7 +25636,7 @@ only these files will be asked to be saved. ;;;*** -;;;### (autoloads (ses-mode) "ses" "ses.el" (20207 7484)) +;;;### (autoloads (ses-mode) "ses" "ses.el" (20229 34587)) ;;; Generated autoloads from ses.el (autoload 'ses-mode "ses" "\ @@ -25451,7 +25655,7 @@ These are active only in the minibuffer, when entering or editing a formula: ;;;*** ;;;### (autoloads (html-mode sgml-mode) "sgml-mode" "textmodes/sgml-mode.el" -;;;;;; (20167 36967)) +;;;;;; (20229 34587)) ;;; Generated autoloads from textmodes/sgml-mode.el (autoload 'sgml-mode "sgml-mode" "\ @@ -25517,7 +25721,7 @@ To work around that, do: ;;;*** ;;;### (autoloads (sh-mode) "sh-script" "progmodes/sh-script.el" -;;;;;; (20168 57844)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/sh-script.el (put 'sh-shell 'safe-local-variable 'symbolp) @@ -25582,7 +25786,7 @@ with your script for an edit-interpret-debug cycle. ;;;*** ;;;### (autoloads (list-load-path-shadows) "shadow" "emacs-lisp/shadow.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from emacs-lisp/shadow.el (autoload 'list-load-path-shadows "shadow" "\ @@ -25632,8 +25836,8 @@ function, `load-path-shadows-find'. ;;;*** ;;;### (autoloads (shadow-initialize shadow-define-regexp-group shadow-define-literal-group -;;;;;; shadow-define-cluster) "shadowfile" "shadowfile.el" (19886 -;;;;;; 45771)) +;;;;;; shadow-define-cluster) "shadowfile" "shadowfile.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from shadowfile.el (autoload 'shadow-define-cluster "shadowfile" "\ @@ -25672,7 +25876,7 @@ Set up file shadowing. ;;;*** ;;;### (autoloads (shell shell-dumb-shell-regexp) "shell" "shell.el" -;;;;;; (20197 58064)) +;;;;;; (20230 13182)) ;;; Generated autoloads from shell.el (defvar shell-dumb-shell-regexp (purecopy "cmd\\(proxy\\)?\\.exe") "\ @@ -25720,8 +25924,8 @@ Otherwise, one argument `-i' is passed to the shell. ;;;*** -;;;### (autoloads (shr-insert-document) "shr" "gnus/shr.el" (20172 -;;;;;; 54913)) +;;;### (autoloads (shr-insert-document) "shr" "gnus/shr.el" (20259 +;;;;;; 55615)) ;;; Generated autoloads from gnus/shr.el (autoload 'shr-insert-document "shr" "\ @@ -25732,7 +25936,7 @@ Otherwise, one argument `-i' is passed to the shell. ;;;*** ;;;### (autoloads (sieve-upload-and-bury sieve-upload sieve-manage) -;;;;;; "sieve" "gnus/sieve.el" (20165 31925)) +;;;;;; "sieve" "gnus/sieve.el" (20229 34587)) ;;; Generated autoloads from gnus/sieve.el (autoload 'sieve-manage "sieve" "\ @@ -25753,7 +25957,7 @@ Otherwise, one argument `-i' is passed to the shell. ;;;*** ;;;### (autoloads (sieve-mode) "sieve-mode" "gnus/sieve-mode.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from gnus/sieve-mode.el (autoload 'sieve-mode "sieve-mode" "\ @@ -25768,8 +25972,8 @@ Turning on Sieve mode runs `sieve-mode-hook'. ;;;*** -;;;### (autoloads (simula-mode) "simula" "progmodes/simula.el" (19890 -;;;;;; 42850)) +;;;### (autoloads (simula-mode) "simula" "progmodes/simula.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from progmodes/simula.el (autoload 'simula-mode "simula" "\ @@ -25818,7 +26022,7 @@ with no arguments, if that value is non-nil. ;;;*** ;;;### (autoloads (skeleton-pair-insert-maybe skeleton-insert skeleton-proxy-new -;;;;;; define-skeleton) "skeleton" "skeleton.el" (19845 45374)) +;;;;;; define-skeleton) "skeleton" "skeleton.el" (20229 34587)) ;;; Generated autoloads from skeleton.el (defvar skeleton-filter-function 'identity "\ @@ -25928,7 +26132,7 @@ symmetrical ones, and the same character twice for the others. ;;;*** ;;;### (autoloads (smerge-start-session smerge-mode smerge-ediff) -;;;;;; "smerge-mode" "vc/smerge-mode.el" (19946 1612)) +;;;;;; "smerge-mode" "vc/smerge-mode.el" (20229 34587)) ;;; Generated autoloads from vc/smerge-mode.el (autoload 'smerge-ediff "smerge-mode" "\ @@ -25953,7 +26157,7 @@ If no conflict maker is found, turn off `smerge-mode'. ;;;*** ;;;### (autoloads (smiley-buffer smiley-region) "smiley" "gnus/smiley.el" -;;;;;; (19939 28373)) +;;;;;; (20229 34587)) ;;; Generated autoloads from gnus/smiley.el (autoload 'smiley-region "smiley" "\ @@ -25971,7 +26175,7 @@ interactively. If there's no argument, do it at the current buffer. ;;;*** ;;;### (autoloads (smtpmail-send-queued-mail smtpmail-send-it) "smtpmail" -;;;;;; "mail/smtpmail.el" (20168 57844)) +;;;;;; "mail/smtpmail.el" (20232 10689)) ;;; Generated autoloads from mail/smtpmail.el (autoload 'smtpmail-send-it "smtpmail" "\ @@ -25986,7 +26190,7 @@ Send mail that was queued as a result of setting `smtpmail-queue-mail'. ;;;*** -;;;### (autoloads (snake) "snake" "play/snake.el" (19845 45374)) +;;;### (autoloads (snake) "snake" "play/snake.el" (20229 34587)) ;;; Generated autoloads from play/snake.el (autoload 'snake "snake" "\ @@ -26010,7 +26214,7 @@ Snake mode keybindings: ;;;*** ;;;### (autoloads (snmpv2-mode snmp-mode) "snmp-mode" "net/snmp-mode.el" -;;;;;; (20161 45793)) +;;;;;; (20229 34587)) ;;; Generated autoloads from net/snmp-mode.el (autoload 'snmp-mode "snmp-mode" "\ @@ -26039,8 +26243,8 @@ then `snmpv2-mode-hook'. ;;;*** -;;;### (autoloads (sunrise-sunset) "solar" "calendar/solar.el" (20188 -;;;;;; 43079)) +;;;### (autoloads (sunrise-sunset) "solar" "calendar/solar.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from calendar/solar.el (autoload 'sunrise-sunset "solar" "\ @@ -26055,8 +26259,8 @@ This function is suitable for execution in a .emacs file. ;;;*** -;;;### (autoloads (solitaire) "solitaire" "play/solitaire.el" (20165 -;;;;;; 31925)) +;;;### (autoloads (solitaire) "solitaire" "play/solitaire.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from play/solitaire.el (autoload 'solitaire "solitaire" "\ @@ -26133,7 +26337,7 @@ Pick your favorite shortcuts: ;;;### (autoloads (reverse-region sort-columns sort-regexp-fields ;;;;;; sort-fields sort-numeric-fields sort-pages sort-paragraphs -;;;;;; sort-lines sort-subr) "sort" "sort.el" (19845 45374)) +;;;;;; sort-lines sort-subr) "sort" "sort.el" (20229 34587)) ;;; Generated autoloads from sort.el (put 'sort-fold-case 'safe-local-variable 'booleanp) @@ -26277,8 +26481,8 @@ From a program takes two point or marker arguments, BEG and END. ;;;*** -;;;### (autoloads (spam-initialize) "spam" "gnus/spam.el" (20167 -;;;;;; 36967)) +;;;### (autoloads (spam-initialize) "spam" "gnus/spam.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from gnus/spam.el (autoload 'spam-initialize "spam" "\ @@ -26294,7 +26498,7 @@ installed through `spam-necessary-extra-headers'. ;;;### (autoloads (spam-report-deagentize spam-report-agentize spam-report-url-to-file ;;;;;; spam-report-url-ping-mm-url spam-report-process-queue) "spam-report" -;;;;;; "gnus/spam-report.el" (20166 16092)) +;;;;;; "gnus/spam-report.el" (20229 34587)) ;;; Generated autoloads from gnus/spam-report.el (autoload 'spam-report-process-queue "spam-report" "\ @@ -26337,7 +26541,7 @@ Spam reports will be queued with the method used when ;;;*** ;;;### (autoloads (speedbar-get-focus speedbar-frame-mode) "speedbar" -;;;;;; "speedbar.el" (20221 40442)) +;;;;;; "speedbar.el" (20229 34587)) ;;; Generated autoloads from speedbar.el (defalias 'speedbar 'speedbar-frame-mode) @@ -26361,8 +26565,8 @@ selected. If the speedbar frame is active, then select the attached frame. ;;;*** -;;;### (autoloads (snarf-spooks spook) "spook" "play/spook.el" (19845 -;;;;;; 45374)) +;;;### (autoloads (snarf-spooks spook) "spook" "play/spook.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from play/spook.el (autoload 'spook "spook" "\ @@ -26381,7 +26585,7 @@ Return a vector containing the lines from `spook-phrases-file'. ;;;;;; sql-ms sql-ingres sql-solid sql-mysql sql-sqlite sql-informix ;;;;;; sql-sybase sql-oracle sql-product-interactive sql-connect ;;;;;; sql-mode sql-help sql-add-product-keywords) "sql" "progmodes/sql.el" -;;;;;; (20207 7484)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/sql.el (autoload 'sql-add-product-keywords "sql" "\ @@ -26877,7 +27081,7 @@ buffer. ;;;*** ;;;### (autoloads (srecode-template-mode) "srecode/srt-mode" "cedet/srecode/srt-mode.el" -;;;;;; (20197 58064)) +;;;;;; (20229 34587)) ;;; Generated autoloads from cedet/srecode/srt-mode.el (autoload 'srecode-template-mode "srecode/srt-mode" "\ @@ -26890,7 +27094,7 @@ Major-mode for writing SRecode macros. ;;;*** ;;;### (autoloads (starttls-open-stream) "starttls" "gnus/starttls.el" -;;;;;; (20175 31160)) +;;;;;; (20229 34587)) ;;; Generated autoloads from gnus/starttls.el (autoload 'starttls-open-stream "starttls" "\ @@ -26917,8 +27121,8 @@ GnuTLS requires a port number. ;;;;;; strokes-mode strokes-list-strokes strokes-load-user-strokes ;;;;;; strokes-help strokes-describe-stroke strokes-do-complex-stroke ;;;;;; strokes-do-stroke strokes-read-complex-stroke strokes-read-stroke -;;;;;; strokes-global-set-stroke) "strokes" "strokes.el" (20127 -;;;;;; 62865)) +;;;;;; strokes-global-set-stroke) "strokes" "strokes.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from strokes.el (autoload 'strokes-global-set-stroke "strokes" "\ @@ -27053,7 +27257,7 @@ Studlify-case the current buffer. ;;;*** ;;;### (autoloads (global-subword-mode subword-mode) "subword" "progmodes/subword.el" -;;;;;; (20127 62865)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/subword.el (autoload 'subword-mode "subword" "\ @@ -27109,7 +27313,7 @@ See `subword-mode' for more information on Subword mode. ;;;*** ;;;### (autoloads (sc-cite-original) "supercite" "mail/supercite.el" -;;;;;; (19931 11784)) +;;;;;; (20229 34587)) ;;; Generated autoloads from mail/supercite.el (autoload 'sc-cite-original "supercite" "\ @@ -27141,8 +27345,8 @@ and `sc-post-hook' is run after the guts of this function. ;;;*** -;;;### (autoloads (gpm-mouse-mode) "t-mouse" "t-mouse.el" (20127 -;;;;;; 62865)) +;;;### (autoloads (gpm-mouse-mode) "t-mouse" "t-mouse.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from t-mouse.el (define-obsolete-function-alias 't-mouse-mode 'gpm-mouse-mode "23.1") @@ -27170,7 +27374,7 @@ It relies on the `gpm' daemon being activated. ;;;*** -;;;### (autoloads (tabify untabify) "tabify" "tabify.el" (19998 49767)) +;;;### (autoloads (tabify untabify) "tabify" "tabify.el" (20229 34587)) ;;; Generated autoloads from tabify.el (autoload 'untabify "tabify" "\ @@ -27205,7 +27409,7 @@ The variable `tab-width' controls the spacing of tab stops. ;;;;;; table-recognize table-insert-row-column table-insert-column ;;;;;; table-insert-row table-insert table-point-left-cell-hook ;;;;;; table-point-entered-cell-hook table-load-hook table-cell-map-hook) -;;;;;; "table" "textmodes/table.el" (20189 63932)) +;;;;;; "table" "textmodes/table.el" (20229 34587)) ;;; Generated autoloads from textmodes/table.el (defvar table-cell-map-hook nil "\ @@ -27794,7 +27998,7 @@ converts a table into plain text without frames. It is a companion to ;;;*** ;;;### (autoloads (tabulated-list-mode) "tabulated-list" "emacs-lisp/tabulated-list.el" -;;;;;; (20170 13157)) +;;;;;; (20257 13883)) ;;; Generated autoloads from emacs-lisp/tabulated-list.el (autoload 'tabulated-list-mode "tabulated-list" "\ @@ -27836,7 +28040,7 @@ as the ewoc pretty-printer. ;;;*** -;;;### (autoloads (talk talk-connect) "talk" "talk.el" (20141 9296)) +;;;### (autoloads (talk talk-connect) "talk" "talk.el" (20229 34587)) ;;; Generated autoloads from talk.el (autoload 'talk-connect "talk" "\ @@ -27851,7 +28055,7 @@ Connect to the Emacs talk group from the current X display or tty frame. ;;;*** -;;;### (autoloads (tar-mode) "tar-mode" "tar-mode.el" (20161 45793)) +;;;### (autoloads (tar-mode) "tar-mode" "tar-mode.el" (20229 34587)) ;;; Generated autoloads from tar-mode.el (autoload 'tar-mode "tar-mode" "\ @@ -27875,7 +28079,7 @@ See also: variables `tar-update-datestamp' and `tar-anal-blocksize'. ;;;*** ;;;### (autoloads (tcl-help-on-word inferior-tcl tcl-mode) "tcl" -;;;;;; "progmodes/tcl.el" (20164 29468)) +;;;;;; "progmodes/tcl.el" (20229 34587)) ;;; Generated autoloads from progmodes/tcl.el (autoload 'tcl-mode "tcl" "\ @@ -27923,7 +28127,7 @@ Prefix argument means invert sense of `tcl-use-smart-word-finder'. ;;;*** -;;;### (autoloads (rsh telnet) "telnet" "net/telnet.el" (20077 56412)) +;;;### (autoloads (rsh telnet) "telnet" "net/telnet.el" (20229 34587)) ;;; Generated autoloads from net/telnet.el (autoload 'telnet "telnet" "\ @@ -27949,7 +28153,7 @@ Normally input is edited in Emacs and sent a line at a time. ;;;*** ;;;### (autoloads (serial-term ansi-term term make-term) "term" "term.el" -;;;;;; (20209 49217)) +;;;;;; (20256 47696)) ;;; Generated autoloads from term.el (autoload 'make-term "term" "\ @@ -27991,8 +28195,8 @@ use in that buffer. ;;;*** -;;;### (autoloads (terminal-emulator) "terminal" "terminal.el" (20167 -;;;;;; 36967)) +;;;### (autoloads (terminal-emulator) "terminal" "terminal.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from terminal.el (autoload 'terminal-emulator "terminal" "\ @@ -28029,7 +28233,7 @@ subprocess started. ;;;*** ;;;### (autoloads (testcover-this-defun) "testcover" "emacs-lisp/testcover.el" -;;;;;; (20172 54913)) +;;;;;; (20229 34587)) ;;; Generated autoloads from emacs-lisp/testcover.el (autoload 'testcover-this-defun "testcover" "\ @@ -28039,7 +28243,7 @@ Start coverage on function under point. ;;;*** -;;;### (autoloads (tetris) "tetris" "play/tetris.el" (19889 21967)) +;;;### (autoloads (tetris) "tetris" "play/tetris.el" (20229 34587)) ;;; Generated autoloads from play/tetris.el (autoload 'tetris "tetris" "\ @@ -28070,7 +28274,7 @@ tetris-mode keybindings: ;;;;;; tex-start-commands tex-start-options slitex-run-command latex-run-command ;;;;;; tex-run-command tex-offer-save tex-main-file tex-first-line-header-regexp ;;;;;; tex-directory tex-shell-file-name) "tex-mode" "textmodes/tex-mode.el" -;;;;;; (20178 7273)) +;;;;;; (20229 34587)) ;;; Generated autoloads from textmodes/tex-mode.el (defvar tex-shell-file-name nil "\ @@ -28372,7 +28576,7 @@ Major mode to edit DocTeX files. ;;;*** ;;;### (autoloads (texi2info texinfo-format-region texinfo-format-buffer) -;;;;;; "texinfmt" "textmodes/texinfmt.el" (20187 22214)) +;;;;;; "texinfmt" "textmodes/texinfmt.el" (20229 34587)) ;;; Generated autoloads from textmodes/texinfmt.el (autoload 'texinfo-format-buffer "texinfmt" "\ @@ -28412,7 +28616,7 @@ if large. You can use `Info-split' to do this manually. ;;;*** ;;;### (autoloads (texinfo-mode texinfo-close-quote texinfo-open-quote) -;;;;;; "texinfo" "textmodes/texinfo.el" (19845 45374)) +;;;;;; "texinfo" "textmodes/texinfo.el" (20229 34587)) ;;; Generated autoloads from textmodes/texinfo.el (defvar texinfo-open-quote (purecopy "``") "\ @@ -28498,7 +28702,7 @@ value of `texinfo-mode-hook'. ;;;### (autoloads (thai-composition-function thai-compose-buffer ;;;;;; thai-compose-string thai-compose-region) "thai-util" "language/thai-util.el" -;;;;;; (20168 57844)) +;;;;;; (20229 34587)) ;;; Generated autoloads from language/thai-util.el (autoload 'thai-compose-region "thai-util" "\ @@ -28527,7 +28731,7 @@ Compose Thai characters in the current buffer. ;;;### (autoloads (list-at-point number-at-point symbol-at-point ;;;;;; sexp-at-point thing-at-point bounds-of-thing-at-point forward-thing) -;;;;;; "thingatpt" "thingatpt.el" (19990 55648)) +;;;;;; "thingatpt" "thingatpt.el" (20229 34587)) ;;; Generated autoloads from thingatpt.el (autoload 'forward-thing "thingatpt" "\ @@ -28590,7 +28794,7 @@ Return the Lisp list at point, or nil if none is found. ;;;### (autoloads (thumbs-dired-setroot thumbs-dired-show thumbs-dired-show-marked ;;;;;; thumbs-show-from-dir thumbs-find-thumb) "thumbs" "thumbs.el" -;;;;;; (20168 57844)) +;;;;;; (20229 34587)) ;;; Generated autoloads from thumbs.el (autoload 'thumbs-find-thumb "thumbs" "\ @@ -28628,8 +28832,8 @@ In dired, call the setroot program on the image at point. ;;;;;; tibetan-post-read-conversion tibetan-compose-buffer tibetan-decompose-buffer ;;;;;; tibetan-decompose-string tibetan-decompose-region tibetan-compose-region ;;;;;; tibetan-compose-string tibetan-transcription-to-tibetan tibetan-tibetan-to-transcription -;;;;;; tibetan-char-p) "tibet-util" "language/tibet-util.el" (20175 -;;;;;; 31160)) +;;;;;; tibetan-char-p) "tibet-util" "language/tibet-util.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from language/tibet-util.el (autoload 'tibetan-char-p "tibet-util" "\ @@ -28703,7 +28907,7 @@ See also docstring of the function tibetan-compose-region. ;;;*** ;;;### (autoloads (tildify-buffer tildify-region) "tildify" "textmodes/tildify.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from textmodes/tildify.el (autoload 'tildify-region "tildify" "\ @@ -28728,7 +28932,7 @@ This function performs no refilling of the changed text. ;;;### (autoloads (emacs-init-time emacs-uptime display-time-world ;;;;;; display-time-mode display-time display-time-day-and-date) -;;;;;; "time" "time.el" (20187 22214)) +;;;;;; "time" "time.el" (20230 55355)) ;;; Generated autoloads from time.el (defvar display-time-day-and-date nil "\ @@ -28794,7 +28998,7 @@ Return a string giving the duration of the Emacs initialization. ;;;;;; time-to-day-in-year date-leap-year-p days-between date-to-day ;;;;;; time-add time-subtract time-since days-to-time time-less-p ;;;;;; seconds-to-time date-to-time) "time-date" "calendar/time-date.el" -;;;;;; (19885 24894)) +;;;;;; (20229 34587)) ;;; Generated autoloads from calendar/time-date.el (autoload 'date-to-time "time-date" "\ @@ -28908,7 +29112,7 @@ This function does not work for SECONDS greater than `most-positive-fixnum'. ;;;*** ;;;### (autoloads (time-stamp-toggle-active time-stamp) "time-stamp" -;;;;;; "time-stamp.el" (20033 22846)) +;;;;;; "time-stamp.el" (20229 34587)) ;;; Generated autoloads from time-stamp.el (put 'time-stamp-format 'safe-local-variable 'stringp) (put 'time-stamp-time-zone 'safe-local-variable 'string-or-null-p) @@ -28952,7 +29156,7 @@ With ARG, turn time stamping on if and only if arg is positive. ;;;;;; timeclock-workday-remaining-string timeclock-reread-log timeclock-query-out ;;;;;; timeclock-change timeclock-status-string timeclock-out timeclock-in ;;;;;; timeclock-modeline-display) "timeclock" "calendar/timeclock.el" -;;;;;; (20165 31925)) +;;;;;; (20229 34587)) ;;; Generated autoloads from calendar/timeclock.el (autoload 'timeclock-modeline-display "timeclock" "\ @@ -29052,7 +29256,7 @@ relative only to the time worked today, and not to past time. ;;;*** ;;;### (autoloads (batch-titdic-convert titdic-convert) "titdic-cnv" -;;;;;; "international/titdic-cnv.el" (20201 55112)) +;;;;;; "international/titdic-cnv.el" (20229 34587)) ;;; Generated autoloads from international/titdic-cnv.el (autoload 'titdic-convert "titdic-cnv" "\ @@ -29075,7 +29279,7 @@ To get complete usage, invoke \"emacs -batch -f batch-titdic-convert -h\". ;;;*** ;;;### (autoloads (tmm-prompt tmm-menubar-mouse tmm-menubar) "tmm" -;;;;;; "tmm.el" (20163 39903)) +;;;;;; "tmm.el" (20229 34587)) ;;; Generated autoloads from tmm.el (define-key global-map "\M-`" 'tmm-menubar) (define-key global-map [menu-bar mouse-1] 'tmm-menubar-mouse) @@ -29115,7 +29319,7 @@ Its value should be an event that has a binding in MENU. ;;;### (autoloads (todo-show todo-cp todo-mode todo-print todo-top-priorities ;;;;;; todo-insert-item todo-add-item-non-interactively todo-add-category) -;;;;;; "todo-mode" "calendar/todo-mode.el" (20168 57844)) +;;;;;; "todo-mode" "calendar/todo-mode.el" (20229 34587)) ;;; Generated autoloads from calendar/todo-mode.el (autoload 'todo-add-category "todo-mode" "\ @@ -29175,7 +29379,7 @@ Show TODO list. ;;;### (autoloads (tool-bar-local-item-from-menu tool-bar-add-item-from-menu ;;;;;; tool-bar-local-item tool-bar-add-item toggle-tool-bar-mode-from-frame) -;;;;;; "tool-bar" "tool-bar.el" (20127 62865)) +;;;;;; "tool-bar" "tool-bar.el" (20229 34587)) ;;; Generated autoloads from tool-bar.el (autoload 'toggle-tool-bar-mode-from-frame "tool-bar" "\ @@ -29246,7 +29450,7 @@ holds a keymap. ;;;*** ;;;### (autoloads (tpu-edt-on tpu-edt-mode) "tpu-edt" "emulation/tpu-edt.el" -;;;;;; (20141 9296)) +;;;;;; (20229 36384)) ;;; Generated autoloads from emulation/tpu-edt.el (defvar tpu-edt-mode nil "\ @@ -29273,7 +29477,7 @@ Turn on TPU/edt emulation. ;;;*** ;;;### (autoloads (tpu-mapper) "tpu-mapper" "emulation/tpu-mapper.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from emulation/tpu-mapper.el (autoload 'tpu-mapper "tpu-mapper" "\ @@ -29307,7 +29511,7 @@ your local X guru can try to figure out why the key is being ignored. ;;;*** -;;;### (autoloads (tq-create) "tq" "emacs-lisp/tq.el" (19845 45374)) +;;;### (autoloads (tq-create) "tq" "emacs-lisp/tq.el" (20229 34587)) ;;; Generated autoloads from emacs-lisp/tq.el (autoload 'tq-create "tq" "\ @@ -29321,7 +29525,7 @@ to a tcp server on another machine. ;;;*** ;;;### (autoloads (trace-function-background trace-function trace-buffer) -;;;;;; "trace" "emacs-lisp/trace.el" (19845 45374)) +;;;;;; "trace" "emacs-lisp/trace.el" (20229 34587)) ;;; Generated autoloads from emacs-lisp/trace.el (defvar trace-buffer (purecopy "*trace-output*") "\ @@ -29358,7 +29562,7 @@ BUFFER defaults to `trace-buffer'. ;;;### (autoloads (tramp-unload-tramp tramp-completion-handle-file-name-completion ;;;;;; tramp-completion-handle-file-name-all-completions tramp-unload-file-name-handlers ;;;;;; tramp-file-name-handler tramp-syntax tramp-mode) "tramp" -;;;;;; "net/tramp.el" (20209 49217)) +;;;;;; "net/tramp.el" (20253 16827)) ;;; Generated autoloads from net/tramp.el (defvar tramp-mode t "\ @@ -29491,7 +29695,7 @@ Discard Tramp from loading remote files. ;;;*** ;;;### (autoloads (tramp-ftp-enable-ange-ftp) "tramp-ftp" "net/tramp-ftp.el" -;;;;;; (19946 29209)) +;;;;;; (20229 34587)) ;;; Generated autoloads from net/tramp-ftp.el (autoload 'tramp-ftp-enable-ange-ftp "tramp-ftp" "\ @@ -29501,8 +29705,8 @@ Discard Tramp from loading remote files. ;;;*** -;;;### (autoloads (help-with-tutorial) "tutorial" "tutorial.el" (20176 -;;;;;; 51947)) +;;;### (autoloads (help-with-tutorial) "tutorial" "tutorial.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from tutorial.el (autoload 'help-with-tutorial "tutorial" "\ @@ -29538,7 +29742,7 @@ resumed later. ;;;*** ;;;### (autoloads (2C-split 2C-associate-buffer 2C-two-columns) "two-column" -;;;;;; "textmodes/two-column.el" (20141 9296)) +;;;;;; "textmodes/two-column.el" (20229 34587)) ;;; Generated autoloads from textmodes/two-column.el (autoload '2C-command "two-column" () t 'keymap) (global-set-key "\C-x6" '2C-command) @@ -29589,7 +29793,7 @@ First column's text sSs Second column's text ;;;;;; type-break type-break-mode type-break-keystroke-threshold ;;;;;; type-break-good-break-interval type-break-good-rest-interval ;;;;;; type-break-interval type-break-mode) "type-break" "type-break.el" -;;;;;; (20127 62865)) +;;;;;; (20229 34587)) ;;; Generated autoloads from type-break.el (defvar type-break-mode nil "\ @@ -29771,7 +29975,7 @@ FRAC should be the inverse of the fractional value; for example, a value of ;;;*** -;;;### (autoloads (uce-reply-to-uce) "uce" "mail/uce.el" (19845 45374)) +;;;### (autoloads (uce-reply-to-uce) "uce" "mail/uce.el" (20229 34587)) ;;; Generated autoloads from mail/uce.el (autoload 'uce-reply-to-uce "uce" "\ @@ -29789,7 +29993,7 @@ You might need to set `uce-mail-reader' before using this. ;;;;;; ucs-normalize-NFKC-string ucs-normalize-NFKC-region ucs-normalize-NFKD-string ;;;;;; ucs-normalize-NFKD-region ucs-normalize-NFC-string ucs-normalize-NFC-region ;;;;;; ucs-normalize-NFD-string ucs-normalize-NFD-region) "ucs-normalize" -;;;;;; "international/ucs-normalize.el" (20187 22214)) +;;;;;; "international/ucs-normalize.el" (20229 34587)) ;;; Generated autoloads from international/ucs-normalize.el (autoload 'ucs-normalize-NFD-region "ucs-normalize" "\ @@ -29855,7 +30059,7 @@ Normalize the string STR by the Unicode NFC and Mac OS's HFS Plus. ;;;*** ;;;### (autoloads (ununderline-region underline-region) "underline" -;;;;;; "textmodes/underline.el" (19845 45374)) +;;;;;; "textmodes/underline.el" (20229 34587)) ;;; Generated autoloads from textmodes/underline.el (autoload 'underline-region "underline" "\ @@ -29876,7 +30080,7 @@ which specify the range to operate on. ;;;*** ;;;### (autoloads (unrmail batch-unrmail) "unrmail" "mail/unrmail.el" -;;;;;; (20172 54913)) +;;;;;; (20235 41048)) ;;; Generated autoloads from mail/unrmail.el (autoload 'batch-unrmail "unrmail" "\ @@ -29895,8 +30099,8 @@ Convert old-style Rmail Babyl file FILE to system inbox format file TO-FILE. ;;;*** -;;;### (autoloads (unsafep) "unsafep" "emacs-lisp/unsafep.el" (19845 -;;;;;; 45374)) +;;;### (autoloads (unsafep) "unsafep" "emacs-lisp/unsafep.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from emacs-lisp/unsafep.el (autoload 'unsafep "unsafep" "\ @@ -29909,7 +30113,7 @@ UNSAFEP-VARS is a list of symbols with local bindings. ;;;*** ;;;### (autoloads (url-retrieve-synchronously url-retrieve) "url" -;;;;;; "url/url.el" (20162 19074)) +;;;;;; "url/url.el" (20229 34587)) ;;; Generated autoloads from url/url.el (autoload 'url-retrieve "url" "\ @@ -29951,7 +30155,7 @@ no further processing). URL is either a string or a parsed URL. ;;;*** ;;;### (autoloads (url-register-auth-scheme url-get-authentication) -;;;;;; "url-auth" "url/url-auth.el" (19845 45374)) +;;;;;; "url-auth" "url/url-auth.el" (20238 49468)) ;;; Generated autoloads from url/url-auth.el (autoload 'url-get-authentication "url-auth" "\ @@ -29993,7 +30197,7 @@ RATING a rating between 1 and 10 of the strength of the authentication. ;;;*** ;;;### (autoloads (url-cache-extract url-is-cached url-store-in-cache) -;;;;;; "url-cache" "url/url-cache.el" (19988 13913)) +;;;;;; "url-cache" "url/url-cache.el" (20229 34587)) ;;; Generated autoloads from url/url-cache.el (autoload 'url-store-in-cache "url-cache" "\ @@ -30014,7 +30218,7 @@ Extract FNAM from the local disk cache. ;;;*** -;;;### (autoloads (url-cid) "url-cid" "url/url-cid.el" (19845 45374)) +;;;### (autoloads (url-cid) "url-cid" "url/url-cid.el" (20229 34587)) ;;; Generated autoloads from url/url-cid.el (autoload 'url-cid "url-cid" "\ @@ -30025,7 +30229,7 @@ Extract FNAM from the local disk cache. ;;;*** ;;;### (autoloads (url-dav-vc-registered url-dav-supported-p) "url-dav" -;;;;;; "url/url-dav.el" (20168 57844)) +;;;;;; "url/url-dav.el" (20229 34587)) ;;; Generated autoloads from url/url-dav.el (autoload 'url-dav-supported-p "url-dav" "\ @@ -30040,8 +30244,8 @@ Extract FNAM from the local disk cache. ;;;*** -;;;### (autoloads (url-file) "url-file" "url/url-file.el" (19845 -;;;;;; 45374)) +;;;### (autoloads (url-file) "url-file" "url/url-file.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from url/url-file.el (autoload 'url-file "url-file" "\ @@ -30052,7 +30256,7 @@ Handle file: and ftp: URLs. ;;;*** ;;;### (autoloads (url-open-stream url-gateway-nslookup-host) "url-gw" -;;;;;; "url/url-gw.el" (20187 22214)) +;;;;;; "url/url-gw.el" (20229 34587)) ;;; Generated autoloads from url/url-gw.el (autoload 'url-gateway-nslookup-host "url-gw" "\ @@ -30072,7 +30276,7 @@ Might do a non-blocking connection; use `process-status' to check. ;;;### (autoloads (url-insert-file-contents url-file-local-copy url-copy-file ;;;;;; url-file-handler url-handler-mode) "url-handlers" "url/url-handlers.el" -;;;;;; (20127 62865)) +;;;;;; (20229 34587)) ;;; Generated autoloads from url/url-handlers.el (defvar url-handler-mode nil "\ @@ -30127,7 +30331,7 @@ accessible. ;;;*** ;;;### (autoloads (url-http-options url-http-file-attributes url-http-file-exists-p -;;;;;; url-http) "url-http" "url/url-http.el" (20201 55112)) +;;;;;; url-http) "url-http" "url/url-http.el" (20229 34587)) ;;; Generated autoloads from url/url-http.el (autoload 'url-http "url-http" "\ @@ -30193,7 +30397,7 @@ HTTPS retrievals are asynchronous.") ;;;*** -;;;### (autoloads (url-irc) "url-irc" "url/url-irc.el" (19845 45374)) +;;;### (autoloads (url-irc) "url-irc" "url/url-irc.el" (20229 34587)) ;;; Generated autoloads from url/url-irc.el (autoload 'url-irc "url-irc" "\ @@ -30203,8 +30407,8 @@ HTTPS retrievals are asynchronous.") ;;;*** -;;;### (autoloads (url-ldap) "url-ldap" "url/url-ldap.el" (20164 -;;;;;; 60780)) +;;;### (autoloads (url-ldap) "url-ldap" "url/url-ldap.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from url/url-ldap.el (autoload 'url-ldap "url-ldap" "\ @@ -30218,7 +30422,7 @@ URL can be a URL string, or a URL vector of the type returned by ;;;*** ;;;### (autoloads (url-mailto url-mail) "url-mailto" "url/url-mailto.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from url/url-mailto.el (autoload 'url-mail "url-mailto" "\ @@ -30234,7 +30438,7 @@ Handle the mailto: URL syntax. ;;;*** ;;;### (autoloads (url-data url-generic-emulator-loader url-info -;;;;;; url-man) "url-misc" "url/url-misc.el" (19845 45374)) +;;;;;; url-man) "url-misc" "url/url-misc.el" (20229 34587)) ;;; Generated autoloads from url/url-misc.el (autoload 'url-man "url-misc" "\ @@ -30266,7 +30470,7 @@ Fetch a data URL (RFC 2397). ;;;*** ;;;### (autoloads (url-snews url-news) "url-news" "url/url-news.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from url/url-news.el (autoload 'url-news "url-news" "\ @@ -30283,7 +30487,7 @@ Fetch a data URL (RFC 2397). ;;;### (autoloads (url-ns-user-pref url-ns-prefs isInNet isResolvable ;;;;;; dnsResolve dnsDomainIs isPlainHostName) "url-ns" "url/url-ns.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from url/url-ns.el (autoload 'isPlainHostName "url-ns" "\ @@ -30324,7 +30528,7 @@ Fetch a data URL (RFC 2397). ;;;*** ;;;### (autoloads (url-generic-parse-url url-recreate-url) "url-parse" -;;;;;; "url/url-parse.el" (19845 45374)) +;;;;;; "url/url-parse.el" (20229 34587)) ;;; Generated autoloads from url/url-parse.el (autoload 'url-recreate-url "url-parse" "\ @@ -30342,7 +30546,7 @@ TYPE USER PASSWORD HOST PORTSPEC FILENAME TARGET ATTRIBUTES FULLNESS. ;;;*** ;;;### (autoloads (url-setup-privacy-info) "url-privacy" "url/url-privacy.el" -;;;;;; (19845 45374)) +;;;;;; (20229 34587)) ;;; Generated autoloads from url/url-privacy.el (autoload 'url-setup-privacy-info "url-privacy" "\ @@ -30353,7 +30557,7 @@ Setup variables that expose info about you and your system. ;;;*** ;;;### (autoloads (url-queue-retrieve) "url-queue" "url/url-queue.el" -;;;;;; (19943 25429)) +;;;;;; (20229 34587)) ;;; Generated autoloads from url/url-queue.el (autoload 'url-queue-retrieve "url-queue" "\ @@ -30372,7 +30576,7 @@ controls the level of parallelism via the ;;;;;; url-pretty-length url-strip-leading-spaces url-eat-trailing-space ;;;;;; url-get-normalized-date url-lazy-message url-normalize-url ;;;;;; url-insert-entities-in-string url-parse-args url-debug url-debug) -;;;;;; "url-util" "url/url-util.el" (19867 59212)) +;;;;;; "url-util" "url/url-util.el" (20229 34587)) ;;; Generated autoloads from url/url-util.el (defvar url-debug nil "\ @@ -30508,7 +30712,7 @@ This uses `url-current-object', set locally to the buffer. ;;;*** ;;;### (autoloads (ask-user-about-supersession-threat ask-user-about-lock) -;;;;;; "userlock" "userlock.el" (19845 45374)) +;;;;;; "userlock" "userlock.el" (20229 34587)) ;;; Generated autoloads from userlock.el (autoload 'ask-user-about-lock "userlock" "\ @@ -30538,7 +30742,7 @@ The buffer in question is current when this function is called. ;;;### (autoloads (utf-7-imap-pre-write-conversion utf-7-pre-write-conversion ;;;;;; utf-7-imap-post-read-conversion utf-7-post-read-conversion) -;;;;;; "utf-7" "international/utf-7.el" (19845 45374)) +;;;;;; "utf-7" "international/utf-7.el" (20229 34587)) ;;; Generated autoloads from international/utf-7.el (autoload 'utf-7-post-read-conversion "utf-7" "\ @@ -30563,7 +30767,7 @@ The buffer in question is current when this function is called. ;;;*** -;;;### (autoloads (utf7-encode) "utf7" "gnus/utf7.el" (19845 45374)) +;;;### (autoloads (utf7-encode) "utf7" "gnus/utf7.el" (20229 34587)) ;;; Generated autoloads from gnus/utf7.el (autoload 'utf7-encode "utf7" "\ @@ -30575,7 +30779,7 @@ Encode UTF-7 STRING. Use IMAP modification if FOR-IMAP is non-nil. ;;;### (autoloads (uudecode-decode-region uudecode-decode-region-internal ;;;;;; uudecode-decode-region-external) "uudecode" "mail/uudecode.el" -;;;;;; (20222 61246)) +;;;;;; (20229 34587)) ;;; Generated autoloads from mail/uudecode.el (autoload 'uudecode-decode-region-external "uudecode" "\ @@ -30605,8 +30809,8 @@ If FILE-NAME is non-nil, save the result to FILE-NAME. ;;;;;; vc-print-log vc-retrieve-tag vc-create-tag vc-merge vc-insert-headers ;;;;;; vc-revision-other-window vc-root-diff vc-ediff vc-version-ediff ;;;;;; vc-diff vc-version-diff vc-register vc-next-action vc-before-checkin-hook -;;;;;; vc-checkin-hook vc-checkout-hook) "vc" "vc/vc.el" (20204 -;;;;;; 31303)) +;;;;;; vc-checkin-hook vc-checkout-hook) "vc" "vc/vc.el" (20255 +;;;;;; 18260)) ;;; Generated autoloads from vc/vc.el (defvar vc-checkout-hook nil "\ @@ -30882,7 +31086,7 @@ Return the branch part of a revision number REV. ;;;*** ;;;### (autoloads (vc-annotate) "vc-annotate" "vc/vc-annotate.el" -;;;;;; (19920 63959)) +;;;;;; (20229 34587)) ;;; Generated autoloads from vc/vc-annotate.el (autoload 'vc-annotate "vc-annotate" "\ @@ -30919,7 +31123,7 @@ mode-specific menu. `vc-annotate-color-map' and ;;;*** -;;;### (autoloads nil "vc-arch" "vc/vc-arch.el" (20168 57844)) +;;;### (autoloads nil "vc-arch" "vc/vc-arch.el" (20229 34587)) ;;; Generated autoloads from vc/vc-arch.el (defun vc-arch-registered (file) (if (vc-find-root file "{arch}/=tagging-method") @@ -30929,7 +31133,7 @@ mode-specific menu. `vc-annotate-color-map' and ;;;*** -;;;### (autoloads nil "vc-bzr" "vc/vc-bzr.el" (20209 49217)) +;;;### (autoloads nil "vc-bzr" "vc/vc-bzr.el" (20229 34587)) ;;; Generated autoloads from vc/vc-bzr.el (defconst vc-bzr-admin-dirname ".bzr" "\ @@ -30945,7 +31149,7 @@ Name of the format file in a .bzr directory.") ;;;*** -;;;### (autoloads nil "vc-cvs" "vc/vc-cvs.el" (20221 40442)) +;;;### (autoloads nil "vc-cvs" "vc/vc-cvs.el" (20229 34587)) ;;; Generated autoloads from vc/vc-cvs.el (defun vc-cvs-registered (f) "Return non-nil if file F is registered with CVS." @@ -30956,7 +31160,7 @@ Name of the format file in a .bzr directory.") ;;;*** -;;;### (autoloads (vc-dir) "vc-dir" "vc/vc-dir.el" (20207 7484)) +;;;### (autoloads (vc-dir) "vc-dir" "vc/vc-dir.el" (20229 34587)) ;;; Generated autoloads from vc/vc-dir.el (autoload 'vc-dir "vc-dir" "\ @@ -30981,7 +31185,7 @@ These are the commands available for use in the file status buffer: ;;;*** ;;;### (autoloads (vc-do-command) "vc-dispatcher" "vc/vc-dispatcher.el" -;;;;;; (20168 57844)) +;;;;;; (20229 34587)) ;;; Generated autoloads from vc/vc-dispatcher.el (autoload 'vc-do-command "vc-dispatcher" "\ @@ -31004,7 +31208,7 @@ case, and the process object in the asynchronous case. ;;;*** -;;;### (autoloads nil "vc-git" "vc/vc-git.el" (20087 5852)) +;;;### (autoloads nil "vc-git" "vc/vc-git.el" (20229 34587)) ;;; Generated autoloads from vc/vc-git.el (defun vc-git-registered (file) "Return non-nil if FILE is registered with git." @@ -31015,7 +31219,7 @@ case, and the process object in the asynchronous case. ;;;*** -;;;### (autoloads nil "vc-hg" "vc/vc-hg.el" (20207 7484)) +;;;### (autoloads nil "vc-hg" "vc/vc-hg.el" (20229 34587)) ;;; Generated autoloads from vc/vc-hg.el (defun vc-hg-registered (file) "Return non-nil if FILE is registered with hg." @@ -31026,7 +31230,7 @@ case, and the process object in the asynchronous case. ;;;*** -;;;### (autoloads nil "vc-mtn" "vc/vc-mtn.el" (20221 40442)) +;;;### (autoloads nil "vc-mtn" "vc/vc-mtn.el" (20229 34587)) ;;; Generated autoloads from vc/vc-mtn.el (defconst vc-mtn-admin-dir "_MTN" "\ @@ -31043,7 +31247,7 @@ Name of the monotone directory's format file.") ;;;*** ;;;### (autoloads (vc-rcs-master-templates) "vc-rcs" "vc/vc-rcs.el" -;;;;;; (20161 45793)) +;;;;;; (20254 37696)) ;;; Generated autoloads from vc/vc-rcs.el (defvar vc-rcs-master-templates (purecopy '("%sRCS/%s,v" "%s%s,v" "%sRCS/%s")) "\ @@ -31057,7 +31261,7 @@ For a description of possible values, see `vc-check-master-templates'.") ;;;*** ;;;### (autoloads (vc-sccs-master-templates) "vc-sccs" "vc/vc-sccs.el" -;;;;;; (19845 45374)) +;;;;;; (20254 37696)) ;;; Generated autoloads from vc/vc-sccs.el (defvar vc-sccs-master-templates (purecopy '("%sSCCS/s.%s" "%ss.%s" vc-sccs-search-project-dir)) "\ @@ -31074,7 +31278,7 @@ find any project directory." (let ((project-dir (getenv "PROJECTDIR")) dirs dir) ;;;*** -;;;### (autoloads nil "vc-svn" "vc/vc-svn.el" (20162 19074)) +;;;### (autoloads nil "vc-svn" "vc/vc-svn.el" (20229 34587)) ;;; Generated autoloads from vc/vc-svn.el (defun vc-svn-registered (f) (let ((admin-dir (cond ((and (eq system-type 'windows-nt) @@ -31088,7 +31292,7 @@ find any project directory." (let ((project-dir (getenv "PROJECTDIR")) dirs dir) ;;;*** ;;;### (autoloads (vera-mode) "vera-mode" "progmodes/vera-mode.el" -;;;;;; (20203 10426)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/vera-mode.el (add-to-list 'auto-mode-alist (cons (purecopy "\\.vr[hi]?\\'") 'vera-mode)) @@ -31146,7 +31350,7 @@ Key bindings: ;;;*** ;;;### (autoloads (verilog-mode) "verilog-mode" "progmodes/verilog-mode.el" -;;;;;; (20222 61246)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/verilog-mode.el (autoload 'verilog-mode "verilog-mode" "\ @@ -31285,7 +31489,7 @@ Key bindings specific to `verilog-mode-map' are: ;;;*** ;;;### (autoloads (vhdl-mode) "vhdl-mode" "progmodes/vhdl-mode.el" -;;;;;; (20197 58064)) +;;;;;; (20229 34587)) ;;; Generated autoloads from progmodes/vhdl-mode.el (autoload 'vhdl-mode "vhdl-mode" "\ @@ -31881,7 +32085,7 @@ Syntax table and abbrevs while in vi mode remain as they were in Emacs. ;;;### (autoloads (viqr-pre-write-conversion viqr-post-read-conversion ;;;;;; viet-encode-viqr-buffer viet-encode-viqr-region viet-decode-viqr-buffer ;;;;;; viet-decode-viqr-region viet-encode-viscii-char) "viet-util" -;;;;;; "language/viet-util.el" (20187 22214)) +;;;;;; "language/viet-util.el" (20229 34587)) ;;; Generated autoloads from language/viet-util.el (autoload 'viet-encode-viscii-char "viet-util" "\ @@ -31929,7 +32133,7 @@ Convert Vietnamese characters of the current buffer to `VIQR' mnemonics. ;;;;;; view-mode view-buffer-other-frame view-buffer-other-window ;;;;;; view-buffer view-file-other-frame view-file-other-window ;;;;;; view-file kill-buffer-if-not-modified view-remove-frame-by-deleting) -;;;;;; "view" "view.el" (20188 43079)) +;;;;;; "view" "view.el" (20265 7997)) ;;; Generated autoloads from view.el (defvar view-remove-frame-by-deleting t "\ @@ -32171,8 +32375,8 @@ Exit View mode and make the current buffer editable. ;;;*** -;;;### (autoloads (vip-mode vip-setup) "vip" "emulation/vip.el" (20187 -;;;;;; 22214)) +;;;### (autoloads (vip-mode vip-setup) "vip" "emulation/vip.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from emulation/vip.el (autoload 'vip-setup "vip" "\ @@ -32188,7 +32392,7 @@ Turn on VIP emulation of VI. ;;;*** ;;;### (autoloads (viper-mode toggle-viper-mode) "viper" "emulation/viper.el" -;;;;;; (20187 22214)) +;;;;;; (20229 34587)) ;;; Generated autoloads from emulation/viper.el (autoload 'toggle-viper-mode "viper" "\ @@ -32205,7 +32409,7 @@ Turn on Viper emulation of Vi in Emacs. See Info node `(viper)Top'. ;;;*** ;;;### (autoloads (warn lwarn display-warning) "warnings" "emacs-lisp/warnings.el" -;;;;;; (19906 31087)) +;;;;;; (20229 34587)) ;;; Generated autoloads from emacs-lisp/warnings.el (defvar warning-prefix-function nil "\ @@ -32295,7 +32499,7 @@ this is equivalent to `display-warning', using ;;;*** ;;;### (autoloads (wdired-change-to-wdired-mode) "wdired" "wdired.el" -;;;;;; (20174 10230)) +;;;;;; (20229 34587)) ;;; Generated autoloads from wdired.el (autoload 'wdired-change-to-wdired-mode "wdired" "\ @@ -32311,7 +32515,7 @@ See `wdired-mode'. ;;;*** -;;;### (autoloads (webjump) "webjump" "net/webjump.el" (20159 42847)) +;;;### (autoloads (webjump) "webjump" "net/webjump.el" (20229 34587)) ;;; Generated autoloads from net/webjump.el (autoload 'webjump "webjump" "\ @@ -32327,13 +32531,16 @@ Please submit bug reports and other feedback to the author, Neil W. Van Dyke ;;;*** -;;;### (autoloads (which-function-mode) "which-func" "progmodes/which-func.el" -;;;;;; (20127 62865)) +;;;### (autoloads (which-function-mode which-func-mode) "which-func" +;;;;;; "progmodes/which-func.el" (20232 10689)) ;;; Generated autoloads from progmodes/which-func.el (put 'which-func-format 'risky-local-variable t) (put 'which-func-current 'risky-local-variable t) -(defalias 'which-func-mode 'which-function-mode) +(autoload 'which-func-mode "which-func" "\ + + +\(fn &optional ARG)" nil nil) (defvar which-function-mode nil "\ Non-nil if Which-Function mode is enabled. @@ -32361,7 +32568,7 @@ in certain major modes. ;;;### (autoloads (whitespace-report-region whitespace-report whitespace-cleanup-region ;;;;;; whitespace-cleanup global-whitespace-toggle-options whitespace-toggle-options ;;;;;; global-whitespace-newline-mode global-whitespace-mode whitespace-newline-mode -;;;;;; whitespace-mode) "whitespace" "whitespace.el" (20176 51947)) +;;;;;; whitespace-mode) "whitespace" "whitespace.el" (20229 34587)) ;;; Generated autoloads from whitespace.el (autoload 'whitespace-mode "whitespace" "\ @@ -32760,7 +32967,7 @@ cleaning up these problems. ;;;*** ;;;### (autoloads (widget-minor-mode widget-browse-other-window widget-browse -;;;;;; widget-browse-at) "wid-browse" "wid-browse.el" (20127 62865)) +;;;;;; widget-browse-at) "wid-browse" "wid-browse.el" (20229 34587)) ;;; Generated autoloads from wid-browse.el (autoload 'widget-browse-at "wid-browse" "\ @@ -32786,8 +32993,8 @@ Minor mode for traversing widgets. ;;;*** ;;;### (autoloads (widget-setup widget-insert widget-delete widget-create -;;;;;; widget-prompt-value widgetp) "wid-edit" "wid-edit.el" (20222 -;;;;;; 61246)) +;;;;;; widget-prompt-value widgetp) "wid-edit" "wid-edit.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from wid-edit.el (autoload 'widgetp "wid-edit" "\ @@ -32830,8 +33037,8 @@ Setup current buffer so editing string widgets works. ;;;*** ;;;### (autoloads (windmove-default-keybindings windmove-down windmove-right -;;;;;; windmove-up windmove-left) "windmove" "windmove.el" (20161 -;;;;;; 45793)) +;;;;;; windmove-up windmove-left) "windmove" "windmove.el" (20250 +;;;;;; 40679)) ;;; Generated autoloads from windmove.el (autoload 'windmove-left "windmove" "\ @@ -32884,7 +33091,7 @@ Default MODIFIER is 'shift. ;;;*** ;;;### (autoloads (winner-mode winner-mode) "winner" "winner.el" -;;;;;; (19998 49767)) +;;;;;; (20237 28610)) ;;; Generated autoloads from winner.el (defvar winner-mode nil "\ @@ -32903,7 +33110,7 @@ With arg, turn Winner mode on if and only if arg is positive. ;;;*** ;;;### (autoloads (woman-bookmark-jump woman-find-file woman-dired-find-file -;;;;;; woman woman-locale) "woman" "woman.el" (20168 57844)) +;;;;;; woman woman-locale) "woman" "woman.el" (20229 34587)) ;;; Generated autoloads from woman.el (defvar woman-locale nil "\ @@ -32952,7 +33159,7 @@ Default bookmark handler for Woman buffers. ;;;*** ;;;### (autoloads (wordstar-mode) "ws-mode" "emulation/ws-mode.el" -;;;;;; (20141 9296)) +;;;;;; (20229 34587)) ;;; Generated autoloads from emulation/ws-mode.el (autoload 'wordstar-mode "ws-mode" "\ @@ -33064,7 +33271,7 @@ The key bindings are: ;;;*** -;;;### (autoloads (xesam-search) "xesam" "net/xesam.el" (20197 58064)) +;;;### (autoloads (xesam-search) "xesam" "net/xesam.el" (20229 34587)) ;;; Generated autoloads from net/xesam.el (autoload 'xesam-search "xesam" "\ @@ -33084,7 +33291,7 @@ Example: ;;;*** ;;;### (autoloads (xml-parse-region xml-parse-file) "xml" "xml.el" -;;;;;; (20168 57844)) +;;;;;; (20258 34747)) ;;; Generated autoloads from xml.el (autoload 'xml-parse-file "xml" "\ @@ -33110,7 +33317,7 @@ If PARSE-NS is non-nil, then QNAMES are expanded. ;;;*** ;;;### (autoloads (xmltok-get-declared-encoding-position) "xmltok" -;;;;;; "nxml/xmltok.el" (19845 45374)) +;;;;;; "nxml/xmltok.el" (20229 34587)) ;;; Generated autoloads from nxml/xmltok.el (autoload 'xmltok-get-declared-encoding-position "xmltok" "\ @@ -33128,8 +33335,8 @@ If LIMIT is non-nil, then do not consider characters beyond LIMIT. ;;;*** -;;;### (autoloads (xterm-mouse-mode) "xt-mouse" "xt-mouse.el" (20127 -;;;;;; 62865)) +;;;### (autoloads (xterm-mouse-mode) "xt-mouse" "xt-mouse.el" (20229 +;;;;;; 34587)) ;;; Generated autoloads from xt-mouse.el (defvar xterm-mouse-mode nil "\ @@ -33159,7 +33366,7 @@ down the SHIFT key while pressing the mouse button. ;;;*** ;;;### (autoloads (yenc-extract-filename yenc-decode-region) "yenc" -;;;;;; "gnus/yenc.el" (19845 45374)) +;;;;;; "gnus/yenc.el" (20229 34587)) ;;; Generated autoloads from gnus/yenc.el (autoload 'yenc-decode-region "yenc" "\ @@ -33175,7 +33382,7 @@ Extract file name from an yenc header. ;;;*** ;;;### (autoloads (psychoanalyze-pinhead apropos-zippy insert-zippyism -;;;;;; yow) "yow" "play/yow.el" (19845 45374)) +;;;;;; yow) "yow" "play/yow.el" (20229 34587)) ;;; Generated autoloads from play/yow.el (autoload 'yow "yow" "\ @@ -33201,7 +33408,7 @@ Zippy goes to the analyst. ;;;*** -;;;### (autoloads (zone) "zone" "play/zone.el" (19889 21967)) +;;;### (autoloads (zone) "zone" "play/zone.el" (20229 34587)) ;;; Generated autoloads from play/zone.el (autoload 'zone "zone" "\ @@ -33217,46 +33424,47 @@ Zone out, completely. ;;;;;; "calc/calc-fin.el" "calc/calc-forms.el" "calc/calc-frac.el" ;;;;;; "calc/calc-funcs.el" "calc/calc-graph.el" "calc/calc-help.el" ;;;;;; "calc/calc-incom.el" "calc/calc-keypd.el" "calc/calc-lang.el" -;;;;;; "calc/calc-macs.el" "calc/calc-map.el" "calc/calc-math.el" -;;;;;; "calc/calc-menu.el" "calc/calc-misc.el" "calc/calc-mode.el" -;;;;;; "calc/calc-mtx.el" "calc/calc-nlfit.el" "calc/calc-poly.el" -;;;;;; "calc/calc-prog.el" "calc/calc-rewr.el" "calc/calc-rules.el" -;;;;;; "calc/calc-sel.el" "calc/calc-stat.el" "calc/calc-store.el" -;;;;;; "calc/calc-stuff.el" "calc/calc-trail.el" "calc/calc-units.el" -;;;;;; "calc/calc-vec.el" "calc/calc-yank.el" "calc/calcalg2.el" -;;;;;; "calc/calcalg3.el" "calc/calccomp.el" "calc/calcsel2.el" -;;;;;; "calendar/cal-bahai.el" "calendar/cal-coptic.el" "calendar/cal-french.el" -;;;;;; "calendar/cal-html.el" "calendar/cal-islam.el" "calendar/cal-iso.el" -;;;;;; "calendar/cal-julian.el" "calendar/cal-loaddefs.el" "calendar/cal-mayan.el" -;;;;;; "calendar/cal-menu.el" "calendar/cal-move.el" "calendar/cal-persia.el" -;;;;;; "calendar/cal-tex.el" "calendar/cal-x.el" "calendar/diary-loaddefs.el" -;;;;;; "calendar/hol-loaddefs.el" "cdl.el" "cedet/cedet-cscope.el" -;;;;;; "cedet/cedet-files.el" "cedet/cedet-global.el" "cedet/cedet-idutils.el" -;;;;;; "cedet/cedet.el" "cedet/ede/auto.el" "cedet/ede/autoconf-edit.el" -;;;;;; "cedet/ede/base.el" "cedet/ede/cpp-root.el" "cedet/ede/custom.el" -;;;;;; "cedet/ede/dired.el" "cedet/ede/emacs.el" "cedet/ede/files.el" -;;;;;; "cedet/ede/generic.el" "cedet/ede/linux.el" "cedet/ede/locate.el" -;;;;;; "cedet/ede/make.el" "cedet/ede/makefile-edit.el" "cedet/ede/pconf.el" -;;;;;; "cedet/ede/pmake.el" "cedet/ede/proj-archive.el" "cedet/ede/proj-aux.el" -;;;;;; "cedet/ede/proj-comp.el" "cedet/ede/proj-elisp.el" "cedet/ede/proj-info.el" -;;;;;; "cedet/ede/proj-misc.el" "cedet/ede/proj-obj.el" "cedet/ede/proj-prog.el" -;;;;;; "cedet/ede/proj-scheme.el" "cedet/ede/proj-shared.el" "cedet/ede/proj.el" -;;;;;; "cedet/ede/project-am.el" "cedet/ede/shell.el" "cedet/ede/simple.el" -;;;;;; "cedet/ede/source.el" "cedet/ede/speedbar.el" "cedet/ede/srecode.el" -;;;;;; "cedet/ede/system.el" "cedet/ede/util.el" "cedet/inversion.el" -;;;;;; "cedet/mode-local.el" "cedet/pulse.el" "cedet/semantic/analyze.el" -;;;;;; "cedet/semantic/analyze/complete.el" "cedet/semantic/analyze/debug.el" -;;;;;; "cedet/semantic/analyze/fcn.el" "cedet/semantic/analyze/refs.el" -;;;;;; "cedet/semantic/bovine.el" "cedet/semantic/bovine/c-by.el" -;;;;;; "cedet/semantic/bovine/c.el" "cedet/semantic/bovine/debug.el" -;;;;;; "cedet/semantic/bovine/el.el" "cedet/semantic/bovine/gcc.el" -;;;;;; "cedet/semantic/bovine/make-by.el" "cedet/semantic/bovine/make.el" -;;;;;; "cedet/semantic/bovine/scm-by.el" "cedet/semantic/bovine/scm.el" -;;;;;; "cedet/semantic/chart.el" "cedet/semantic/complete.el" "cedet/semantic/ctxt.el" -;;;;;; "cedet/semantic/db-debug.el" "cedet/semantic/db-ebrowse.el" -;;;;;; "cedet/semantic/db-el.el" "cedet/semantic/db-file.el" "cedet/semantic/db-find.el" -;;;;;; "cedet/semantic/db-global.el" "cedet/semantic/db-javascript.el" -;;;;;; "cedet/semantic/db-mode.el" "cedet/semantic/db-ref.el" "cedet/semantic/db-typecache.el" +;;;;;; "calc/calc-loaddefs.el" "calc/calc-macs.el" "calc/calc-map.el" +;;;;;; "calc/calc-math.el" "calc/calc-menu.el" "calc/calc-misc.el" +;;;;;; "calc/calc-mode.el" "calc/calc-mtx.el" "calc/calc-nlfit.el" +;;;;;; "calc/calc-poly.el" "calc/calc-prog.el" "calc/calc-rewr.el" +;;;;;; "calc/calc-rules.el" "calc/calc-sel.el" "calc/calc-stat.el" +;;;;;; "calc/calc-store.el" "calc/calc-stuff.el" "calc/calc-trail.el" +;;;;;; "calc/calc-units.el" "calc/calc-vec.el" "calc/calc-yank.el" +;;;;;; "calc/calcalg2.el" "calc/calcalg3.el" "calc/calccomp.el" +;;;;;; "calc/calcsel2.el" "calendar/cal-bahai.el" "calendar/cal-coptic.el" +;;;;;; "calendar/cal-french.el" "calendar/cal-html.el" "calendar/cal-islam.el" +;;;;;; "calendar/cal-iso.el" "calendar/cal-julian.el" "calendar/cal-loaddefs.el" +;;;;;; "calendar/cal-mayan.el" "calendar/cal-menu.el" "calendar/cal-move.el" +;;;;;; "calendar/cal-persia.el" "calendar/cal-tex.el" "calendar/cal-x.el" +;;;;;; "calendar/diary-loaddefs.el" "calendar/hol-loaddefs.el" "cdl.el" +;;;;;; "cedet/cedet-cscope.el" "cedet/cedet-files.el" "cedet/cedet-global.el" +;;;;;; "cedet/cedet-idutils.el" "cedet/cedet.el" "cedet/ede/auto.el" +;;;;;; "cedet/ede/autoconf-edit.el" "cedet/ede/base.el" "cedet/ede/cpp-root.el" +;;;;;; "cedet/ede/custom.el" "cedet/ede/dired.el" "cedet/ede/emacs.el" +;;;;;; "cedet/ede/files.el" "cedet/ede/generic.el" "cedet/ede/linux.el" +;;;;;; "cedet/ede/loaddefs.el" "cedet/ede/locate.el" "cedet/ede/make.el" +;;;;;; "cedet/ede/makefile-edit.el" "cedet/ede/pconf.el" "cedet/ede/pmake.el" +;;;;;; "cedet/ede/proj-archive.el" "cedet/ede/proj-aux.el" "cedet/ede/proj-comp.el" +;;;;;; "cedet/ede/proj-elisp.el" "cedet/ede/proj-info.el" "cedet/ede/proj-misc.el" +;;;;;; "cedet/ede/proj-obj.el" "cedet/ede/proj-prog.el" "cedet/ede/proj-scheme.el" +;;;;;; "cedet/ede/proj-shared.el" "cedet/ede/proj.el" "cedet/ede/project-am.el" +;;;;;; "cedet/ede/shell.el" "cedet/ede/simple.el" "cedet/ede/source.el" +;;;;;; "cedet/ede/speedbar.el" "cedet/ede/srecode.el" "cedet/ede/system.el" +;;;;;; "cedet/ede/util.el" "cedet/inversion.el" "cedet/mode-local.el" +;;;;;; "cedet/pulse.el" "cedet/semantic/analyze.el" "cedet/semantic/analyze/complete.el" +;;;;;; "cedet/semantic/analyze/debug.el" "cedet/semantic/analyze/fcn.el" +;;;;;; "cedet/semantic/analyze/refs.el" "cedet/semantic/bovine.el" +;;;;;; "cedet/semantic/bovine/c-by.el" "cedet/semantic/bovine/c.el" +;;;;;; "cedet/semantic/bovine/debug.el" "cedet/semantic/bovine/el.el" +;;;;;; "cedet/semantic/bovine/gcc.el" "cedet/semantic/bovine/make-by.el" +;;;;;; "cedet/semantic/bovine/make.el" "cedet/semantic/bovine/scm-by.el" +;;;;;; "cedet/semantic/bovine/scm.el" "cedet/semantic/chart.el" +;;;;;; "cedet/semantic/complete.el" "cedet/semantic/ctxt.el" "cedet/semantic/db-debug.el" +;;;;;; "cedet/semantic/db-ebrowse.el" "cedet/semantic/db-el.el" +;;;;;; "cedet/semantic/db-file.el" "cedet/semantic/db-find.el" "cedet/semantic/db-global.el" +;;;;;; "cedet/semantic/db-javascript.el" "cedet/semantic/db-mode.el" +;;;;;; "cedet/semantic/db-ref.el" "cedet/semantic/db-typecache.el" ;;;;;; "cedet/semantic/db.el" "cedet/semantic/debug.el" "cedet/semantic/decorate.el" ;;;;;; "cedet/semantic/decorate/include.el" "cedet/semantic/decorate/mode.el" ;;;;;; "cedet/semantic/dep.el" "cedet/semantic/doc.el" "cedet/semantic/ede-grammar.el" @@ -33264,13 +33472,13 @@ Zone out, completely. ;;;;;; "cedet/semantic/fw.el" "cedet/semantic/grammar-wy.el" "cedet/semantic/grammar.el" ;;;;;; "cedet/semantic/html.el" "cedet/semantic/ia-sb.el" "cedet/semantic/ia.el" ;;;;;; "cedet/semantic/idle.el" "cedet/semantic/imenu.el" "cedet/semantic/java.el" -;;;;;; "cedet/semantic/lex-spp.el" "cedet/semantic/lex.el" "cedet/semantic/mru-bookmark.el" -;;;;;; "cedet/semantic/sb.el" "cedet/semantic/scope.el" "cedet/semantic/senator.el" -;;;;;; "cedet/semantic/sort.el" "cedet/semantic/symref.el" "cedet/semantic/symref/cscope.el" -;;;;;; "cedet/semantic/symref/filter.el" "cedet/semantic/symref/global.el" -;;;;;; "cedet/semantic/symref/grep.el" "cedet/semantic/symref/idutils.el" -;;;;;; "cedet/semantic/symref/list.el" "cedet/semantic/tag-file.el" -;;;;;; "cedet/semantic/tag-ls.el" "cedet/semantic/tag-write.el" +;;;;;; "cedet/semantic/lex-spp.el" "cedet/semantic/lex.el" "cedet/semantic/loaddefs.el" +;;;;;; "cedet/semantic/mru-bookmark.el" "cedet/semantic/sb.el" "cedet/semantic/scope.el" +;;;;;; "cedet/semantic/senator.el" "cedet/semantic/sort.el" "cedet/semantic/symref.el" +;;;;;; "cedet/semantic/symref/cscope.el" "cedet/semantic/symref/filter.el" +;;;;;; "cedet/semantic/symref/global.el" "cedet/semantic/symref/grep.el" +;;;;;; "cedet/semantic/symref/idutils.el" "cedet/semantic/symref/list.el" +;;;;;; "cedet/semantic/tag-file.el" "cedet/semantic/tag-ls.el" "cedet/semantic/tag-write.el" ;;;;;; "cedet/semantic/tag.el" "cedet/semantic/texi.el" "cedet/semantic/util-modes.el" ;;;;;; "cedet/semantic/util.el" "cedet/semantic/wisent.el" "cedet/semantic/wisent/comp.el" ;;;;;; "cedet/semantic/wisent/java-tags.el" "cedet/semantic/wisent/javascript.el" @@ -33282,32 +33490,33 @@ Zone out, completely. ;;;;;; "cedet/srecode/el.el" "cedet/srecode/expandproto.el" "cedet/srecode/extract.el" ;;;;;; "cedet/srecode/fields.el" "cedet/srecode/filters.el" "cedet/srecode/find.el" ;;;;;; "cedet/srecode/getset.el" "cedet/srecode/insert.el" "cedet/srecode/java.el" -;;;;;; "cedet/srecode/map.el" "cedet/srecode/mode.el" "cedet/srecode/semantic.el" -;;;;;; "cedet/srecode/srt-wy.el" "cedet/srecode/srt.el" "cedet/srecode/table.el" -;;;;;; "cedet/srecode/template.el" "cedet/srecode/texi.el" "cus-dep.el" -;;;;;; "dframe.el" "dired-aux.el" "dired-x.el" "dos-fns.el" "dos-vars.el" -;;;;;; "dos-w32.el" "dynamic-setting.el" "emacs-lisp/assoc.el" "emacs-lisp/authors.el" -;;;;;; "emacs-lisp/avl-tree.el" "emacs-lisp/bindat.el" "emacs-lisp/byte-opt.el" -;;;;;; "emacs-lisp/chart.el" "emacs-lisp/cl-extra.el" "emacs-lisp/cl-loaddefs.el" -;;;;;; "emacs-lisp/cl-macs.el" "emacs-lisp/cl-seq.el" "emacs-lisp/cl-specs.el" -;;;;;; "emacs-lisp/cust-print.el" "emacs-lisp/eieio-base.el" "emacs-lisp/eieio-custom.el" -;;;;;; "emacs-lisp/eieio-datadebug.el" "emacs-lisp/eieio-opt.el" -;;;;;; "emacs-lisp/eieio-speedbar.el" "emacs-lisp/eieio.el" "emacs-lisp/find-gc.el" -;;;;;; "emacs-lisp/gulp.el" "emacs-lisp/lisp-mnt.el" "emacs-lisp/package-x.el" -;;;;;; "emacs-lisp/regi.el" "emacs-lisp/smie.el" "emacs-lisp/tcover-ses.el" -;;;;;; "emacs-lisp/tcover-unsafep.el" "emulation/cua-gmrk.el" "emulation/cua-rect.el" -;;;;;; "emulation/edt-lk201.el" "emulation/edt-mapper.el" "emulation/edt-pc.el" -;;;;;; "emulation/edt-vt100.el" "emulation/tpu-extras.el" "emulation/viper-cmd.el" -;;;;;; "emulation/viper-ex.el" "emulation/viper-init.el" "emulation/viper-keym.el" -;;;;;; "emulation/viper-macs.el" "emulation/viper-mous.el" "emulation/viper-util.el" -;;;;;; "erc/erc-backend.el" "erc/erc-goodies.el" "erc/erc-ibuffer.el" -;;;;;; "erc/erc-lang.el" "eshell/em-alias.el" "eshell/em-banner.el" -;;;;;; "eshell/em-basic.el" "eshell/em-cmpl.el" "eshell/em-dirs.el" -;;;;;; "eshell/em-glob.el" "eshell/em-hist.el" "eshell/em-ls.el" -;;;;;; "eshell/em-pred.el" "eshell/em-prompt.el" "eshell/em-rebind.el" -;;;;;; "eshell/em-script.el" "eshell/em-smart.el" "eshell/em-term.el" -;;;;;; "eshell/em-unix.el" "eshell/em-xtra.el" "eshell/esh-arg.el" -;;;;;; "eshell/esh-cmd.el" "eshell/esh-ext.el" "eshell/esh-io.el" +;;;;;; "cedet/srecode/loaddefs.el" "cedet/srecode/map.el" "cedet/srecode/mode.el" +;;;;;; "cedet/srecode/semantic.el" "cedet/srecode/srt-wy.el" "cedet/srecode/srt.el" +;;;;;; "cedet/srecode/table.el" "cedet/srecode/template.el" "cedet/srecode/texi.el" +;;;;;; "cus-dep.el" "dframe.el" "dired-aux.el" "dired-x.el" "dos-fns.el" +;;;;;; "dos-vars.el" "dos-w32.el" "dynamic-setting.el" "emacs-lisp/assoc.el" +;;;;;; "emacs-lisp/authors.el" "emacs-lisp/avl-tree.el" "emacs-lisp/bindat.el" +;;;;;; "emacs-lisp/byte-opt.el" "emacs-lisp/chart.el" "emacs-lisp/cl-extra.el" +;;;;;; "emacs-lisp/cl-loaddefs.el" "emacs-lisp/cl-macs.el" "emacs-lisp/cl-seq.el" +;;;;;; "emacs-lisp/cl-specs.el" "emacs-lisp/cust-print.el" "emacs-lisp/eieio-base.el" +;;;;;; "emacs-lisp/eieio-custom.el" "emacs-lisp/eieio-datadebug.el" +;;;;;; "emacs-lisp/eieio-opt.el" "emacs-lisp/eieio-speedbar.el" +;;;;;; "emacs-lisp/eieio.el" "emacs-lisp/find-gc.el" "emacs-lisp/gulp.el" +;;;;;; "emacs-lisp/lisp-mnt.el" "emacs-lisp/package-x.el" "emacs-lisp/regi.el" +;;;;;; "emacs-lisp/smie.el" "emacs-lisp/tcover-ses.el" "emacs-lisp/tcover-unsafep.el" +;;;;;; "emulation/cua-gmrk.el" "emulation/cua-rect.el" "emulation/edt-lk201.el" +;;;;;; "emulation/edt-mapper.el" "emulation/edt-pc.el" "emulation/edt-vt100.el" +;;;;;; "emulation/tpu-extras.el" "emulation/viper-cmd.el" "emulation/viper-ex.el" +;;;;;; "emulation/viper-init.el" "emulation/viper-keym.el" "emulation/viper-macs.el" +;;;;;; "emulation/viper-mous.el" "emulation/viper-util.el" "erc/erc-backend.el" +;;;;;; "erc/erc-goodies.el" "erc/erc-ibuffer.el" "erc/erc-lang.el" +;;;;;; "eshell/em-alias.el" "eshell/em-banner.el" "eshell/em-basic.el" +;;;;;; "eshell/em-cmpl.el" "eshell/em-dirs.el" "eshell/em-glob.el" +;;;;;; "eshell/em-hist.el" "eshell/em-ls.el" "eshell/em-pred.el" +;;;;;; "eshell/em-prompt.el" "eshell/em-rebind.el" "eshell/em-script.el" +;;;;;; "eshell/em-smart.el" "eshell/em-term.el" "eshell/em-unix.el" +;;;;;; "eshell/em-xtra.el" "eshell/esh-arg.el" "eshell/esh-cmd.el" +;;;;;; "eshell/esh-ext.el" "eshell/esh-groups.el" "eshell/esh-io.el" ;;;;;; "eshell/esh-module.el" "eshell/esh-opt.el" "eshell/esh-proc.el" ;;;;;; "eshell/esh-util.el" "eshell/esh-var.el" "ezimage.el" "foldout.el" ;;;;;; "format-spec.el" "forms-d2.el" "forms-pass.el" "fringe.el" @@ -33371,47 +33580,48 @@ Zone out, completely. ;;;;;; "nxml/xsd-regexp.el" "org/ob-C.el" "org/ob-R.el" "org/ob-asymptote.el" ;;;;;; "org/ob-awk.el" "org/ob-calc.el" "org/ob-clojure.el" "org/ob-comint.el" ;;;;;; "org/ob-css.el" "org/ob-ditaa.el" "org/ob-dot.el" "org/ob-emacs-lisp.el" -;;;;;; "org/ob-eval.el" "org/ob-exp.el" "org/ob-gnuplot.el" "org/ob-haskell.el" -;;;;;; "org/ob-java.el" "org/ob-js.el" "org/ob-latex.el" "org/ob-ledger.el" -;;;;;; "org/ob-lilypond.el" "org/ob-lisp.el" "org/ob-matlab.el" -;;;;;; "org/ob-maxima.el" "org/ob-mscgen.el" "org/ob-ocaml.el" "org/ob-octave.el" -;;;;;; "org/ob-org.el" "org/ob-perl.el" "org/ob-plantuml.el" "org/ob-python.el" +;;;;;; "org/ob-eval.el" "org/ob-exp.el" "org/ob-fortran.el" "org/ob-gnuplot.el" +;;;;;; "org/ob-haskell.el" "org/ob-java.el" "org/ob-js.el" "org/ob-latex.el" +;;;;;; "org/ob-ledger.el" "org/ob-lilypond.el" "org/ob-lisp.el" +;;;;;; "org/ob-matlab.el" "org/ob-maxima.el" "org/ob-mscgen.el" +;;;;;; "org/ob-ocaml.el" "org/ob-octave.el" "org/ob-org.el" "org/ob-perl.el" +;;;;;; "org/ob-picolisp.el" "org/ob-plantuml.el" "org/ob-python.el" ;;;;;; "org/ob-ref.el" "org/ob-ruby.el" "org/ob-sass.el" "org/ob-scheme.el" -;;;;;; "org/ob-screen.el" "org/ob-sh.el" "org/ob-sql.el" "org/ob-sqlite.el" -;;;;;; "org/ob-table.el" "org/org-beamer.el" "org/org-bibtex.el" -;;;;;; "org/org-colview.el" "org/org-compat.el" "org/org-crypt.el" -;;;;;; "org/org-ctags.el" "org/org-docview.el" "org/org-entities.el" -;;;;;; "org/org-exp-blocks.el" "org/org-faces.el" "org/org-gnus.el" -;;;;;; "org/org-habit.el" "org/org-info.el" "org/org-inlinetask.el" -;;;;;; "org/org-install.el" "org/org-jsinfo.el" "org/org-list.el" -;;;;;; "org/org-mac-message.el" "org/org-macs.el" "org/org-mew.el" -;;;;;; "org/org-mhe.el" "org/org-mks.el" "org/org-mouse.el" "org/org-pcomplete.el" -;;;;;; "org/org-protocol.el" "org/org-rmail.el" "org/org-special-blocks.el" -;;;;;; "org/org-src.el" "org/org-vm.el" "org/org-w3m.el" "org/org-wl.el" -;;;;;; "patcomp.el" "play/gamegrid.el" "play/gametree.el" "play/meese.el" -;;;;;; "progmodes/ada-prj.el" "progmodes/cc-align.el" "progmodes/cc-awk.el" -;;;;;; "progmodes/cc-bytecomp.el" "progmodes/cc-cmds.el" "progmodes/cc-defs.el" -;;;;;; "progmodes/cc-fonts.el" "progmodes/cc-langs.el" "progmodes/cc-menus.el" -;;;;;; "progmodes/ebnf-abn.el" "progmodes/ebnf-bnf.el" "progmodes/ebnf-dtd.el" -;;;;;; "progmodes/ebnf-ebx.el" "progmodes/ebnf-iso.el" "progmodes/ebnf-otz.el" -;;;;;; "progmodes/ebnf-yac.el" "progmodes/idlw-complete-structtag.el" -;;;;;; "progmodes/idlw-help.el" "progmodes/idlw-toolbar.el" "progmodes/mantemp.el" -;;;;;; "progmodes/xscheme.el" "ps-def.el" "ps-mule.el" "ps-samp.el" -;;;;;; "saveplace.el" "sb-image.el" "scroll-bar.el" "select.el" -;;;;;; "soundex.el" "subdirs.el" "tempo.el" "textmodes/bib-mode.el" -;;;;;; "textmodes/makeinfo.el" "textmodes/page-ext.el" "textmodes/refbib.el" -;;;;;; "textmodes/refer.el" "textmodes/reftex-auc.el" "textmodes/reftex-dcr.el" -;;;;;; "textmodes/reftex-ref.el" "textmodes/reftex-sel.el" "textmodes/reftex-toc.el" -;;;;;; "textmodes/texnfo-upd.el" "timezone.el" "tooltip.el" "tree-widget.el" -;;;;;; "uniquify.el" "url/url-about.el" "url/url-cookie.el" "url/url-dired.el" -;;;;;; "url/url-expand.el" "url/url-ftp.el" "url/url-future.el" -;;;;;; "url/url-history.el" "url/url-imap.el" "url/url-methods.el" -;;;;;; "url/url-nfs.el" "url/url-proxy.el" "url/url-vars.el" "vc/ediff-diff.el" -;;;;;; "vc/ediff-init.el" "vc/ediff-merg.el" "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-fns.el" "w32-vars.el" "x-dnd.el") (20224 -;;;;;; 16870 730403)) +;;;;;; "org/ob-screen.el" "org/ob-sh.el" "org/ob-shen.el" "org/ob-sql.el" +;;;;;; "org/ob-sqlite.el" "org/ob-table.el" "org/org-beamer.el" +;;;;;; "org/org-bibtex.el" "org/org-colview.el" "org/org-compat.el" +;;;;;; "org/org-crypt.el" "org/org-ctags.el" "org/org-docview.el" +;;;;;; "org/org-entities.el" "org/org-eshell.el" "org/org-exp-blocks.el" +;;;;;; "org/org-faces.el" "org/org-gnus.el" "org/org-habit.el" "org/org-info.el" +;;;;;; "org/org-inlinetask.el" "org/org-install.el" "org/org-jsinfo.el" +;;;;;; "org/org-list.el" "org/org-mac-message.el" "org/org-macs.el" +;;;;;; "org/org-mew.el" "org/org-mhe.el" "org/org-mks.el" "org/org-mouse.el" +;;;;;; "org/org-pcomplete.el" "org/org-protocol.el" "org/org-rmail.el" +;;;;;; "org/org-special-blocks.el" "org/org-src.el" "org/org-vm.el" +;;;;;; "org/org-w3m.el" "org/org-wl.el" "patcomp.el" "play/gamegrid.el" +;;;;;; "play/gametree.el" "play/meese.el" "progmodes/ada-prj.el" +;;;;;; "progmodes/cc-align.el" "progmodes/cc-awk.el" "progmodes/cc-bytecomp.el" +;;;;;; "progmodes/cc-cmds.el" "progmodes/cc-defs.el" "progmodes/cc-fonts.el" +;;;;;; "progmodes/cc-langs.el" "progmodes/cc-menus.el" "progmodes/ebnf-abn.el" +;;;;;; "progmodes/ebnf-bnf.el" "progmodes/ebnf-dtd.el" "progmodes/ebnf-ebx.el" +;;;;;; "progmodes/ebnf-iso.el" "progmodes/ebnf-otz.el" "progmodes/ebnf-yac.el" +;;;;;; "progmodes/idlw-complete-structtag.el" "progmodes/idlw-help.el" +;;;;;; "progmodes/idlw-toolbar.el" "progmodes/mantemp.el" "progmodes/xscheme.el" +;;;;;; "ps-def.el" "ps-mule.el" "ps-samp.el" "saveplace.el" "sb-image.el" +;;;;;; "scroll-bar.el" "select.el" "soundex.el" "subdirs.el" "tempo.el" +;;;;;; "textmodes/bib-mode.el" "textmodes/makeinfo.el" "textmodes/page-ext.el" +;;;;;; "textmodes/refbib.el" "textmodes/refer.el" "textmodes/reftex-auc.el" +;;;;;; "textmodes/reftex-dcr.el" "textmodes/reftex-ref.el" "textmodes/reftex-sel.el" +;;;;;; "textmodes/reftex-toc.el" "textmodes/texnfo-upd.el" "timezone.el" +;;;;;; "tooltip.el" "tree-widget.el" "uniquify.el" "url/url-about.el" +;;;;;; "url/url-cookie.el" "url/url-dired.el" "url/url-expand.el" +;;;;;; "url/url-ftp.el" "url/url-future.el" "url/url-history.el" +;;;;;; "url/url-imap.el" "url/url-methods.el" "url/url-nfs.el" "url/url-proxy.el" +;;;;;; "url/url-vars.el" "vc/ediff-diff.el" "vc/ediff-init.el" "vc/ediff-merg.el" +;;;;;; "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-fns.el" +;;;;;; "w32-vars.el" "x-dnd.el") (20265 8335 405119)) ;;;*** diff --git a/lisp/ls-lisp.el b/lisp/ls-lisp.el index 576c746761d..de489871887 100644 --- a/lisp/ls-lisp.el +++ b/lisp/ls-lisp.el @@ -331,6 +331,7 @@ not contain `d', so that a full listing is expected." ;; do all bindings here for speed total-line files elt short file-size attr fuid fgid uid-len gid-len) + (setq file-alist (ls-lisp-sanitize file-alist)) (cond ((memq ?A switches) (setq file-alist (ls-lisp-delete-matching "^\\.\\.?$" file-alist))) @@ -437,6 +438,22 @@ not contain `d', so that a full listing is expected." (message "%s: doesn't exist or is inaccessible" file) (ding) (sit-for 2))))) ; to show user the message! +(defun ls-lisp-sanitize (file-alist) + "Sanitize the elements in FILE-ALIST. +Fixes any elements in the alist for directory entries whose file +attributes are nil (meaning that `file-attributes' failed for +them). This is known to happen for some network shares, in +particular for the \"..\" directory entry. + +If the \"..\" directory entry has nil attributes, the attributes +are copied from the \".\" entry, if they are non-nil. Otherwise, +the offending element is removed from the list, as are any +elements for other directory entries with nil attributes." + (if (and (null (cdr (assoc ".." file-alist))) + (cdr (assoc "." file-alist))) + (setcdr (assoc ".." file-alist) (cdr (assoc "." file-alist)))) + (rassq-delete-all nil file-alist)) + (defun ls-lisp-column-format (file-alist) "Insert the file names (only) in FILE-ALIST into the current buffer. Format in columns, sorted vertically, following GNU ls -C. diff --git a/lisp/mail/emacsbug.el b/lisp/mail/emacsbug.el index 0e30727d483..50fcfceee35 100644 --- a/lisp/mail/emacsbug.el +++ b/lisp/mail/emacsbug.el @@ -32,6 +32,9 @@ ;;; Code: +(require 'sendmail) +(require 'message) + (defgroup emacsbug nil "Sending Emacs bug reports." :group 'maint @@ -78,13 +81,16 @@ Used for querying duplicates and linking to existing bugs.") (defvar message-strip-special-text-properties) (defun report-emacs-bug-can-use-osx-open () - "Check if OSX open can be used to insert bug report into mailer" + "Return non-nil if the OS X \"open\" command is available for mailing." (and (featurep 'ns) (equal (executable-find "open") "/usr/bin/open") (memq system-type '(darwin)))) +;; FIXME this duplicates much of the logic from browse-url-can-use-xdg-open. (defun report-emacs-bug-can-use-xdg-email () - "Check if xdg-email can be used, i.e. we are on Gnome, KDE or xfce4." + "Return non-nil if the \"xdg-email\" command can be used. +xdg-email is a desktop utility that calls your preferred mail client. +This requires you to be running either Gnome, KDE, or Xfce4." (and (getenv "DISPLAY") (executable-find "xdg-email") (or (getenv "GNOME_DESKTOP_SESSION_ID") @@ -98,16 +104,23 @@ Used for querying duplicates and linking to existing bugs.") "org.gnome.SessionManager.CanShutdown")) (error nil)) (equal (getenv "KDE_FULL_SESSION") "true") + ;; FIXME? browse-url-can-use-xdg-open also accepts LXDE. + ;; Is that no good here, or just overlooked? (condition-case nil (eq 0 (call-process "/bin/sh" nil nil nil "-c" + ;; FIXME use string-match rather than grep. "xprop -root _DT_SAVE_MODE|grep xfce4")) (error nil))))) (defun report-emacs-bug-insert-to-mailer () + "Send the message to your preferred mail client. +This requires either the OS X \"open\" command, or the freedesktop +\"xdg-email\" command to be available." (interactive) (save-excursion + ;; FIXME? use mail-fetch-field? (let* ((to (progn (goto-char (point-min)) (forward-line) @@ -231,10 +244,11 @@ usually do not have translators for other languages.\n\n"))) "', version " (mapconcat 'number-to-string (x-server-version) ".") "\n") (error t))) - (if (and system-configuration-options - (not (equal system-configuration-options ""))) - (insert "configured using `configure " - system-configuration-options "'\n\n")) + (when (and system-configuration-options + (not (equal system-configuration-options ""))) + (insert "Configured using:\n `configure " + system-configuration-options "'\n\n") + (fill-region (line-beginning-position -1) (point))) (insert "Important settings:\n") (mapc (lambda (var) @@ -318,7 +332,7 @@ usually do not have translators for other languages.\n\n"))) " Type \\[kill-buffer] RET to cancel (don't send it).\n")) (if can-insert-mail (princ (substitute-command-keys - " Type \\[report-emacs-bug-insert-to-mailer] to insert text to you preferred mail program.\n"))) + " Type \\[report-emacs-bug-insert-to-mailer] to copy text to your preferred mail program.\n"))) (terpri) (princ (substitute-command-keys " Type \\[report-emacs-bug-info] to visit in Info the Emacs Manual section @@ -354,26 +368,7 @@ usually do not have translators for other languages.\n\n"))) (string-equal (buffer-substring-no-properties (point-min) (point)) report-emacs-bug-orig-text) (error "No text entered in bug report")) - (or report-emacs-bug-no-confirmation - ;; mailclient.el does not handle From (at present). - (if (derived-mode-p 'message-mode) - (eq message-send-mail-function 'message-send-mail-with-mailclient) - (eq send-mail-function 'mailclient-send-it)) - ;; Not narrowing to the headers, but that's OK. - (let ((from (mail-fetch-field "From"))) - (and (or (not from) - (message-bogus-recipient-p from) - ;; This is the default user-mail-address. On today's - ;; systems, it seems more likely to be wrong than right, - ;; since most people don't run their own mail server. - (string-match (format "\\<%s@%s\\>" - (regexp-quote (user-login-name)) - (regexp-quote (system-name))) - from)) - (not (yes-or-no-p - (format "Is `%s' really your email address? " from))) - (error "Please edit the From address and try again")))) - ;; The last warning for novice users. + ;; Warning for novice users. (unless (or report-emacs-bug-no-confirmation (yes-or-no-p "Send this bug report to the Emacs maintainers? ")) @@ -396,7 +391,32 @@ and send the mail again%s." report-emacs-bug-send-command) ""))))) (error "M-x report-emacs-bug was cancelled, please read *Bug Help* buffer")) - + ;; Query the user for the SMTP method, so that we can skip + ;; questions about From header validity if the user is going to + ;; use mailclient, anyway. + (when (eq send-mail-function 'sendmail-query-once) + (sendmail-query-user-about-smtp) + (when (derived-mode-p 'message-mode) + (setq message-send-mail-function (message-default-send-mail-function)))) + (or report-emacs-bug-no-confirmation + ;; mailclient.el does not need a valid From + (if (derived-mode-p 'message-mode) + (eq message-send-mail-function 'message-send-mail-with-mailclient) + (eq send-mail-function 'mailclient-send-it)) + ;; Not narrowing to the headers, but that's OK. + (let ((from (mail-fetch-field "From"))) + (and (or (not from) + (message-bogus-recipient-p from) + ;; This is the default user-mail-address. On today's + ;; systems, it seems more likely to be wrong than right, + ;; since most people don't run their own mail server. + (string-match (format "\\<%s@%s\\>" + (regexp-quote (user-login-name)) + (regexp-quote (system-name))) + from)) + (not (yes-or-no-p + (format "Is `%s' really your email address? " from))) + (error "Please edit the From address and try again")))) ;; Delete the uninteresting text that was just to help fill out the report. (rfc822-goto-eoh) (forward-line 1) diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el index 2a8140dd972..2ed54aa8d86 100644 --- a/lisp/mail/rmail.el +++ b/lisp/mail/rmail.el @@ -3584,15 +3584,18 @@ does not pop any summary buffer." (if (stringp subject) (setq subject (rfc2047-decode-string subject))) (prog1 (compose-mail to subject other-headers noerase - switch-function yank-action sendactions) + switch-function yank-action sendactions + `(rmail-mail-return ,replybuffer)) (if (eq switch-function 'switch-to-buffer-other-frame) ;; This is not a standard frame parameter; nothing except ;; sendmail.el looks at it. - (modify-frame-parameters (selected-frame) + (modify-frame-parameters (selected-frame) '((mail-dedicated-frame . t))))))) (defun rmail-mail-return (&optional newbuf) - "NEWBUF is a buffer to switch to." + "Try to return to Rmail from the mail window. +If optional argument NEWBUF is specified, it is the Rmail buffer +to switch to." (cond ;; If there is only one visible frame with no special handling, ;; consider deleting the mail window to return to Rmail. @@ -3602,23 +3605,30 @@ does not pop any summary buffer." (cdr (assq 'mail-dedicated-frame (frame-parameters)))))) (let (rmail-flag summary-buffer) - (and (not (one-window-p)) - (with-current-buffer - (window-buffer (next-window (selected-window) 'not)) - (setq rmail-flag (eq major-mode 'rmail-mode)) - (setq summary-buffer - (and (boundp 'mail-bury-selects-summary) - mail-bury-selects-summary - (boundp 'rmail-summary-buffer) - rmail-summary-buffer - (buffer-name rmail-summary-buffer) - (not (get-buffer-window rmail-summary-buffer)) - rmail-summary-buffer)))) - (if rmail-flag - ;; If the Rmail buffer has a summary, show that. - (if summary-buffer (switch-to-buffer summary-buffer) - (delete-window)) - (switch-to-buffer newbuf)))) + (unless (one-window-p) + (with-current-buffer + (window-buffer (next-window (selected-window) 'not)) + (setq rmail-flag (eq major-mode 'rmail-mode)) + (setq summary-buffer + (and (boundp 'mail-bury-selects-summary) + mail-bury-selects-summary + (boundp 'rmail-summary-buffer) + rmail-summary-buffer + (buffer-name rmail-summary-buffer) + (not (get-buffer-window rmail-summary-buffer)) + rmail-summary-buffer)))) + (cond ((null rmail-flag) + ;; If the Rmail buffer is not in the next window, switch + ;; directly to the Rmail buffer specified by NEWBUF. + (if (buffer-live-p newbuf) + (switch-to-buffer newbuf))) + ;; If the Rmail buffer is in the next window, switch to + ;; the summary buffer if `mail-bury-selects-summary' is + ;; non-nil. Otherwise just delete this window. + (summary-buffer + (switch-to-buffer summary-buffer)) + (t + (delete-window))))) ;; If the frame was probably made for this buffer, the user ;; probably wants to delete it now. ((display-multi-frame-p) @@ -4353,6 +4363,9 @@ encoded string (and the same mask) will decode the string." (setq i (1+ i))) (concat string-vector))) +;; Should this have a key-binding, or be in a menu? +;; There doesn't really seem to be an appropriate menu. +;; Eg the edit command is not in a menu either. (defun rmail-epa-decrypt () "Decrypt OpenPGP armors in current message." (interactive) diff --git a/lisp/mail/sendmail.el b/lisp/mail/sendmail.el index 18d928e4b90..91e0b183a68 100644 --- a/lisp/mail/sendmail.el +++ b/lisp/mail/sendmail.el @@ -513,48 +513,51 @@ This also saves the value of `send-mail-function' via Customize." ;; a second time, probably because someone's using an old value ;; of send-mail-function. (when (eq send-mail-function 'sendmail-query-once) - (let* ((options `(("mail client" . mailclient-send-it) - ,@(when (and sendmail-program - (executable-find sendmail-program)) - '(("transport" . sendmail-send-it))) - ("smtp" . smtpmail-send-it))) - (choice - ;; Query the user. - (with-temp-buffer - (rename-buffer "*Emacs Mail Setup Help*" t) - (insert "\ + (sendmail-query-user-about-smtp)) + (funcall send-mail-function)) + +(defun sendmail-query-user-about-smtp () + (let* ((options `(("mail client" . mailclient-send-it) + ,@(when (and sendmail-program + (executable-find sendmail-program)) + '(("transport" . sendmail-send-it))) + ("smtp" . smtpmail-send-it))) + (choice + ;; Query the user. + (with-temp-buffer + (rename-buffer "*Emacs Mail Setup Help*" t) + (insert "\ Emacs is about to send an email message, but it has not been configured for sending email. To tell Emacs how to send email: - Type `" - (propertize "mail client" 'face 'bold) - "' to start your default email client and + (propertize "mail client" 'face 'bold) + "' to start your default email client and pass it the message text.\n\n") - (and sendmail-program - (executable-find sendmail-program) - (insert "\ + (and sendmail-program + (executable-find sendmail-program) + (insert "\ - Type `" - (propertize "transport" 'face 'bold) - "' to invoke the system's mail transport agent + (propertize "transport" 'face 'bold) + "' to invoke the system's mail transport agent (the `" - sendmail-program - "' program).\n\n")) - (insert "\ + sendmail-program + "' program).\n\n")) + (insert "\ - Type `" - (propertize "smtp" 'face 'bold) - "' to send mail directly to an \"outgoing mail\" server. + (propertize "smtp" 'face 'bold) + "' to send mail directly to an \"outgoing mail\" server. (Emacs may prompt you for SMTP settings). Emacs will record your selection and will use it thereafter. To change it later, customize the option `send-mail-function'.\n") - (goto-char (point-min)) - (display-buffer (current-buffer)) - (let ((completion-ignore-case t)) - (completing-read "Send mail via: " - options nil 'require-match))))) - (customize-save-variable 'send-mail-function - (cdr (assoc-string choice options t))))) - (funcall send-mail-function)) + (goto-char (point-min)) + (display-buffer (current-buffer)) + (let ((completion-ignore-case t)) + (completing-read "Send mail via: " + options nil 'require-match))))) + (customize-save-variable 'send-mail-function + (cdr (assoc-string choice options t))))) (defun sendmail-sync-aliases () (when mail-personal-alias-file diff --git a/lisp/mail/smtpmail.el b/lisp/mail/smtpmail.el index e3051fd0c9f..99283bebf9d 100644 --- a/lisp/mail/smtpmail.el +++ b/lisp/mail/smtpmail.el @@ -200,7 +200,10 @@ The list is in preference order.") ;; local binding in the mail buffer will take effect. (smtpmail-mail-address (or (and mail-specify-envelope-from (mail-envelope-from)) - user-mail-address)) + (smtpmail-user-mail-address) + (let ((from (mail-fetch-field "from"))) + (and from + (cadr (mail-extract-address-components from)))))) (smtpmail-code-conv-from (if enable-multibyte-characters (let ((sendmail-coding-system smtpmail-code-conv-from)) @@ -611,6 +614,15 @@ The list is in preference order.") (unless smtpmail-smtp-server (error "Couldn't contact an SMTP server")))) +(defun smtpmail-user-mail-address () + "Return `user-mail-address' if it's a valid email address." + (and user-mail-address + (let ((parts (split-string user-mail-address "@"))) + (and (= (length parts) 2) + ;; There's a dot in the domain name. + (string-match "\\." (cadr parts)) + user-mail-address)))) + (defun smtpmail-via-smtp (recipient smtpmail-text-buffer &optional ask-for-password) (unless smtpmail-smtp-server @@ -621,10 +633,16 @@ The list is in preference order.") (port smtpmail-smtp-service) ;; `smtpmail-mail-address' should be set to the appropriate ;; buffer-local value by the caller, but in case not: - (envelope-from (or smtpmail-mail-address - (and mail-specify-envelope-from - (mail-envelope-from)) - user-mail-address)) + (envelope-from + (or smtpmail-mail-address + (and mail-specify-envelope-from + (mail-envelope-from)) + (smtpmail-user-mail-address) + ;; Fall back on the From: header as the envelope From + ;; address. + (let ((from (mail-fetch-field "from"))) + (and from + (cadr (mail-extract-address-components from)))))) response-code process-buffer result diff --git a/lisp/mail/supercite.el b/lisp/mail/supercite.el index c91c4b9fcd8..d10b073eb12 100644 --- a/lisp/mail/supercite.el +++ b/lisp/mail/supercite.el @@ -1,6 +1,6 @@ ;;; supercite.el --- minor mode for citing mail and news replies -;; Copyright (C) 1993, 1997, 2001-2012 Free Software Foundation, Inc. +;; Copyright (C) 1993, 1997, 2001-2012 Free Software Foundation, Inc. ;; Author: 1993 Barry A. Warsaw ;; Maintainer: Glenn Morris @@ -1847,8 +1847,7 @@ Note on function names in this list: all functions of the form ;; ====================================================================== ;; published interface to mail and news readers -(define-minor-mode sc-minor-mode - "Supercite minor mode." +(define-minor-mode sc-minor-mode nil :group 'supercite :lighter (" SC" (sc-auto-fill-region-p (":f" (sc-fixup-whitespace-p "w")) diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el index 7e54a9762ec..1f57601a711 100644 --- a/lisp/menu-bar.el +++ b/lisp/menu-bar.el @@ -683,29 +683,10 @@ by \"Save Options\" in Custom buffers.") (defun menu-set-font () "Interactively select a font and make it the default." (interactive) - (let ((font (if (fboundp 'x-select-font) - (x-select-font) - (mouse-select-font))) - spec) - (when font - ;; Be careful here: when set-face-attribute is called for the - ;; :font attribute, Emacs tries to guess the best matching font - ;; by examining the other face attributes (Bug#2476). - (set-face-attribute 'default (selected-frame) - :width 'normal - :weight 'normal - :slant 'normal - :font font) - (let ((font-object (face-attribute 'default :font))) - (dolist (f (frame-list)) - (and (not (eq f (selected-frame))) - (display-graphic-p f) - (set-face-attribute 'default f :font font-object))) - (set-face-attribute 'default t :font font-object)) - (setq spec (list (list t (face-attr-construct 'default)))) - (put 'default 'customized-face spec) - (custom-push-theme 'theme-face 'default 'user 'set spec) - (put 'default 'face-modified nil)))) + (set-frame-font (if (fboundp 'x-select-font) + (x-select-font) + (mouse-select-font)) + nil t)) (defun menu-bar-options-save () "Save current values of Options menu items using Custom." diff --git a/lisp/mh-e/ChangeLog b/lisp/mh-e/ChangeLog index 5ae9f8ecccc..2c3d0dc3803 100644 --- a/lisp/mh-e/ChangeLog +++ b/lisp/mh-e/ChangeLog @@ -52,7 +52,7 @@ pop-to-buffer-same-window. * mh-folder.el (mh-inc-folder, mh-modify, mh-scan-folder) (mh-make-folder): Call mh-pop-to-buffer-same-window instead of - switch-to-buffer. The previous change which used pop-to-buffer + switch-to-buffer. The previous change which used pop-to-buffer produced the wrong behavior. 2011-07-12 Henrique Martins (tiny change) @@ -73,8 +73,8 @@ * mh-folder.el (mh-inc-folder, mh-modify, mh-scan-folder) (mh-make-folder): Replace calls to switch-to-buffer with of - pop-to-buffer. The former is intended for interactive use only and - generates warnings in Emacs 24. + pop-to-buffer. The former is intended for interactive use only + and generates warnings in Emacs 24. 2011-07-09 Bill Wohler @@ -96,7 +96,7 @@ * mh-e.el: Just require mh-loaddefs since loading it in an eval-and-compile block causes compilation errors in XEmacs. - * mh-acros.el, mh-comp.el, mh-e.el, mh-folder.el, mh-letter.el: + * mh-acros.el, mh-comp.el, mh-e.el, mh-folder.el, mh-letter.el: * mh-mime.el, mh-search.el, mh-seq.el: Shush XEmacs compiler in mh-do-in-xemacs block. @@ -107,7 +107,7 @@ * mh-letter.el (mh-letter-mode-map, mh-letter-complete) (mh-complete-word): Remove FIXME comments since these functions - are still needed in other Emacsen. However, they can probably + are still needed in other Emacsen. However, they can probably stand to be generalized like completion-at-point. (mh-letter-complete-or-space): Remove unused variable. @@ -173,7 +173,7 @@ 2010-05-14 Peter S Galbraith * mh-mime.el (mh-decode-message-subject): New function to decode - RFC2047 encoded Subject lines. Used for reply drafts. + RFC2047 encoded Subject lines. Used for reply drafts. * mh-comp.el (mh-compose-and-send-mail): Call `mh-decode-message-subject' on (reply or forward) message drafts. diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 3d9b30bcbb3..cb2f2d76384 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -1515,7 +1515,10 @@ exit." ;; (defalias 'completion-in-region--prech 'completion-in-region--postch) (define-minor-mode completion-in-region-mode - "Transient minor mode used during `completion-in-region'." + "Transient minor mode used during `completion-in-region'. +With a prefix argument ARG, enable the modemode if ARG is +positive, and disable it otherwise. If called from Lisp, enable +the mode if ARG is omitted or nil." :global t (setq completion-in-region--data nil) ;; (remove-hook 'pre-command-hook #'completion-in-region--prech) diff --git a/lisp/net/ange-ftp.el b/lisp/net/ange-ftp.el index 93954588fa9..4338cdff3cd 100644 --- a/lisp/net/ange-ftp.el +++ b/lisp/net/ange-ftp.el @@ -3098,7 +3098,8 @@ logged in as user USER and cd'd to directory DIR." (if (not (eq system-type 'windows-nt)) (setq name (ange-ftp-real-expand-file-name name)) ;; Windows UNC default dirs do not make sense for ftp. - (setq name (if (string-match "\\`//" default-directory) + (setq name (if (and default-directory + (string-match "\\`//" default-directory)) (ange-ftp-real-expand-file-name name "c:/") (ange-ftp-real-expand-file-name name))) ;; Strip off possible drive specifier. diff --git a/lisp/net/browse-url.el b/lisp/net/browse-url.el index f378277d5f0..50423208e34 100644 --- a/lisp/net/browse-url.el +++ b/lisp/net/browse-url.el @@ -944,7 +944,9 @@ used instead of `browse-url-new-window-flag'." url args)) (defun browse-url-can-use-xdg-open () - "Check if xdg-open can be used, i.e. we are on Gnome, KDE, Xfce4 or LXDE." + "Return non-nil if the \"xdg-open\" program can be used. +xdg-open is a desktop utility that calls your preferred web browser. +This requires you to be running either Gnome, KDE, Xfce4 or LXDE." (and (getenv "DISPLAY") (executable-find "xdg-open") ;; xdg-open may call gnome-open and that does not wait for its child @@ -967,6 +969,7 @@ used instead of `browse-url-new-window-flag'." (eq 0 (call-process "/bin/sh" nil nil nil "-c" + ;; FIXME use string-match rather than grep. "xprop -root _DT_SAVE_MODE|grep xfce4")) (error nil)) (member (getenv "DESKTOP_SESSION") '("LXDE" "Lubuntu")) @@ -974,7 +977,10 @@ used instead of `browse-url-new-window-flag'." ;;;###autoload -(defun browse-url-xdg-open (url &optional new-window) +(defun browse-url-xdg-open (url &optional ignored) + "Pass the specified URL to the \"xdg-open\" command. +xdg-open is a desktop utility that calls your preferred web browser. +The optional argument IGNORED is not used." (interactive (browse-url-interactive-arg "URL: ")) (call-process "xdg-open" nil 0 nil url)) diff --git a/lisp/net/goto-addr.el b/lisp/net/goto-addr.el index f95381fa808..e5fe45b5bf0 100644 --- a/lisp/net/goto-addr.el +++ b/lisp/net/goto-addr.el @@ -275,7 +275,10 @@ Also fontifies the buffer appropriately (see `goto-address-fontify-p' and ;;;###autoload (define-minor-mode goto-address-mode - "Minor mode to buttonize URLs and e-mail addresses in the current buffer." + "Minor mode to buttonize URLs and e-mail addresses in the current buffer. +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil." nil "" nil diff --git a/lisp/net/rcirc.el b/lisp/net/rcirc.el index 771c9839cc0..b8bf270d87c 100644 --- a/lisp/net/rcirc.el +++ b/lisp/net/rcirc.el @@ -1,6 +1,6 @@ ;;; rcirc.el --- default, simple IRC client. -;; Copyright (C) 2005-2012 Free Software Foundation, Inc. +;; Copyright (C) 2005-2012 Free Software Foundation, Inc. ;; Author: Ryan Yeske ;; Maintainers: Ryan Yeske , @@ -1261,7 +1261,10 @@ Create the buffer if it doesn't exist." "Keymap for multiline mode in rcirc.") (define-minor-mode rcirc-multiline-minor-mode - "Minor mode for editing multiple lines in rcirc." + "Minor mode for editing multiple lines in rcirc. +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil." :init-value nil :lighter " rcirc-mline" :keymap rcirc-multiline-minor-mode-map @@ -1779,7 +1782,10 @@ This function does not alter the INPUT string." ;;;###autoload (define-minor-mode rcirc-track-minor-mode - "Global minor mode for tracking activity in rcirc buffers." + "Global minor mode for tracking activity in rcirc buffers. +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil." :init-value nil :lighter "" :keymap rcirc-track-minor-mode-map diff --git a/lisp/net/tramp-cache.el b/lisp/net/tramp-cache.el index 03a5fe5b88e..d222dd1011d 100644 --- a/lisp/net/tramp-cache.el +++ b/lisp/net/tramp-cache.el @@ -243,7 +243,7 @@ PROPERTY is set persistent when KEY is a vector." (aset key 3 nil)) (let ((hash (or (gethash key tramp-cache-data) (puthash key (make-hash-table :test 'equal) - tramp-cache-data)))) + tramp-cache-data)))) (puthash property value hash) (setq tramp-cache-data-changed t) (tramp-message key 7 "%s %s" property value) @@ -329,10 +329,15 @@ KEY identifies the connection, it is either a process or a vector." tramp-cache-data-changed (stringp tramp-persistency-file-name)) (let ((cache (copy-hash-table tramp-cache-data))) - ;; Remove temporary data. + ;; Remove temporary data. If there is the key "login-as", we + ;; don't save either, because all other properties might + ;; depend on the login name, and we want to give the + ;; possibility to use another login name later on. (maphash (lambda (key value) - (if (and (vectorp key) (not (tramp-file-name-localname key))) + (if (and (vectorp key) + (not (tramp-file-name-localname key)) + (not (gethash "login-as" value))) (progn (remhash "process-name" value) (remhash "process-buffer" value) diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 2478253841f..38e19730a6d 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -380,7 +380,7 @@ detected as prompt when being sent on echoing hosts, therefore.") (tramp-remote-shell "/bin/sh") (tramp-remote-shell-args ("-c")) (tramp-copy-program "pscp") - (tramp-copy-args (("-P" "%p") ("-scp") ("-p" "%k") + (tramp-copy-args (("-l" "%u") ("-P" "%p") ("-scp") ("-p" "%k") ("-q") ("-r"))) (tramp-copy-keep-date t) (tramp-copy-recursive t) @@ -394,7 +394,7 @@ detected as prompt when being sent on echoing hosts, therefore.") (tramp-remote-shell "/bin/sh") (tramp-remote-shell-args ("-c")) (tramp-copy-program "pscp") - (tramp-copy-args (("-P" "%p") ("-sftp") ("-p" "%k") + (tramp-copy-args (("-l" "%u") ("-P" "%p") ("-sftp") ("-p" "%k") ("-q") ("-r"))) (tramp-copy-keep-date t) (tramp-copy-recursive t) @@ -419,13 +419,12 @@ detected as prompt when being sent on echoing hosts, therefore.") `(,(concat "\\`" (regexp-opt '("su" "sudo" "ksu")) "\\'") nil "root")) ;; Do not add "ssh" based methods, otherwise ~/.ssh/config would be ignored. +;; Do not add "plink" based methods, they ask interactively for the user. ;;;###tramp-autoload (add-to-list 'tramp-default-user-alist `(,(concat "\\`" - (regexp-opt - '("rcp" "remcp" "rsh" "telnet" "krlogin" - "plink" "plink1" "pscp" "psftp" "fcp")) + (regexp-opt '("rcp" "remcp" "rsh" "telnet" "krlogin" "fcp")) "\\'") nil ,(user-login-name))) @@ -2281,8 +2280,10 @@ The method used must be an out-of-band method." ;; Set variables for computing the prompt for reading ;; password. (setq tramp-current-method (tramp-file-name-method v) - tramp-current-user (tramp-file-name-user v) - tramp-current-host (tramp-file-name-real-host v)) + tramp-current-user (or (tramp-file-name-user v) + (tramp-get-connection-property + v "login-as" nil)) + tramp-current-host (tramp-file-name-real-host v)) ;; Expand hops. Might be necessary for gateway methods. (setq v (car (tramp-compute-multi-hops v))) @@ -2309,8 +2310,15 @@ The method used must be an out-of-band method." (setq port (string-to-number (match-string 2 host)) host (string-to-number (match-string 1 host)))) + ;; Check for user. There might be an interactive setting. + (setq user (or (tramp-file-name-user v) + (tramp-get-connection-property v "login-as" nil))) + ;; Compose copy command. - (setq spec (format-spec-make + (setq host (or host "") + user (or user "") + port (or port "") + spec (format-spec-make ?h host ?u user ?p port ?t (tramp-get-connection-property (tramp-get-connection-process v) "temp-file" "") diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index afb7ab4312b..f13315bc662 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -460,6 +460,12 @@ usually suffice.") "Regexp which matches `tramp-echo-mark' as it gets echoed by the remote shell.") +(defcustom tramp-local-end-of-line + (if (memq system-type '(windows-nt)) "\r\n" "\n") + "*String used for end of line in local processes." + :group 'tramp + :type 'string) + (defcustom tramp-rsh-end-of-line "\n" "*String used for end of line in rsh connections. I don't think this ever needs to be changed, so please tell me about it @@ -1902,7 +1908,7 @@ Falls back to normal file name handler if no Tramp file name handler exists." ;; operations shall return at least a default value ;; in order to give the user a chance to correct the ;; file name in the minibuffer. - ;; We cannot use 'debug as error handler. In order + ;; We cannot use `debug' as error handler. In order ;; to get a full backtrace, one could apply ;; (setq debug-on-error t debug-on-signal t) (error @@ -3109,14 +3115,16 @@ beginning of local filename are not substituted." (defun tramp-action-login (proc vec) "Send the login name." (when (not (stringp tramp-current-user)) - (save-window-excursion - (let ((enable-recursive-minibuffers t)) - (pop-to-buffer (tramp-get-connection-buffer vec)) - (setq tramp-current-user (read-string (match-string 0)))))) - (tramp-message vec 3 "Sending login name `%s'" tramp-current-user) + (setq tramp-current-user + (with-connection-property vec "login-as" + (save-window-excursion + (let ((enable-recursive-minibuffers t)) + (pop-to-buffer (tramp-get-connection-buffer vec)) + (read-string (match-string 0))))))) (with-current-buffer (tramp-get-connection-buffer vec) (tramp-message vec 6 "\n%s" (buffer-string))) - (tramp-send-string vec tramp-current-user)) + (tramp-message vec 3 "Sending login name `%s'" tramp-current-user) + (tramp-send-string vec (concat tramp-current-user tramp-local-end-of-line))) (defun tramp-action-password (proc vec) "Query the user for a password." @@ -3148,7 +3156,7 @@ See also `tramp-action-yn'." (throw 'tramp-action 'permission-denied)) (with-current-buffer (tramp-get-connection-buffer vec) (tramp-message vec 6 "\n%s" (buffer-string))) - (tramp-send-string vec "yes")))) + (tramp-send-string vec (concat "yes" tramp-local-end-of-line))))) (defun tramp-action-yn (proc vec) "Ask the user for confirmation using `y-or-n-p'. @@ -3162,7 +3170,7 @@ See also `tramp-action-yesno'." (throw 'tramp-action 'permission-denied)) (with-current-buffer (tramp-get-connection-buffer vec) (tramp-message vec 6 "\n%s" (buffer-string))) - (tramp-send-string vec "y")))) + (tramp-send-string vec (concat "y" tramp-local-end-of-line))))) (defun tramp-action-terminal (proc vec) "Tell the remote host which terminal type to use. @@ -3170,7 +3178,7 @@ The terminal type can be configured with `tramp-terminal-type'." (tramp-message vec 5 "Setting `%s' as terminal type." tramp-terminal-type) (with-current-buffer (tramp-get-connection-buffer vec) (tramp-message vec 6 "\n%s" (buffer-string))) - (tramp-send-string vec tramp-terminal-type)) + (tramp-send-string vec (concat tramp-terminal-type tramp-local-end-of-line))) (defun tramp-action-process-alive (proc vec) "Check, whether a process has finished." diff --git a/lisp/notifications.el b/lisp/notifications.el index c3b6c759506..9f7576b3f5d 100644 --- a/lisp/notifications.el +++ b/lisp/notifications.el @@ -107,9 +107,12 @@ notifications-action-signal 'notifications-on-action-signal)) -(defun notifications-on-closed-signal (id reason) +(defun notifications-on-closed-signal (id &optional reason) "Dispatch signals to callback functions from `notifications-on-closed-map'." - (let ((entry (assoc id notifications-on-close-map))) + ;; notification-daemon prior 0.4.0 does not send a reason. So we + ;; make it optional, and assume `undefined' as default. + (let ((entry (assoc id notifications-on-close-map)) + (reason (or reason 4))) (when entry (funcall (cadr entry) id (cadr (assoc reason notifications-closed-reason))) diff --git a/lisp/nxml/rng-valid.el b/lisp/nxml/rng-valid.el index 6fc696361e8..61b583b56c2 100644 --- a/lisp/nxml/rng-valid.el +++ b/lisp/nxml/rng-valid.el @@ -475,7 +475,7 @@ The schema is set like `rng-auto-set-schema'." (save-restriction (widen) (nxml-with-invisible-motion - (condition-case-no-debug err + (condition-case-unless-debug err (and (rng-validate-prepare) (let ((rng-dt-namespace-context-getter '(nxml-ns-get-context))) (nxml-with-unmodifying-text-property-changes diff --git a/lisp/org/ChangeLog b/lisp/org/ChangeLog index 7bee98d8110..2a188c5a736 100644 --- a/lisp/org/ChangeLog +++ b/lisp/org/ChangeLog @@ -924,8 +924,8 @@ 2012-01-03 Matt Lundin - * org-agenda.el: (org-class): Fix holidays symbol in - org-class. This was resulting in an "Bad sexp..." warning. + * org-agenda.el (org-class): Fix holidays symbol in org-class. + This was resulting in an "Bad sexp..." warning. 2012-01-03 Carsten Dominik @@ -968,13 +968,13 @@ 2012-01-03 Eric Schulte - * ob-sql.el (org-babel-header-arg-names:sql): Sql specific header + * ob-sql.el (org-babel-header-arg-names:sql): SQL specific header argument names which should be inherited. 2012-01-03 Nicolas Goaziou - * org.el (org-in-block-p): Return matched name of block, if - any. It can be useful when a list of block names is provided as + * org.el (org-in-block-p): Return matched name of block, if any. + It can be useful when a list of block names is provided as an argument. 2012-01-03 Nicolas Goaziou @@ -1038,10 +1038,10 @@ * org-exp.el (org-export-protect-quoted-subtrees): More accurate regexp. Also use new regexp to match generic headlines. - * org-html.el (org-export-as-html): More accurate regexp. Also - use new regexp to match generic headlines. + * org-html.el (org-export-as-html): More accurate regexp. + Also use new regexp to match generic headlines. - * org-mouse.el (org-mouse-match-todo-keyword): Removed unused + * org-mouse.el (org-mouse-match-todo-keyword): Remove unused and now erroneous function. * org.el (org-heading-regexp, org-heading-keyword-regexp-format): @@ -1071,8 +1071,8 @@ 2012-01-03 David Maus - * org.el (org-loop-over-headlines-in-active-region): New - customization variable. Loop over headlines in active region. + * org.el (org-loop-over-headlines-in-active-region): + New customization variable. Loop over headlines in active region. (org-schedule, org-deadline): Apply to headlines in region depending on new customization variable. @@ -1092,8 +1092,8 @@ 2012-01-03 Bastien Guerry - * org.el (org-format-agenda-item, org-scan-tags): Rename - `org-format-agenda-item' to `org-agenda-format-item'. + * org.el (org-format-agenda-item, org-scan-tags): + Rename `org-format-agenda-item' to `org-agenda-format-item'. 2012-01-03 Bastien Guerry diff --git a/lisp/pcmpl-gnu.el b/lisp/pcmpl-gnu.el index 6ce51d156cb..da72c81c44a 100644 --- a/lisp/pcmpl-gnu.el +++ b/lisp/pcmpl-gnu.el @@ -243,6 +243,8 @@ "--volno-file="))) (pcomplete-opt "01234567ABCFGKLMNOPRSTUVWXZbcdfghiklmoprstuvwxz")) (cond + ((pcomplete-match "\\`-\\'" 0) + (pcomplete-here*)) ((pcomplete-match "\\`--after-date=" 0) (pcomplete-here*)) ((pcomplete-match "\\`--backup=" 0) diff --git a/lisp/pcmpl-unix.el b/lisp/pcmpl-unix.el index 2dc25d93abf..3af22c82dfb 100644 --- a/lisp/pcmpl-unix.el +++ b/lisp/pcmpl-unix.el @@ -152,13 +152,15 @@ documentation), this function returns nil." (file-readable-p pcmpl-ssh-known-hosts-file)) (with-temp-buffer (insert-file-contents-literally pcmpl-ssh-known-hosts-file) - (let (ssh-hosts-list) - (while (re-search-forward "^ *\\([-.[:alnum:]]+\\)[, ]" nil t) - (add-to-list 'ssh-hosts-list (match-string 1)) + (let ((host-re "\\(?:\\([-.[:alnum:]]+\\)\\|\\[\\([-.[:alnum:]]+\\)\\]:[0-9]+\\)[, ]") + ssh-hosts-list) + (while (re-search-forward (concat "^ *" host-re) nil t) + (add-to-list 'ssh-hosts-list (concat (match-string 1) + (match-string 2))) (while (and (looking-back ",") - (re-search-forward "\\([-.[:alnum:]]+\\)[, ]" - (line-end-position) t)) - (add-to-list 'ssh-hosts-list (match-string 1)))) + (re-search-forward host-re (line-end-position) t)) + (add-to-list 'ssh-hosts-list (concat (match-string 1) + (match-string 2))))) ssh-hosts-list)))) (defun pcmpl-ssh-config-hosts () diff --git a/lisp/progmodes/cc-cmds.el b/lisp/progmodes/cc-cmds.el index 76b9f304164..509bb203f78 100644 --- a/lisp/progmodes/cc-cmds.el +++ b/lisp/progmodes/cc-cmds.el @@ -4382,11 +4382,8 @@ Optional prefix ARG means justify paragraph as well." (let ((fill-paragraph-function ;; Avoid infinite recursion. (if (not (eq fill-paragraph-function 'c-fill-paragraph)) - fill-paragraph-function)) - (start-point (point-marker))) - (c-mask-paragraph - t nil (lambda () (fill-region-as-paragraph (point-min) (point-max) arg))) - (goto-char start-point)) + fill-paragraph-function))) + (c-mask-paragraph t nil 'fill-paragraph arg)) ;; Always return t. This has the effect that if filling isn't done ;; above, it isn't done at all, and it's therefore effectively ;; disabled in normal code. diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index 2e0294341da..be0f86ddd7e 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -2074,7 +2074,7 @@ comment at the start of cc-engine.el for more info." ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; We maintain a simple cache of positions which aren't in a literal, so as to ;; speed up testing for non-literality. -(defconst c-state-nonlit-pos-interval 10000) +(defconst c-state-nonlit-pos-interval 3000) ;; The approximate interval between entries in `c-state-nonlit-pos-cache'. (defvar c-state-nonlit-pos-cache nil) @@ -2129,7 +2129,7 @@ comment at the start of cc-engine.el for more info." (widen) (save-excursion (let ((c c-state-nonlit-pos-cache) - pos npos lit) + pos npos lit macro-beg) ;; Trim the cache to take account of buffer changes. (while (and c (> (car c) c-state-nonlit-pos-cache-limit)) (setq c (cdr c))) @@ -2139,16 +2139,32 @@ comment at the start of cc-engine.el for more info." (setq c (cdr c))) (setq pos (or (car c) (point-min))) - (while (<= (setq npos (+ pos c-state-nonlit-pos-interval)) - here) - (setq lit (car (cddr (c-state-pp-to-literal pos npos)))) - (setq pos (or (cdr lit) npos)) ; end of literal containing npos. + (while + ;; Add an element to `c-state-nonlit-pos-cache' each iteration. + (and + (<= (setq npos (+ pos c-state-nonlit-pos-interval)) here) + (progn + (setq lit (car (cddr (c-state-pp-to-literal pos npos)))) + (cond + ((null lit) + (setq pos npos) + t) + ((<= (cdr lit) here) + (setq pos (cdr lit)) + t) + (t + (setq pos (car lit)) + nil)))) + (goto-char pos) (when (and (c-beginning-of-macro) (/= (point) pos)) - (c-syntactic-end-of-macro) - (or (eobp) (forward-char)) - (setq pos (point))) - (setq c-state-nonlit-pos-cache (cons pos c-state-nonlit-pos-cache))) + (setq macro-beg (point)) + (c-syntactic-end-of-macro) + (or (eobp) (forward-char)) + (setq pos (if (<= (point) here) + (point) + macro-beg))) + (setq c-state-nonlit-pos-cache (cons pos c-state-nonlit-pos-cache))) (if (> pos c-state-nonlit-pos-cache-limit) (setq c-state-nonlit-pos-cache-limit pos)) @@ -4351,6 +4367,78 @@ comment at the start of cc-engine.el for more info." (t 'c))) ; Assuming the range is valid. range)) +(defsubst c-determine-limit-get-base (start try-size) + ;; Get a "safe place" approximately TRY-SIZE characters before START. + ;; This doesn't preserve point. + (let* ((pos (max (- start try-size) (point-min))) + (base (c-state-safe-place pos)) + (s (parse-partial-sexp base pos))) + (if (or (nth 4 s) (nth 3 s)) ; comment or string + (nth 8 s) + (point)))) + +(defun c-determine-limit (how-far-back &optional start try-size) + ;; Return a buffer position HOW-FAR-BACK non-literal characters from START + ;; (default point). This is done by going back further in the buffer then + ;; searching forward for literals. The position found won't be in a + ;; literal. We start searching for the sought position TRY-SIZE (default + ;; twice HOW-FAR-BACK) bytes back from START. This function must be fast. + ;; :-) + (save-excursion + (let* ((start (or start (point))) + (try-size (or try-size (* 2 how-far-back))) + (base (c-determine-limit-get-base start try-size)) + (pos base) + + (s (parse-partial-sexp pos pos)) ; null state. + stack elt size + (count 0)) + (while (< pos start) + ;; Move forward one literal each time round this loop. + ;; Move forward to the start of a comment or string. + (setq s (parse-partial-sexp + pos + start + nil ; target-depth + nil ; stop-before + s ; state + 'syntax-table)) ; stop-comment + + ;; Gather details of the non-literal-bit - starting pos and size. + (setq size (- (if (or (nth 4 s) (nth 3 s)) + (nth 8 s) + (point)) + pos)) + (if (> size 0) + (setq stack (cons (cons pos size) stack))) + + ;; Move forward to the end of the comment/string. + (if (or (nth 4 s) (nth 3 s)) + (setq s (parse-partial-sexp + (point) + start + nil ; target-depth + nil ; stop-before + s ; state + 'syntax-table))) ; stop-comment + (setq pos (point))) + + ;; Now try and find enough non-literal characters recorded on the stack. + ;; Go back one recorded literal each time round this loop. + (while (and (< count how-far-back) + stack) + (setq elt (car stack) + stack (cdr stack)) + (setq count (+ count (cdr elt)))) + + ;; Have we found enough yet? + (cond + ((>= count how-far-back) + (+ (car elt) (- count how-far-back))) + ((eq base (point-min)) + (point-min)) + (t + (c-determine-limit (- how-far-back count) base try-size)))))) ;; `c-find-decl-spots' and accompanying stuff. @@ -4487,13 +4575,14 @@ comment at the start of cc-engine.el for more info." ;; Call CFD-FUN for each possible spot for a declaration, cast or ;; label from the point to CFD-LIMIT. ;; - ;; CFD-FUN is called with point at the start of the spot. It's - ;; passed two arguments: The first is the end position of the token - ;; preceding the spot, or 0 for the implicit match at bob. The - ;; second is a flag that is t when the match is inside a macro. If - ;; CFD-FUN adds `c-decl-end' properties somewhere below the current - ;; spot, it should return non-nil to ensure that the next search - ;; will find them. + ;; CFD-FUN is called with point at the start of the spot. It's passed two + ;; arguments: The first is the end position of the token preceding the spot, + ;; or 0 for the implicit match at bob. The second is a flag that is t when + ;; the match is inside a macro. Point should be moved forward by at least + ;; one token. + ;; + ;; If CFD-FUN adds `c-decl-end' properties somewhere below the current spot, + ;; it should return non-nil to ensure that the next search will find them. ;; ;; Such a spot is: ;; o The first token after bob. @@ -4867,7 +4956,8 @@ comment at the start of cc-engine.el for more info." (goto-char cfd-continue-pos) (if (= cfd-continue-pos cfd-limit) (setq cfd-match-pos cfd-limit) - (c-find-decl-prefix-search))))) + (c-find-decl-prefix-search))))) ; Moves point, sets cfd-continue-pos, + ; cfd-match-pos, etc. ;; A cache for found types. @@ -7306,6 +7396,7 @@ comment at the start of cc-engine.el for more info." (let ((start (point)) start-char (c-promote-possible-types t) + lim ;; Turn off recognition of angle bracket arglists while parsing ;; types here since the protocol reference list might then be ;; considered part of the preceding name or superclass-name. @@ -7333,6 +7424,7 @@ comment at the start of cc-engine.el for more info." ; (c-forward-token-2) ; 2006/1/13 This doesn't move if the token's ; at EOB. (goto-char (match-end 0)) + (setq lim (point)) (c-skip-ws-forward) (c-forward-type)) @@ -7357,7 +7449,7 @@ comment at the start of cc-engine.el for more info." t)))) (progn - (c-backward-syntactic-ws) + (c-backward-syntactic-ws lim) (c-clear-c-type-property start (1- (point)) 'c-decl-end) (c-put-c-type-property (1- (point)) 'c-decl-end) t) @@ -7500,14 +7592,17 @@ comment at the start of cc-engine.el for more info." (save-restriction ;; If we're in a macro, our search range is restricted to it. Narrow to ;; the searchable range. - (let* ((macro-start (c-query-macro-start)) - (lim (max (or lim (point-min)) (or macro-start (point-min)))) + (let* ((macro-start (save-excursion (and (c-beginning-of-macro) (point)))) + (macro-end (save-excursion (and macro-start (c-end-of-macro) (point)))) + (low-lim (max (or lim (point-min)) (or macro-start (point-min)))) before-lparen after-rparen - (pp-count-out 20)) ; Max number of paren/brace constructs before we give up - (narrow-to-region lim (c-point 'eol)) + (pp-count-out 20)) ; Max number of paren/brace constructs before + ; we give up + (narrow-to-region low-lim (or macro-end (point-max))) ;; Search backwards for the defun's argument list. We give up if we - ;; encounter a "}" (end of a previous defun) or BOB. + ;; encounter a "}" (end of a previous defun) an "=" (which can't be in + ;; a knr region) or BOB. ;; ;; The criterion for a paren structure being the arg list is: ;; o - there is non-WS stuff after it but before any "{"; AND @@ -7527,12 +7622,13 @@ comment at the start of cc-engine.el for more info." (catch 'knr (while (> pp-count-out 0) ; go back one paren/bracket pair each time. (setq pp-count-out (1- pp-count-out)) - (c-syntactic-skip-backward "^)]}") + (c-syntactic-skip-backward "^)]}=") (cond ((eq (char-before) ?\)) (setq after-rparen (point))) ((eq (char-before) ?\]) (setq after-rparen nil)) - (t ; either } (hit previous defun) or no more parens/brackets + (t ; either } (hit previous defun) or = or no more + ; parens/brackets. (throw 'knr nil))) (if after-rparen @@ -7548,18 +7644,18 @@ comment at the start of cc-engine.el for more info." ;; It can't be the arg list if next token is ; or { (progn (goto-char after-rparen) (c-forward-syntactic-ws) - (not (memq (char-after) '(?\; ?\{)))) + (not (memq (char-after) '(?\; ?\{ ?\=)))) ;; Is the thing preceding the list an identifier (the ;; function name), or a macro expansion? (progn (goto-char before-lparen) (eq (c-backward-token-2) 0) - (or (c-on-identifier) + (or (eq (c-on-identifier) (point)) (and (eq (char-after) ?\)) (c-go-up-list-backward) (eq (c-backward-token-2) 0) - (c-on-identifier)))) + (eq (c-on-identifier) (point))))) ;; Have we got a non-empty list of comma-separated ;; identifiers? @@ -8047,6 +8143,23 @@ comment at the start of cc-engine.el for more info." next-open-brace (c-pull-open-brace paren-state))) open-brace)) +(defun c-cheap-inside-bracelist-p (paren-state) + ;; Return the position of the L-brace if point is inside a brace list + ;; initialization of an array, etc. This is an approximate function, + ;; designed for speed over accuracy. It will not find every bracelist, but + ;; a non-nil result is reliable. We simply search for "= {" (naturally with + ;; syntactic whitespace allowed). PAREN-STATE is the normal thing that it + ;; is everywhere else. + (let (b-pos) + (save-excursion + (while + (and (setq b-pos (c-pull-open-brace paren-state)) + (progn (goto-char b-pos) + (c-backward-sws) + (c-backward-token-2) + (not (looking-at "="))))) + b-pos))) + (defun c-inside-bracelist-p (containing-sexp paren-state) ;; return the buffer position of the beginning of the brace list ;; statement if we're inside a brace list, otherwise return nil. @@ -9340,7 +9453,7 @@ comment at the start of cc-engine.el for more info." ;; CASE 5B.1: Member init list. ((eq (char-after tmp-pos) ?:) - (if (or (> tmp-pos indent-point) + (if (or (>= tmp-pos indent-point) (= (c-point 'bosws) (1+ tmp-pos))) (progn ;; There is no preceding member init clause. diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el index e7d00815708..2d116e1ecdc 100644 --- a/lisp/progmodes/cc-fonts.el +++ b/lisp/progmodes/cc-fonts.el @@ -446,10 +446,12 @@ ;; `parse-sexp-lookup-properties' (when it exists). (parse-sexp-lookup-properties (cc-eval-when-compile - (boundp 'parse-sexp-lookup-properties)))) + (boundp 'parse-sexp-lookup-properties))) + (BOD-limit + (c-determine-limit 1000))) (goto-char (let ((here (point))) - (if (eq (car (c-beginning-of-decl-1)) 'same) + (if (eq (car (c-beginning-of-decl-1 BOD-limit)) 'same) (point) here))) ,(c-make-font-lock-search-form regexp highlights)) @@ -1240,6 +1242,7 @@ casts and declarations are fontified. Used on level 2 and higher." ;; it finds any. That's necessary so that we later will ;; stop inside them to fontify types there. (c-parse-and-markup-<>-arglists t) + lbrace ; position of some {. ;; The font-lock package in Emacs is known to clobber ;; `parse-sexp-lookup-properties' (when it exists). (parse-sexp-lookup-properties @@ -1351,7 +1354,6 @@ casts and declarations are fontified. Used on level 2 and higher." (or (looking-at c-typedef-key) (goto-char start-pos))) - ;; Now analyze the construct. ;; In QT, "more" is an irritating keyword that expands to nothing. ;; We skip over it to prevent recognition of "more slots: " ;; as a bitfield declaration. @@ -1360,6 +1362,8 @@ casts and declarations are fontified. Used on level 2 and higher." (concat "\\(more\\)\\([^" c-symbol-chars "]\\|$\\)"))) (goto-char (match-end 1)) (c-forward-syntactic-ws)) + + ;; Now analyze the construct. (setq decl-or-cast (c-forward-decl-or-cast-1 match-pos context last-cast-end)) @@ -1428,6 +1432,39 @@ casts and declarations are fontified. Used on level 2 and higher." (c-fontify-recorded-types-and-refs) nil) + ;; Restore point, since at this point in the code it has been + ;; left undefined by c-forward-decl-or-cast-1 above. + ((progn (goto-char start-pos) nil)) + + ;; If point is inside a bracelist, there's no point checking it + ;; being at a declarator. + ((let ((paren-state (c-parse-state))) + (setq lbrace (c-cheap-inside-bracelist-p paren-state))) + ;; Move past this bracelist to prevent an endless loop. + (goto-char lbrace) + (unless (c-safe (progn (forward-list) t)) + (goto-char start-pos) + (c-forward-token-2)) + nil) + + ;; If point is just after a ")" which is followed by an + ;; identifier which isn't a label, or at the matching "(", we're + ;; at either a macro invocation, a cast, or a + ;; for/while/etc. statement. The cast case is handled above. + ;; None of these cases can contain a declarator. + ((or (and (eq (char-before match-pos) ?\)) + (c-on-identifier) + (save-excursion (not (c-forward-label)))) + (and (eq (char-after) ?\() + (save-excursion + (and + (progn (c-backward-token-2) (c-on-identifier)) + (save-excursion (not (c-forward-label))) + (progn (c-backward-token-2) + (eq (char-after) ?\()))))) + (c-forward-token-2) ; Must prevent looping. + nil) + ((and (not c-enums-contain-decls) ;; An optimization quickly to eliminate scans of long enum ;; declarations in the next cond arm. @@ -1441,13 +1478,14 @@ casts and declarations are fontified. Used on level 2 and higher." (progn (c-backward-token-2) (looking-at c-brace-list-key))))))) - t) + (c-forward-token-2) + nil) (t ;; Are we at a declarator? Try to go back to the declaration ;; to check this. If we get there, check whether a "typedef" ;; is there, then fontify the declarators accordingly. - (let ((decl-search-lim (max (- (point) 50000) (point-min))) + (let ((decl-search-lim (c-determine-limit 1000)) paren-state bod-res encl-pos is-typedef c-recognize-knr-p) ; Strictly speaking, bogus, but it ; speeds up lisp.h tremendously. diff --git a/lisp/progmodes/cc-guess.el b/lisp/progmodes/cc-guess.el index fcd6a443b67..4dd802ead0b 100644 --- a/lisp/progmodes/cc-guess.el +++ b/lisp/progmodes/cc-guess.el @@ -85,6 +85,7 @@ Discard an examined offset if its absolute value is greater than this. The offset of a line included in the indent information returned by `c-guess-basic-syntax'." + :version "24.1" :type 'integer :group 'c) @@ -92,6 +93,7 @@ The offset of a line included in the indent information returned by "The maximum region size for examining indent information with `c-guess'. It takes a long time to examine indent information from a large region; this option helps you limit that time. `nil' means no limit." + :version "24.1" :type 'integer :group 'c) diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el index b74d878516d..374c9b434d1 100644 --- a/lisp/progmodes/cc-mode.el +++ b/lisp/progmodes/cc-mode.el @@ -490,6 +490,7 @@ that requires a literal mode spec at compile time." (make-local-variable 'paragraph-ignore-fill-prefix) (make-local-variable 'adaptive-fill-mode) (make-local-variable 'adaptive-fill-regexp) + (make-local-variable 'fill-paragraph-handle-comment) ;; now set their values (set (make-local-variable 'parse-sexp-ignore-comments) t) @@ -500,6 +501,9 @@ that requires a literal mode spec at compile time." (set (make-local-variable 'comment-line-break-function) 'c-indent-new-comment-line) + ;; For the benefit of adaptive file, which otherwise mis-fills. + (setq fill-paragraph-handle-comment nil) + ;; Install `c-fill-paragraph' on `fill-paragraph-function' so that a ;; direct call to `fill-paragraph' behaves better. This still ;; doesn't work with filladapt but it's better than nothing. @@ -1151,7 +1155,8 @@ Note that the style variables are always made local to the buffer." ;; `c-set-fl-decl-start' for the detailed functionality. (cons (c-set-fl-decl-start beg) end)) -(defvar c-standard-font-lock-fontify-region-function nil +(defvar c-standard-font-lock-fontify-region-function + (default-value 'font-lock-fontify-region-function) "Standard value of `font-lock-fontify-region-function'") (defun c-font-lock-fontify-region (beg end &optional verbose) diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el index f152209956f..c1d8f9db23f 100644 --- a/lisp/progmodes/compile.el +++ b/lisp/progmodes/compile.el @@ -74,11 +74,14 @@ If Emacs lacks asynchronous process support, this hook is run after `call-process' inserts the grep output into the buffer.") (defvar compilation-filter-start nil - "Start of the text inserted by `compilation-filter'. -This is bound to a buffer position before running `compilation-filter-hook'.") + "Position of the start of the text inserted by `compilation-filter'. +This is bound before running `compilation-filter-hook'.") (defvar compilation-first-column 1 - "*This is how compilers number the first column, usually 1 or 0.") + "*This is how compilers number the first column, usually 1 or 0. +If this is buffer-local in the destination buffer, Emacs obeys +that value, otherwise it uses the value in the *compilation* +buffer. This enables a major-mode to specify its own value.") (defvar compilation-parse-errors-filename-function nil "Function to call to post-process filenames while parsing error messages. @@ -547,7 +550,10 @@ Otherwise they are interpreted as character positions, with each character occupying one column. The default is to use screen columns, which requires that the compilation program and Emacs agree about the display width of the characters, -especially the TAB character." +especially the TAB character. +If this is buffer-local in the destination buffer, Emacs obeys +that value, otherwise it uses the value in the *compilation* +buffer. This enables a major-mode to specify its own value." :type 'boolean :group 'compilation :version "20.4") @@ -1058,6 +1064,7 @@ FMTS is a list of format specs for transforming the file name. (marker (if marker-line (compilation--loc->marker (cadr marker-line)))) (screen-columns compilation-error-screen-columns) + (first-column compilation-first-column) end-marker loc end-loc) (if (not (and marker (marker-buffer marker))) (setq marker nil) ; no valid marker for this file @@ -1078,7 +1085,10 @@ FMTS is a list of format specs for transforming the file name. ;; Obey the compilation-error-screen-columns of the target ;; buffer if its major mode set it buffer-locally. (if (local-variable-p 'compilation-error-screen-columns) - compilation-error-screen-columns screen-columns))) + compilation-error-screen-columns screen-columns)) + (compilation-first-column + (if (local-variable-p 'compilation-first-column) + compilation-first-column first-column))) (save-excursion (save-restriction (widen) @@ -2271,6 +2281,7 @@ This is the value of `next-error-function' in Compilation buffers." (when reset (setq compilation-current-error nil)) (let* ((screen-columns compilation-error-screen-columns) + (first-column compilation-first-column) (last 1) (msg (compilation-next-error (or n 1) nil (or compilation-current-error @@ -2309,7 +2320,10 @@ This is the value of `next-error-function' in Compilation buffers." ;; Obey the compilation-error-screen-columns of the target ;; buffer if its major mode set it buffer-locally. (if (local-variable-p 'compilation-error-screen-columns) - compilation-error-screen-columns screen-columns))) + compilation-error-screen-columns screen-columns)) + (compilation-first-column + (if (local-variable-p 'compilation-first-column) + compilation-first-column first-column))) (save-restriction (widen) (goto-char (point-min)) diff --git a/lisp/progmodes/cwarn.el b/lisp/progmodes/cwarn.el index 90147700d77..74ca5a6d76f 100644 --- a/lisp/progmodes/cwarn.el +++ b/lisp/progmodes/cwarn.el @@ -1,6 +1,6 @@ ;;; cwarn.el --- highlight suspicious C and C++ constructions -;; Copyright (C) 1999-2012 Free Software Foundation, Inc. +;; Copyright (C) 1999-2012 Free Software Foundation, Inc. ;; Author: Anders Lindgren ;; Keywords: c, languages, faces @@ -117,7 +117,6 @@ (defgroup cwarn nil "Highlight suspicious C and C++ constructions." :version "21.1" - :link '(url-link "http://www.andersl.com/emacs") :group 'faces) (defvar cwarn-mode nil @@ -129,7 +128,7 @@ instead.") (defcustom cwarn-configuration '((c-mode (not reference)) (c++-mode t)) - "*List of items each describing which features are enable for a mode. + "List of items each describing which features are enable for a mode. Each item is on the form (mode featurelist), where featurelist can be on one of three forms: @@ -158,7 +157,7 @@ keyword list." :group 'cwarn) (defcustom cwarn-verbose t - "*When nil, CWarn mode will not generate any messages. + "When nil, CWarn mode will not generate any messages. Currently, messages are generated when the mode is activated and deactivated." @@ -166,7 +165,7 @@ deactivated." :type 'boolean) (defcustom cwarn-mode-text " CWarn" - "*String to display in the mode line when CWarn mode is active. + "String to display in the mode line when CWarn mode is active. \(When the string is not empty, make sure that it has a leading space.)" :tag "CWarn mode text" ; To separate it from `global-...' @@ -174,7 +173,7 @@ deactivated." :type 'string) (defcustom cwarn-load-hook nil - "*Functions to run when CWarn mode is first loaded." + "Functions to run when CWarn mode is first loaded." :tag "Load Hook" :group 'cwarn :type 'hook) @@ -192,7 +191,9 @@ Note, in addition to enabling this minor mode, the major mode must be included in the variable `cwarn-configuration'. By default C and C++ modes are included. -With ARG, turn CWarn mode on if and only if arg is positive." +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil." :group 'cwarn :lighter cwarn-mode-text (cwarn-font-lock-keywords cwarn-mode) (if font-lock-mode (font-lock-fontify-buffer))) @@ -204,6 +205,7 @@ With ARG, turn CWarn mode on if and only if arg is positive." This function is designed to be added to hooks, for example: (add-hook 'c-mode-hook 'turn-on-cwarn-mode)" (cwarn-mode 1)) +(make-obsolete 'turn-on-cwarn-mode 'cwarn-mode "24.1") ;;}}} ;;{{{ Help functions @@ -246,29 +248,6 @@ If ADDP is non-nil, install else remove." (funcall (if addp 'font-lock-add-keywords 'font-lock-remove-keywords) nil keywords))))) -;;}}} -;;{{{ Backward compatibility - -;; This piece of code will be part of CC mode as of Emacs 20.4. -(if (not (fboundp 'c-at-toplevel-p)) -(defun c-at-toplevel-p () - "Return a determination as to whether point is at the `top-level'. -Being at the top-level means that point is either outside any -enclosing block (such function definition), or inside a class -definition, but outside any method blocks. - -If point is not at the top-level (e.g. it is inside a method -definition), then nil is returned. Otherwise, if point is at a -top-level not enclosed within a class definition, t is returned. -Otherwise, a 2-vector is returned where the zeroth element is the -buffer position of the start of the class declaration, and the first -element is the buffer position of the enclosing class' opening -brace." - (let ((state (c-parse-state))) - (or (not (c-most-enclosing-brace state)) - (c-search-uplist-for-classkey state)))) -) - ;;}}} ;;{{{ Font-lock keywords and match functions @@ -368,7 +347,7 @@ The semicolon after a `do { ... } while (x);' construction is not matched." "Turn on CWarn mode in the current buffer if applicable. The mode is turned if some feature is enabled for the current `major-mode' in `cwarn-configuration'." - (if (cwarn-is-enabled major-mode) (turn-on-cwarn-mode))) + (when (cwarn-is-enabled major-mode) (cwarn-mode 1))) ;;;###autoload (define-globalized-minor-mode global-cwarn-mode diff --git a/lisp/progmodes/f90.el b/lisp/progmodes/f90.el index 25f8107340a..df6fdfd7cd9 100644 --- a/lisp/progmodes/f90.el +++ b/lisp/progmodes/f90.el @@ -1,4 +1,4 @@ -;;; f90.el --- Fortran-90 mode (free format) +;;; f90.el --- Fortran-90 mode (free format) -*- lexical-binding: t -*- ;; Copyright (C) 1995-1997, 2000-2012 Free Software Foundation, Inc. @@ -2319,7 +2319,6 @@ escape character." ;; Local Variables: ;; coding: utf-8 -;; lexical-binding: t ;; End: ;;; f90.el ends here diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index fee45fcb3e8..07393c6954d 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -1,6 +1,6 @@ ;;; flymake.el -- a universal on-the-fly syntax checker -;; Copyright (C) 2003-2012 Free Software Foundation, Inc. +;; Copyright (C) 2003-2012 Free Software Foundation, Inc. ;; Author: Pavel Kobyakov ;; Maintainer: Pavel Kobyakov @@ -1331,9 +1331,10 @@ For the format of LINE-ERR-INFO, see `flymake-ler-make-ler'." ;;;###autoload (define-minor-mode flymake-mode - "Minor mode to do on-the-fly syntax checking. -When called interactively, toggles the minor mode. -With arg, turn Flymake mode on if and only if arg is positive." + "Toggle on-the-fly syntax checking. +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil." :group 'flymake :lighter flymake-mode-line (cond diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el index ff2a5f3f3e7..301714ec55f 100644 --- a/lisp/progmodes/gdb-mi.el +++ b/lisp/progmodes/gdb-mi.el @@ -1,6 +1,6 @@ ;;; gdb-mi.el --- User Interface for running GDB -;; Copyright (C) 2007-2012 Free Software Foundation, Inc. +;; Copyright (C) 2007-2012 Free Software Foundation, Inc. ;; Author: Nick Roberts ;; Maintainer: FSF @@ -26,7 +26,7 @@ ;;; Credits: ;; This file was written by Nick Roberts following the general design -;; used in gdb-ui.el for Emacs 22.1 - 23.1. It is currently being developed +;; used in gdb-ui.el for Emacs 22.1 - 23.1. It was further developed ;; by Dmitry Dzhus as part of the Google Summer ;; of Code 2009 Project "Emacs GDB/MI migration". @@ -45,7 +45,7 @@ ;; This file uses GDB/MI as the primary interface to GDB. It runs gdb with ;; GDB/MI (-interp=mi) and access CLI using "-interpreter-exec console -;; cli-command". This code works without gdb-ui.el and uses MI tokens instead +;; cli-command". This code replaces gdb-ui.el and uses MI tokens instead ;; of queues. Eventually MI should be asynchronous. ;; Windows Platforms: @@ -779,9 +779,9 @@ detailed description of this mode. (gud-def gud-pp (gud-call (concat - "pp1 " (if (eq (buffer-local-value - 'major-mode (window-buffer)) 'speedbar-mode) - (gdb-find-watch-expression) "%e")) arg) + "pp " (if (eq (buffer-local-value + 'major-mode (window-buffer)) 'speedbar-mode) + (gdb-find-watch-expression) "%e")) arg) nil "Print the Emacs s-expression.") (define-key gud-minor-mode-map [left-margin mouse-1] diff --git a/lisp/progmodes/glasses.el b/lisp/progmodes/glasses.el index fb0489f185c..b49739a94d5 100644 --- a/lisp/progmodes/glasses.el +++ b/lisp/progmodes/glasses.el @@ -1,6 +1,6 @@ ;;; glasses.el --- make cantReadThis readable -;; Copyright (C) 1999-2012 Free Software Foundation, Inc. +;; Copyright (C) 1999-2012 Free Software Foundation, Inc. ;; Author: Milan Zamazal ;; Maintainer: Milan Zamazal @@ -316,8 +316,10 @@ recognized according to the current value of the variable `glasses-separator'." ;;;###autoload (define-minor-mode glasses-mode "Minor mode for making identifiers likeThis readable. -When this mode is active, it tries to add virtual separators (like underscores) -at places they belong to." +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil. When this mode is active, it tries to +add virtual separators (like underscores) at places they belong to." :group 'glasses :lighter " o^o" (save-excursion (save-restriction diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el index 697af76acc9..54d678323f6 100644 --- a/lisp/progmodes/grep.el +++ b/lisp/progmodes/grep.el @@ -374,6 +374,9 @@ Notice that using \\[next-error] or \\[compile-goto-error] modifies ("^Binary file \\(.+\\) matches$" 1 nil nil 0 1)) "Regexp used to match grep hits. See `compilation-error-regexp-alist'.") +(defvar grep-first-column 0 ; bug#10594 + "Value to use for `compilation-first-column' in grep buffers.") + (defvar grep-error "grep hit" "Message to print when no matches are found.") diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el index 5fabe5086db..121a023cd54 100644 --- a/lisp/progmodes/gud.el +++ b/lisp/progmodes/gud.el @@ -749,7 +749,7 @@ directory and source-file directory for your debugger." "Evaluate C dereferenced pointer expression at point.") ;; For debugging Emacs only. - (gud-def gud-pv "pv1 %e" "\C-v" "Print the value of the lisp variable.") + (gud-def gud-pv "pv %e" "\C-v" "Print the value of the lisp variable.") (gud-def gud-until "until %l" "\C-u" "Continue to current line.") (gud-def gud-run "run" nil "Run the program.") @@ -1646,8 +1646,8 @@ and source-file directory for your debugger." (gud-common-init command-line nil 'gud-pdb-marker-filter) (set (make-local-variable 'gud-minor-mode) 'pdb) - (gud-def gud-break "break %f:%l" "\C-b" "Set breakpoint at current line.") - (gud-def gud-remove "clear %f:%l" "\C-d" "Remove breakpoint at current line") + (gud-def gud-break "break %d%f:%l" "\C-b" "Set breakpoint at current line.") + (gud-def gud-remove "clear %d%f:%l" "\C-d" "Remove breakpoint at current line") (gud-def gud-step "step" "\C-s" "Step one source line with display.") (gud-def gud-next "next" "\C-n" "Step one line (skip functions).") (gud-def gud-cont "continue" "\C-r" "Continue with display.") diff --git a/lisp/progmodes/hideshow.el b/lisp/progmodes/hideshow.el index 0884d28ad5a..104a8f96727 100644 --- a/lisp/progmodes/hideshow.el +++ b/lisp/progmodes/hideshow.el @@ -1,6 +1,6 @@ ;;; hideshow.el --- minor mode cmds to selectively display code/comment blocks -;; Copyright (C) 1994-2012 Free Software Foundation, Inc. +;; Copyright (C) 1994-2012 Free Software Foundation, Inc. ;; Author: Thien-Thi Nguyen ;; Dan Nicolaescu @@ -928,6 +928,10 @@ This can be useful if you have huge RCS logs in those comments." ;;;###autoload (define-minor-mode hs-minor-mode "Minor mode to selectively hide/show code and comment blocks. +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil. + When hideshow minor mode is on, the menu bar is augmented with hideshow commands and the hideshow commands are enabled. The value '(hs . t) is added to `buffer-invisibility-spec'. diff --git a/lisp/progmodes/pascal.el b/lisp/progmodes/pascal.el index db15e3c6f27..95f1adec40e 100644 --- a/lisp/progmodes/pascal.el +++ b/lisp/progmodes/pascal.el @@ -1,6 +1,6 @@ ;;; pascal.el --- major mode for editing pascal source in Emacs -*- lexical-binding: t -*- -;; Copyright (C) 1993-2012 Free Software Foundation, Inc. +;; Copyright (C) 1993-2012 Free Software Foundation, Inc. ;; Author: Espen Skoglund ;; Keywords: languages @@ -1394,8 +1394,12 @@ The default is a name found in the buffer around point." (define-obsolete-function-alias 'pascal-outline 'pascal-outline-mode "22.1") (define-minor-mode pascal-outline-mode "Outline-line minor mode for Pascal mode. -When in Pascal Outline mode, portions -of the text being edited may be made invisible. \\ +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil. + +When enabled, portions of the text being edited may be made +invisible. \\ Pascal Outline mode provides some additional commands. diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 0c29891cd92..15d98ce48af 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -67,6 +67,7 @@ ;;; Code: (require 'comint) +(require 'ansi-color) (eval-when-compile (require 'compile) @@ -1386,7 +1387,6 @@ For running multiple processes in multiple buffers, see `run-python' and \\{inferior-python-mode-map}" :group 'python - (require 'ansi-color) ; for ipython (setq mode-line-process '(":%s")) (set (make-local-variable 'comint-input-filter) 'python-input-filter) (add-hook 'comint-preoutput-filter-functions #'python-preoutput-filter @@ -1530,7 +1530,6 @@ behavior, change `python-remove-cwd-from-path' to nil." (interactive (if current-prefix-arg (list (read-string "Run Python: " python-command) nil t) (list python-command))) - (require 'ansi-color) ; for ipython (unless cmd (setq cmd python-command)) (python-check-version cmd) (setq python-command cmd) diff --git a/lisp/progmodes/sql.el b/lisp/progmodes/sql.el index 2e59d8f8517..f8f62d113e6 100644 --- a/lisp/progmodes/sql.el +++ b/lisp/progmodes/sql.el @@ -285,7 +285,7 @@ Customizing your password will store it in your ~/.emacs file." :safe 'stringp) (defcustom sql-port 0 - "Default port." + "Default port for connecting to a MySQL or Postgres server." :version "24.1" :type 'number :group 'SQL @@ -613,30 +613,22 @@ settings.") '(:font-lock :sqli-program :sqli-options :sqli-login :statement)) (defcustom sql-connection-alist nil - "An alist of connection parameters for interacting with a SQL - product. - + "An alist of connection parameters for interacting with a SQL product. Each element of the alist is as follows: \(CONNECTION \(SQL-VARIABLE VALUE) ...) Where CONNECTION is a symbol identifying the connection, SQL-VARIABLE is the symbol name of a SQL mode variable, and VALUE is the value to -be assigned to the variable. - -The most common SQL-VARIABLE settings associated with a connection -are: - - `sql-product' - `sql-user' - `sql-password' - `sql-port' - `sql-server' - `sql-database' +be assigned to the variable. The most common SQL-VARIABLE settings +associated with a connection are: `sql-product', `sql-user', +`sql-password', `sql-port', `sql-server', and `sql-database'. If a SQL-VARIABLE is part of the connection, it will not be -prompted for during login." - +prompted for during login. The command `sql-connect' starts a +predefined SQLi session using the parameters from this list. +Connections defined here appear in the submenu SQL->Start... for +making new SQLi sessions." :type `(alist :key-type (string :tag "Connection") :value-type (set @@ -3647,7 +3639,9 @@ The list is maintained in SQL interactive buffers.") (read-from-minibuffer prompt tname)))) (defun sql-list-all (&optional enhanced) - "List all database objects." + "List all database objects. +With optional prefix argument ENHANCED, displays additional +details or extends the listing to include other schemas objects." (interactive "P") (let ((sqlbuf (sql-find-sqli-buffer))) (unless sqlbuf @@ -3659,7 +3653,9 @@ The list is maintained in SQL interactive buffers.") (set (make-local-variable 'sql-buffer) sqlbuf)))) (defun sql-list-table (name &optional enhanced) - "List the details of a database table. " + "List the details of a database table named NAME. +Displays the columns in the relation. With optional prefix argument +ENHANCED, displays additional details about each column." (interactive (list (sql-read-table-name "Table name: ") current-prefix-arg)) diff --git a/lisp/scroll-lock.el b/lisp/scroll-lock.el index 87c98420639..c5c19c046f1 100644 --- a/lisp/scroll-lock.el +++ b/lisp/scroll-lock.el @@ -49,10 +49,12 @@ ;;;###autoload (define-minor-mode scroll-lock-mode "Buffer-local minor mode for pager-like scrolling. -Keys which normally move point by line or paragraph will scroll -the buffer by the respective amount of lines instead and point -will be kept vertically fixed relative to window boundaries -during scrolling." +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil. When enabled, keys that normally move +point by line or paragraph will scroll the buffer by the +respective amount of lines instead and point will be kept +vertically fixed relative to window boundaries during scrolling." :lighter " ScrLck" :keymap scroll-lock-mode-map (if scroll-lock-mode diff --git a/lisp/server.el b/lisp/server.el index 9dcd1f3b1d9..34ac5d7ba23 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -126,6 +126,8 @@ port number." (defcustom server-auth-dir (locate-user-emacs-file "server/") "Directory for server authentication files. +We only use this if `server-use-tcp' is non-nil. +Otherwise we use `server-socket-dir'. NOTE: On FAT32 filesystems, directories are not secure; files can be read and modified by any user or process. @@ -397,16 +399,19 @@ If CLIENT is non-nil, add a description of it to the logged message." ;; visible. If not (which can happen if the user's customizations call ;; pop-to-buffer etc.), delete it to avoid preserving the connection after ;; the last real frame is deleted. - (if (and (eq (frame-first-window frame) - (next-window (frame-first-window frame) 'nomini)) - (eq (window-buffer (frame-first-window frame)) - (frame-parameter frame 'server-dummy-buffer))) - ;; The temp frame still only shows one buffer, and that is the - ;; internal temp buffer. - (delete-frame frame) - (set-frame-parameter frame 'visibility t)) - (kill-buffer (frame-parameter frame 'server-dummy-buffer)) - (set-frame-parameter frame 'server-dummy-buffer nil))) + + ;; Rewritten to avoid inadvertently killing the current buffer after + ;; `delete-frame' removed FRAME (Bug#10729). + (let ((buffer (frame-parameter frame 'server-dummy-buffer))) + (if (and (one-window-p 'nomini frame) + (eq (window-buffer (frame-first-window frame)) buffer)) + ;; The temp frame still only shows one buffer, and that is the + ;; internal temp buffer. + (delete-frame frame) + (set-frame-parameter frame 'visibility t) + (set-frame-parameter frame 'server-dummy-buffer nil)) + (when (buffer-live-p buffer) + (kill-buffer buffer))))) (defun server-handle-delete-frame (frame) "Delete the client connection when the emacsclient frame is deleted. @@ -1525,7 +1530,14 @@ only these files will be asked to be saved." nil) (defun server-eval-at (server form) - "Eval FORM on Emacs Server SERVER." + "Contact the Emacs server named SERVER and evaluate FORM there. +Returns the result of the evaluation, or signals an error if it +cannot contact the specified server. For example: + \(server-eval-at \"server\" '(emacs-pid)) +returns the process ID of the Emacs instance running \"server\". +This function requires the use of TCP sockets. " + (or server-use-tcp + (error "This function requires TCP sockets")) (let ((auth-file (expand-file-name server server-auth-dir)) (coding-system-for-read 'binary) (coding-system-for-write 'binary) diff --git a/lisp/simple.el b/lisp/simple.el index d9468ed5cf6..881b0b22079 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -321,9 +321,11 @@ select the source buffer." (define-minor-mode next-error-follow-minor-mode "Minor mode for compilation, occur and diff modes. +With a prefix argument ARG, enable mode if ARG is positive, and +disable it otherwise. If called from Lisp, enable mode if ARG is +omitted or nil. When turned on, cursor motion in the compilation, grep, occur or diff -buffer causes automatic display of the corresponding source code -location." +buffer causes automatic display of the corresponding source code location." :group 'next-error :init-value nil :lighter " Fol" (if (not next-error-follow-minor-mode) (remove-hook 'post-command-hook 'next-error-follow-mode-post-command-hook t) @@ -2713,47 +2715,50 @@ support pty association, if PROGRAM is nil." (tabulated-list-init-header)) (defun list-processes--refresh () - "Recompute the list of processes for the Process List buffer." + "Recompute the list of processes for the Process List buffer. +Also, delete any process that is exited or signaled." (setq tabulated-list-entries nil) (dolist (p (process-list)) - (when (or (not process-menu-query-only) - (process-query-on-exit-flag p)) - (let* ((buf (process-buffer p)) - (type (process-type p)) - (name (process-name p)) - (status (symbol-name (process-status p))) - (buf-label (if (buffer-live-p buf) - `(,(buffer-name buf) - face link - help-echo ,(concat "Visit buffer `" - (buffer-name buf) "'") - follow-link t - process-buffer ,buf - action process-menu-visit-buffer) - "--")) - (tty (or (process-tty-name p) "--")) - (cmd - (if (memq type '(network serial)) - (let ((contact (process-contact p t))) - (if (eq type 'network) - (format "(%s %s)" - (if (plist-get contact :type) - "datagram" - "network") - (if (plist-get contact :server) - (format "server on %s" - (plist-get contact :server)) - (format "connection to %s" - (plist-get contact :host)))) - (format "(serial port %s%s)" - (or (plist-get contact :port) "?") - (let ((speed (plist-get contact :speed))) - (if speed - (format " at %s b/s" speed) - ""))))) - (mapconcat 'identity (process-command p) " ")))) - (push (list p (vector name status buf-label tty cmd)) - tabulated-list-entries))))) + (cond ((memq (process-status p) '(exit signal closed)) + (delete-process p)) + ((or (not process-menu-query-only) + (process-query-on-exit-flag p)) + (let* ((buf (process-buffer p)) + (type (process-type p)) + (name (process-name p)) + (status (symbol-name (process-status p))) + (buf-label (if (buffer-live-p buf) + `(,(buffer-name buf) + face link + help-echo ,(concat "Visit buffer `" + (buffer-name buf) "'") + follow-link t + process-buffer ,buf + action process-menu-visit-buffer) + "--")) + (tty (or (process-tty-name p) "--")) + (cmd + (if (memq type '(network serial)) + (let ((contact (process-contact p t))) + (if (eq type 'network) + (format "(%s %s)" + (if (plist-get contact :type) + "datagram" + "network") + (if (plist-get contact :server) + (format "server on %s" + (plist-get contact :server)) + (format "connection to %s" + (plist-get contact :host)))) + (format "(serial port %s%s)" + (or (plist-get contact :port) "?") + (let ((speed (plist-get contact :speed))) + (if speed + (format " at %s b/s" speed) + ""))))) + (mapconcat 'identity (process-command p) " ")))) + (push (list p (vector name status buf-label tty cmd)) + tabulated-list-entries)))))) (defun process-menu-visit-buffer (button) (display-buffer (button-get button 'process-buffer))) @@ -2914,28 +2919,46 @@ These commands include \\[set-mark-command] and \\[start-kbd-macro]." (defvar filter-buffer-substring-functions nil - "Wrapper hook around `filter-buffer-substring'. -The functions on this special hook are called with four arguments: - NEXT-FUN BEG END DELETE -NEXT-FUN is a function of three arguments (BEG END DELETE) -that performs the default operation. The other three arguments -are like the ones passed to `filter-buffer-substring'.") + "This variable is a wrapper hook around `filter-buffer-substring'. +Each member of the hook should be a function accepting four arguments: +\(FUN BEG END DELETE), where FUN is itself a function of three arguments +\(BEG END DELETE). The arguments BEG, END, and DELETE are the same +as those of `filter-buffer-substring' in each case. + +The first hook function to be called receives a FUN equivalent +to the default operation of `filter-buffer-substring', +i.e. one that returns the buffer-substring between BEG and +END (processed by any `buffer-substring-filters'). Normally, +the hook function will call FUN and then do its own processing +of the result. The next hook function receives a FUN equivalent +to the previous hook function, calls it, and does its own +processing, and so on. The overall result is that of all hook +functions acting in sequence. + +Any hook may choose not to call FUN though, in which case it +effectively replaces the default behavior with whatever it chooses. +Of course, a later hook function may do the same thing.") (defvar buffer-substring-filters nil "List of filter functions for `filter-buffer-substring'. Each function must accept a single argument, a string, and return a string. The buffer substring is passed to the first function in the list, and the return value of each function is passed to -the next. The return value of the last function is used as the -return value of `filter-buffer-substring'. +the next. The final result (if `buffer-substring-filters' is +nil, this is the unfiltered buffer-substring) is passed to the +first function on `filter-buffer-substring-functions'. -If this variable is nil, no filtering is performed.") +As a special convention, point is set to the start of the buffer text +being operated on (i.e., the first argument of `filter-buffer-substring') +before these functions are called.") (make-obsolete-variable 'buffer-substring-filters 'filter-buffer-substring-functions "24.1") (defun filter-buffer-substring (beg end &optional delete) "Return the buffer substring between BEG and END, after filtering. -The filtering is performed by `filter-buffer-substring-functions'. +The wrapper hook `filter-buffer-substring-functions' performs +the actual filtering. The obsolete variable `buffer-substring-filters' +is also consulted. If both of these are nil, no filtering is done. If DELETE is non-nil, the text between BEG and END is deleted from the buffer. @@ -3751,10 +3774,18 @@ a mistake; see the documentation of `set-mark'." (signal 'mark-inactive nil))) (defsubst deactivate-mark (&optional force) - "Deactivate the mark by setting `mark-active' to nil. -Unless FORCE is non-nil, this function does nothing if Transient -Mark mode is disabled. -This function also runs `deactivate-mark-hook'." + "Deactivate the mark. +If Transient Mark mode is disabled, this function normally does +nothing; but if FORCE is non-nil, it deactivates the mark anyway. + +Deactivating the mark sets `mark-active' to nil, updates the +primary selection according to `select-active-regions', and runs +`deactivate-mark-hook'. + +If Transient Mark mode was temporarily enabled, reset the value +of the variable `transient-mark-mode'; if this causes Transient +Mark mode to be disabled, don't change `mark-active' to nil or +run `deactivate-mark-hook'." (when (or transient-mark-mode force) (when (and (if (eq select-active-regions 'only) (eq (car-safe transient-mark-mode) 'only) diff --git a/lisp/subr.el b/lisp/subr.el index 14f9192405c..00a030c744c 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -1373,16 +1373,19 @@ around the preceding ones, like a set of nested `around' advices. Each hook function should accept an argument list consisting of a function FUN, followed by the additional arguments in ARGS. -The FUN passed to the first hook function in HOOK performs BODY, -if it is called with arguments ARGS. The FUN passed to each -successive hook function is defined based on the preceding hook -functions; if called with arguments ARGS, it does what the -`with-wrapper-hook' call would do if the preceding hook functions -were the only ones present in HOOK. +The first hook function in HOOK is passed a FUN that, if it is called +with arguments ARGS, performs BODY (i.e., the default operation). +The FUN passed to each successive hook function is defined based +on the preceding hook functions; if called with arguments ARGS, +it does what the `with-wrapper-hook' call would do if the +preceding hook functions were the only ones present in HOOK. -In the function definition of each hook function, FUN can be -called any number of times (including not calling it at all). -That function definition is then used to construct the FUN passed +Each hook function may call its FUN argument as many times as it wishes, +including never. In that case, such a hook function acts to replace +the default definition altogether, and any preceding hook functions. +Of course, a subsequent hook function may do the same thing. + +Each hook function definition is used to construct the FUN passed to the next hook function, if any. The last (or \"outermost\") FUN is then called once." (declare (indent 2) (debug (form sexp body))) @@ -1539,10 +1542,12 @@ if it is empty or a duplicate." (defun run-mode-hooks (&rest hooks) "Run mode hooks `delayed-mode-hooks' and HOOKS, or delay HOOKS. -Execution is delayed if the variable `delay-mode-hooks' is non-nil. -Otherwise, runs the mode hooks and then `after-change-major-mode-hook'. -Major mode functions should use this instead of `run-hooks' when running their -FOO-mode-hook." +If the variable `delay-mode-hooks' is non-nil, does not run any hooks, +just adds the HOOKS to the list `delayed-mode-hooks'. +Otherwise, runs hooks in the sequence: `change-major-mode-after-body-hook', +`delayed-mode-hooks' (in reverse order), HOOKS, and finally +`after-change-major-mode-hook'. Major mode functions should use +this instead of `run-hooks' when running their FOO-mode-hook." (if delay-mode-hooks ;; Delaying case. (dolist (hook hooks) @@ -1857,12 +1862,33 @@ FILE should be the name of a library, with no directory name." (defun display-delayed-warnings () "Display delayed warnings from `delayed-warnings-list'. -This is the default value of `delayed-warnings-hook'." +Used from `delayed-warnings-hook' (which see)." (dolist (warning (nreverse delayed-warnings-list)) (apply 'display-warning warning)) (setq delayed-warnings-list nil)) -(defvar delayed-warnings-hook '(display-delayed-warnings) +(defun collapse-delayed-warnings () + "Remove duplicates from `delayed-warnings-list'. +Collapse identical adjacent warnings into one (plus count). +Used from `delayed-warnings-hook' (which see)." + (let ((count 1) + collapsed warning) + (while delayed-warnings-list + (setq warning (pop delayed-warnings-list)) + (if (equal warning (car delayed-warnings-list)) + (setq count (1+ count)) + (when (> count 1) + (setcdr warning (cons (format "%s [%d times]" (cadr warning) count) + (cddr warning))) + (setq count 1)) + (push warning collapsed))) + (setq delayed-warnings-list (nreverse collapsed)))) + +;; At present this is only really useful for Emacs internals. +;; Document in the lispref if it becomes generally useful. +;; Ref http://lists.gnu.org/archive/html/emacs-devel/2012-02/msg00085.html +(defvar delayed-warnings-hook '(collapse-delayed-warnings + display-delayed-warnings) "Normal hook run to process delayed warnings. Functions in this hook should access the `delayed-warnings-list' variable (which see) and remove from it the warnings they process.") @@ -3193,7 +3219,7 @@ If BODY finishes, `while-no-input' returns whatever value BODY produced." (or (input-pending-p) (progn ,@body))))))) -(defmacro condition-case-no-debug (var bodyform &rest handlers) +(defmacro condition-case-unless-debug (var bodyform &rest handlers) "Like `condition-case' except that it does not catch anything when debugging. More specifically if `debug-on-error' is set, then it does not catch any signal." (declare (debug condition-case) (indent 2)) @@ -3205,6 +3231,9 @@ More specifically if `debug-on-error' is set, then it does not catch any signal. (funcall ,bodysym) ,@handlers))))) +(define-obsolete-function-alias 'condition-case-no-debug + 'condition-case-unless-debug "24.1") + (defmacro with-demoted-errors (&rest body) "Run BODY and demote any errors to simple messages. If `debug-on-error' is non-nil, run BODY without catching its errors. @@ -3212,7 +3241,7 @@ This is to be used around code which is not expected to signal an error but which should be robust in the unexpected case that an error is signaled." (declare (debug t) (indent 0)) (let ((err (make-symbol "err"))) - `(condition-case-no-debug ,err + `(condition-case-unless-debug ,err (progn ,@body) (error (message "Error: %S" ,err) nil)))) diff --git a/lisp/tar-mode.el b/lisp/tar-mode.el index cb41e6af627..949ac4c0889 100644 --- a/lisp/tar-mode.el +++ b/lisp/tar-mode.el @@ -1,6 +1,6 @@ ;;; tar-mode.el --- simple editing of tar files from GNU Emacs -;; Copyright (C) 1990-1991, 1993-2012 Free Software Foundation, Inc. +;; Copyright (C) 1990-1991, 1993-2012 Free Software Foundation, Inc. ;; Author: Jamie Zawinski ;; Maintainer: FSF @@ -677,9 +677,12 @@ See also: variables `tar-update-datestamp' and `tar-anal-blocksize'. (define-minor-mode tar-subfile-mode "Minor mode for editing an element of a tar-file. -This mode arranges for \"saving\" this buffer to write the data -into the tar-file buffer that it came from. The changes will actually -appear on disk when you save the tar-file's buffer." +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil. This mode arranges for \"saving\" this +buffer to write the data into the tar-file buffer that it came +from. The changes will actually appear on disk when you save the +tar-file's buffer." ;; Don't do this, because it is redundant and wastes mode line space. ;; :lighter " TarFile" nil nil nil diff --git a/lisp/term.el b/lisp/term.el index 4050781fa8c..f44f34226f2 100644 --- a/lisp/term.el +++ b/lisp/term.el @@ -907,8 +907,7 @@ is buffer-local." (define-key map [remap self-insert-command] 'term-send-raw) (define-key map "\e" esc-map) (setq term-raw-map map) - (setq term-raw-escape-map - (copy-keymap (lookup-key (current-global-map) "\C-x"))) + (setq term-raw-escape-map (copy-keymap 'Control-X-prefix)) ;; Added nearly all the 'gray keys' -mm diff --git a/lisp/textmodes/bibtex.el b/lisp/textmodes/bibtex.el index 955e148a2ab..a873680a8c8 100644 --- a/lisp/textmodes/bibtex.el +++ b/lisp/textmodes/bibtex.el @@ -443,6 +443,7 @@ which is called to determine the initial content of the field. ALTERNATIVE if non-nil is an integer that numbers sets of alternatives, starting from zero." :group 'BibTeX + :version "24.1" :type 'bibtex-entry-alist) (put 'bibtex-BibTeX-entry-alist 'risky-local-variable t) @@ -696,6 +697,7 @@ alternatives, starting from zero." "Alist of biblatex entry types and their associated fields. It has the same format as `bibtex-BibTeX-entry-alist'." :group 'bibtex + :version "24.1" :type 'bibtex-entry-alist) (put 'bibtex-biblatex-entry-alist 'risky-local-variable t) @@ -717,6 +719,7 @@ It has the same format as `bibtex-BibTeX-entry-alist'." Each element is a list (FIELD COMMENT). COMMENT is used as a default if `bibtex-BibTeX-entry-alist' does not define a comment for FIELD." :group 'bibtex + :version "24.1" :type 'bibtex-field-alist) (defcustom bibtex-biblatex-field-alist @@ -814,6 +817,7 @@ if `bibtex-BibTeX-entry-alist' does not define a comment for FIELD." "Alist of biblatex fields. It has the same format as `bibtex-BibTeX-entry-alist'." :group 'bibtex + :version "24.1" :type 'bibtex-field-alist) (defcustom bibtex-dialect-list '(BibTeX biblatex) @@ -822,12 +826,14 @@ For each DIALECT (a symbol) a variable bibtex-DIALECT-entry-alist defines the allowed entries and bibtex-DIALECT-field-alist defines known field types. Predefined dialects include BibTeX and biblatex." :group 'bibtex + :version "24.1" :type '(repeat (symbol :tag "Dialect"))) (defcustom bibtex-dialect 'BibTeX "Current BibTeX dialect. For allowed values see `bibtex-dialect-list'. -During a session change it via `bibtex-set-dialect'." +To interactively change the dialect use the command `bibtex-set-dialect'." :group 'bibtex + :version "24.1" :set '(lambda (symbol value) (set-default symbol value) ;; `bibtex-set-dialect' is undefined during loading (no problem) @@ -836,11 +842,13 @@ During a session change it via `bibtex-set-dialect'." :type '(choice (const BibTeX) (const biblatex) (symbol :tag "Custom"))) +(put 'bibtex-dialect 'safe-local-variable 'symbolp) (defcustom bibtex-no-opt-remove-re "\\`option" "If a field name matches this regexp, the prefix OPT is not removed. If nil prefix OPT is always removed" :group 'bibtex + :version "24.1" :type '(choice (regexp) (const nil))) (defcustom bibtex-comment-start "@Comment" @@ -929,6 +937,7 @@ See also `bibtex-search-entry-globally'." "If non-nil, interactive calls of `bibtex-search-entry' search globally. A global search includes all files in `bibtex-files'." :group 'bibtex + :version "24.1" :type 'boolean) (defcustom bibtex-help-message t @@ -1290,6 +1299,7 @@ Set this variable before loading BibTeX mode." (defcustom bibtex-search-buffer "*BibTeX Search*" "Buffer for BibTeX search results." :group 'bibtex + :version "24.1" :type 'string) ;; `bibtex-font-lock-keywords' is a user option, too. But since the @@ -1442,11 +1452,13 @@ Set this variable before loading BibTeX mode." ;; Internal Variables -(defvar bibtex-entry-alist bibtex-BibTeX-entry-alist - "Alist of currently active entry types.") +(defvar bibtex-entry-alist nil + "Alist of currently active entry types. +Initialized by `bibtex-set-dialect'.") -(defvar bibtex-field-alist bibtex-BibTeX-field-alist - "Alist of currently active field types.") +(defvar bibtex-field-alist nil + "Alist of currently active field types. +Initialized by `bibtex-set-dialect'.") (defvar bibtex-field-braces-opt nil "Optimized value of `bibtex-field-braces-alist'. @@ -2188,6 +2200,10 @@ Optional arg COMMA is as in `bibtex-enclosing-field'." (let ((fun (lambda (kryp kr) ; adapted from `current-kill' (car (set kryp (nthcdr (mod (- n (length (eval kryp))) (length kr)) kr)))))) + ;; We put the mark at the beginning of the inserted field or entry + ;; and point at its end - a behavior similar to what `yank' does. + ;; The mark is then used by `bibtex-yank-pop', which needs to know + ;; what we have inserted. (if (eq bibtex-last-kill-command 'field) (progn ;; insert past the current field @@ -2216,7 +2232,7 @@ Optional arg COMMA is as in `bibtex-enclosing-field'." (aset vec idx (cons newelt (aref vec idx)))) (defsubst bibtex-vec-incr (vec idx) - "Add NEWELT to the list stored in VEC at index IDX." + "Increment by 1 the counter which is stored in VEC at index IDX." (aset vec idx (1+ (aref vec idx)))) (defun bibtex-format-entry () @@ -3376,104 +3392,124 @@ if that value is non-nil. (setq imenu-generic-expression (list (list nil bibtex-entry-head bibtex-key-in-head)) imenu-case-fold-search t) - (bibtex-set-dialect bibtex-dialect)) + ;; Allow `bibtex-dialect' as a file-local variable. + (add-hook 'hack-local-variables-hook 'bibtex-set-dialect nil t)) -(defun bibtex-set-dialect (dialect) - "Select BibTeX mode DIALECT. -This sets the variable `bibtex-dialect' which holds the currently active -dialect. Dialects are listed in `bibtex-dialect-list'." +(defun bibtex-entry-alist (dialect) + "Return entry-alist for DIALECT." + (let ((var (intern (format "bibtex-%s-entry-alist" dialect))) + entry-alist) + (if (boundp var) + (setq entry-alist (symbol-value var)) + (error "BibTeX dialect `%s' undefined" dialect)) + (if (not (consp (nth 1 (car entry-alist)))) + ;; new format + entry-alist + ;; Convert old format of `bibtex-entry-field-alist' + (unless (get var 'entry-list-format) + (put var 'entry-list-format "pre-24") + (message "Old format of `%s' (pre GNU Emacs 24). +Please convert to the new format." + (if (eq (indirect-variable 'bibtex-entry-field-alist) var) + 'bibtex-entry-field-alist var)) + (sit-for 3)) + (let (lst) + (dolist (entry entry-alist) + (let ((fl (nth 1 entry)) req xref opt) + (dolist (field (copy-tree (car fl))) + (if (nth 3 field) (setcar (nthcdr 3 field) 0)) + (if (or (not (nth 2 entry)) + (assoc-string (car field) (car (nth 2 entry)) t)) + (push field req) + (push field xref))) + (dolist (field (nth 1 fl)) + (push field opt)) + (push (list (car entry) nil (nreverse req) + (nreverse xref) (nreverse opt)) + lst))) + (nreverse lst))))) + +(defun bibtex-set-dialect (&optional dialect local) + "Select BibTeX DIALECT for editing BibTeX files. +This sets the user variable `bibtex-dialect' as well as the dialect-dependent +internal variables. Allowed dialects are listed in `bibtex-dialect-list'. +If DIALECT is nil use current value of `bibtex-dialect'. +If LOCAL is non-nil make buffer-local bindings for these variables rather than +setting the global values. The dialect-dependent internal variables +are also bound buffer-locally if `bibtex-dialect' is already buffer-local +in the current buffer (for example, as a file-local variable). +LOCAL is t for interactive calls." (interactive (list (intern (completing-read "Dialect: " (mapcar 'list bibtex-dialect-list) - nil t)))) - (unless (eq dialect (get 'bibtex-dialect 'dialect)) - (put 'bibtex-dialect 'dialect dialect) - (setq bibtex-dialect dialect) + nil t)) t)) + (let ((setfun (if (or local (local-variable-p 'bibtex-dialect)) + (lambda (var val) (set (make-local-variable var) val)) + 'set))) + (if dialect (funcall setfun 'bibtex-dialect dialect)) - ;; Bind variables - (setq bibtex-entry-alist - (let ((var (intern (format "bibtex-%s-entry-alist" dialect))) - entry-alist) - (if (boundp var) - (setq entry-alist (symbol-value var)) - (error "BibTeX dialect `%s' undefined" dialect)) - (if (not (consp (nth 1 (car entry-alist)))) - ;; new format - entry-alist - ;; Convert old format - (unless (get var 'entry-list-format) - (put var 'entry-list-format "pre-24") - (message "Old format of `%s' (pre GNU Emacs 24). -Please convert to the new format." - (if (eq (indirect-variable 'bibtex-entry-field-alist) var) - 'bibtex-entry-field-alist var)) - (sit-for 3)) - (let (lst) - (dolist (entry entry-alist) - (let ((fl (nth 1 entry)) req xref opt) - (dolist (field (copy-tree (car fl))) - (if (nth 3 field) (setcar (nthcdr 3 field) 0)) - (if (or (not (nth 2 entry)) - (assoc-string (car field) (car (nth 2 entry)) t)) - (push field req) - (push field xref))) - (dolist (field (nth 1 fl)) - (push field opt)) - (push (list (car entry) nil (nreverse req) - (nreverse xref) (nreverse opt)) - lst))) - (nreverse lst)))) - bibtex-field-alist - (let ((var (intern (format "bibtex-%s-field-alist" dialect)))) - (if (boundp var) - (symbol-value var) - (error "Field types for BibTeX dialect `%s' undefined" dialect))) - bibtex-entry-type - (concat "@[ \t]*\\(?:" - (regexp-opt (mapcar 'car bibtex-entry-alist)) "\\)") - bibtex-entry-head (concat "^[ \t]*\\(" - bibtex-entry-type - "\\)[ \t]*[({][ \t\n]*\\(" - bibtex-reference-key - "\\)") - bibtex-entry-maybe-empty-head (concat bibtex-entry-head "?") - bibtex-any-valid-entry-type - (concat "^[ \t]*@[ \t]*\\(?:" - (regexp-opt (append '("String" "Preamble") - (mapcar 'car bibtex-entry-alist))) "\\)")) - ;; Define entry commands - (dolist (elt bibtex-entry-alist) - (let* ((entry (car elt)) - (fname (intern (concat "bibtex-" entry)))) - (unless (fboundp fname) - (eval (list 'defun fname nil - (format "Insert a new BibTeX @%s entry; see also `bibtex-entry'." - entry) - '(interactive "*") - `(bibtex-entry ,entry)))))) - ;; Define menu - ;; We use the same keymap for all BibTeX buffers. So all these buffers - ;; have the same BibTeX dialect. To define entry types buffer-locally, - ;; it would be necessary to give each BibTeX buffer a new keymap that - ;; becomes a child of `bibtex-mode-map'. Useful?? - (easy-menu-define - nil bibtex-mode-map "Entry-Types Menu in BibTeX mode" - (apply 'list "Entry-Types" - (append - (mapcar (lambda (entry) - (vector (or (nth 1 entry) (car entry)) - (intern (format "bibtex-%s" (car entry))) t)) - bibtex-entry-alist) - `("---" - ["String" bibtex-String t] - ["Preamble" bibtex-Preamble t] - "---" - ,(append '("BibTeX dialect") - (mapcar (lambda (dialect) - (vector (symbol-name dialect) - `(lambda () (interactive) - (bibtex-set-dialect ',dialect)) - t)) - bibtex-dialect-list)))))))) + ;; Set internal variables + (funcall setfun 'bibtex-entry-alist (bibtex-entry-alist bibtex-dialect)) + (funcall setfun 'bibtex-field-alist + (let ((var (intern (format "bibtex-%s-field-alist" + bibtex-dialect)))) + (if (boundp var) + (symbol-value var) + (error "Field types for BibTeX dialect `%s' undefined" + bibtex-dialect)))) + (funcall setfun 'bibtex-entry-type + (concat "@[ \t]*\\(?:" + (regexp-opt (mapcar 'car bibtex-entry-alist)) "\\)")) + (funcall setfun 'bibtex-entry-head + (concat "^[ \t]*\\(" bibtex-entry-type "\\)[ \t]*[({][ \t\n]*\\(" + bibtex-reference-key "\\)")) + (funcall setfun 'bibtex-entry-maybe-empty-head + (concat bibtex-entry-head "?")) + (funcall setfun 'bibtex-any-valid-entry-type + (concat "^[ \t]*@[ \t]*\\(?:" + (regexp-opt + (append '("String" "Preamble") + (mapcar 'car bibtex-entry-alist))) "\\)")))) + +;; Entry commands and menus for BibTeX dialects +;; We do not use `easy-menu-define' here because this gets confused +;; if we want to have multiple versions of the "same" menu. +(let ((select-map (make-sparse-keymap))) + ;; Submenu for selecting the dialect + (dolist (dialect (reverse bibtex-dialect-list)) + (define-key select-map (vector dialect) + `(menu-item ,(symbol-name dialect) + (lambda () (interactive) (bibtex-set-dialect ',dialect t)) + :button (:radio . (eq bibtex-dialect ',dialect))))) + ;; We define a menu for each dialect. + ;; Then we select the menu we want via the :visible keyword + (dolist (dialect bibtex-dialect-list) + (let ((entry-alist (bibtex-entry-alist dialect)) + (menu-map (make-sparse-keymap))) + (define-key menu-map [select] + `(menu-item "BibTeX dialect" ,select-map)) + (define-key menu-map [nil-2] '(menu-item "--")) + (define-key menu-map [bibtex-preamble] + '(menu-item "Preamble" bibtex-Preamble)) + (define-key menu-map [bibtex-String] + '(menu-item "String" bibtex-String)) + (define-key menu-map [nil-1] '(menu-item "--")) + (dolist (elt (reverse entry-alist)) + ;; Entry commands + (let* ((entry (car elt)) + (fname (intern (format "bibtex-%s" entry)))) + (unless (fboundp fname) + (eval (list 'defun fname nil + (format "Insert a template for a @%s entry; see also `bibtex-entry'." + entry) + '(interactive "*") + `(bibtex-entry ,entry)))) + ;; Menu entries + (define-key menu-map (vector fname) + `(menu-item ,(or (nth 1 elt) (car elt)) ,fname)))) + (define-key bibtex-mode-map + (vector 'menu-bar dialect) + `(menu-item "Entry-Types" ,menu-map + :visible (eq bibtex-dialect ',dialect)))))) (defun bibtex-field-list (entry-type) "Return list of allowed fields for entry ENTRY-TYPE. @@ -3505,7 +3541,7 @@ and `bibtex-user-optional-fields'." (cons required optional))) (defun bibtex-entry (entry-type) - "Insert a new BibTeX entry of type ENTRY-TYPE. + "Insert a template for a BibTeX entry of type ENTRY-TYPE. After insertion call the value of `bibtex-add-entry-hook' if that value is non-nil." (interactive diff --git a/lisp/textmodes/enriched.el b/lisp/textmodes/enriched.el index 14e6014c274..68a99b0efe4 100644 --- a/lisp/textmodes/enriched.el +++ b/lisp/textmodes/enriched.el @@ -1,6 +1,6 @@ ;;; enriched.el --- read and save files in text/enriched format -;; Copyright (C) 1994-1996, 2001-2012 Free Software Foundation, Inc. +;; Copyright (C) 1994-1996, 2001-2012 Free Software Foundation, Inc. ;; Author: Boris Goldowsky ;; Keywords: wp, faces @@ -191,6 +191,11 @@ The value is a list of \(VAR VALUE VAR VALUE...).") "Minor mode for editing text/enriched files. These are files with embedded formatting information in the MIME standard text/enriched format. + +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil. + Turning the mode on or off runs `enriched-mode-hook'. More information about Enriched mode is available in the file diff --git a/lisp/textmodes/text-mode.el b/lisp/textmodes/text-mode.el index 098a545568c..30e5390a3e1 100644 --- a/lisp/textmodes/text-mode.el +++ b/lisp/textmodes/text-mode.el @@ -63,8 +63,7 @@ You can thus get the full benefit of adaptive filling (see the variable `adaptive-fill-mode'). \\{text-mode-map} Turning on Text mode runs the normal hook `text-mode-hook'." - (make-local-variable 'text-mode-variant) - (setq text-mode-variant t) + (set (make-local-variable 'text-mode-variant) t) (set (make-local-variable 'require-final-newline) mode-require-final-newline) (set (make-local-variable 'indent-line-function) 'indent-relative)) diff --git a/lisp/tooltip.el b/lisp/tooltip.el index 76ae62d88e2..1fab25fe5cd 100644 --- a/lisp/tooltip.el +++ b/lisp/tooltip.el @@ -39,18 +39,17 @@ ;;; Switching tooltips on/off (define-minor-mode tooltip-mode - "Toggle use of graphical tooltips (Tooltip mode). -With a prefix argument ARG, enable Tooltip mode if ARG is -positive, and disable it otherwise. If called from Lisp, enable -it if ARG is omitted or nil. + "Toggle Tooltip mode. +With a prefix argument ARG, enable Tooltip mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil. -When Tooltip mode is enabled, Emacs displays help text in a -pop-up window for buttons and menu items that you put the mouse -on. \(However, if `tooltip-use-echo-area' is non-nil, this and -all pop-up help appears in the echo area.) +When this global minor mode is enabled, Emacs displays help +text (e.g. for buttons and menu items that you put the mouse on) +in a pop-up window. -When Tooltip mode is disabled, Emacs displays one line of -the help text in the echo area, and does not make a pop-up window." +When Tooltip mode is disabled, Emacs displays help text in the +echo area, instead of making a pop-up window." :global t ;; Even if we start on a text-only terminal, make this non-nil by ;; default because we can open a graphical frame later (multi-tty). @@ -144,11 +143,14 @@ of the `tooltip' face are used instead." (defcustom tooltip-use-echo-area nil "Use the echo area instead of tooltip frames for help and GUD tooltips. -To display multi-line help text in the echo area, set this to t -and enable `tooltip-mode'." +This variable is obsolete; instead of setting it to t, disable +`tooltip-mode' (which has a similar effect)." :type 'boolean :group 'tooltip) +(make-obsolete-variable 'tooltip-use-echo-area + "disable Tooltip mode instead" "24.1") + ;;; Variables that are not customizable. diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog index f011a8d1dc0..4f49adcd932 100644 --- a/lisp/url/ChangeLog +++ b/lisp/url/ChangeLog @@ -1,3 +1,54 @@ +2012-02-10 Lars Ingebrigtsen + + * url-http.el (url-http-parse-headers): When redirecting, pass on + the `inhibit-cookie' parameter. + +2012-02-10 Glenn Morris + + * url-queue.el (url-queue-retrieve): Fic previous doc fix. + +2012-02-10 Andreas Schwab + + * url-http.el (url-http-clean-headers): Return the number of + removed characters. + (url-http-wait-for-headers-change-function): Adjust end position + after cleaning the headers. (Bug#10768) + +2012-02-10 Glenn Morris + + * url-queue.el (url-queue-retrieve): Doc fix. + +2012-02-08 Lars Ingebrigtsen + + * url-parse.el (url): Add the `use-cookies' slot to the URL struct + to be able to keep track of whether to do cookies or not on a + per-URL basis. + + * url-queue.el (url-queue-retrieve): Take an optional + `inhibit-cookies' parameter. + + * url.el (url-retrieve): Ditto + + * url-http.el (url-http-create-request): Don't send cookies unless + requested. + (url-http-parse-headers): Don't store cookies unless requested. + +2012-02-06 Lars Ingebrigtsen + + * url-cache.el (url-cache-prune-cache): New function. + (url-cache-prune-cache): Check that the directory exists before + trying to delete it. + + * url.el (url-retrieve-number-of-calls): New variable. + (url-retrieve-internal): Use it to expire the cache once in a + while. + + * url-queue.el (url-queue-setup-runners): New function that uses + `run-with-idle-timer' for extra asynchronicity. + (url-queue-remove-jobs-from-host): New function. + (url-queue-callback-function): Remove jobs from the same host if + connection failed. + 2012-01-12 Glenn Morris * url-auth.el (url-basic-auth, url-digest-auth): @@ -86,16 +137,15 @@ 2011-05-02 Lars Magne Ingebrigtsen * url-queue.el: New file. - (url-queue-run-queue): Pick the first waiting job, and not the - last. + (url-queue-run-queue): Pick the first waiting job, and not the last. (url-queue-parallel-processes): Lower the concurrency level, since Emacs doesn't seem to like too many async processes. (url-queue-prune-old-entries): Fix up the pruning code. 2011-04-16 Lars Magne Ingebrigtsen - * url-http.el (url-http-wait-for-headers-change-function): Protect - against malformed headerless responses from servers. + * url-http.el (url-http-wait-for-headers-change-function): + Protect against malformed headerless responses from servers. 2011-04-02 Chong Yidong @@ -123,9 +173,9 @@ 2011-02-03 Lars Ingebrigtsen - * url-http.el (url-http-wait-for-headers-change-function): Don't - move point if the callback function has moved changed/killed the - process buffer. + * url-http.el (url-http-wait-for-headers-change-function): + Don't move point if the callback function has moved/changed/killed + the process buffer. 2010-12-16 Miles Bader @@ -198,8 +248,8 @@ 2010-10-01 Lars Magne Ingebrigtsen - * url-cookie.el (url-cookie-handle-set-cookie): Use - url-lazy-message for the cookie warning, which isn't very interesting. + * url-cookie.el (url-cookie-handle-set-cookie): Use url-lazy-message + for the cookie warning, which isn't very interesting. * url-http.el (url-http-async-sentinel): Check that the buffer is still alive before switching to it. @@ -265,13 +315,13 @@ 2010-07-01 Mark A. Hershberger * url-http.el (url-http-create-request): Add a CRLF on the end so - that POSTs with content to https urls work. + that POSTs with content to https URLs work. See 2010-06-22 Mark A. Hershberger * url-parse.el (url-user-for-url, url-password-for-url): - Convenience functions that get usernames and passwords for urls + Convenience functions that get usernames and passwords for URLs from auth-source functions. 2010-06-12 Štěpán Němec (tiny change) diff --git a/lisp/url/url-cache.el b/lisp/url/url-cache.el index 20602a2f8ef..6559de4deb7 100644 --- a/lisp/url/url-cache.el +++ b/lisp/url/url-cache.el @@ -209,6 +209,34 @@ If `url-standalone-mode' is non-nil, cached items never expire." (seconds-to-time (or expire-time url-cache-expire-time))) (current-time)))))) +(defun url-cache-prune-cache (&optional directory) + "Remove all expired files from the cache. +`url-cache-expire-time' says how old a file has to be to be +considered \"expired\"." + (let ((current-time (current-time)) + (total-files 0) + (deleted-files 0)) + (setq directory (or directory url-cache-directory)) + (when (file-exists-p directory) + (dolist (file (directory-files directory t)) + (unless (member (file-name-nondirectory file) '("." "..")) + (setq total-files (1+ total-files)) + (cond + ((file-directory-p file) + (when (url-cache-prune-cache file) + (setq deleted-files (1+ deleted-files)))) + ((time-less-p + (time-add + (nth 5 (file-attributes file)) + (seconds-to-time url-cache-expire-time)) + current-time) + (delete-file file) + (setq deleted-files (1+ deleted-files)))))) + (if (< deleted-files total-files) + nil + (delete-directory directory) + t)))) + (provide 'url-cache) ;;; url-cache.el ends here diff --git a/lisp/url/url-dired.el b/lisp/url/url-dired.el index 72ada795055..f04e7901ef7 100644 --- a/lisp/url/url-dired.el +++ b/lisp/url/url-dired.el @@ -43,7 +43,10 @@ (url-dired-find-file)) (define-minor-mode url-dired-minor-mode - "Minor mode for directory browsing." + "Minor mode for directory browsing. +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil." :lighter " URL" :keymap url-dired-minor-mode-map) (defun url-find-file-dired (dir) diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el index b43ed7617ad..0c911260ca5 100644 --- a/lisp/url/url-http.el +++ b/lisp/url/url-http.el @@ -320,8 +320,10 @@ request.") ;; Authorization auth ;; Cookies - (url-cookie-generate-header-lines host real-fname - (equal "https" (url-type url-http-target-url))) + (when (url-use-cookies url-http-target-url) + (url-cookie-generate-header-lines + host real-fname + (equal "https" (url-type url-http-target-url)))) ;; If-modified-since (if (and (not no-cache) (member url-http-method '("GET" nil))) @@ -352,11 +354,14 @@ request.") ;; Parsing routines (defun url-http-clean-headers () "Remove trailing \r from header lines. -This allows us to use `mail-fetch-field', etc." +This allows us to use `mail-fetch-field', etc. +Return the number of characters removed." (declare (special url-http-end-of-headers)) - (goto-char (point-min)) - (while (re-search-forward "\r$" url-http-end-of-headers t) - (replace-match ""))) + (let ((end (marker-position url-http-end-of-headers))) + (goto-char (point-min)) + (while (re-search-forward "\r$" url-http-end-of-headers t) + (replace-match "")) + (- end url-http-end-of-headers))) (defun url-http-handle-authentication (proxy) (declare (special status success url-http-method url-http-data @@ -498,7 +503,8 @@ should be shown to the user." (file-name-handler-alist nil)) (setq class (/ url-http-response-status 100)) (url-http-debug "Parsed HTTP headers: class=%d status=%d" class url-http-response-status) - (url-http-handle-cookies) + (when (url-use-cookies url-http-target-url) + (url-http-handle-cookies)) (case class ;; Classes of response codes @@ -641,7 +647,8 @@ should be shown to the user." (url-retrieve-internal redirect-uri url-callback-function url-callback-arguments - (url-silent url-current-object))) + (url-silent url-current-object) + (not (url-use-cookies url-current-object)))) (url-mark-buffer-as-dead buffer)) ;; We hit url-max-redirections, so issue an error and ;; stop redirecting. @@ -1051,7 +1058,7 @@ the end of the document." (setq url-http-end-of-headers (set-marker (make-marker) (point)) end-of-headers t) - (url-http-clean-headers))) + (setq nd (- nd (url-http-clean-headers))))) (if (not end-of-headers) ;; Haven't seen the end of the headers yet, need to wait diff --git a/lisp/url/url-parse.el b/lisp/url/url-parse.el index ef09622b0a9..b91c85c0c3d 100644 --- a/lisp/url/url-parse.el +++ b/lisp/url/url-parse.el @@ -35,7 +35,8 @@ (&optional type user password host portspec filename target attributes fullness)) (:copier nil)) - type user password host portspec filename target attributes fullness silent) + type user password host portspec filename target attributes fullness + silent (use-cookies t)) (defsubst url-port (urlobj) (or (url-portspec urlobj) diff --git a/lisp/url/url-queue.el b/lisp/url/url-queue.el index 534c94b4d52..9dfee485918 100644 --- a/lisp/url/url-queue.el +++ b/lisp/url/url-queue.el @@ -30,6 +30,7 @@ (eval-when-compile (require 'cl)) (require 'browse-url) +(require 'url-parse) (defcustom url-queue-parallel-processes 6 "The number of concurrent processes." @@ -49,21 +50,47 @@ (defstruct url-queue url callback cbargs silentp - buffer start-time) + buffer start-time pre-triggered + inhibit-cookiesp) ;;;###autoload -(defun url-queue-retrieve (url callback &optional cbargs silent) +(defun url-queue-retrieve (url callback &optional cbargs silent inhibit-cookies) "Retrieve URL asynchronously and call CALLBACK with CBARGS when finished. -Like `url-retrieve' (which see for details of the arguments), but -controls the level of parallelism via the -`url-queue-parallel-processes' variable." +This is like `url-retrieve' (which see for details of the arguments), +but with limits on the degree of parallelism. The variable +`url-queue-parallel-processes' sets the number of concurrent processes. +The variable `url-queue-timeout' sets a timeout." (setq url-queue (append url-queue (list (make-url-queue :url url :callback callback :cbargs cbargs - :silentp silent)))) - (url-queue-run-queue)) + :silentp silent + :inhibit-cookiesp inhibit-cookies)))) + (url-queue-setup-runners)) + +;; To ensure asynch behaviour, we start the required number of queue +;; runners from `run-with-idle-timer'. So we're basically going +;; through the queue in two ways: 1) synchronously when a program +;; calls `url-queue-retrieve' (which will then start the required +;; number of queue runners), and 2) at the exit of each job, which +;; will then not start any further threads, but just reuse the +;; previous "slot". + +(defun url-queue-setup-runners () + (let ((running 0) + waiting) + (dolist (entry url-queue) + (cond + ((or (url-queue-start-time entry) + (url-queue-pre-triggered entry)) + (incf running)) + ((not waiting) + (setq waiting entry)))) + (when (and waiting + (< running url-queue-parallel-processes)) + (setf (url-queue-pre-triggered waiting) t) + (run-with-idle-timer 0.01 nil 'url-queue-run-queue)))) (defun url-queue-run-queue () (url-queue-prune-old-entries) @@ -81,16 +108,34 @@ controls the level of parallelism via the (url-queue-start-retrieve waiting)))) (defun url-queue-callback-function (status job) + (when (and (eq (car status) :error) + (eq (cadr (cadr status)) 'connection-failed)) + ;; If we get a connection error, then flush all other jobs from + ;; the host from the queue. This particularly makes sense if the + ;; error really is a DNS resolver issue, which happens + ;; synchronously and totally halts Emacs. + (url-queue-remove-jobs-from-host + (plist-get (nthcdr 3 (cadr status)) :host))) (setq url-queue (delq job url-queue)) (url-queue-run-queue) (apply (url-queue-callback job) (cons status (url-queue-cbargs job)))) +(defun url-queue-remove-jobs-from-host (host) + (let ((jobs nil)) + (dolist (job url-queue) + (when (equal (url-host (url-generic-parse-url (url-queue-url job))) + host) + (push job jobs))) + (dolist (job jobs) + (setq url-queue (delq job url-queue))))) + (defun url-queue-start-retrieve (job) (setf (url-queue-buffer job) (ignore-errors (url-retrieve (url-queue-url job) #'url-queue-callback-function (list job) - (url-queue-silentp job))))) + (url-queue-silentp job) + (url-queue-inhibit-cookiesp job))))) (defun url-queue-prune-old-entries () (let (dead-jobs) diff --git a/lisp/url/url.el b/lisp/url/url.el index 883e1a0c765..933bceb2e6f 100644 --- a/lisp/url/url.el +++ b/lisp/url/url.el @@ -119,8 +119,11 @@ Sometimes while retrieving a URL, the URL library needs to use another buffer than the one returned initially by `url-retrieve'. In this case, it sets this variable in the original buffer as a forwarding pointer.") +(defvar url-retrieve-number-of-calls 0) +(autoload 'url-cache-prune-cache "url-cache") + ;;;###autoload -(defun url-retrieve (url callback &optional cbargs silent) +(defun url-retrieve (url callback &optional cbargs silent inhibit-cookies) "Retrieve URL asynchronously and call CALLBACK with CBARGS when finished. URL is either a string or a parsed URL. @@ -144,7 +147,9 @@ The variables `url-request-data', `url-request-method' and request; dynamic binding of other variables doesn't necessarily take effect. -If SILENT, then don't message progress reports and the like." +If SILENT, then don't message progress reports and the like. +If INHIBIT-COOKIES, cookies will neither be stored nor sent to +the server." ;;; XXX: There is code in Emacs that does dynamic binding ;;; of the following variables around url-retrieve: ;;; url-standalone-mode, url-gateway-unplugged, w3-honor-stylesheets, @@ -155,14 +160,18 @@ If SILENT, then don't message progress reports and the like." ;;; webmail.el; the latter should be updated. Is ;;; url-cookie-multiple-line needed anymore? The other url-cookie-* ;;; are (for now) only used in synchronous retrievals. - (url-retrieve-internal url callback (cons nil cbargs) silent)) + (url-retrieve-internal url callback (cons nil cbargs) silent + inhibit-cookies)) -(defun url-retrieve-internal (url callback cbargs &optional silent) +(defun url-retrieve-internal (url callback cbargs &optional silent + inhibit-cookies) "Internal function; external interface is `url-retrieve'. CBARGS is what the callback will actually receive - the first item is the list of events, as described in the docstring of `url-retrieve'. -If SILENT, don't message progress reports and the like." +If SILENT, don't message progress reports and the like. +If INHIBIT-COOKIES, cookies will neither be stored nor sent to +the server." (url-do-setup) (url-gc-dead-buffers) (if (stringp url) @@ -174,6 +183,11 @@ If SILENT, don't message progress reports and the like." (unless (url-type url) (error "Bad url: %s" (url-recreate-url url))) (setf (url-silent url) silent) + (setf (url-use-cookies url) (not inhibit-cookies)) + ;; Once in a while, remove old entries from the URL cache. + (when (zerop (% url-retrieve-number-of-calls 1000)) + (url-cache-prune-cache)) + (setq url-retrieve-number-of-calls (1+ url-retrieve-number-of-calls)) (let ((loader (url-scheme-get-property (url-type url) 'loader)) (url-using-proxy (if (url-host url) (url-find-proxy-for-url url (url-host url)))) diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el index 7de9d17e3f7..ba4a2766526 100644 --- a/lisp/vc/diff-mode.el +++ b/lisp/vc/diff-mode.el @@ -237,7 +237,7 @@ from disabled to enabled, it tries to refine the current hunk, as well." :group 'diff-mode :init-value t :lighter nil ;; " Auto-Refine" (when diff-auto-refine-mode - (condition-case-no-debug nil (diff-refine-hunk) (error nil)))) + (condition-case-unless-debug nil (diff-refine-hunk) (error nil)))) ;;;; ;;;; font-lock support @@ -542,7 +542,7 @@ but in the file header instead, in which case move forward to the first hunk." (easy-mmode-define-navigation diff-hunk diff-hunk-header-re "hunk" diff-end-of-hunk diff-restrict-view (if diff-auto-refine-mode - (condition-case-no-debug nil (diff-refine-hunk) (error nil)))) + (condition-case-unless-debug nil (diff-refine-hunk) (error nil)))) (easy-mmode-define-navigation diff-file diff-file-header-re "file" diff-end-of-hunk) diff --git a/lisp/vc/log-view.el b/lisp/vc/log-view.el index 849954f2cf8..7512c9283eb 100644 --- a/lisp/vc/log-view.el +++ b/lisp/vc/log-view.el @@ -376,6 +376,8 @@ log entries." marked-list))) (defun log-view-toggle-entry-display () + "If possible, expand the current Log View entry. +This calls `log-view-expanded-log-entry-function' to do the work." (interactive) ;; Don't do anything unless `log-view-expanded-log-entry-function' ;; is defined in this mode. diff --git a/lisp/vc/pcvs.el b/lisp/vc/pcvs.el index 1066ebc7f81..9ba65cda143 100644 --- a/lisp/vc/pcvs.el +++ b/lisp/vc/pcvs.el @@ -31,19 +31,19 @@ ;;; Commentary: -;; PCL-CVS is a front-end to the CVS version control system. For people -;; familiar with VC, it is somewhat like VC-dired: it presents the status of -;; all the files in your working area and allows you to commit/update several -;; of them at a time. Compared to VC-dired, it is considerably better and -;; faster (but only for CVS). +;; PCL-CVS is a front-end to the CVS version control system. +;; It presents the status of all the files in your working area and +;; allows you to commit/update several of them at a time. +;; Compare with the general Emacs utility vc-dir, which tries +;; to be VCS-agnostic. You may find PCL-CVS better/faster for CVS. ;; PCL-CVS was originally written by Per Cederqvist many years ago. This ;; version derives from the XEmacs-21 version, itself based on the 2.0b2 ;; version (last release from Per). It is a thorough rework. -;; Contrary to what you'd expect, PCL-CVS is not a replacement for VC but only -;; for VC-dired. As such, I've tried to make PCL-CVS and VC interoperate -;; seamlessly (I also use VC). +;; PCL-CVS is not a replacement for VC, but adds extra functionality. +;; As such, I've tried to make PCL-CVS and VC interoperate seamlessly +;; (I also use VC). ;; To use PCL-CVS just use `M-x cvs-examine RET RET'. ;; There is a TeXinfo manual, which can be helpful to get started. diff --git a/lisp/vc/smerge-mode.el b/lisp/vc/smerge-mode.el index 870246103a6..d2881b40ad0 100644 --- a/lisp/vc/smerge-mode.el +++ b/lisp/vc/smerge-mode.el @@ -1266,6 +1266,9 @@ with a \\[universal-argument] prefix, makes up a 3-way conflict." ;;;###autoload (define-minor-mode smerge-mode "Minor mode to simplify editing output from the diff3 program. +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil. \\{smerge-mode-map}" :group 'smerge :lighter " SMerge" (when (and (boundp 'font-lock-mode) font-lock-mode) diff --git a/lisp/vc/vc-dav.el b/lisp/vc/vc-dav.el index 6f9a6d6b7df..9d55e9c7b43 100644 --- a/lisp/vc/vc-dav.el +++ b/lisp/vc/vc-dav.el @@ -170,10 +170,7 @@ It should return a status of either 0 (no differences found), or ;; Return a dav-specific mode line string for URL. Are there any ;; specific states that we want exposed? ;; -;; vc-dav-dired-state-info(url) -;; Translate the `vc-state' property of URL into a string that can -;; be used in a vc-dired buffer. Are there any extra states that -;; we want exposed? +;; vc-dir support ;; ;; vc-dav-receive-file(url rev) ;; Let this backend `receive' a file that is already registered diff --git a/lisp/vc/vc-hooks.el b/lisp/vc/vc-hooks.el index 5e60666f56a..b6f07ef1dc4 100644 --- a/lisp/vc/vc-hooks.el +++ b/lisp/vc/vc-hooks.el @@ -941,7 +941,7 @@ current, and kill the buffer that visits the link." (define-key map "~" 'vc-revision-other-window) map)) (fset 'vc-prefix-map vc-prefix-map) -(define-key global-map "\C-xv" 'vc-prefix-map) +(define-key ctl-x-map "v" 'vc-prefix-map) (defvar vc-menu-map (let ((map (make-sparse-keymap "Version Control"))) diff --git a/lisp/vc/vc-rcs.el b/lisp/vc/vc-rcs.el index f9248d5a954..f2122b60ce1 100644 --- a/lisp/vc/vc-rcs.el +++ b/lisp/vc/vc-rcs.el @@ -809,9 +809,9 @@ systime, or nil if there is none. Also, reposition point." ;;; Tag system ;;; -(defun vc-rcs-create-tag (backend dir name branchp) +(defun vc-rcs-create-tag (dir name branchp) (when branchp - (error "RCS backend %s does not support module branches" backend)) + (error "RCS backend does not support module branches")) (let ((result (vc-tag-precondition dir))) (if (stringp result) (error "File %s is not up-to-date" result) diff --git a/lisp/vc/vc-sccs.el b/lisp/vc/vc-sccs.el index 26e7b020b46..31637f5490e 100644 --- a/lisp/vc/vc-sccs.el +++ b/lisp/vc/vc-sccs.el @@ -359,9 +359,9 @@ revert all subfiles." ;;; our own set of name-to-revision mappings. ;;; -(defun vc-sccs-create-tag (backend dir name branchp) +(defun vc-sccs-create-tag (dir name branchp) (when branchp - (error "SCCS backend %s does not support module branches" backend)) + (error "SCCS backend does not support module branches")) (let ((result (vc-tag-precondition dir))) (if (stringp result) (error "File %s is not up-to-date" result) diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 6b15af4adf4..e1141cb392d 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -1880,7 +1880,8 @@ The headers are reset to their non-expanded form." "Enter a replacement change comment." "*vc-log*" (lambda () (vc-call-backend backend 'log-edit-mode)) - (lexical-let ((rev rev)) + (lexical-let ((rev rev) + (backend backend)) (lambda (files comment) (vc-call-backend backend 'modify-change-comment files rev comment)))))) @@ -1888,6 +1889,7 @@ The headers are reset to their non-expanded form." ;;;###autoload (defun vc-merge () "Perform a version control merge operation. +You must be visiting a version controlled file, or in a `vc-dir' buffer. On a distributed version control system, this runs a \"merge\" operation to incorporate changes from another branch onto the current branch, prompting for an argument list. @@ -2365,6 +2367,7 @@ depending on the underlying version-control system." ;;;###autoload (defun vc-pull (&optional arg) "Update the current fileset or branch. +You must be visiting a version controlled file, or in a `vc-dir' buffer. On a distributed version control system, this runs a \"pull\" operation to update the current branch, prompting for an argument list if required. Optional prefix ARG forces a prompt. diff --git a/lisp/vcursor.el b/lisp/vcursor.el index e0741dcd727..95928ebe87a 100644 --- a/lisp/vcursor.el +++ b/lisp/vcursor.el @@ -813,6 +813,8 @@ out how much to copy." (define-minor-mode vcursor-use-vcursor-map "Toggle the state of the vcursor key map. +With a prefix argument ARG, enable it if ARG is positive, and disable +it otherwise. If called from Lisp, enable it if ARG is omitted or nil. When on, the keys defined in it are mapped directly on top of the main keymap, allowing you to move the vcursor with ordinary motion keys. An indication \"!VC\" appears in the mode list. The effect is diff --git a/lisp/view.el b/lisp/view.el index 035f8c61d9f..4a219971097 100644 --- a/lisp/view.el +++ b/lisp/view.el @@ -311,13 +311,9 @@ file: Users may suspend viewing in order to modify the buffer. Exiting View mode will then discard the user's edits. Setting EXIT-ACTION to `kill-buffer-if-not-modified' avoids this." (interactive "bView buffer: ") - (if (eq (with-current-buffer buffer - (get major-mode 'mode-class)) - 'special) - (progn - (switch-to-buffer buffer) - (message "Not using View mode because the major mode is special")) - (switch-to-buffer buffer) + (switch-to-buffer buffer) + (if (eq (get major-mode 'mode-class) 'special) + (message "Not using View mode because the major mode is special") (view-mode-enter nil exit-action))) ;;;###autoload @@ -339,7 +335,9 @@ this argument instead of explicitly setting `view-exit-action'." (interactive "bIn other window view buffer:\nP") (let ((pop-up-windows t)) (pop-to-buffer buffer t)) - (view-mode-enter nil exit-action)) + (if (eq (get major-mode 'mode-class) 'special) + (message "Not using View mode because the major mode is special") + (view-mode-enter nil exit-action))) ;;;###autoload (defun view-buffer-other-frame (buffer &optional not-return exit-action) @@ -360,7 +358,9 @@ this argument instead of explicitly setting `view-exit-action'." (interactive "bView buffer in other frame: \nP") (let ((pop-up-frames t)) (pop-to-buffer buffer t)) - (view-mode-enter nil exit-action)) + (if (eq (get major-mode 'mode-class) 'special) + (message "Not using View mode because the major mode is special") + (view-mode-enter nil exit-action))) ;;;###autoload (define-minor-mode view-mode diff --git a/lisp/wid-browse.el b/lisp/wid-browse.el index 4650548d6e0..005e87a6dae 100644 --- a/lisp/wid-browse.el +++ b/lisp/wid-browse.el @@ -270,7 +270,10 @@ VALUE is assumed to be a list of widgets." ;;;###autoload (define-minor-mode widget-minor-mode - "Minor mode for traversing widgets." + "Minor mode for traversing widgets. +With a prefix argument ARG, enable the mode if ARG is positive, +and disable it otherwise. If called from Lisp, enable the mode +if ARG is omitted or nil." :lighter " Widget") ;;; The End: diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el index 27922327f44..61bb4db558c 100644 --- a/lisp/wid-edit.el +++ b/lisp/wid-edit.el @@ -1987,10 +1987,14 @@ the earlier input." (when (overlayp overlay) (delete-overlay overlay)))) -(defun widget-field-value-get (widget) - "Return current text in editing field." +(defun widget-field-value-get (widget &optional no-truncate) + "Return current text in editing field. +Normally, trailing spaces within the editing field are truncated. +But if NO-TRUNCATE is non-nil, include them." (let ((from (widget-field-start widget)) - (to (widget-field-text-end widget)) + (to (if no-truncate + (widget-field-end widget) + (widget-field-text-end widget))) (buffer (widget-field-buffer widget)) (secret (widget-get widget :secret)) (old (current-buffer))) @@ -3407,6 +3411,7 @@ To use this type, you must define :match or :match-alternatives." :format "%{%t%}: %v\n" :valid-regexp "\\`.\\'" :error "This field should contain a single character" + :value-get (lambda (w) (widget-field-value-get w t)) :value-to-internal (lambda (_widget value) (if (stringp value) value diff --git a/lisp/windmove.el b/lisp/windmove.el index 10a564419fb..0523530869b 100644 --- a/lisp/windmove.el +++ b/lisp/windmove.el @@ -417,17 +417,17 @@ supplied, if ARG is greater or smaller than zero, respectively." (- (nth 3 edges) 1)))) (cond ((> effective-arg 0) - top-left) + top-left) ((< effective-arg 0) - bottom-right) + bottom-right) ((= effective-arg 0) - (windmove-coord-add - top-left - (let ((col-row - (posn-col-row - (posn-at-point (window-point window) window)))) - (cons (- (car col-row) (window-hscroll window)) - (cdr col-row))))))))) + (windmove-coord-add + top-left + ;; Don't care whether window is horizontally scrolled - + ;; `posn-at-point' handles that already. See also: + ;; http://lists.gnu.org/archive/html/emacs-devel/2012-01/msg00638.html + (posn-col-row + (posn-at-point (window-point window) window)))))))) ;; This uses the reference location in the current window (calculated ;; by `windmove-reference-loc' above) to find a reference location diff --git a/lisp/window.el b/lisp/window.el index 54e5ec9c74c..c9bddba942c 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -299,7 +299,7 @@ non-nil means only return a window whose window-parameter value for PARAMETER equals VALUE (comparison is done with `equal'). Optional argument ANY non-nil means consider internal windows too." - (let (this-value windows) + (let (this-value) (catch 'found (walk-window-tree (lambda (window) @@ -435,7 +435,7 @@ A valid configuration has to preserve the following invariant: parent whose window-side parameter is nil and there must be no leaf window whose window-side parameter is nil." (let (normal none left top right bottom - side parent parent-side code) + side parent parent-side) (when (or (catch 'reset (walk-window-tree (lambda (window) @@ -1807,8 +1807,7 @@ preferably only resize windows adjacent to EDGE." (if (window-combined-p sub horizontal) ;; In an iso-combination try to extract DELTA from WINDOW's ;; siblings. - (let ((first sub) - (skip (eq trail 'after)) + (let ((skip (eq trail 'after)) this-delta other-delta) ;; Decide which windows shall be left alone. (while sub @@ -1993,7 +1992,7 @@ move it as far as possible in the desired direction." (setq window (window-normalize-window window)) (let ((frame (window-frame window)) (right window) - left this-delta min-delta max-delta failed) + left this-delta min-delta max-delta) ;; Find the edge we want to move. (while (and (or (not (window-combined-p right horizontal)) (not (window-right right))) @@ -2309,9 +2308,8 @@ frame." (when (window-parameter window 'window-atom) (setq window (window-atom-root window)))) - (let* ((parent (window-parent window)) - (frame (window-frame window)) - (buffer (window-buffer window))) + (let ((parent (window-parent window)) + (frame (window-frame window))) (cond ((frame-root-window-p window) ;; WINDOW's frame can be deleted only if there are other frames @@ -2798,8 +2796,7 @@ means the buffer shown in window will be killed. Return non-nil if WINDOW gets deleted or its frame is auto-hidden." (setq window (window-normalize-window window t)) (unless (and dedicated-only (not (window-dedicated-p window))) - (let* ((buffer (window-buffer window)) - (deletable (window-deletable-p window))) + (let ((deletable (window-deletable-p window))) (cond ((eq deletable 'frame) (let ((frame (window-frame window))) @@ -3355,7 +3352,7 @@ is non-nil." (number-of-children 0) (parent-size (window-new-total window)) (total-sum parent-size) - found failed size sub-total sub-delta sub-amount rest) + failed size sub-total sub-delta sub-amount rest) (while sub (setq number-of-children (1+ number-of-children)) (when (window-size-fixed-p sub horizontal) @@ -3372,7 +3369,6 @@ is non-nil." (while (and sub (not failed)) ;; Ignore child windows that should be ignored or are stuck. (unless (window--resize-child-windows-skip-p sub) - (setq found t) (setq sub-total (window-total-size sub horizontal)) (setq sub-delta (- size sub-total)) (setq sub-amount @@ -3568,7 +3564,7 @@ specific buffers." )) ;;; Window states, how to get them and how to put them in a window. -(defun window--state-get-1 (window &optional ignore) +(defun window--state-get-1 (window &optional writable) "Helper function for `window-state-get'." (let* ((type (cond @@ -3585,74 +3581,62 @@ specific buffers." (normal-height . ,(window-normal-size window)) (normal-width . ,(window-normal-size window t)) (combination-limit . ,(window-combination-limit window)) - ,@(let (list) - ;; Make copies of persistent window parameters whose cdr - ;; is either t or, when IGNORE is non-nil, is either nil - ;; or `state'. - (dolist (pers window-persistent-parameters) - (when (and (consp pers) - (or (eq (cdr pers) t) - (and (memq (cdr pers) '(state nil)) - (not ignore)))) - (let ((par (assq (car pers) (window-parameters window)))) - (setq list (cons (cons (car pers) (when par (cdr par))) - list))))) - ;; Save `clone-of' parameter unless IGNORE or - ;; `window-persistent-parameters' prevail. - (when (and (not (assq 'clone-of (window-parameters window))) - (let ((clone-of - (assq 'clone-of - window-persistent-parameters))) - (when clone-of - (if ignore - (eq (cdr clone-of) t) - (memq (cdr clone-of) '(state nil)))))) - (setq list (cons (cons 'clone-of window) list))) + ,@(let ((parameters (window-parameters window)) + list) + ;; Make copies of those window parameters whose + ;; persistence property is `writable' if WRITABLE is + ;; non-nil and non-nil if WRITABLE is nil. + (dolist (par parameters) + (let ((pers (cdr (assq (car par) + window-persistent-parameters)))) + (when (and pers (or (not writable) (eq pers 'writable))) + (setq list (cons (cons (car par) (cdr par)) list))))) + ;; Add `clone-of' parameter if necessary. + (let ((pers (cdr (assq 'clone-of + window-persistent-parameters)))) + (when (and pers (or (not writable) (eq pers 'writable)) + (not (assq 'clone-of list))) + (setq list (cons (cons 'clone-of window) list)))) (when list `((parameters . ,list)))) ,@(when buffer - ;; All buffer related things go in here - make the buffer - ;; current when retrieving `point' and `mark'. - (with-current-buffer (window-buffer window) - (let ((point (window-point-1 window)) - (start (window-start window)) - (mark (mark t))) - `((buffer - ,(buffer-name buffer) - (selected . ,selected) - ,@(when window-size-fixed - `((size-fixed . ,window-size-fixed))) - (hscroll . ,(window-hscroll window)) - (fringes . ,(window-fringes window)) - (margins . ,(window-margins window)) - (scroll-bars . ,(window-scroll-bars window)) - (vscroll . ,(window-vscroll window)) - (dedicated . ,(window-dedicated-p window)) - (point . ,(if ignore point (copy-marker point))) - (start . ,(if ignore start (copy-marker start))) - ,@(when mark - `((mark . ,(if ignore - mark (copy-marker mark)))))))))))) + ;; All buffer related things go in here. + (let ((point (window-point-1 window)) + (start (window-start window))) + `((buffer + ,(buffer-name buffer) + (selected . ,selected) + (hscroll . ,(window-hscroll window)) + (fringes . ,(window-fringes window)) + (margins . ,(window-margins window)) + (scroll-bars . ,(window-scroll-bars window)) + (vscroll . ,(window-vscroll window)) + (dedicated . ,(window-dedicated-p window)) + (point . ,(if writable point (copy-marker point))) + (start . ,(if writable start (copy-marker start))))))))) (tail (when (memq type '(vc hc)) (let (list) (setq window (window-child window)) (while window - (setq list (cons (window--state-get-1 window ignore) list)) + (setq list (cons (window--state-get-1 window writable) list)) (setq window (window-right window))) (nreverse list))))) (append head tail))) -(defun window-state-get (&optional window ignore) +(defun window-state-get (&optional window writable) "Return state of WINDOW as a Lisp object. WINDOW can be any window and defaults to the root window of the selected frame. -Optional argument IGNORE non-nil means do not use markers for -sampling positions like `window-point' or `window-start' and do -not record parameters unless `window-persistent-parameters' -requests it. IGNORE should be non-nil when the return value -shall be written to a file and read back in another session. +Optional argument WRITABLE non-nil means do not use markers for +sampling `window-point' and `window-start'. Together, WRITABLE +and the variable `window-persistent-parameters' specify which +window parameters are saved by this function. WRITABLE should be +non-nil when the return value shall be written to a file and read +back in another session. Otherwise, an application may run into +an `invalid-read-syntax' error while attempting to read back the +value from file. The return value can be used as argument for `window-state-put' to put the state recorded here into an arbitrary window. The @@ -3674,11 +3658,8 @@ value can be also stored on disk and read back in a new session." (min-height-ignore . ,(window-min-size window nil t)) (min-width-ignore . ,(window-min-size window t t)) (min-height-safe . ,(window-min-size window nil 'safe)) - (min-width-safe . ,(window-min-size window t 'safe)) - ;; These are probably not needed. - ,@(when (window-size-fixed-p window) `((fixed-height . t))) - ,@(when (window-size-fixed-p window t) `((fixed-width . t)))) - (window--state-get-1 window ignore))) + (min-width-safe . ,(window-min-size window t 'safe))) + (window--state-get-1 window writable))) (defvar window-state-put-list nil "Helper variable for `window-state-put'.") @@ -3751,21 +3732,18 @@ value can be also stored on disk and read back in a new session." "Helper function for `window-state-put'." (dolist (item window-state-put-list) (let ((window (car item)) - (splits (cdr (assq 'splits item))) (combination-limit (cdr (assq 'combination-limit item))) (parameters (cdr (assq 'parameters item))) (state (cdr (assq 'buffer item)))) (when combination-limit (set-window-combination-limit window combination-limit)) - ;; Assign saved window parameters. If a parameter's value is nil, - ;; don't assign it unless the new window has it set already (which - ;; shouldn't happen unless some `window-configuration-change-hook' - ;; function installed it). + ;; Reset window's parameters and assign saved ones (we might want + ;; a `remove-window-parameters' function here). + (dolist (parameter (window-parameters window)) + (set-window-parameter window (car parameter) nil)) (when parameters (dolist (parameter parameters) - (when (or (cdr parameter) - (window-parameter window (car parameter))) - (set-window-parameter window (car parameter) (cdr parameter))))) + (set-window-parameter window (car parameter) (cdr parameter)))) ;; Process buffer related state. (when state ;; We don't want to raise an error here so we create a buffer if @@ -3815,11 +3793,7 @@ value can be also stored on disk and read back in a new session." ;; have been created and sized). (ignore-errors (set-window-start window (cdr (assq 'start state))) - (set-window-point window (cdr (assq 'point state))) - ;; I'm not sure whether we should set the mark here, but maybe - ;; it can be used. - (let ((mark (cdr (assq 'mark state)))) - (when mark (set-mark mark)))) + (set-window-point window (cdr (assq 'point state)))) ;; Select window if it's the selected one. (when (cdr (assq 'selected state)) (select-window window))))))) @@ -3847,8 +3821,7 @@ windows can get as small as `window-safe-min-height' and (= (window-total-size window t) (cdr (assq 'total-width state))))) (min-height (cdr (assq 'min-height head))) - (min-width (cdr (assq 'min-width head))) - selected) + (min-width (cdr (assq 'min-width head)))) (if (and (not totals) (or (> min-height (window-total-size window)) (> min-width (window-total-size window t))) @@ -4265,7 +4238,7 @@ selected rather than (as usual) some other window. See ;; The elements of `same-window-regexps' can be regexps ;; or cons cells whose cars are regexps. (when (or (and (stringp regexp) - (string-match regexp buffer-name)) + (string-match-p regexp buffer-name)) (and (consp regexp) (stringp (car regexp)) (string-match-p (car regexp) buffer-name))) (throw 'found t))))))) @@ -4623,8 +4596,7 @@ specified, e.g. by the user options `display-buffer-alist' or "Retrieve ALIST entry corresponding to BUFFER-NAME." (catch 'match (dolist (entry alist) - (let ((key (car entry)) - (value (cdr entry))) + (let ((key (car entry))) (when (or (and (stringp key) (string-match-p key buffer-name)) (and (symbolp key) (functionp key) @@ -4813,7 +4785,7 @@ See `display-buffer' for the format of display actions." (funcall special-display-function buffer ',(if (listp pars) pars))))))))) -(defun display-buffer-pop-up-frame (buffer alist) +(defun display-buffer-pop-up-frame (buffer _alist) "Display BUFFER in a new frame. This works by calling `pop-up-frame-function'. If successful, return the window used; otherwise return nil." @@ -4828,7 +4800,7 @@ return the window used; otherwise return nil." (set-window-prev-buffers window nil) window))) -(defun display-buffer-pop-up-window (buffer alist) +(defun display-buffer-pop-up-window (buffer _alist) "Display BUFFER by popping up a new window. The new window is created on the selected frame, or in `last-nonminibuffer-frame' if no windows can be created there. @@ -4931,8 +4903,7 @@ at the front of the list of recently selected ones." (if current-prefix-arg t))) (setq buffer (window-normalize-buffer-to-switch-to buffer)) (set-buffer buffer) - (let* ((old-window (selected-window)) - (old-frame (selected-frame)) + (let* ((old-frame (selected-frame)) (window (display-buffer buffer action)) (frame (window-frame window))) ;; If we chose another frame, make sure it gets input focus. diff --git a/lisp/xml.el b/lisp/xml.el index f7b54048d3a..39a8da0f337 100644 --- a/lisp/xml.el +++ b/lisp/xml.el @@ -421,7 +421,8 @@ Returns one of: ;; skip comments ((looking-at "") - nil) + (skip-syntax-forward " ") + (xml-parse-tag parse-dtd xml-ns)) ;; end tag ((looking-at " +#endif +#include +#if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN +# include +#endif +#if !defined PATH_MAX && defined MAXPATHLEN +# define PATH_MAX MAXPATHLEN +#endif +#ifdef __hpux +# undef PATH_MAX +# define PATH_MAX 1024 +#endif +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# undef PATH_MAX +# define PATH_MAX 260 +#endif +]]) + +# Prerequisites of gl_PATHMAX_SNIPPET. +AC_DEFUN([gl_PATHMAX_SNIPPET_PREREQ], +[ + AC_CHECK_HEADERS_ONCE([unistd.h sys/param.h]) +]) diff --git a/make-dist b/make-dist index d1d80097824..55dac98d713 100755 --- a/make-dist +++ b/make-dist @@ -398,13 +398,12 @@ echo "Making links to \`m4'" (cd m4 ln *.m4 ../${tempdir}/m4) -## Exclude README.W32 because it is specific to pre-built binaries(?). echo "Making links to \`nt'" (cd nt ln emacs.manifest emacs.rc emacsclient.rc config.nt ../${tempdir}/nt ln emacs-src.tags nmake.defs gmake.defs subdirs.el ../${tempdir}/nt ln [a-z]*.bat [a-z]*.[ch] ../${tempdir}/nt - ln ChangeLog INSTALL README makefile.w32-in ../${tempdir}/nt) + ln ChangeLog INSTALL README README.W32 makefile.w32-in ../${tempdir}/nt) echo "Making links to \`nt/inc' and its subdirectories" for f in `find nt/inc -type f -name '[a-z]*.h'`; do diff --git a/msdos/ChangeLog b/msdos/ChangeLog index 060970151ef..b057a06bbd6 100644 --- a/msdos/ChangeLog +++ b/msdos/ChangeLog @@ -1,3 +1,9 @@ +2012-02-04 Eli Zaretskii + + * sed3v2.inp (insrcdir): Use $( * sed4.inp (PATH_DUMPLOADSEARCH): Edit to "../lisp", for when the @@ -642,7 +648,7 @@ b-emacs.exe to 3072K. * mainmake.v2 (emacs lispref lispintro): Chdir under doc/. - (emacs): Renamed from `man', to reflect changes in doc directory + (emacs): Rename from `man', to reflect changes in doc directory structure. All callers changed. (clean mostlyclean distclean maintainer-clean extraclean): Chdir into doc/ for manuals. Add misc subdirectory. @@ -1097,7 +1103,7 @@ 1996-08-04 Richard Stallman - * is_exec.c: Renamed from is-exec.c. + * is_exec.c: Rename from is-exec.c. 1996-07-27 Richard Stallman @@ -1132,7 +1138,7 @@ * mainmake.v2 (src): Create a file with sed commands instead of using a long sed command line (some versions of Sed don't handle that). - (gdb): Merged back into src, undoing April 13 change. + (gdb): Merge back into src, undoing April 13 change. (install): Do use if statements, but not a loop. 1996-04-13 Richard Stallman diff --git a/msdos/sed2v2.inp b/msdos/sed2v2.inp index cefec573f78..7560400f5d9 100644 --- a/msdos/sed2v2.inp +++ b/msdos/sed2v2.inp @@ -59,7 +59,7 @@ /^#undef PACKAGE_STRING/s/^.*$/#define PACKAGE_STRING ""/ /^#undef PACKAGE_TARNAME/s/^.*$/#define PACKAGE_TARNAME ""/ /^#undef PACKAGE_VERSION/s/^.*$/#define PACKAGE_VERSION ""/ -/^#undef VERSION/s/^.*$/#define VERSION "24.0.92"/ +/^#undef VERSION/s/^.*$/#define VERSION "24.0.93"/ /^#undef HAVE_DECL_GETENV/s/^.*$/#define HAVE_DECL_GETENV 1/ /^#undef SYS_SIGLIST_DECLARED/s/^.*$/#define SYS_SIGLIST_DECLARED 1/ /^#undef HAVE_DIRENT_H/s/^.*$/#define HAVE_DIRENT_H 1/ diff --git a/msdos/sed3v2.inp b/msdos/sed3v2.inp index 80adad45fbf..c147ad64cf9 100644 --- a/msdos/sed3v2.inp +++ b/msdos/sed3v2.inp @@ -50,5 +50,5 @@ s!^ \./! ! s/movemail[^ ]* *// } /^insrcdir=/s/^.*$/\#&/ -/^ *\$(insrcdir) ||/s,\$(insrcdir) ||,command.com /c if not exist $<, +/^ *\$(insrcdir) ||/s,\$(insrcdir) ||,command.com /c if not exist $( - * Cocoa/Emacs.base/Contents/Resources/preferences.nib: Remove - cursor blink slider, add confirm quit checkbox. + * Cocoa/Emacs.base/Contents/Resources/preferences.nib: + Remove cursor blink slider, add confirm quit checkbox. 2009-01-05 Glenn Morris diff --git a/nextstep/Cocoa/Emacs.base/Contents/Info.plist b/nextstep/Cocoa/Emacs.base/Contents/Info.plist index 3445c1c3c7b..fc56c1260ac 100644 --- a/nextstep/Cocoa/Emacs.base/Contents/Info.plist +++ b/nextstep/Cocoa/Emacs.base/Contents/Info.plist @@ -553,7 +553,7 @@ along with GNU Emacs. If not, see . CFBundleExecutable Emacs CFBundleGetInfoString - Emacs 24.0.92 Copyright (C) 2012 Free Software Foundation, Inc. + Emacs 24.0.93 Copyright (C) 2012 Free Software Foundation, Inc. CFBundleIconFile Emacs.icns CFBundleIdentifier @@ -566,7 +566,7 @@ along with GNU Emacs. If not, see . APPL CFBundleShortVersionString - 24.0.92 + 24.0.93 CFBundleSignature EMAx diff --git a/nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings b/nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings index 681521784d2..aab092a5dd4 100644 --- a/nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings +++ b/nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ /* Localized versions of Info.plist keys */ CFBundleName = "Emacs"; -CFBundleShortVersionString = "Version 24.0.92"; -CFBundleGetInfoString = "Emacs version 24.0.92, NS Windowing"; +CFBundleShortVersionString = "Version 24.0.93"; +CFBundleGetInfoString = "Emacs version 24.0.93, NS Windowing"; NSHumanReadableCopyright = "Copyright (C) 2012 Free Software Foundation, Inc."; diff --git a/nextstep/GNUstep/Emacs.base/Resources/Emacs.desktop b/nextstep/GNUstep/Emacs.base/Resources/Emacs.desktop index 1b8926e9ef6..7750ef06732 100644 --- a/nextstep/GNUstep/Emacs.base/Resources/Emacs.desktop +++ b/nextstep/GNUstep/Emacs.base/Resources/Emacs.desktop @@ -1,7 +1,7 @@ [Desktop Entry] Encoding=UTF-8 Type=Application -Version=24.0.92 +Version=24.0.93 Categories=GNUstep Name=Emacs Comment=GNU Emacs for NeXT/Open/GNUstep and OS X diff --git a/nextstep/GNUstep/Emacs.base/Resources/Info-gnustep.plist b/nextstep/GNUstep/Emacs.base/Resources/Info-gnustep.plist index 5a98a76a344..85b3c8f3d5a 100644 --- a/nextstep/GNUstep/Emacs.base/Resources/Info-gnustep.plist +++ b/nextstep/GNUstep/Emacs.base/Resources/Info-gnustep.plist @@ -2,7 +2,7 @@ ApplicationDescription = "GNU Emacs for GNUstep / OS X"; ApplicationIcon = emacs.tiff; ApplicationName = Emacs; - ApplicationRelease = "24.0.92"; + ApplicationRelease = "24.0.93"; Authors = ( "Adrian Robert (GNUstep)", "Christophe de Dinechin (MacOS X)", @@ -13,7 +13,7 @@ ); Copyright = "Copyright (C) 2012 Free Software Foundation, Inc."; CopyrightDescription = "Released under the GNU General Public License Version 3 or later"; - FullVersionID = "Emacs 24.0.92, NS Windowing"; + FullVersionID = "Emacs 24.0.93, NS Windowing"; NSExecutable = Emacs; NSIcon = emacs.tiff; NSPrincipalClass = NSApplication; diff --git a/nt/ChangeLog b/nt/ChangeLog index 0211f9d792d..544b964be3d 100644 --- a/nt/ChangeLog +++ b/nt/ChangeLog @@ -1,11 +1,34 @@ +2012-02-06 Christoph Scholtes + + * README.W32: Removed specific version information for libXpm + included in the binary distribution for maintenance purposes. + +2012-02-05 Christoph Scholtes + + * README.W32: Clarification for inclusion in source tarball. (Bug#9750) + + * gmake.defs (PRAGMA_SYSTEM_HEADER): Add for GCC. + + * nmake.defs (PRAGMA_SYSTEM_HEADER): Add, but ignore with MSVC. + + * makefile.w32-in (maybe-copy-distfiles) + (maybe-copy-distfiles-CMD, maybe-copy-distfiles-SH) + (create-tmp-dist-dir): Added to make --distfiles optional. + (dist): Use create-tmp-dist-dir and maybe-copy-distfiles. (Bug#10261) + +2012-02-04 Eli Zaretskii + + * inc/sys/stat.h (_STAT_DEFINED): Define, to prevent redefinitions + by other headers. + 2011-11-27 Fabrice Popineau (tiny change) * inc/stdint.h (uint32_t, uint64_t) [_WIN64]: New typedefs. (UINT64_MAX) [_WIN64]: Fix definition. (uintmax_t, intmax_t): Fix definitions. - * inc/inttypes.h (strtoumax, strtoimax) [!__MINGW32__]: Provide - correct definitions. + * inc/inttypes.h (strtoumax, strtoimax) [!__MINGW32__]: + Provide correct definitions. * config.nt (HAVE_DECL_STRTOLL): Define. (va_copy) [_WIN64]: Provide a better definition. diff --git a/nt/INSTALL b/nt/INSTALL index 466860eebf7..c470ed4960f 100644 --- a/nt/INSTALL +++ b/nt/INSTALL @@ -68,13 +68,19 @@ With GNU Make, you can use the -j command-line option to have Make execute several commands at once, like this: + gmake -j 2 + + (With versions of GNU Make before 3.82, you need also set the + XMFLAGS variable, like this: + gmake -j 2 XMFLAGS="-j 2" - The XMFLAGS variable overrides the default behavior of GNU Make - on Windows, whereby recursive Make invocations reset the maximum - number of simultaneous commands to 1. The above command allows - up to 4 simultaneous commands at once in the top-level Make, and - up to 3 in each one of the recursive Make's. + The XMFLAGS variable overrides the default behavior of version + 3.82 and older of GNU Make on Windows, whereby recursive Make + invocations reset the maximum number of simultaneous commands to + 1. The above command allows up to 4 simultaneous commands at + once in the top-level Make, and up to 3 in each one of the + recursive Make's.) 4. Generate the Info manuals (only if you are building out of Bazaar, and if you have makeinfo.exe installed): @@ -359,7 +365,7 @@ session. You can get pre-built binaries (including any required DLL and the - gnutls.h file) and an installer at http://josefsson.org/gnutls4win/. + header files) at http://sourceforge.net/projects/ezwinports/files/. * Experimental SVG support @@ -396,6 +402,17 @@ maybe a problem with the way Cairo or librsvg is using it that doesn't show up on other platforms. +* Optional extra runtime checks + + The configure.bat option --enable-checking builds Emacs with some + optional extra runtime checks and assertions enabled. This may be + useful for debugging. + +* Optional extra libraries + + You can pass --lib LIBNAME option to configure.bat to cause Emacs to + link with the specified library. You can use this option more than once. + * Building After running configure, simply run the appropriate `make' program for diff --git a/nt/README.W32 b/nt/README.W32 index 24659f7667e..05456fd1d6d 100644 --- a/nt/README.W32 +++ b/nt/README.W32 @@ -3,16 +3,21 @@ See the end of the file for license conditions. Emacs for Windows - This README file describes how to set up and run a precompiled - version of GNU Emacs for Windows. This distribution can be found on - the ftp.gnu.org server and its mirrors: + This README.W32 file describes how to set up and run a precompiled + distribution of GNU Emacs for Windows. You can find the precompiled + distribution on the ftp.gnu.org server and its mirrors: - ftp://ftp.gnu.org/gnu/emacs/windows/ + ftp://ftp.gnu.org/gnu/emacs/windows/ This server contains other distributions, including the full Emacs source distribution and a barebin distribution which can be installed over it, as well as older releases of Emacs for Windows. + Information on how to compile Emacs from sources on Windows is in + the files README and INSTALL in this directory. If you received + this file as part of the Emacs source distribution, please read + those 2 files and not this one. + Answers to frequently asked questions, and further information about this port of GNU Emacs and related software packages can be found via http: @@ -123,9 +128,7 @@ See the end of the file for license conditions. Emacs has built in support for XBM and PPM/PGM/PBM images, and the libXpm library is bundled, providing XPM support (required for color toolbar icons and splash screen). Source for libXpm should be available - on the same place as you got this binary distribution from. The version - of libXpm bundled with this version of Emacs is 3.5.7, based on x.org's - libXpm library from X11R7.3. + on the same place as you got this binary distribution from. Emacs can also support some other image formats with appropriate libraries. These libraries are all available as part of GTK @@ -167,7 +170,7 @@ See the end of the file for license conditions. but GnuTLS won't be available to the running session. You can get pre-built binaries (including any required DLL and the - gnutls.h file) and an installer at http://josefsson.org/gnutls4win/. + header files) at http://sourceforge.net/projects/ezwinports/files/. * Uninstalling Emacs diff --git a/nt/config.nt b/nt/config.nt index 48db9665f8a..ab674e3d1c5 100644 --- a/nt/config.nt +++ b/nt/config.nt @@ -328,7 +328,7 @@ along with GNU Emacs. If not, see . */ #define PACKAGE "emacs" /* Version number of package */ -#define VERSION "24.0.92" +#define VERSION "24.0.93" /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ diff --git a/nt/emacs.rc b/nt/emacs.rc index 2a4b256b9d3..a3f931523e9 100644 --- a/nt/emacs.rc +++ b/nt/emacs.rc @@ -7,8 +7,8 @@ Emacs ICON icons\emacs.ico #endif VS_VERSION_INFO VERSIONINFO - FILEVERSION 24,0,92,0 - PRODUCTVERSION 24,0,92,0 + FILEVERSION 24,0,93,0 + PRODUCTVERSION 24,0,93,0 FILEFLAGSMASK 0x3FL #ifdef EMACSDEBUG FILEFLAGS 0x1L @@ -25,12 +25,12 @@ BEGIN BEGIN VALUE "CompanyName", "Free Software Foundation\0" VALUE "FileDescription", "GNU Emacs: The extensible self-documenting text editor\0" - VALUE "FileVersion", "24, 0, 92, 0\0" + VALUE "FileVersion", "24, 0, 93, 0\0" VALUE "InternalName", "Emacs\0" VALUE "LegalCopyright", "Copyright (C) 2001-2012\0" VALUE "OriginalFilename", "emacs.exe" VALUE "ProductName", "Emacs\0" - VALUE "ProductVersion", "24, 0, 92, 0\0" + VALUE "ProductVersion", "24, 0, 93, 0\0" VALUE "OLESelfRegister", "\0" END END diff --git a/nt/emacsclient.rc b/nt/emacsclient.rc index 75eb1584c20..db61673d4bf 100644 --- a/nt/emacsclient.rc +++ b/nt/emacsclient.rc @@ -5,8 +5,8 @@ Emacs ICON icons\emacs.ico #endif VS_VERSION_INFO VERSIONINFO - FILEVERSION 24,0,92,0 - PRODUCTVERSION 24,0,92,0 + FILEVERSION 24,0,93,0 + PRODUCTVERSION 24,0,93,0 FILEFLAGSMASK 0x3FL #ifdef EMACSDEBUG FILEFLAGS 0x1L @@ -23,12 +23,12 @@ BEGIN BEGIN VALUE "CompanyName", "Free Software Foundation\0" VALUE "FileDescription", "GNU EmacsClient: Client for the extensible self-documenting text editor\0" - VALUE "FileVersion", "24, 0, 92, 0\0" + VALUE "FileVersion", "24, 0, 93, 0\0" VALUE "InternalName", "EmacsClient\0" VALUE "LegalCopyright", "Copyright (C) 2001-2012\0" VALUE "OriginalFilename", "emacsclientw.exe" VALUE "ProductName", "EmacsClient\0" - VALUE "ProductVersion", "24, 0, 92, 0\0" + VALUE "ProductVersion", "24, 0, 93, 0\0" VALUE "OLESelfRegister", "\0" END END diff --git a/nt/gmake.defs b/nt/gmake.defs index e58ee4f3213..6839b28b975 100644 --- a/nt/gmake.defs +++ b/nt/gmake.defs @@ -289,6 +289,8 @@ ifdef USER_LIBS USER_LIBS := $(patsubst %,-l%,$(USER_LIBS)) endif +PRAGMA_SYSTEM_HEADER = \#pragma GCC system_header + ifeq "$(ARCH)" "i386" ifdef NOOPT ARCH_CFLAGS = -c $(DEBUG_FLAG) $(NOCYGWIN) diff --git a/nt/inc/sys/stat.h b/nt/inc/sys/stat.h index d09925db5ec..57fabff4b0c 100644 --- a/nt/inc/sys/stat.h +++ b/nt/inc/sys/stat.h @@ -97,6 +97,9 @@ struct stat { char st_gname[260]; }; +/* Prevent redefinition by other headers, e.g. wchar.h. */ +#define _STAT_DEFINED + _CRTIMP int __cdecl __MINGW_NOTHROW fstat (int, struct stat*); _CRTIMP int __cdecl __MINGW_NOTHROW chmod (const char*, int); _CRTIMP int __cdecl __MINGW_NOTHROW stat (const char*, struct stat*); diff --git a/nt/makefile.w32-in b/nt/makefile.w32-in index 56ecae32e82..30a5f83ea00 100644 --- a/nt/makefile.w32-in +++ b/nt/makefile.w32-in @@ -22,7 +22,7 @@ # FIXME: This file uses DOS EOLs. Convert to Unix after 22.1 is out # (and remove or replace this comment). -VERSION = 24.0.92 +VERSION = 24.0.93 TMP_DIST_DIR = emacs-$(VERSION) @@ -257,8 +257,22 @@ install-other-dirs-gmake: install-shortcuts: "$(INSTALL_DIR)/bin/addpm" -q -dist: install-bin - mkdir $(TMP_DIST_DIR) +maybe-copy-distfiles: maybe-copy-distfiles-$(SHELLTYPE) + +maybe-copy-distfiles-CMD: doit + @if not $(ARGQUOTE)$(DIST_FILES)$(ARGQUOTE)=="" $(CP_DIR) $(DIST_FILES) $(TMP_DIST_DIR)/bin + +maybe-copy-distfiles-SH: doit + @if [ ! $(ARGQUOTE)$(DIST_FILES)$(ARGQUOTE)=="" ] ; then \ + $(CP_DIR) $(DIST_FILES) $(TMP_DIST_DIR)/bin + fi + +create-tmp-dist-dir: + mkdir "$(TMP_DIST_DIR)" +# Also create bin directory for dist files. + mkdir "$(TMP_DIST_DIR)/bin" + +dist: install-bin create-tmp-dist-dir maybe-copy-distfiles $(CP) "$(INSTALL_DIR)/BUGS" $(TMP_DIST_DIR) $(CP) "$(INSTALL_DIR)/COPYING" $(TMP_DIST_DIR) $(CP) "$(INSTALL_DIR)/README" $(TMP_DIST_DIR) @@ -269,7 +283,6 @@ dist: install-bin $(CP_DIR) "$(INSTALL_DIR)/lisp" $(TMP_DIST_DIR) $(CP_DIR) "$(INSTALL_DIR)/leim" $(TMP_DIST_DIR) $(CP_DIR) "$(INSTALL_DIR)/site-lisp" $(TMP_DIST_DIR) - $(CP_DIR) $(DIST_FILES) $(TMP_DIST_DIR)/bin $(COMSPEC)$(ComSpec) /c $(ARGQUOTE)zipdist.bat $(VERSION)$(ARGQUOTE) $(DEL_TREE) $(TMP_DIST_DIR) diff --git a/nt/nmake.defs b/nt/nmake.defs index a143fe65fac..2cb3113ca9a 100644 --- a/nt/nmake.defs +++ b/nt/nmake.defs @@ -203,6 +203,9 @@ DEBUG_LINK = -debug D = d !endif +# gcc-specific pragma (ignore for MSVC) +PRAGMA_SYSTEM_HEADER = + !if "$(ARCH)" == "i386" !ifdef NOOPT #ARCH_CFLAGS = -nologo -c -Zel -W2 -H63 -Od -G3d -Zp8 $(DEBUG_FLAG) diff --git a/src/.gdbinit b/src/.gdbinit index b60c14fe289..fc8eab6d1df 100644 --- a/src/.gdbinit +++ b/src/.gdbinit @@ -67,10 +67,7 @@ end # from calling OutputDebugString, which causes GDB to display each # character twice (yuk!). define pr - set $output_debug = print_output_debug_flag - set print_output_debug_flag = 0 - set debug_print ($) - set print_output_debug_flag = $output_debug + pp $ end document pr Print the emacs s-expression which is $. @@ -90,48 +87,17 @@ Print the argument as an emacs s-expression Works only when an inferior emacs is executing. end -# Print out s-expressions from tool bar -define pp1 - set $tmp = $arg0 - set $output_debug = print_output_debug_flag - set print_output_debug_flag = 0 - set safe_debug_print ($tmp) - set print_output_debug_flag = $output_debug -end -document pp1 -Print the argument as an emacs s-expression. -Works only when an inferior emacs is executing. -For use on tool bar when debugging in Emacs -where the variable name would not otherwise -be recorded in the GUD buffer. -end - # Print value of lisp variable define pv - set $tmp = "$arg0" - set $output_debug = print_output_debug_flag - set print_output_debug_flag = 0 - set safe_debug_print ( find_symbol_value (intern ($tmp))) - set print_output_debug_flag = $output_debug -end -document pv -Print the value of the lisp variable given as argument. -Works only when an inferior emacs is executing. -end - -# Print value of lisp variable -define pv1 set $tmp = "$arg0" set $output_debug = print_output_debug_flag set print_output_debug_flag = 0 set safe_debug_print (find_symbol_value (intern ($tmp))) set print_output_debug_flag = $output_debug end -document pv1 +document pv Print the value of the lisp variable given as argument. Works only when an inferior emacs is executing. -For use when debugging in Emacs where the variable -name would not otherwise be recorded in the GUD buffer. end # Print out current buffer point and boundaries diff --git a/src/ChangeLog b/src/ChangeLog index c27b4c69bb5..79bcf192eb7 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,4 +1,4 @@ -2012-01-17 Paul Eggert +2012-02-10 Paul Eggert Fix integer width and related bugs (Bug#9874). * alloc.c (pure_bytes_used_lisp, pure_bytes_used_non_lisp): @@ -788,6 +788,160 @@ rather than rolling our own approximation. (SCROLL_BAR_VEC_SIZE): Remove; not used. +2012-02-10 Glenn Morris + + * fns.c (Fsecure_hash): Doc fix. + +2012-02-09 Kenichi Handa + + * coding.c (produce_chars): Fix updating of src_end (Bug#10701). + +2012-02-07 Chong Yidong + + * buffer.c (Fbuffer_local_variables) + (buffer_lisp_local_variables): Handle unbound vars correctly; + don't let Qunbound leak into Lisp. + +2012-02-07 Glenn Morris + + * image.c (Fimagemagick_types): Doc fix. + + * image.c (imagemagick-render-type): Change it from a lisp object + to an integer. Move the doc here from the lisp manual. + Treat all values not equal to 0 the same. + +2012-02-06 Chong Yidong + + * doc.c (store_function_docstring): Avoid applying docstring of + alias to base function (Bug#2603). + +2012-02-04 Andreas Schwab + + * .gdbinit (pp1, pv1): Remove redundant defines. + (pr): Use pp. + +2012-02-04 Chong Yidong + + * nsterm.m: Declare a global (Bug#10694). + +2012-02-04 Eli Zaretskii + + * w32.c (get_emacs_configuration_options): Include + --enable-checking, if specified, in the return value. + +2012-02-04 Martin Rudalics + + * dispnew.c (change_frame_size_1): Calculate new_frame_total_cols + after rounding frame sizes. (Bug#9723) + +2012-02-04 Eli Zaretskii + + * keyboard.c (adjust_point_for_property): Don't position point + before BEGV. (Bug#10696) + +2012-02-03 Paul Eggert + + Handle overflow when computing char display width (Bug#9496). + * character.c (char_width): Return EMACS_INT, not int. + (char_width, c_string_width): Check for overflow when + computing the width; this is possible now that individual + characters can have unbounded width. Problem introduced + by merge from Emacs 23 on 2012-01-19. + +2012-02-02 Michael Albinus + + * dbusbind.c (Fdbus_register_method): Mention the return value + :ignore in the docstring. + +2012-02-02 Glenn Morris + + * callproc.c (Fcall_process, Fcall_process_region): Doc fix. + + * nsterm.m (syms_of_nsterm) : + Unconditionally set to t. (Bug#10673) + * nsterm.m (syms_of_nsterm) : + * w32term.c (syms_of_w32term) : + * xterm.c (syms_of_xterm) : Doc fix. + +2012-02-02 Kenichi Handa + + (x_produce_glyphs): Cancel previous change. If cmp->glyph_len is + 0, do not call append_composite_glyph. + +2012-02-02 Kenichi Handa + + * xdisp.c (BUILD_COMPOSITE_GLYPH_STRING): Initialize first_s to + NULL (Bug#6988). + (x_produce_glyphs): If the component of a composition is a null + string, set it->pixel_width to 1 to avoid zero-width glyph. + +2012-02-01 Eli Zaretskii + + * ralloc.c (resize_bloc, r_alloc_sbrk): Don't call memmove if its + first 2 arguments are identical. This makes inserting large + output from a subprocess an order of magnitude faster on + MS-Windows, where all sbrk'ed memory is always contiguous. + +2012-01-31 Glenn Morris + + * nsterm.m (syms_of_nsterm) : + * w32term.c (syms_of_w32term) : + * xterm.c (syms_of_xterm) : Sync docs. + +2012-01-29 Glenn Morris + + * gnutls.c (syms_of_gnutls): More doc (from etc/NEWS). + +2012-01-28 Samuel Thibault (tiny change) + + * s/gnu.h: Define POSIX_SIGNALS (Bug#10552). + +2012-01-28 Chong Yidong + + * minibuf.c (syms_of_minibuf): Doc fix (Bug#10550). + +2012-01-26 Chong Yidong + + * keyboard.c (Vecho_keystrokes): Document zero value (Bug#10503). + + * search.c (Fsearch_forward, Fsearch_backward): Document negative + repeat counts (Bug#10507). + +2012-01-26 Glenn Morris + + * lread.c (syms_of_lread): Doc fix. + +2012-01-25 HIROSHI OOTA (tiny change) + + * coding.c (encode_designation_at_bol): Change return value to + EMACS_INT. + +2012-01-25 Chong Yidong + + * eval.c (Fuser_variable_p): Doc fix; mention custom-variable-p. + +2012-01-21 Chong Yidong + + * floatfns.c (Fcopysign): Make the second argument non-optional, + since nil is not allowed anyway. + +2012-01-21 Andreas Schwab + + * process.c (read_process_output): Use p instead of XPROCESS (proc). + (send_process): Likewise. + +2012-01-19 Martin Rudalics + + * window.c (save_window_save, Fcurrent_window_configuration) + (Vwindow_persistent_parameters): Do not use Qstate. Rewrite + doc-strings. + +2012-01-19 Kenichi Handa + + * character.c (char_width): New function. + (Fchar_width, c_string_width, lisp_string_width): + Use char_width (Bug#9496). + 2012-01-16 Martin Rudalics * window.c (Vwindow_persistent_parameters): New variable. @@ -3098,7 +3252,7 @@ Remove unreachable code. (read_hex, load_charset_map_from_file): Check for integer overflow. - * xterm.c: don't go over XClientMessageEvent limit + * xterm.c: Don't go over XClientMessageEvent limit. (scroll_bar_windows_size): Now ptrdiff_t, as we prefer signed. (x_send_scroll_bar_event): Likewise. Check that the size does not exceed limits imposed by XClientMessageEvent, as well as the usual @@ -6389,7 +6543,7 @@ * ccl.c (ccl_driver): Redo slightly to avoid the need for 'unsigned'. - ccl: add integer overflow checks + ccl: Add integer overflow checks. * ccl.c (CCL_CODE_MAX, GET_CCL_RANGE, GET_CCL_CODE, GET_CCL_INT): (IN_INT_RANGE): New macros. (ccl_driver): Use them to check for integer overflow when diff --git a/src/buffer.c b/src/buffer.c index b176bfed3fe..22ae522523a 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -1022,7 +1022,10 @@ buffer_lisp_local_variables (struct buffer *buf) if (buf != current_buffer) val = XCDR (elt); - result = Fcons (Fcons (XCAR (elt), val), result); + result = Fcons (EQ (val, Qunbound) + ? XCAR (elt) + : Fcons (XCAR (elt), val), + result); } return result; @@ -1064,9 +1067,12 @@ No argument or nil as argument means use current buffer as BUFFER. */) idx = PER_BUFFER_IDX (offset); if ((idx == -1 || PER_BUFFER_VALUE_P (buf, idx)) && SYMBOLP (PER_BUFFER_SYMBOL (offset))) - result = Fcons (Fcons (PER_BUFFER_SYMBOL (offset), - PER_BUFFER_VALUE (buf, offset)), - result); + { + Lisp_Object sym = PER_BUFFER_SYMBOL (offset); + Lisp_Object val = PER_BUFFER_VALUE (buf, offset); + result = Fcons (EQ (val, Qunbound) ? sym : Fcons (sym, val), + result); + } } } diff --git a/src/callproc.c b/src/callproc.c index 22245f2d688..e17e082a0d4 100644 --- a/src/callproc.c +++ b/src/callproc.c @@ -168,7 +168,8 @@ The remaining arguments are optional. The program's input comes from file INFILE (nil means `/dev/null'). Insert output in BUFFER before point; t means current buffer; nil for BUFFER means discard it; 0 means discard and don't wait; and `(:file FILE)', where - FILE is a file name string, means that it should be written to that file. + FILE is a file name string, means that it should be written to that file + \(if the file already exists it is overwritten). BUFFER can also have the form (REAL-BUFFER STDERR-FILE); in that case, REAL-BUFFER says what to do with standard output, as above, while STDERR-FILE says what to do with standard error in the child. @@ -949,7 +950,7 @@ Delete the text if fourth arg DELETE is non-nil. Insert output in BUFFER before point; t means current buffer; nil for BUFFER means discard it; 0 means discard and don't wait; and `(:file FILE)', where FILE is a file name string, means that it should be - written to that file. + written to that file (if the file already exists it is overwritten). BUFFER can also have the form (REAL-BUFFER STDERR-FILE); in that case, REAL-BUFFER says what to do with standard output, as above, while STDERR-FILE says what to do with standard error in the child. diff --git a/src/character.c b/src/character.c index f15a20f6999..b85cedad937 100644 --- a/src/character.c +++ b/src/character.c @@ -308,6 +308,36 @@ If the multibyte character does not represent a byte, return -1. */) } } + +/* Return width (columns) of C considering the buffer display table DP. */ + +static ptrdiff_t +char_width (int c, struct Lisp_Char_Table *dp) +{ + ptrdiff_t width = CHAR_WIDTH (c); + + if (dp) + { + Lisp_Object disp = DISP_CHAR_VECTOR (dp, c), ch; + int i; + + if (VECTORP (disp)) + for (i = 0, width = 0; i < ASIZE (disp); i++) + { + ch = AREF (disp, i); + if (CHARACTERP (ch)) + { + int w = CHAR_WIDTH (XFASTINT (ch)); + if (INT_ADD_OVERFLOW (width, w)) + string_overflow (); + width += w; + } + } + } + return width; +} + + DEFUN ("char-width", Fchar_width, Schar_width, 1, 1, 0, doc: /* Return width of CHAR when displayed in the current buffer. The width is measured by how many columns it occupies on the screen. @@ -315,21 +345,12 @@ Tab is taken to occupy `tab-width' columns. usage: (char-width CHAR) */) (Lisp_Object ch) { - Lisp_Object disp; - int c, width; - struct Lisp_Char_Table *dp = buffer_display_table (); + int c; + ptrdiff_t width; CHECK_CHARACTER (ch); c = XINT (ch); - - /* Get the way the display table would display it. */ - disp = dp ? DISP_CHAR_VECTOR (dp, c) : Qnil; - - if (VECTORP (disp)) - width = sanitize_char_width (ASIZE (disp)); - else - width = CHAR_WIDTH (c); - + width = char_width (c, buffer_display_table ()); return make_number (width); } @@ -350,25 +371,16 @@ c_string_width (const unsigned char *str, ptrdiff_t len, int precision, while (i_byte < len) { - int bytes, thiswidth; - Lisp_Object val; + int bytes; int c = STRING_CHAR_AND_LENGTH (str + i_byte, bytes); + ptrdiff_t thiswidth = char_width (c, dp); - if (dp) + if (precision <= 0) { - val = DISP_CHAR_VECTOR (dp, c); - if (VECTORP (val)) - thiswidth = sanitize_char_width (ASIZE (val)); - else - thiswidth = CHAR_WIDTH (c); + if (INT_ADD_OVERFLOW (width, thiswidth)) + string_overflow (); } - else - { - thiswidth = CHAR_WIDTH (c); - } - - if (precision > 0 - && (width + thiswidth > precision)) + else if (precision - width < thiswidth) { *nchars = i; *nbytes = i_byte; @@ -447,18 +459,7 @@ lisp_string_width (Lisp_Object string, ptrdiff_t precision, else c = str[i_byte], bytes = 1; chars = 1; - if (dp) - { - val = DISP_CHAR_VECTOR (dp, c); - if (VECTORP (val)) - thiswidth = sanitize_char_width (ASIZE (val)); - else - thiswidth = CHAR_WIDTH (c); - } - else - { - thiswidth = CHAR_WIDTH (c); - } + thiswidth = char_width (c, dp); } if (precision <= 0) diff --git a/src/coding.c b/src/coding.c index be7166e8a14..42f342c390f 100644 --- a/src/coding.c +++ b/src/coding.c @@ -855,7 +855,7 @@ static void coding_alloc_by_making_gap (struct coding_system *, static unsigned char *alloc_destination (struct coding_system *, ptrdiff_t, unsigned char *); static void setup_iso_safe_charsets (Lisp_Object); -static int encode_designation_at_bol (struct coding_system *, +static ptrdiff_t encode_designation_at_bol (struct coding_system *, int *, int *, unsigned char *); static int detect_eol (const unsigned char *, ptrdiff_t, enum coding_category); @@ -4351,7 +4351,7 @@ encode_invocation_designation (struct charset *charset, If the current block ends before any end-of-line, we may fail to find all the necessary designations. */ -static int +static ptrdiff_t encode_designation_at_bol (struct coding_system *coding, int *charbuf, int *charbuf_end, unsigned char *dst) @@ -6849,7 +6849,7 @@ produce_chars (struct coding_system *coding, Lisp_Object translation_table, dst_end = coding->destination + coding->dst_bytes; coding_set_source (coding); src = coding->source + offset; - src_end = coding->source + coding->src_bytes; + src_end = coding->source + coding->consumed; if (EQ (coding->src_object, coding->dst_object)) dst_end = (unsigned char *) src; } @@ -6883,7 +6883,7 @@ produce_chars (struct coding_system *coding, Lisp_Object translation_table, dst_end = coding->destination + coding->dst_bytes; coding_set_source (coding); src = coding->source + offset; - src_end = coding->source + coding->src_bytes; + src_end = coding->source + coding->consumed; if (EQ (coding->src_object, coding->dst_object)) dst_end = (unsigned char *) src; } @@ -6904,7 +6904,7 @@ produce_chars (struct coding_system *coding, Lisp_Object translation_table, dst = alloc_destination (coding, require, dst); coding_set_source (coding); src = coding->source + offset; - src_end = coding->source + coding->src_bytes; + src_end = coding->source + coding->consumed; } } produced_chars = coding->consumed_char; diff --git a/src/dbusbind.c b/src/dbusbind.c index 6af499ecafd..c4e57dad98a 100644 --- a/src/dbusbind.c +++ b/src/dbusbind.c @@ -2162,10 +2162,13 @@ DONT-REGISTER-SERVICE below). PATH is the D-Bus object path SERVICE is registered (See discussion of DONT-REGISTER-SERVICE below). INTERFACE is the interface offered by -SERVICE. It must provide METHOD. HANDLER is a Lisp function to be -called when a method call is received. It must accept the input -arguments of METHOD. The return value of HANDLER is used for -composing the returning D-Bus message. +SERVICE. It must provide METHOD. + +HANDLER is a Lisp function to be called when a method call is +received. It must accept the input arguments of METHOD. The return +value of HANDLER is used for composing the returning D-Bus message. +In case HANDLER shall return a reply message with an empty argument +list, HANDLER must return the symbol `:ignore'. When DONT-REGISTER-SERVICE is non-nil, the known name SERVICE is not registered. This means that other D-Bus clients have no way of diff --git a/src/dispnew.c b/src/dispnew.c index 749523158cb..f25e69e89a7 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -5760,19 +5760,22 @@ change_frame_size_1 (register struct frame *f, int newheight, int newwidth, int if (newwidth == 0) newwidth = FRAME_COLS (f); - /* Compute width of windows in F. - This is the width of the frame without vertical scroll bars. */ - new_frame_total_cols = FRAME_TOTAL_COLS_ARG (f, newwidth); - + /* Compute width of windows in F. */ /* Round up to the smallest acceptable size. */ check_frame_size (f, &newheight, &newwidth); + /* This is the width of the frame with vertical scroll bars and fringe + columns. Do this after rounding - see discussion of bug#9723. */ + new_frame_total_cols = FRAME_TOTAL_COLS_ARG (f, newwidth); + /* If we're not changing the frame size, quit now. */ - /* Frame width may be unchanged but the text portion may change, for example, - fullscreen and remove/add scroll bar. */ + /* Frame width may be unchanged but the text portion may change, for + example, fullscreen and remove/add scroll bar. */ if (newheight == FRAME_LINES (f) - && newwidth == FRAME_COLS (f) // text portion unchanged - && new_frame_total_cols == FRAME_TOTAL_COLS (f)) // frame width unchanged + /* Text portion unchanged? */ + && newwidth == FRAME_COLS (f) + /* Frame width unchanged? */ + && new_frame_total_cols == FRAME_TOTAL_COLS (f)) return; BLOCK_INPUT; diff --git a/src/doc.c b/src/doc.c index 1a7b307816d..d71a3ce1d80 100644 --- a/src/doc.c +++ b/src/doc.c @@ -507,9 +507,11 @@ aren't strings. */) /* Scanning the DOC files and placing docstring offsets into functions. */ static void -store_function_docstring (Lisp_Object fun, ptrdiff_t offset) +store_function_docstring (Lisp_Object obj, ptrdiff_t offset) { - fun = indirect_function (fun); + /* Don't use indirect_function here, or defaliases will apply their + docstrings to the base functions (Bug#2603). */ + Lisp_Object fun = SYMBOLP (obj) ? XSYMBOL (obj)->function : obj; /* The type determines where the docstring is stored. */ diff --git a/src/eval.c b/src/eval.c index 2730fc9f3d7..ed3c811f28a 100644 --- a/src/eval.c +++ b/src/eval.c @@ -898,13 +898,14 @@ lisp_indirect_variable (Lisp_Object sym) DEFUN ("user-variable-p", Fuser_variable_p, Suser_variable_p, 1, 1, 0, doc: /* Return t if VARIABLE is intended to be set and modified by users. \(The alternative is a variable used internally in a Lisp program.) -A variable is a user variable if -\(1) the first character of its documentation is `*', or -\(2) it is customizable (its property list contains a non-nil value - of `standard-value' or `custom-autoload'), or -\(3) it is an alias for another user variable. -Return nil if VARIABLE is an alias and there is a loop in the -chain of symbols. */) + +This function returns t if (i) the first character of its +documentation is `*', or (ii) it is customizable (its property list +contains a non-nil value of `standard-value' or `custom-autoload'), or +\(iii) it is an alias for a user variable. + +But condition (i) is considered obsolete, so for most purposes this is +equivalent to `custom-variable-p'. */) (Lisp_Object variable) { Lisp_Object documentation; diff --git a/src/floatfns.c b/src/floatfns.c index 87fa19acb1f..eaa1b32eb17 100644 --- a/src/floatfns.c +++ b/src/floatfns.c @@ -294,7 +294,7 @@ DEFUN ("isnan", Fisnan, Sisnan, 1, 1, 0, } #ifdef HAVE_COPYSIGN -DEFUN ("copysign", Fcopysign, Scopysign, 1, 2, 0, +DEFUN ("copysign", Fcopysign, Scopysign, 2, 2, 0, doc: /* Copy sign of X2 to value of X1, and return the result. Cause an error if X1 or X2 is not a float. */) (Lisp_Object x1, Lisp_Object x2) diff --git a/src/fns.c b/src/fns.c index b4430292c75..ed4f9d40b59 100644 --- a/src/fns.c +++ b/src/fns.c @@ -4851,12 +4851,15 @@ guesswork fails. Normally, an error is signaled in such case. */) } DEFUN ("secure-hash", Fsecure_hash, Ssecure_hash, 2, 5, 0, - doc: /* Return the secure hash of an OBJECT. -ALGORITHM is a symbol: md5, sha1, sha224, sha256, sha384 or sha512. -OBJECT is either a string or a buffer. -Optional arguments START and END are character positions specifying -which portion of OBJECT for computing the hash. If BINARY is non-nil, -return a string in binary form. */) + doc: /* Return the secure hash of OBJECT, a buffer or string. +ALGORITHM is a symbol specifying the hash to use: +md5, sha1, sha224, sha256, sha384 or sha512. + +The two optional arguments START and END are positions specifying for +which part of OBJECT to compute the hash. If nil or omitted, uses the +whole OBJECT. + +If BINARY is non-nil, returns a string in binary form. */) (Lisp_Object algorithm, Lisp_Object object, Lisp_Object start, Lisp_Object end, Lisp_Object binary) { return secure_hash (algorithm, object, start, end, Qnil, Qnil, binary); diff --git a/src/gnutls.c b/src/gnutls.c index 99992e06cdc..a4eeb50bd74 100644 --- a/src/gnutls.c +++ b/src/gnutls.c @@ -1121,7 +1121,10 @@ syms_of_gnutls (void) defsubr (&Sgnutls_available_p); DEFVAR_INT ("gnutls-log-level", global_gnutls_log_level, - doc: /* Logging level used by the GnuTLS functions. */); + doc: /* Logging level used by the GnuTLS functions. +Set this larger than 0 to get debug output in the *Messages* buffer. +1 is for important messages, 2 is for debug data, and higher numbers +are as per the GnuTLS logging conventions. */); global_gnutls_log_level = 0; } diff --git a/src/image.c b/src/image.c index 92cd75f99f4..c8d6be3a354 100644 --- a/src/image.c +++ b/src/image.c @@ -7618,7 +7618,6 @@ imagemagick_load_image (struct frame *f, struct image *img, EMACS_INT ino; int desired_width, desired_height; double rotation; - EMACS_INT imagemagick_rendermethod; int pixelwidth; ImageInfo *image_info; ExceptionInfo *exception; @@ -7799,9 +7798,8 @@ imagemagick_load_image (struct frame *f, struct image *img, went ok. */ init_color_table (); - imagemagick_rendermethod = (INTEGERP (Vimagemagick_render_type) - ? XINT (Vimagemagick_render_type) : 0); - if (imagemagick_rendermethod == 0) + + if (imagemagick_render_type == 0) { size_t image_height; @@ -7851,8 +7849,7 @@ imagemagick_load_image (struct frame *f, struct image *img, } DestroyPixelIterator (iterator); } - - if (imagemagick_rendermethod == 1) + else /* imagemagick_render_type != 0 */ { /* Magicexportimage is normally faster than pixelpushing. This method is also well tested. Some aspects of this method are @@ -7987,6 +7984,7 @@ DEFUN ("imagemagick-types", Fimagemagick_types, Simagemagick_types, 0, 0, 0, Each entry in this list is a symbol named after an ImageMagick format tag. See the ImageMagick manual for a list of ImageMagick formats and their descriptions (http://www.imagemagick.org/script/formats.php). +You can also try the shell command: `identify -list format'. Note that ImageMagick recognizes many file-types that Emacs does not recognize as images, such as C. See `imagemagick-types-inhibit'. */) @@ -8959,8 +8957,17 @@ The value can also be nil, meaning the cache is never cleared. The function `clear-image-cache' disregards this variable. */); Vimage_cache_eviction_delay = make_number (300); #ifdef HAVE_IMAGEMAGICK - DEFVAR_LISP ("imagemagick-render-type", Vimagemagick_render_type, - doc: /* Choose between ImageMagick render methods. */); + DEFVAR_INT ("imagemagick-render-type", imagemagick_render_type, + doc: /* Integer indicating which ImageMagick rendering method to use. +The options are: + 0 -- the default method (pixel pushing) + 1 -- a newer method ("MagickExportImagePixels") that may perform + better (speed etc) in some cases, but has not been as thoroughly + tested with Emacs as the default method. This method requires + ImageMagick version 6.4.6 (approximately) or later. +*/); + /* MagickExportImagePixels is in 6.4.6-9, but not 6.4.4-10. */ + imagemagick_render_type = 0; #endif } diff --git a/src/keyboard.c b/src/keyboard.c index da15f663a0d..09743be6c3c 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -1747,7 +1747,9 @@ adjust_point_for_property (ptrdiff_t last_pt, int modified) { xassert (end > PT); SET_PT (PT < last_pt - ? (STRINGP (val) && SCHARS (val) == 0 ? beg - 1 : beg) + ? (STRINGP (val) && SCHARS (val) == 0 + ? max (beg - 1, BEGV) + : beg) : end); check_composition = check_invisible = 1; } @@ -11840,38 +11842,39 @@ result of looking up the original command in the active keymaps. */); Vthis_original_command = Qnil; DEFVAR_INT ("auto-save-interval", auto_save_interval, - doc: /* *Number of input events between auto-saves. + doc: /* Number of input events between auto-saves. Zero means disable autosaving due to number of characters typed. */); auto_save_interval = 300; DEFVAR_LISP ("auto-save-timeout", Vauto_save_timeout, - doc: /* *Number of seconds idle time before auto-save. + doc: /* Number of seconds idle time before auto-save. Zero or nil means disable auto-saving due to idleness. After auto-saving due to this many seconds of idle time, Emacs also does a garbage collection if that seems to be warranted. */); XSETFASTINT (Vauto_save_timeout, 30); DEFVAR_LISP ("echo-keystrokes", Vecho_keystrokes, - doc: /* *Nonzero means echo unfinished commands after this many seconds of pause. -The value may be integer or floating point. */); + doc: /* Nonzero means echo unfinished commands after this many seconds of pause. +The value may be integer or floating point. +If the value is zero, don't echo at all. */); Vecho_keystrokes = make_number (1); DEFVAR_INT ("polling-period", polling_period, - doc: /* *Interval between polling for input during Lisp execution. + doc: /* Interval between polling for input during Lisp execution. The reason for polling is to make C-g work to stop a running program. Polling is needed only when using X windows and SIGIO does not work. Polling is automatically disabled in all other cases. */); polling_period = 2; DEFVAR_LISP ("double-click-time", Vdouble_click_time, - doc: /* *Maximum time between mouse clicks to make a double-click. + doc: /* Maximum time between mouse clicks to make a double-click. Measured in milliseconds. The value nil means disable double-click recognition; t means double-clicks have no time limit and are detected by position only. */); Vdouble_click_time = make_number (500); DEFVAR_INT ("double-click-fuzz", double_click_fuzz, - doc: /* *Maximum mouse movement between clicks to make a double-click. + doc: /* Maximum mouse movement between clicks to make a double-click. On window-system frames, value is the number of pixels the mouse may have moved horizontally or vertically between two clicks to make a double-click. On non window-system frames, value is interpreted in units of 1/8 characters @@ -11882,7 +11885,7 @@ to count as a drag. */); double_click_fuzz = 3; DEFVAR_BOOL ("inhibit-local-menu-bar-menus", inhibit_local_menu_bar_menus, - doc: /* *Non-nil means inhibit local map menu bar menus. */); + doc: /* Non-nil means inhibit local map menu bar menus. */); inhibit_local_menu_bar_menus = 0; DEFVAR_INT ("num-input-keys", num_input_keys, @@ -12057,7 +12060,7 @@ and the minor mode maps regardless of `overriding-local-map'. */); Vspecial_event_map = Fcons (intern_c_string ("keymap"), Qnil); DEFVAR_LISP ("track-mouse", do_mouse_tracking, - doc: /* *Non-nil means generate motion events for mouse motion. */); + doc: /* Non-nil means generate motion events for mouse motion. */); DEFVAR_KBOARD ("system-key-alist", Vsystem_key_alist, doc: /* Alist of system-specific X windows key symbols. @@ -12151,7 +12154,7 @@ immediately after running `post-command-hook'. */); Vdelayed_warnings_list = Qnil; DEFVAR_LISP ("suggest-key-bindings", Vsuggest_key_bindings, - doc: /* *Non-nil means show the equivalent key-binding when M-x command has one. + doc: /* Non-nil means show the equivalent key-binding when M-x command has one. The value can be a length of time to show the message for. If the value is non-nil and not a number, we wait 2 seconds. */); Vsuggest_key_bindings = Qt; @@ -12211,7 +12214,7 @@ just after executing the command. */); DEFVAR_LISP ("global-disable-point-adjustment", Vglobal_disable_point_adjustment, - doc: /* *If non-nil, always suppress point adjustment. + doc: /* If non-nil, always suppress point adjustment. The default value is nil, in which case, point adjustment are suppressed only after special commands that set @@ -12219,7 +12222,7 @@ suppressed only after special commands that set Vglobal_disable_point_adjustment = Qnil; DEFVAR_LISP ("minibuffer-message-timeout", Vminibuffer_message_timeout, - doc: /* *How long to display an echo-area message when the minibuffer is active. + doc: /* How long to display an echo-area message when the minibuffer is active. If the value is not a number, such messages don't time out. */); Vminibuffer_message_timeout = make_number (2); diff --git a/src/lread.c b/src/lread.c index 256624da046..dfcb3eeab5e 100644 --- a/src/lread.c +++ b/src/lread.c @@ -4601,7 +4601,8 @@ to load. See also `load-dangerous-libraries'. */); Non-nil means that the code in the current buffer should be evaluated with lexical binding. This variable is automatically set from the file variables of an -interpreted Lisp file read using `load'. */); +interpreted Lisp file read using `load'. Unlike other file local +variables, this must be set in the first line of a file. */); Fmake_variable_buffer_local (Qlexical_binding); DEFVAR_LISP ("eval-buffer-list", Veval_buffer_list, diff --git a/src/minibuf.c b/src/minibuf.c index cf860847d59..c3a49bff0a5 100644 --- a/src/minibuf.c +++ b/src/minibuf.c @@ -2002,7 +2002,7 @@ The function is called with the arguments passed to `read-buffer'. */); DEFVAR_BOOL ("read-buffer-completion-ignore-case", read_buffer_completion_ignore_case, - doc: /* *Non-nil means completion ignores case when reading a buffer name. */); + doc: /* Non-nil means completion ignores case when reading a buffer name. */); read_buffer_completion_ignore_case = 0; DEFVAR_LISP ("minibuffer-setup-hook", Vminibuffer_setup_hook, @@ -2014,20 +2014,24 @@ The function is called with the arguments passed to `read-buffer'. */); Vminibuffer_exit_hook = Qnil; DEFVAR_LISP ("history-length", Vhistory_length, - doc: /* *Maximum length for history lists before truncation takes place. -A number means that length; t means infinite. Truncation takes place -just after a new element is inserted. Setting the `history-length' -property of a history variable overrides this default. */); + doc: /* Maximum length of history lists before truncation takes place. +A number means truncate to that length; truncation deletes old +elements, and is done just after inserting a new element. +A value of t means no truncation. + +This variable only affects history lists that don't specify their own +maximum lengths. Setting the `history-length' property of a history +variable overrides this default. */); XSETFASTINT (Vhistory_length, 30); DEFVAR_BOOL ("history-delete-duplicates", history_delete_duplicates, - doc: /* *Non-nil means to delete duplicates in history. + doc: /* Non-nil means to delete duplicates in history. If set to t when adding a new history element, all previous identical elements are deleted from the history list. */); history_delete_duplicates = 0; DEFVAR_LISP ("history-add-new-input", Vhistory_add_new_input, - doc: /* *Non-nil means to add new elements in history. + doc: /* Non-nil means to add new elements in history. If set to nil, minibuffer reading functions don't add new elements to the history list, so it is possible to do this afterwards by calling `add-to-history' explicitly. */); @@ -2042,7 +2046,7 @@ controls the behavior, rather than this variable. */); completion_ignore_case = 0; DEFVAR_BOOL ("enable-recursive-minibuffers", enable_recursive_minibuffers, - doc: /* *Non-nil means to allow minibuffer commands while in the minibuffer. + doc: /* Non-nil means to allow minibuffer commands while in the minibuffer. This variable makes a difference whenever the minibuffer window is active. */); enable_recursive_minibuffers = 0; @@ -2098,7 +2102,7 @@ is added with Vminibuffer_history_position = Qnil; DEFVAR_BOOL ("minibuffer-auto-raise", minibuffer_auto_raise, - doc: /* *Non-nil means entering the minibuffer raises the minibuffer's frame. + doc: /* Non-nil means entering the minibuffer raises the minibuffer's frame. Some uses of the echo area also raise that frame (since they use it too). */); minibuffer_auto_raise = 0; diff --git a/src/nsterm.m b/src/nsterm.m index 70d3cc0e8b8..a45792fd645 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -1,6 +1,7 @@ /* NeXT/Open/GNUstep / MacOSX communication module. - Copyright (C) 1989, 1993-1994, 2005-2006, 2008-2012 - Free Software Foundation, Inc. + +Copyright (C) 1989, 1993-1994, 2005-2006, 2008-2012 + Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -64,6 +65,7 @@ int term_trace_num = 0; #define NSTRACE(x) #endif +extern NSString *NSMenuDidBeginTrackingNotification; /* ========================================================================== @@ -6735,12 +6737,12 @@ Only works on OSX 10.6 or later. */); /* TODO: move to common code */ DEFVAR_LISP ("x-toolkit-scroll-bars", Vx_toolkit_scroll_bars, - doc: /* If not nil, Emacs uses toolkit scroll bars. */); -#ifdef USE_TOOLKIT_SCROLL_BARS + doc: /* Which toolkit scroll bars Emacs uses, if any. +A value of nil means Emacs doesn't use toolkit scroll bars. +With the X Window system, the value is a symbol describing the +X toolkit. Possible values are: gtk, motif, xaw, or xaw3d. +With MS Windows or Nextstep, the value is t. */); Vx_toolkit_scroll_bars = Qt; -#else - Vx_toolkit_scroll_bars = Qnil; -#endif DEFVAR_BOOL ("x-use-underline-position-properties", x_use_underline_position_properties, diff --git a/src/process.c b/src/process.c index b4fca389d0d..daa49b129ae 100644 --- a/src/process.c +++ b/src/process.c @@ -5046,9 +5046,8 @@ read_process_output (Lisp_Object proc, register int channel) proc_buffered_char[channel] = -1; } #ifdef HAVE_GNUTLS - if (XPROCESS (proc)->gnutls_p) - nbytes = emacs_gnutls_read (XPROCESS (proc), - chars + carryover + buffered, + if (p->gnutls_p) + nbytes = emacs_gnutls_read (p, chars + carryover + buffered, readmax - buffered); else #endif @@ -5513,9 +5512,8 @@ send_process (volatile Lisp_Object proc, const char *volatile buf, #endif { #ifdef HAVE_GNUTLS - if (XPROCESS (proc)->gnutls_p) - written = emacs_gnutls_write (XPROCESS (proc), - buf, this); + if (p->gnutls_p) + written = emacs_gnutls_write (p, buf, this); else #endif written = emacs_write (outfd, buf, this); diff --git a/src/ralloc.c b/src/ralloc.c index 13587b9ffd4..896ad9f3155 100644 --- a/src/ralloc.c +++ b/src/ralloc.c @@ -636,7 +636,8 @@ resize_bloc (bloc_ptr bloc, SIZE size) } else { - memmove (b->new_data, b->data, b->size); + if (b->new_data != b->data) + memmove (b->new_data, b->data, b->size); *b->variable = b->data = b->new_data; } } @@ -647,7 +648,8 @@ resize_bloc (bloc_ptr bloc, SIZE size) } else { - memmove (bloc->new_data, bloc->data, old_size); + if (bloc->new_data != bloc->data) + memmove (bloc->new_data, bloc->data, old_size); memset ((char *) bloc->new_data + old_size, 0, size - old_size); *bloc->variable = bloc->data = bloc->new_data; } @@ -663,7 +665,8 @@ resize_bloc (bloc_ptr bloc, SIZE size) } else { - memmove (b->new_data, b->data, b->size); + if (b->new_data != b->data) + memmove (b->new_data, b->data, b->size); *b->variable = b->data = b->new_data; } } @@ -816,7 +819,8 @@ r_alloc_sbrk (long int size) header. */ for (b = last_bloc; b != NIL_BLOC; b = b->prev) { - memmove (b->new_data, b->data, b->size); + if (b->new_data != b->data) + memmove (b->new_data, b->data, b->size); *b->variable = b->data = b->new_data; } @@ -862,7 +866,8 @@ r_alloc_sbrk (long int size) for (b = first_bloc; b != NIL_BLOC; b = b->next) { - memmove (b->new_data, b->data, b->size); + if (b->new_data != b->data) + memmove (b->new_data, b->data, b->size); *b->variable = b->data = b->new_data; } } diff --git a/src/s/gnu.h b/src/s/gnu.h index be831a833a5..37aaa1357cc 100644 --- a/src/s/gnu.h +++ b/src/s/gnu.h @@ -44,5 +44,7 @@ along with GNU Emacs. If not, see . */ #endif /* !_IO_STDIO_H */ #endif /* emacs */ +#define POSIX_SIGNALS 1 + /* Use the GC_MAKE_GCPROS_NOOPS (see lisp.h) method for marking the stack. */ #define GC_MARK_STACK GC_MAKE_GCPROS_NOOPS diff --git a/src/search.c b/src/search.c index 0d451bd11c3..f33965d4d70 100644 --- a/src/search.c +++ b/src/search.c @@ -2192,7 +2192,9 @@ An optional second argument bounds the search; it is a buffer position. The match found must not extend before that position. Optional third argument, if t, means if fail just return nil (no error). If not nil and not t, position at limit of search and return nil. -Optional fourth argument is repeat count--search for successive occurrences. +Optional fourth argument COUNT, if non-nil, means to search for COUNT + successive occurrences. If COUNT is negative, search forward, + instead of backward, for -COUNT occurrences. Search case-sensitivity is determined by the value of the variable `case-fold-search', which see. @@ -2211,7 +2213,9 @@ The match found must not extend after that position. A value of nil is equivalent to (point-max). Optional third argument, if t, means if fail just return nil (no error). If not nil and not t, move to limit of search and return nil. -Optional fourth argument is repeat count--search for successive occurrences. +Optional fourth argument COUNT, if non-nil, means to search for COUNT + successive occurrences. If COUNT is negative, search backward, + instead of forward, for -COUNT occurrences. Search case-sensitivity is determined by the value of the variable `case-fold-search', which see. diff --git a/src/w32.c b/src/w32.c index f610a36ecf4..3d3d33453c6 100644 --- a/src/w32.c +++ b/src/w32.c @@ -1939,6 +1939,9 @@ get_emacs_configuration_options (void) cv, /* To be filled later. */ #ifdef EMACSDEBUG " --no-opt", +#endif +#ifdef ENABLE_CHECKING + " --enable-checking", #endif /* configure.bat already sets USER_CFLAGS and USER_LDFLAGS with a starting space to save work here. */ diff --git a/src/w32term.c b/src/w32term.c index f764ad9d218..8a0e9efc943 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -1,6 +1,6 @@ /* Implementation of GUI terminal on the Microsoft W32 API. -Copyright (C) 1989, 1993-2012 Free Software Foundation, Inc. +Copyright (C) 1989, 1993-2012 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -6432,7 +6432,7 @@ baseline level. The default value is nil. */); A value of nil means Emacs doesn't use toolkit scroll bars. With the X Window system, the value is a symbol describing the X toolkit. Possible values are: gtk, motif, xaw, or xaw3d. -With MS Windows, the value is t. */); +With MS Windows or Nextstep, the value is t. */); Vx_toolkit_scroll_bars = Qt; staticpro (&last_mouse_motion_frame); diff --git a/src/window.c b/src/window.c index edf60cd8ff3..a0b11e0e320 100644 --- a/src/window.c +++ b/src/window.c @@ -57,7 +57,7 @@ static Lisp_Object Qreplace_buffer_in_windows, Qget_mru_window; static Lisp_Object Qwindow_resize_root_window, Qwindow_resize_root_window_vertically; static Lisp_Object Qscroll_up, Qscroll_down, Qscroll_command; static Lisp_Object Qsafe, Qabove, Qbelow; -static Lisp_Object Qauto_buffer_name, Qclone_of, Qstate; +static Lisp_Object Qauto_buffer_name, Qclone_of; static int displayed_window_lines (struct window *); static struct window *decode_window (Lisp_Object); @@ -5891,9 +5891,8 @@ save_window_save (Lisp_Object window, struct Lisp_Vector *vector, int i) tem = XCDR (tem)) { pers = XCAR (tem); - /* Save values for persistent window parameters whose cdr - is either nil or t. */ - if (CONSP (pers) && (NILP (XCDR (pers)) || EQ (XCDR (pers), Qt))) + /* Save values for persistent window parameters. */ + if (CONSP (pers) && !NILP (XCDR (pers))) { par = Fassq (XCAR (pers), w->window_parameters); if (NILP (par)) @@ -5968,7 +5967,9 @@ and for each displayed buffer, where display starts, and the positions of point and mark. An exception is made for point in the current buffer: its value is -not- saved. This also records the currently selected frame, and FRAME's focus -redirection (see `redirect-frame-focus'). */) +redirection (see `redirect-frame-focus'). The variable +`window-persistent-parameters' specifies which window parameters are +saved by this function. */) (Lisp_Object frame) { register Lisp_Object tem; @@ -6506,7 +6507,6 @@ syms_of_window (void) DEFSYM (Qbelow, "below"); DEFSYM (Qauto_buffer_name, "auto-buffer-name"); DEFSYM (Qclone_of, "clone-of"); - DEFSYM (Qstate, "state"); staticpro (&Vwindow_list); @@ -6618,28 +6618,28 @@ function `set-window-combination-limit'. */); DEFVAR_LISP ("window-persistent-parameters", Vwindow_persistent_parameters, doc: /* Alist of persistent window parameters. -Parameters in this list are saved by `current-window-configuration' and -`window-state-get' and subsequently restored to their previous values by -`set-window-configuration' and `window-state-put'. +This alist specifies which window parameters shall get saved by +`current-window-configuration' and `window-state-get' and subsequently +restored to their previous values by `set-window-configuration' and +`window-state-put'. The car of each entry of this alist is the symbol specifying the parameter. The cdr is one of the following: -The symbol `state' means the parameter is saved by `window-state-get' -provided its IGNORE argument is nil. `current-window-configuration' -does not save this parameter. +nil means the parameter is neither saved by `window-state-get' nor by +`current-window-configuration'. -nil means the parameter is saved by `current-window-configuration' and, -provided its IGNORE argument is nil, by `window-state-get'. +t means the parameter is saved by `current-window-configuration' and, +provided its WRITABLE argument is nil, by `window-state-get'. -t means the parameter is saved unconditionally by both -`current-window-configuration' and `window-state-get'. Parameters -without read syntax (like windows or frames) should not use that. +The symbol `writable' means the parameter is saved unconditionally by +both `current-window-configuration' and `window-state-get'. Do not use +this value for parameters without read syntax (like windows or frames). Parameters not saved by `current-window-configuration' or `window-state-get' are left alone by `set-window-configuration' respectively are not installed by `window-state-put'. */); - Vwindow_persistent_parameters = list1 (Fcons (Qclone_of, Qstate)); + Vwindow_persistent_parameters = list1 (Fcons (Qclone_of, Qt)); defsubr (&Sselected_window); defsubr (&Sminibuffer_window); diff --git a/src/xdisp.c b/src/xdisp.c index 58678fc6385..3dac7ae011e 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -22745,7 +22745,7 @@ compute_overhangs_and_x (struct glyph_string *s, int x, int backward_p) ptrdiff_t cmp_id = (row)->glyphs[area][START].u.cmp.id; \ struct composition *cmp = composition_table[cmp_id]; \ XChar2b *char2b; \ - struct glyph_string *first_s IF_LINT (= NULL); \ + struct glyph_string *first_s = NULL; \ int n; \ \ char2b = (XChar2b *) alloca ((sizeof *char2b) * cmp->glyph_len); \ @@ -24407,7 +24407,7 @@ x_produce_glyphs (struct it *it) /* Initialize the bounding box. */ if (pcm) { - width = pcm->width; + width = cmp->glyph_len > 0 ? pcm->width : 0; ascent = pcm->ascent; descent = pcm->descent; lbearing = pcm->lbearing; @@ -24415,7 +24415,7 @@ x_produce_glyphs (struct it *it) } else { - width = font->space_width; + width = cmp->glyph_len > 0 ? font->space_width : 0; ascent = FONT_BASE (font); descent = FONT_DESCENT (font); lbearing = 0; @@ -24633,7 +24633,7 @@ x_produce_glyphs (struct it *it) if (it->descent < 0) it->descent = 0; - if (it->glyph_row) + if (it->glyph_row && cmp->glyph_len > 0) append_composite_glyph (it); } else if (it->what == IT_COMPOSITION) diff --git a/src/xfaces.c b/src/xfaces.c index 151da1e032b..7c3bc8d2749 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -3364,7 +3364,7 @@ update_face_from_frame_parameter (struct frame *f, Lisp_Object param, /* Changing the background color might change the background mode, so that we have to load new defface specs. - Call frame-update-face-colors to do that. */ + Call frame-set-background-mode to do that. */ XSETFRAME (frame, f); call1 (Qframe_set_background_mode, frame); diff --git a/src/xterm.c b/src/xterm.c index 2a2ae105e2e..6b19533e97c 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -1,6 +1,6 @@ /* X Communication module for terminals which understand the X protocol. -Copyright (C) 1989, 1993-2012 Free Software Foundation, Inc. +Copyright (C) 1989, 1993-2012 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -10844,7 +10844,7 @@ selected window or cursor position is preserved. */); A value of nil means Emacs doesn't use toolkit scroll bars. With the X Window system, the value is a symbol describing the X toolkit. Possible values are: gtk, motif, xaw, or xaw3d. -With MS Windows, the value is t. */); +With MS Windows or Nextstep, the value is t. */); #ifdef USE_TOOLKIT_SCROLL_BARS #ifdef USE_MOTIF Vx_toolkit_scroll_bars = intern_c_string ("motif"); diff --git a/test/ChangeLog b/test/ChangeLog index ffe51fa20a2..56b7ece59e5 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,8 +1,13 @@ +2012-01-29 Ulf Jasper + + * automated/icalendar-tests.el (icalendar-import-non-recurring): + Fix broken test, caused by missing trailing blank. + 2011-12-03 Chong Yidong * automated/compile-tests.el (compile-tests--test-regexps-data): Increase column numbers by one to reflect change in how - compilation-message is recorded (Bug#10172). + compilation-message is recorded (Bug#10172). 2011-11-22 Glenn Morris @@ -21,7 +26,7 @@ 2011-10-30 Ulf Jasper * automated/newsticker-tests.el - (newsticker--group-manage-orphan-feeds): Removed fsetting of + (newsticker--group-manage-orphan-feeds): Remove fsetting of newsticker--treeview-tree-update. 2011-10-29 Ulf Jasper @@ -58,7 +63,7 @@ (icalendar--format-ical-event) (icalendar--parse-summary-and-rest) (icalendar-tests--do-test-import) - (icalendar-tests--do-test-cycle) : Changed argument order of + (icalendar-tests--do-test-cycle): Change argument order of string= to EXPECTED ACTUAL. (icalendar--import-format-sample) (icalendar--format-ical-event) @@ -66,7 +71,7 @@ (icalendar-import-rrule) (icalendar-import-duration) (icalendar-import-bug-6766) - (icalendar-real-world): Adjusted to string= instead of + (icalendar-real-world): Adjust to string= instead of icalendar-tests--compare-strings. (icalendar-import-multiple-vcalendars): New. @@ -253,8 +258,8 @@ 2010-02-19 Ulf Jasper * icalendar-testsuite.el - (icalendar-testsuite--run-function-tests): Added new tests. - (icalendar-testsuite--test-diarytime-to-isotime): Added another + (icalendar-testsuite--run-function-tests): Add new tests. + (icalendar-testsuite--test-diarytime-to-isotime): Add another testcase. (icalendar-testsuite--test-convert-ordinary-to-ical): New. (icalendar-testsuite--test-convert-weekly-to-ical): New. @@ -279,14 +284,14 @@ 2009-12-18 Ulf Jasper * icalendar-testsuite.el - (icalendar-testsuite--run-function-tests): Added + (icalendar-testsuite--run-function-tests): Add icalendar-testsuite--test-parse-vtimezone. (icalendar-testsuite--test-parse-vtimezone): New. (icalendar-testsuite--do-test-cycle): Doc changes. - (icalendar-testsuite--run-real-world-tests): Removed trailing + (icalendar-testsuite--run-real-world-tests): Remove trailing whitespace -- see change of icalendar--add-diary-entry in icalendar.el. - (icalendar-testsuite--run-cycle-tests): Re-enabled all tests. + (icalendar-testsuite--run-cycle-tests): Re-enable all tests. 2009-09-30 Glenn Morris @@ -307,12 +312,12 @@ 2009-01-25 Ulf Jasper * icalendar-testsuite.el - (icalendar-testsuite--run-function-tests): Added - icalendar-testsuite--test-diarytime-to-isotime. - (icalendar-testsuite--test-parse-summary-and-rest): Adjusted to + (icalendar-testsuite--run-function-tests): + Add icalendar-testsuite--test-diarytime-to-isotime. + (icalendar-testsuite--test-parse-summary-and-rest): Adjust to recent icalendar fixes. (icalendar-testsuite--test-diarytime-to-isotime): New. - (icalendar-testsuite--test-create-uid): Adjusted to recent + (icalendar-testsuite--test-create-uid): Adjust to recent icalendar changes. 2008-11-30 Shigeru Fukaya diff --git a/test/automated/icalendar-tests.el b/test/automated/icalendar-tests.el index b48ca94f072..503ea22d2b8 100644 --- a/test/automated/icalendar-tests.el +++ b/test/automated/icalendar-tests.el @@ -731,10 +731,9 @@ DTSTART;VALUE=DATE-TIME:20030919" "&19/9/2003 non-recurring allday\n" "&9/19/2003 non-recurring allday\n") (icalendar-tests--test-import - ;; do not remove the trailing blank after "long"! - "SUMMARY:long - summary -DTSTART;VALUE=DATE:20030919" + ;; Checkdoc removes trailing blanks. Therefore: format! + (format "%s\n%s\n%s" "SUMMARY:long " " summary" + "DTSTART;VALUE=DATE:20030919") "&2003/9/19 long summary\n" "&19/9/2003 long summary\n" "&9/19/2003 long summary\n")