# HG changeset patch # User cvs # Date 1186994380 -7200 # Node ID 70ad99077275b36ea2d57478ac00a7ba7438f39f # Parent deca3c1083ac9af06c3b3d1d6770a770fe05223f Import from CVS: tag r21-0b47 diff -r deca3c1083ac -r 70ad99077275 CHANGES-beta --- a/CHANGES-beta Mon Aug 13 10:38:47 2007 +0200 +++ b/CHANGES-beta Mon Aug 13 10:39:40 2007 +0200 @@ -1,4 +1,23 @@ -*- indented-text -*- +to 21.0 pre4 "Uzbek Black" +-- Miscellaneous documentation cleanup from Altrasoft +-- Updates for using emacsbug.el as primary bug report interface from + Hrvoje Niksic +-- Russian TUTORIAL courtesy of Vladimir Bormotov +-- Build and dump fixes for MS Windows from Jonathan Harris +-- Modeline/Toolbar background color fix from Andy Piper +-- Hook fix redux from Kyle Jones +-- Patch for EFS for MS Windows NT native from Jonathan Harris +-- various patches and manual changes from Adrian Aichner +-- Miscellaneous hook patches from Kyle Jones +-- Calendar manual updates from Jeff Miller +-- various fixes from Martin Buchholz, Olivier Galibert, Michael Sperber +-- Documentation cleanup by Michael Sperber +-- Fix for customize breakage in MS Windows from Andy Piper +-- Line-number mode tuning from Hrvoje Niksic +-- Romanian Tutorial translation courtesy of Tudor Hulubei +-- Romanian Tutorial integration from Altrasoft + to 21.0 pre3 "Toggenburg" -- Configure changes to handle Berkeley DB 2 from Kazuyuki IENAGA and Martin Buchholz @@ -7,6 +26,7 @@ -- Cygwin font lossage fix from Andy Piper to 21.0 pre2 "Thuringian" +-- MS Windows font fixes from Jonathan Harris -- MS Windows native build fixes from Fabrice POPINEAU -- Miscellaneous bug fixes -- Documentation updates diff -r deca3c1083ac -r 70ad99077275 ChangeLog --- a/ChangeLog Mon Aug 13 10:38:47 2007 +0200 +++ b/ChangeLog Mon Aug 13 10:39:40 2007 +0200 @@ -1,3 +1,45 @@ +1998-07-09 SL Baur + + * XEmacs 21.0-pre4 is released. + + * configure.in: Fix test for InfoDock sources. + + * etc/BETA (writing): Update patch creation instructions. + + * etc/FTP: Update FTP mirror list. + + * etc/DISTRIB: Remove duplicated FTP mirror list. + * etc/xemacs.1 (ftp): Ditto. + +1998-07-09 Oliver Graf + + * configure.usage: added warning to --with-offix + +1998-06-29 SL Baur + + * etc/gnuserv.1 (this): Email address for Ben Wing is ben@xemacs.org. + * etc/gnuserv.README (README): Ditto. + * etc/xemacs-ja.1: Ditto. + +1998-06-28 SL Baur + + * configure.in: Berkeley DB autodetection fixes + From Martin Buchholz + + * etc/BABYL: Moved to rmail package + + * etc/enriched.doc: Moved to xemacs-base package + + * etc/MSDOS: + * etc/GNUS-NEWS: deleted + +1998-06-21 Michael Sperber [Mr. Preprocessor] + + * etc/NEWS: Added references to documentation about packages and + path setup. + + * etc/README: Synched. + 1998-06-19 SL Baur * XEmacs 21.0-pre3 is released. diff -r deca3c1083ac -r 70ad99077275 configure --- a/configure Mon Aug 13 10:38:47 2007 +0200 +++ b/configure Mon Aug 13 10:39:40 2007 +0200 @@ -873,7 +873,7 @@ if test "$with_infodock" = "yes"; then - if test ! -f ../InfoDock.rules; then + if test ! -f ../ID-INSTALL; then echo "Cannot build InfoDock without InfoDock sources" with_infodock=no fi @@ -10776,111 +10776,127 @@ fi if test "$with_database_berkdb" != "no"; then - echo $ac_n "checking for dbopen""... $ac_c" 1>&6 -echo "configure:10781: checking for dbopen" >&5 - -cat > conftest.$ac_ext <&6 +echo "configure:10781: checking for Berkeley db.h" >&5 + for path in "db/db.h" "db.h"; do + cat > conftest.$ac_ext < +typedef uint8_t u_int8_t; +typedef uint16_t u_int16_t; +typedef uint32_t u_int32_t; +#ifdef WE_DONT_NEED_QUADS +typedef uint64_t u_int64_t; +#endif +#endif +#include <$path> + +int main() { + +; return 0; } +EOF +if { (eval echo configure:10802: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + db_h_path="$path"; break +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* + done + if test -z "$db_h_path" + then echo "$ac_t""no" 1>&6; with_database_berkdb=no + else echo "$ac_t""$db_h_path" 1>&6 + fi + + if test "$with_database_berkdb" != "no"; then + echo $ac_n "checking for Berkeley DB version""... $ac_c" 1>&6 +echo "configure:10818: checking for Berkeley DB version" >&5 + cat > conftest.$ac_ext < +#if DB_VERSION_MAJOR > 1 +yes +#endif + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + echo "$ac_t""2" 1>&6; dbfunc=db_open +else + rm -rf conftest* + echo "$ac_t""1" 1>&6; dbfunc=dbopen +fi +rm -f conftest* + + echo $ac_n "checking for $dbfunc""... $ac_c" 1>&6 +echo "configure:10839: checking for $dbfunc" >&5 + +cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char dbopen(); +char $dbfunc(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ -#if defined (__stub_dbopen) || defined (__stub___dbopen) +#if defined (__stub_$dbfunc) || defined (__stub___$dbfunc) choke me #else -dbopen(); +$dbfunc(); #endif ; return 0; } EOF -if { (eval echo configure:10807: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - rm -rf conftest* - eval "ac_cv_func_dbopen=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_dbopen=no" -fi -rm -f conftest* - -if eval "test \"`echo '$ac_cv_func_'dbopen`\" = yes"; then +if { (eval echo configure:10865: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_$dbfunc=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$dbfunc=no" +fi +rm -f conftest* + +if eval "test \"`echo '$ac_cv_func_'$dbfunc`\" = yes"; then echo "$ac_t""yes" 1>&6 with_database_berkdb=yes need_libdb=no else echo "$ac_t""no" 1>&6 -echo $ac_n "checking for db_open""... $ac_c" 1>&6 -echo "configure:10824: checking for db_open" >&5 - -cat > conftest.$ac_ext < -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char db_open(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_db_open) || defined (__stub___db_open) -choke me -#else -db_open(); -#endif - -; return 0; } -EOF -if { (eval echo configure:10850: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - rm -rf conftest* - eval "ac_cv_func_db_open=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_db_open=no" -fi -rm -f conftest* - -if eval "test \"`echo '$ac_cv_func_'db_open`\" = yes"; then - echo "$ac_t""yes" 1>&6 - with_database_berkdb=yes need_libdb=no -else - echo "$ac_t""no" 1>&6 - -echo $ac_n "checking for dbopen in -ldb""... $ac_c" 1>&6 -echo "configure:10868: checking for dbopen in -ldb" >&5 -ac_lib_var=`echo db'_'dbopen | sed 'y%./+-%__p_%'` + + +echo $ac_n "checking for $dbfunc in -ldb""... $ac_c" 1>&6 +echo "configure:10884: checking for $dbfunc in -ldb" >&5 +ac_lib_var=`echo db'_'$dbfunc | sed 'y%./+-%__p_%'` xe_check_libs=" -ldb " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +char $dbfunc(); + +int main() { +$dbfunc() +; return 0; } +EOF +if { (eval echo configure:10900: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10897,83 +10913,13 @@ with_database_berkdb=yes need_libdb=yes else echo "$ac_t""no" 1>&6 -echo $ac_n "checking for db_open in -ldb""... $ac_c" 1>&6 -echo "configure:10902: checking for db_open in -ldb" >&5 -ac_lib_var=`echo db'_'db_open | sed 'y%./+-%__p_%'` - -xe_check_libs=" -ldb " -cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" -fi -rm -f conftest* -xe_check_libs="" - -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then - echo "$ac_t""yes" 1>&6 - with_database_berkdb=yes need_libdb=yes -else - echo "$ac_t""no" 1>&6 -fi - - -fi - - -fi - -fi - - - if test "$with_database_berkdb" = "yes"; then - for path in "db/db.h" "db.h"; do -cat > conftest.$ac_ext < -typedef uint8_t u_int8_t; -typedef uint16_t u_int16_t; -typedef uint32_t u_int32_t; -#ifdef WE_DONT_NEED_QUADS -typedef uint64_t u_int64_t; -#endif -#endif -#include <$path> - -int main() { - -; return 0; } -EOF -if { (eval echo configure:10967: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - db_h_path="$path"; break -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 -fi -rm -f conftest* - done - test -z "$db_h_path" && with_database_berkdb=no - fi +fi + + +fi + + fi + if test "$with_database_berkdb" = "yes"; then { test "$extra_verbose" = "yes" && cat << EOF Defining DB_H_PATH = "$db_h_path" @@ -11014,12 +10960,12 @@ if test "$with_socks" = "yes"; then echo $ac_n "checking for SOCKSinit in -lsocks""... $ac_c" 1>&6 -echo "configure:11018: checking for SOCKSinit in -lsocks" >&5 +echo "configure:10964: checking for SOCKSinit in -lsocks" >&5 ac_lib_var=`echo socks'_'SOCKSinit | sed 'y%./+-%__p_%'` xe_check_libs=" -lsocks " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:10980: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -11087,15 +11033,15 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:11091: checking for $ac_hdr" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11099: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11045: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -11126,12 +11072,12 @@ test -z "$with_shlib" && test ! -z "$have_dlfcn" && { echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:11130: checking for dlopen in -ldl" >&5 +echo "configure:11076: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` xe_check_libs=" -ldl " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:11092: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -11171,12 +11117,12 @@ } test -z "$with_shlib" && test ! -z "$have_dlfcn" && { echo $ac_n "checking for _dlopen in -lc""... $ac_c" 1>&6 -echo "configure:11175: checking for _dlopen in -lc" >&5 +echo "configure:11121: checking for _dlopen in -lc" >&5 ac_lib_var=`echo c'_'_dlopen | sed 'y%./+-%__p_%'` xe_check_libs=" -lc " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:11137: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -11216,12 +11162,12 @@ } test -z "$with_shlib" && test ! -z "$have_dlfcn" && { echo $ac_n "checking for dlopen in -lc""... $ac_c" 1>&6 -echo "configure:11220: checking for dlopen in -lc" >&5 +echo "configure:11166: checking for dlopen in -lc" >&5 ac_lib_var=`echo c'_'dlopen | sed 'y%./+-%__p_%'` xe_check_libs=" -lc " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:11182: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -11261,12 +11207,12 @@ } test -z "$with_shlib" && { echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6 -echo "configure:11265: checking for shl_load in -ldld" >&5 +echo "configure:11211: checking for shl_load in -ldld" >&5 ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'` xe_check_libs=" -ldld " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:11227: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -11306,12 +11252,12 @@ } test -z "$with_shlib" && { echo $ac_n "checking for dld_init in -ldld""... $ac_c" 1>&6 -echo "configure:11310: checking for dld_init in -ldld" >&5 +echo "configure:11256: checking for dld_init in -ldld" >&5 ac_lib_var=`echo dld'_'dld_init | sed 'y%./+-%__p_%'` xe_check_libs=" -ldld " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:11272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -11372,7 +11318,7 @@ dll_oflags="-o " echo $ac_n "checking how to build a shared library""... $ac_c" 1>&6 -echo "configure:11376: checking how to build a shared library" >&5 +echo "configure:11322: checking how to build a shared library" >&5 case `uname -rs` in UNIX_SV*|UNIX_System_V*) dll_lflags="-G" @@ -11463,10 +11409,10 @@ for ac_func in dlerror do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:11467: checking for $ac_func" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:11439: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -11525,11 +11471,11 @@ fi cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>&5 +if { (eval echo configure:11479: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>&5 then : else diff -r deca3c1083ac -r 70ad99077275 configure.in --- a/configure.in Mon Aug 13 10:38:47 2007 +0200 +++ b/configure.in Mon Aug 13 10:39:40 2007 +0200 @@ -936,7 +936,7 @@ AC_DEFINE_UNQUOTED(EMACS_VERSION, "$version") if test "$with_infodock" = "yes"; then - if test ! -f ../InfoDock.rules; then + if test ! -f ../ID-INSTALL; then echo "Cannot build InfoDock without InfoDock sources" with_infodock=no fi @@ -3450,14 +3450,9 @@ fi if test "$with_database_berkdb" != "no"; then - AC_CHECK_FUNC(dbopen, with_database_berkdb=yes need_libdb=no, - AC_CHECK_FUNC(db_open, with_database_berkdb=yes need_libdb=no, - AC_CHECK_LIB(db, dbopen, with_database_berkdb=yes need_libdb=yes, - AC_CHECK_LIB(db, db_open, with_database_berkdb=yes need_libdb=yes)))) - - if test "$with_database_berkdb" = "yes"; then - for path in "db/db.h" "db.h"; do -AC_TRY_COMPILE([#ifdef HAVE_INTTYPES_H + AC_MSG_CHECKING(for Berkeley db.h) + for path in "db/db.h" "db.h"; do + AC_TRY_COMPILE([#ifdef HAVE_INTTYPES_H #define __BIT_TYPES_DEFINED__ #include typedef uint8_t u_int8_t; @@ -3469,9 +3464,24 @@ #endif #include <$path> ],[], db_h_path="$path"; break) - done - test -z "$db_h_path" && with_database_berkdb=no + done + if test -z "$db_h_path" + then AC_MSG_RESULT(no); with_database_berkdb=no + else AC_MSG_RESULT($db_h_path) fi + + if test "$with_database_berkdb" != "no"; then + AC_MSG_CHECKING(for Berkeley DB version) + AC_EGREP_CPP(yes, +[#include <$db_h_path> +#if DB_VERSION_MAJOR > 1 +yes +#endif +], [AC_MSG_RESULT(2); dbfunc=db_open], [AC_MSG_RESULT(1); dbfunc=dbopen]) + AC_CHECK_FUNC($dbfunc, with_database_berkdb=yes need_libdb=no, [ + AC_CHECK_LIB(db, $dbfunc, with_database_berkdb=yes need_libdb=yes)]) + fi + if test "$with_database_berkdb" = "yes"; then AC_DEFINE_UNQUOTED(DB_H_PATH, "$db_h_path") AC_DEFINE(HAVE_BERKELEY_DB) diff -r deca3c1083ac -r 70ad99077275 configure.usage --- a/configure.usage Mon Aug 13 10:38:47 2007 +0200 +++ b/configure.usage Mon Aug 13 10:39:40 2007 +0200 @@ -83,6 +83,11 @@ and is considered experimental. --with-cde (*) Compile in support for CDE drag and drop. --with-offix (*) Compile in support for OffiX drag and drop. + *WARNING* If you compile in OffiX, you may not be + able to use multiple X displays success- + fully. If the two servers are from + different vendors, the results may be + unpredictable. --without-xmu (*) For those unfortunates whose vendors don't ship Xmu. --external-widget Compile with external widget support. --with-xpm (*) Compile with support for XPM files. diff -r deca3c1083ac -r 70ad99077275 etc/BABYL --- a/etc/BABYL Mon Aug 13 10:38:47 2007 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,176 +0,0 @@ -Format of Version 5 Babyl Files: - -Warning: - - This was written Tuesday, 12 April 1983 (by Eugene Ciccarelli), -based on looking at a particular Babyl file and recalling various -issues. Therefore it is not guaranteed to be complete, but it is a -start, and I will try to point the reader to various Babyl functions -that will serve to clarify certain format questions. - - Also note that this file will not contain control-characters, -but instead have two-character sequences starting with Uparrow. -Unless otherwise stated, an Uparrow is to be read as -Control-, e.g. ^L is a Control-L. - -Versions: - - First, note that each Babyl file contains in its BABYL OPTIONS -section the version for the Babyl file format. In principle, the -format can be changed in any way as long as we increment the format -version number; then programs can support both old and new formats. - - In practice, version 5 is the only format version used, and the -previous versions have been obsolete for so long that Emacs does not -support them. - - -Overall Babyl File Structure: - - A Babyl file consists of a BABYL OPTIONS section followed by -0 or more message sections. The BABYL OPTIONS section starts -with the line "BABYL OPTIONS:". Message sections start with -Control-Underscore Control-L Newline. Each section ends -with a Control-Underscore. (That is also the first character -of the starter for the next section, if any.) Thus, a three -message Babyl file looks like: - -BABYL OPTIONS: -...the stuff within the Babyl Options section... -^_^L -...the stuff within the 1st message section... -^_^L -...the stuff within the 2nd message section... -^_^L -...the stuff within the last message section... -^_ - - Babyl is tolerant about some whitespace at the end of the -file -- the file may end with the final ^_ or it may have some -whitespace, e.g. a newline, after it. - - -The BABYL OPTIONS Section: - - Each Babyl option is specified on one line (thus restricting -string values these options can currently have). Values are -either numbers or strings. The format is name, colon, and the -value, with whitespace after the colon ignored, e.g.: - -Mail: ~/special-inbox - - Unrecognized options are ignored. - - Here are those options and the kind of values currently expected: - - MAIL Filename, the input mail file for this - Babyl file. You may also use several file names - separated by commas. - Version Number. This should always be 5. - Labels String, list of labels, separated by commas. - - -Message Sections: - - A message section contains one message and information -associated with it. The first line is the "status line", which -contains a bit (0 or 1 character) saying whether the message has -been reformed yet, and a list of the labels attached to this -message. Certain labels, called basic labels, are built into -Babyl in a fundamental way, and are separated in the status line -for convenience of operation. For example, consider the status -line: - -1, answered,, zval, bug, - - The 1 means this message has been reformed. This message is -labeled "answered", "zval", and "bug". The first, "answered", is -a basic label, and the other two are user labels. The basic -labels come before the double-comma in the line. Each label is -preceded by ", " and followed by ",". (The last basic label is -in fact followed by ",,".) If this message had no labels at all, -it would look like: - -1,, - - Or, if it had two basic labels, "answered" and "deleted", it -would look like: - -1, answered, deleted,, zval, bug, - - The & Label Babyl Message knows which are the basic labels. -Currently they are: deleted, unseen, recent, and answered. - - After the status line comes the original header if any. -Following that is the EOOH line, which contains exactly the -characters "*** EOOH ***" (which stands for "end of original -header"). Note that the original header, if a network format -header, includes the trailing newline. And finally, following the -EOOH line is the visible message, header and text. For example, -here is a complete message section, starting with the message -starter, and ending with the terminator: - -^_^L -1,, wordab, eccmacs, -Date: 11 May 1982 21:40-EDT -From: Eugene C. Ciccarelli -Subject: notes -To: ECC at MIT-AI - -*** EOOH *** -Date: Tuesday, 11 May 1982 21:40-EDT -From: Eugene C. Ciccarelli -To: ECC -Re: notes - -Remember to pickup check at cashier's office, and deposit it -soon. Pay rent. -^_ - -;;; Babyl File BNF: - -;;; Overall Babyl file structure: - - -Babyl-File ::= Babyl-Options-Section (Message-Section)* - - -;;; Babyl Options section: - - -Babyl-Options-Section - ::= "BABYL OPTIONS:" newline (Babyl-Option)* Terminator - -Babyl-Option ::= Option-Name ":" Horiz-Whitespace BOptValue newline - -BOptValue ::= Number | 1-Line-String - - - -;;; Message section: - - -Message-Section ::= Message-Starter Status-Line Orig-Header - EOOH-Line Message Terminator - -Message-Starter ::= "^L" newline - -Status-Line ::= Bit-Char "," (Basic-Label)* "," (User-Label)* newline - -Basic-Label ::= Space BLabel-Name "," - -User-Label ::= Space ULabel-Name "," - -EOOH-Line ::= "*** EOOH ***" newline - -Message ::= Visible-Header Message-Text - - -;;; Utilities: - -Terminator ::= "^_" - -Horiz-Whitespace - ::= (Space | Tab)* - -Bit-Char ::= "0" | "1" diff -r deca3c1083ac -r 70ad99077275 etc/BETA --- a/etc/BETA Mon Aug 13 10:38:47 2007 +0200 +++ b/etc/BETA Mon Aug 13 10:39:40 2007 +0200 @@ -224,6 +224,9 @@ Each patch will be reviewed by the patches review board, and will be acked and added to the distribution, or rejected with an explanation. +Emailed patches should preferably be sent in MIME format and quoted +printable encoding (if necessary). + When making patches, please use the `-u' option, or if your diff doesn't support it, `-c'. Using ordinary (context-free) diffs are notoriously prone to error, since line numbers tend to change when @@ -255,6 +258,17 @@ M-x cd to the appropriate directory, and issue the command `C-u M-!' from within XEmacs. +Guidelines for writing ChangeLog entries is governed by the GNU coding +standards. Please see + http://www.gnu.org/prep/standards_toc.html [Change Logs section] +for details. + +Patches should be as single-minded as possible. Mammoth patches can +be very difficult to place into the right slot. They are much easier +to deal with when broken down into functional or conceptual chunks. +The patches submitted by Kyle Jones and Hrvoje Niksic are stellar +examples of how to Do The Right Thing. + ** Packages directory on the FTP Site ===================================== diff -r deca3c1083ac -r 70ad99077275 etc/DISTRIB --- a/etc/DISTRIB Mon Aug 13 10:38:47 2007 +0200 +++ b/etc/DISTRIB Mon Aug 13 10:39:40 2007 +0200 @@ -6,24 +6,7 @@ in the directory /pub/xemacs/. ftp.xemacs.org is the primary distribution point, but you may find -copies of it at other sites as well. Some sites to try include: - - ftp://ftp2.xemacs.org/pub/xemacs/ - ftp://ftp.uu.net/systems/gnu/xemacs/ - ftp://ftp.sunet.se/pub/gnu/xemacs/ - ftp://ftp.cenatls.cena.dgac.fr/pub/Emacs/xemacs/ - ftp://ftp.th-darmstadt.de/pub/editors/xemacs/ - ftp://sunsite.doc.ic.ac.uk/gnu/xemacs/ - ftp://ftp.ibp.fr/pub/emacs/xemacs/ - ftp://uiarchive.cso.uiuc.edu/pub/packages/xemacs/ - ftp://ftp.technion.ac.il/pub/unsupported/gnu/xemacs/ - ftp://thphys.irb.hr/pub/xemacs/ - ftp://sunsite.cnlab-switch.ch/mirror/xemacs/ - ftp://ftp.unicamp.br/pub/xemacs/ - ftp://ftp.usyd.edu.au/pub/Xemacs/ - ftp://ftp.lab.kdd.co.jp/xemacs/ - ftp://SunSITE.sut.ac.jp/pub/archives/packages/xemacs/ - ftp://sunsite.icm.edu.pl/pub/unix/xemacs +copies of it at other sites as well. Please see the file FTP for mirrors. The most up-to-date list of distribution sites can always be found on the XEmacs WWW page, http://www.xemacs.org/. Try to pick a site diff -r deca3c1083ac -r 70ad99077275 etc/FTP --- a/etc/FTP Mon Aug 13 10:38:47 2007 +0200 +++ b/etc/FTP Mon Aug 13 10:39:40 2007 +0200 @@ -1,6 +1,6 @@ -*- text -*- - XEmacs availability information. Last Modified: 19-Jun-1998. + XEmacs availability information. Last Modified: 9-Jul-1998. XEmacs is available via anonymous FTP from ftp.xemacs.org (207.96.122.8) in the directory /pub/xemacs/. @@ -9,6 +9,8 @@ copies of it at other sites as well. Some sites to try include: ftp://ftp.jaist.ac.jp/pub/GNU/xemacs/ + ftp://ring.aist.go.jp/pub/text/xemacs/ + ftp://ring.asahi-net.or.jp/pub/text/xemacs/ ftp://ftp.uu.net/systems/gnu/xemacs/ ftp://ftp.sunet.se/pub/gnu/xemacs/ ftp://ftp.cenatls.cena.dgac.fr/pub/Emacs/xemacs/ diff -r deca3c1083ac -r 70ad99077275 etc/GNUS-NEWS --- a/etc/GNUS-NEWS Mon Aug 13 10:38:47 2007 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,103 +0,0 @@ -** Gnus changes. - -*** nntp.el has been totally rewritten in an asynchronous fashion. - -*** Article prefetching functionality has been moved up into -Gnus. - -*** Scoring can now be performed with logical operators like -`and', `or', `not', and parent redirection. - -*** Article washing status can be displayed in the -article mode line. - -*** gnus.el has been split into many smaller files. - -*** Suppression of duplicate articles based on Message-ID. - -(setq gnus-suppress-duplicates t) - -*** New variables for specifying what score and adapt files -are to be considered home score and adapt files. See -`gnus-home-score-file' and `gnus-home-adapt-files'. - -*** Groups can inherit group parameters from parent topics. - -*** Article editing has been revamped and is now usable. - -*** Signatures can be recognized in more intelligent fashions. -See `gnus-signature-separator' and `gnus-signature-limit'. - -*** Summary pick mode has been made to look more nn-like. -Line numbers are displayed and the `.' command can be -used to pick articles. - -*** Commands for moving the .newsrc.eld from one server to -another have been added. - - `M-x gnus-change-server' - -*** A way to specify that "uninteresting" fields be suppressed when -generating lines in buffers. - -*** Several commands in the group buffer can be undone with -`M-C-_'. - -*** Scoring can be done on words using the new score type `w'. - -*** Adaptive scoring can be done on a Subject word-by-word basis: - - (setq gnus-use-adaptive-scoring '(word)) - -*** Scores can be decayed. - - (setq gnus-decay-scores t) - -*** Scoring can be performed using a regexp on the Date header. The -Date is normalized to compact ISO 8601 format first. - -*** A new command has been added to remove all data on articles from -the native server. - - `M-x gnus-group-clear-data-on-native-groups' - -*** A new command for reading collections of documents -(nndoc with nnvirtual on top) has been added -- `M-C-d'. - -*** Process mark sets can be pushed and popped. - -*** A new mail-to-news backend makes it possible to post -even when the NNTP server doesn't allow posting. - -*** A new backend for reading searches from Web search engines -(DejaNews, Alta Vista, InReference) has been added. - - Use the `G w' command in the group buffer to create such - a group. - -*** Groups inside topics can now be sorted using the standard -sorting functions, and each topic can be sorted independently. - - See the commands under the `T S' submap. - -*** Subsets of the groups can be sorted independently. - - See the commands under the `G P' submap. - -*** Cached articles can be pulled into the groups. - - Use the `Y c' command. - -*** Score files are now applied in a more reliable order. - -*** Reports on where mail messages end up can be generated. - - `M-x nnmail-split-history' - -*** More hooks and functions have been added to remove junk -from incoming mail before saving the mail. - - See `nnmail-prepare-incoming-header-hook'. - -*** The nnml mail backend now understands compressed article files. - diff -r deca3c1083ac -r 70ad99077275 etc/MSDOS --- a/etc/MSDOS Mon Aug 13 10:38:47 2007 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ -XEmacs does not work under MSDOS. If you would be interested in porting -XEmacs to MSDOS, please contact Steve Baur . - -As of 20.1 the old Emacs files have been removed from the XEmacs -distribution. Interested parties should probably grab updated versions -from a current Emacs distribution. diff -r deca3c1083ac -r 70ad99077275 etc/NEWS --- a/etc/NEWS Mon Aug 13 10:38:47 2007 +0200 +++ b/etc/NEWS Mon Aug 13 10:39:40 2007 +0200 @@ -34,8 +34,9 @@ ======================== ** XEmacs has been unbundled into constituent installable packages. -See the file `etc/PACKAGES' in the distribution for a full -description. +See the Info documentation under "Packages" for more information. +See the file `etc/PACKAGES' in the distribution for a partial list of +packages available at the time of the 21.0 release. ** XEmacs is now supported under Microsoft Windows 95/98 and Windows NT operating systems. For starters, look at the XEmacs on Windows FAQ @@ -64,8 +65,6 @@ ** The `imenu' package has been ported to XEmacs and is available as a package. -** Horizontally split windows are now draggable. - ** `echo-keystrokes' can now be a floating-point number, so that you can set it to intervals shorter than one second. @@ -123,9 +122,10 @@ ** The `C-h c' command, when given a prefix argument, will now insert the message into the current buffer. -** Horizontally split windows may now be dragged using the mouse. The -draggable vertical dividers may be turned off using the -`vertical-divider-draggable-p' specifier. +** Horizontally split windows may now be dragged using the mouse. +Because of this, the dividers between vertical windows are always +visible. To turn it off, set `vertical-divider-always-visible-p' to +nil. ** XEmacs/Mule (internationalization) changes. @@ -200,6 +200,98 @@ If you want spaces at the beginning of a line to start a paragraph, use the new mode, Paragraph Indent Text mode. +** Changes to Gnus, the XEmacs newsreader. + +*** New functionality for using Gnus as an offline newsreader has been +added. A plethora of new commands and modes have been added. See the +Gnus manual for the full story. + +*** The nndraft backend has returned, but works differently than +before. All Message buffers are now also articles in the nndraft +group, which is created automatically. + +*** `gnus-alter-header-function' can now be used to alter header +values. + +*** `gnus-summary-goto-article' now accept Message-ID's. + +*** A new Message command for deleting text in the body of a message +outside the region: `C-c C-v'. + +*** You can now post to component group in nnvirtual groups with +`C-u C-c C-c'. + +*** `nntp-rlogin-program' -- new variable to ease customization. + +*** `C-u C-c C-c' in `gnus-article-edit-mode' will now inhibit +re-highlighting of the article buffer. + +*** New element in `gnus-boring-article-headers' -- `long-to'. + +*** `M-i' symbolic prefix command. See the section "Symbolic +Prefixes" in the Gnus manual for details. + +*** `L' and `I' in the summary buffer now take the symbolic prefix +`a' to add the score rule to the "all.SCORE" file. + +*** `gnus-simplify-subject-functions' variable to allow greater +control over simplification. + +*** `A T' -- new command for fetching the current thread. + +*** `/ T' -- new command for including the current thread in the +limit. + +*** `M-RET' is a new Message command for breaking cited text. + +*** \\1-expressions are now valid in `nnmail-split-methods'. + +*** The `custom-face-lookup' function has been removed. +If you used this function in your initialization files, you must +rewrite them to use `face-spec-set' instead. + +*** Cancelling now uses the current select method. Symbolic prefix +`a' forces normal posting method. + +*** New command to translate M******** sm*rtq**t*s into proper text +-- `W d'. + +*** For easier debugging of nntp, you can set `nntp-record-commands' +to a non-nil value. + +*** nntp now uses ~/.authinfo, a .netrc-like file, for controlling +where and how to send AUTHINFO to NNTP servers. + +*** A command for editing group parameters from the summary buffer +has been added. + +*** A history of where mails have been split is available. + +*** A new article date command has been added -- `article-date-iso8601'. + +*** Subjects can be simplified when threading by setting +`gnus-score-thread-simplify'. + +*** A new function for citing in Message has been added -- +`message-cite-original-without-signature'. + +*** `article-strip-all-blank-lines' -- new article command. + +*** A new Message command to kill to the end of the article has +been added. + +*** A minimum adaptive score can be specified by using the +`gnus-adaptive-word-minimum' variable. + +*** The "lapsed date" article header can be kept continually +updated by the `gnus-start-date-timer' command. + +*** Web listserv archives can be read with the nnlistserv backend. + +*** Old dejanews archives can now be read by nnweb. + +*** Byte-compilation of user-specs now works under XEmacs. + ** The `dir' files are no longer essential for functioning of the Info subsystem. If the `dir' file does not exist in an Info directory, the relevant information will be generated on-the-fly. @@ -239,9 +331,9 @@ use of X resources. *** The new draggable vertical dividers between windows may be turned -off using the `vertical-divider-draggable-p' specifier. When this is -set to nil, the vertical dividers between windows are shown only when -needed, and they are not draggable. +off using the `vertical-divider-always-visible-p' specifier. When +this is set to nil, the vertical dividers between windows are shown +only when needed, and they are not draggable. Other properties of the vertical dividers may be controlled using `vertical-divider-shadow-thickness', `vertical-divider-line-width' and @@ -398,6 +490,8 @@ ** The code XEmacs uses to assemble its various paths into the directory hierarchy has been rewritten to support the package system. +Look under "Startup Paths" in the Info documentation for more +information. *** site-lisp is now longer part of the load-path by default. Its use is deprecated, but you can specify --with-site-lisp=yes at the diff -r deca3c1083ac -r 70ad99077275 etc/README --- a/etc/README Mon Aug 13 10:38:47 2007 +0200 +++ b/etc/README Mon Aug 13 10:39:40 2007 +0200 @@ -3,8 +3,10 @@ of interest to XEmacs users, some programs used by or with XEmacs, and the file of on-line documentation for XEmacs. -BABYL A description of BABYL file format +BETA Information about Beta versions +CHARSETS Character set descriptions CODING-STANDARDS XEmacs C & Lisp coding standards +CODINGS Character set codings COOKIES Urban Legend, or True Story? :-) COPYING GNU Public License COPYING.LIB Library GNU Public License @@ -13,82 +15,66 @@ Emacs.ad Sample Resource file FTP XEmacs FTP Mirrors GNU GNU Manifesto -GNUS-NEWS New features in Gnus-5.4 +GOATS Complete XEmacs internals documentation +InstallGuide Fast track to installation LPF Information about the League for Programming Freedom MACHINES List of known machines configurations (OLD) MAILINGLISTS List of available Mailing lists -MH-E-NEWS List of changes to MH-E to version 5.0. MORE.STUFF List of useful unbundled packages -MSDOS Status of MSDOS port -NEWS XEmacs 20.3 release information +NEWS XEmacs 21.0 release information ORDERS ORDERS.EUROPE -ORDERS.JAPAN -OTHER.EMACSES Order forms for GNU software +ORDERS.JAPAN Order forms for GNU software +PACKAGES List of packages available for 21.0 release README This file +README.HYPERBOLE +README.OO-BROWSER How to obtain Hyperbole and the OO-Browser SERVICE How to obtain paid support for free software TERMS Information about termcap entries -TUTORIAL Tutorial for first time users +TUTORIAL Tutorial for first time users (English version) +TUTORIAL.* Tutorials in non-English languages XKeysymDB X Keysym Database with Motif bindings -app-defaults/ Localization resource files (Japanese only) -auctex/ AUC TeX style files -*.Z Various pictures of XEmacs developers -categories XEmacs GNATS bug report categories +aliases.sh Useful shell aliases +cbx.png "Created by XEmacs" logo +check_cygwin_setup.sh Script to check for presence of Cygwin ctags.1 Ctags man page custom/ Images used in Custom mode -e/ Emacs terminal types -edt-user.doc Information about EDT mode +editclient.sh Either start up XEmacs or connect to a running one emacskeys.sco emacsstrs.sco Special files for running on an SCO console -enriched.doc Information about Enriched mode eos/ Images for EOS support (GUD) etags.1 Etags man page -frame-icon/ Images for frame-icon.el -gnats/ XEmacs GNATS bug report support files gnu.xbm gnu.xpm Image of a Gnu. gnuattach.1 Gnuattach man page gnuclient.1 Gnuclient man page gnudoit.1 Gnudoit man page -gnus/ Images for the Gnus News & Mail reader -gnus-refcard.tex Gnus reference card (refcard.tex in Gnus distribution) -gnus-tut.txt Gnus tutorial gnuserv.1 Gnuserv man page gnuserv.README Original README file from gnuserv gnusref.tex Gnus reference card gray1.xbm Gray bitmap -hypb-mouse.txt Hyperbole mouse reference -ida-logo.xpm InfoDock Associates logo -ledit.l Ledit lisp file? -message/ Images for Message mode -mine/ Images for Xmine game ms-kermit ms-kermit-7bit Files for running XEmacs through kermit -mule/ MULE documentation (OLD) +photos/*.Z Various pictures of XEmacs developers recycle.xpm recycle2.xpm Two versions of oversized Recycle cursor -refcard.ps Postscript version of XEmacs reference card +refcard.ps.gz Postscript version of XEmacs reference card refcard.tex XEmacs reference card sample.Xdefaults Example ~/.Xdefaults file sample.emacs Example ~/.emacs file -sgml/ SGML catalog, DTDs, etc. sink.xbm A Gnu icon -smilies/ Smiley images for smiley.el -sounds/ Sound files for sound support sparcworks/ Support files for Sparcworks -spook.lines Keywords that might trip TLA wiretaps tests/ Testcases for external widget time/ Image files for display-time toolbar/ Image files for the toolbar trash.xpm Garbage can icon -viperCard.tex Viper reference card -vm/ Image files for VM mail reader -w3/ Image files for W3 browser +xemacs-beta.xpm XEmacs Beta logo +xemacs-fe.sh XEmacs frontend driver xemacs-icon.xpm xemacs-icon2.xbm xemacs-icon2.xpm xemacs-icon3.xpm Various versions of an XEmacs WM icon +xemacs-ja.1 Japanese XEmacs man page xemacs.1 XEmacs man page xemacs.xbm xemacs.xpm XEmacs logo used on the splash screen -yow.lines Database used by yow.el diff -r deca3c1083ac -r 70ad99077275 etc/TUTORIAL.ro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/TUTORIAL.ro Mon Aug 13 10:39:40 2007 +0200 @@ -0,0 +1,1205 @@ +Copyright (c) 1998 Tudor Hulubei +Mulțumiri Aidei Hulubei pentru corecturi și sugestii. + +A se citi sfârșitul pentru condiții. + +Această versiune a fost produsă plecând de la versiunea în limba +engleză, care este +Copyright (c) 1985, 1996 Free Software Foundation, Inc. + +Citiți acum versiunea românească a tutorialului de Emacs. + +Comenzile Emacs folosesc în general tasta CONTROL (uneori denumită +CTRL sau CTL) sau tasta META. Pe unele tastaturi, tasta META este +etichetată ALT, EDIT sau în alt fel (de exemplu, pe tastaturile Sun, +tasta META este etichetată cu un diamant și se găsește la stânga +tastei spațiu). Dacă nu aveți o tastă META, puteți folosi ESC în loc. +În loc să scriem META sau CONTROL de fiecare dată când vrem să +prefixăm un caracter, vom folosi următoarele prescurtări: + + C- înseamnă că țineți apăsată tasta CONTROL în timp ce tastați + caracterul . Astfel, C-f înseamnă: țineți apăsată tasta + CONTROL și tastați f. + + M- înseamnă că țineți apăsată tasta META în timp ce tastați + . Dacă nu există tasta META, tastați , ridicați și + apoi tastați caracterul . + +Observație importantă: pentru a termina sesiunea Emacs, tastați C-x +C-c. (Două caractere.) Caracterele ">>" la marginea din stânga +reprezintă instrucțiuni pentru a încerca o comandă. De exemplu: +<> +>> Acum tastați C-v (citirea următorului ecran) pentru a vă muta la + următorul ecran. (Executați această comandă acum, tinând apăsată + tasta CONTROL în timp ce tastați v). De acum înainte faceți acest + lucru din nou, de fiecare dată când terminați de citit ecranul. + +De remarcat că există o zonă de suprapunere de două linii când vă +mutați de la un ecran la altul; aveți astfel o oarecare continuitate +în citirea textului. + +Primul lucru pe care trebuie să-l stiți este cum să vă deplasați din +loc în loc în text. Știți deja cum să vă mutați la următorul ecran cu +C-v. Pentru a vă deplasa înapoi un ecran, tastați M-v (țineți apăsată +tasta META și tastați v, sau v dacă nu aveți o tastă META, EDIT, +sau ALT). + +>> Încercați să tastați M-v și apoi C-v de câteva ori. + + +* SUMAR +------- + +Următoarele comenzi sunt utile pentru a vedea ecrane: + + C-v avansează un ecran + M-v înapoi un ecran + C-l șterge ecranul și reafișează totul poziționând textul + de lângă cursor în centrul ecranului. (Este C-L, nu + C-1.) + +>> Găsiți cursorul și țineți minte ce text este în jurul lui. + Apoi tastați C-l. Găsiți cursorul din nou și observați că textul + de lângă cursor este același. + + +* COMENZI DE BAZĂ PENTRU CONTROLUL CURSORULUI +--------------------------------------------- + +Mutatul ecran cu ecran este util, dar cum vă mutați la o anumită +poziție în textul de pe ecran? + +Sunt mai multe modalitați în care puteți face acest lucru. Cel mai +simplu este să folosiți comenzile C-p, C-b, C-f și C-n. Fiecare din +aceste comenzi mută cursorul o linie sau coloană într-o anumită +direcție pe ecran. Diagrama următoare prezintă aceste patru comenzi +și arată direcțiile în care ele mută cursorul. + + Linia precedentă, C-p + : + : + Înapoi, C-b .... Poziția curentă a cursorului .... Înainte, C-f + : + : + Linia următoare, C-n + +>> Mutați cursorul la linia din mijlocul diagramei folosind C-n sau + C-p. Tastați apoi C-l pentru a vedea întreaga diagramă centrată pe + ecran. + +Vi se va părea probabil mai simplu să vă amintiți aceste comenzi +gândindu-vă la semnificația lor în limba engleză: P pentru previous, N +pentru next, B pentru backward și F pentru forward. Acestea sunt +comenzile de bază pentru poziționarea cursorului și le veți folosi tot +timpul, deci ar fi foarte util să le învățați acum. + +>> Tastați câteva C-n-uri pentru a aduce cursorul la această linie. + +>> Mutați-vă în interiorul liniei cu C-f-uri și apoi în sus cu + C-p-uri. Urmăriți ce face C-p atunci când cursorul este în + mijlocul liniei. + +Fiecare linie se termină cu un caracter NEWLINE care o separă de linia +următoare. Ultima linie în fișierele dumneavoastră ar trebui să aibă +un asemenea caracter la sfârșit (deși Emacs-ul nu-l necesită). + +>> Încercați să tastați C-b la începutul unei linii. Cursorul ar + trebui să se mute la sfârșitul liniei precedente, din cauza + trecerii peste caracterul NEWLINE. + +C-f poate să treacă peste un caracter NEWLINE, la fel ca și C-b. + +>> Tastați câteva C-b-uri, pentru a vă familiariza cu poziția + cursorului. Tastați apoi câteva C-f-uri pentru a vă întoarce la + sfârșitul liniei. Încă un C-f și vă veți muta la linia următoare. + +Când ajungeți să treceți peste începutul sau sfârșitul ecranului, +textul aflat dincolo de margine intră în ecran, permițându-i +Emacs-ului să mute cursorul la poziția specificată, fără a ieși din +zona vizibilă (ecran). Această operațiune se numeste în limba engleză +"scrolling". + +>> Încercați să mutați cursorul în afara părții de jos a ecranului cu + C-n și observați ce se întamplă. + +Dacă mutatul caracter cu caracter este lent, puteți muta cursorul +cuvânt cu cuvânt. M-f (META-f) avansează cursorul cu un cuvânt, iar +M-b mută cursorul un cuvânt înapoi. + +>> Tastați câteva M-f-uri și apoi câteva M-b-uri. + +Când cursorul este în mijlocul unui cuvânt, M-f îl mută la sfârșitul +cuvântului. Când cursorul este în spațiul dintre cuvinte, M-f îl mută +la sfârșitul cuvântului următor. M-b acționează similar, dar în +direcția opusă. + +>> Tastați M-f și M-b de câteva ori, intercalate cu C-f-uri și + C-b-uri, pentru a observa efectul comenzilor M-f și M-b din diverse + poziții în interiorul cuvintelor și între ele. + +Observați paralela între C-f și C-b pe de o parte, și M-f și M-b pe de +cealaltă parte. De multe ori, caracterele META sunt folosite pentru +operații referitoare la unitățile definite de limbaj (cuvinte, fraze, +paragrafe), în timp ce caracterele CONTROL operează pe unități de +bază, care sunt independente de tipul textului editat (caractere, +linii, etc). + +Această paralelă se aplică și între linii și fraze: C-a și C-e mută +cursorul la începutul și, respectiv sfârșitul unei linii, în timp ce +M-a și M-e îl mută la începutul și, respectiv sfârșitul unei fraze. + +>> Încercați câteva C-a-uri, apoi câteva C-e-uri. + Încercați câteva M-a-uri, apoi câteva M-e-uri. + +Remarcați cum repetarea tastării lui C-a nu schimbă nimic, în timp ce +repetarea tastării lui M-a mută cursorul la fraza următoare. Deși +aceste operații nu sunt tocmai analoage, fiecare pare naturală. + +Poziția cursorului în text mai este numită și "punct" ("point" în +limba engleză). Cursorul arată pe ecran poziția punctului în text. + +Operațiile ce mută cursorul (inclusiv comenzile ce mută cursorul +cuvânt cu cuvânt sau frază cu frază) sunt prezentate în sumarul +următor: + + C-f avansează un caracter + C-b înapoi un caracter + + M-f avansează un cuvânt + M-b înapoi un cuvânt + + C-n avansează o linie + C-p înapoi o linie + + C-a înapoi la începutul liniei + C-e avansează la sfârșitul liniei + + M-a înapoi la începutul frazei + M-e avansează la sfârșitul frazei + +>> Exersați toate aceste comenzi acum, sunt comenzile cele mai des + folosite. + +Două alte comenzi importante legate de mutatul cursorului sunt M-< +(META Mai-mic), care mută cursorul la începutul textului, și M-> (META +Mai-mare), care mută cursorul la sfârșitul textului. + +Pe majoritatea terminalelor "<" este deasupra virgulei și deci este +necesar să apăsați tasta SHIFT în același timp. Pe aceste terminale +este nevoie să apăsați SHIFT și când tastați M-<; fără tasta SHIFT, +ați apăsa M-virgulă. + +>> Încercați M-< acum, pentru a vă muta la începutul tutorialului. + Folosiți apoi C-v în mod repetat pentru a ajunge înapoi aici. + +>> Încercați M-> acum, pentru a vă muta la sfârșitul tutorialului. + Folosiți apoi M-v repetat pentru a ajunge înapoi aici. + +Puteți de asemenea să mutați cursorul cu tastele săgeți, dacă +terminalul are asemenea taste. Se recomandă însă acomodarea cu C-b, +C-f, C-n și C-p din trei motive. În primul rând, aceste taste +funcționează pe toate tipurile de terminale. În al doilea rând, odată +ce vă obișnuiți cu Emacs-ul, veți remarca faptul că tastarea lor este +mai rapidă decât cea a tastelor săgeți (pentru că nu trebuie să vă +schimbați poziția mâinilor pe tastatură). În al treilea rând, odată +format obiceiul de a folosi aceste comenzi bazate pe CONTROL, +comenzile avansate de mutat cursorul se învață foarte ușor. + +Majoritatea comenzilor Emacs acceptă un argument numeric; pentru +majoritatea comenzilor, acest argument reprezintă un contor de +repetiție. Contorul de repetiție se introduce tastând C-u, cifrele ce +alcătuiesc contorul și apoi comanda. Dacă aveți tasta META (EDIT sau +ALT), există și o altă alternativă pentru a introduce un argument +numeric: tastați cifrele în timp ce țineți tasta META apăsată. Se +recomandă însă folosirea metodei cu C-u, deoarece funcționează pe +orice terminal. + +De exemplu, C-u 8 C-f avansează cursorul cu opt caractere. + +>> Încercați să folosiți C-n sau C-p cu un argument numeric pentru a + muta cursorul dintr-o singură comandă pe o linie apropiată de + aceasta. + +Majoritatea comenzilor utilizează argumentul numeric ca un contor de +repetitie. Anumite comenzi speciale îl folosesc însa în mod diferit. +C-v si M-v sunt printre aceste excepții. Când li se dă un argument +numeric, ele mută ecranul mai sus sau mai jos cu numarul specificat de +linii, nu de ecrane. De exemplu, C-u 4 C-v mută ecranul cu 4 linii. + +>> Încercați să tastați C-u 8 C-v acum. + +Această comandă trebuie să mute ecranul în sus cu 8 linii. Dacă +doriti să îl mutați înapoi, puteți să-i dați lui M-v un argument +numeric. + +Dacă folosiți sistemul X Window, există probabil o zonă rectangulară +numita "scroll bar" la dreapta ferestrei Emacs-ului. Puteți deplasa +textul manipulând "scroll bar"-ul cu mouse-ul. + +>> Încercați să apăsați butonul din mijloc al mouse-ului la mijlocul + butonului din scroll bar. Aceasta ar trebui să mute textul la o + poziție determinată de cât de sus sau de jos ați apăsat pe scroll + bar. + +>> Mutați mouse-ul într-un punct în scroll bar la aproximativ trei + linii de început și apăsați butonul din stânga de câteva ori. + + +* CONTROLUL CURSORULUI ÎNTR-UN TERMINAL X +----------------------------------------- + +Dacă aveți un terminal X, vi se va părea probabil mai ușor să folosiți +tastele de pe keypad pentru a controla cursorul. Săgețile stânga, +dreapta, sus și jos mută cursorul în direcția specificată; +funcționeaza exact ca și C-b, C-f, C-p și C-n, dar sunt mai ușor de +tastat și reținut. Puteți folosi de asemenea C-stânga și C-dreapta +pentru a vă deplasa cuvânt cu cuvânt, și C-sus și C-jos, pentru a vă +deplasa bloc cu bloc (de ex. paragraf cu paragraf, dacă editați text). +Dacă tastatura are taste etichetate HOME (sau BEGIN) și END, acestea +vă vor muta la începutul, respectiv sfârșitul liniei, iar C-home și +C-end vă vor muta la începutul, respectiv sfârșitul fișierului. Dacă +tastatura are taste etichetate PgUp și PgDn, acestea vă vor muta ecran +cu ecran, exact ca M-v și C-v. + +Toate aceste comenzi acceptă argument numeric, așa cum am explicat mai +sus. Puteți folosi o modalitate mai simplă de a-l introduce: țineți +apăsată tasta CONTROL sau tasta META și tastați numărul. De exemplu, +pentru a vă muta 12 cuvinte la dreapta, tastați C-1 C-2 C-dreapta. De +remarcat faptul că este foarte ușor să tastați, pentru că nu trebuie +să ridicați tasta CONTROL. + + +* CÂND EMACS-ul ESTE BLOCAT +--------------------------- + +Dacă Emacs-ul încetează să vă raspundă la comenzi, îl puteți opri, +fără să pierdeți modificările făcute până atunci, tastând C-g. Puteți +folosi C-g pentru a opri o comandă care durează prea mult. + +Puteți de asemenea folosi C-g pentru a opri introducerea unui argument +numeric sau începutul unei comenzi pe care nu doriți să o continuați. + +>> Tastați C-u 100 pentru a introduce 100 ca un argument numeric, apoi + tastați C-g. Tastați apoi C-f. Cursorul ar trebui să se mute un + singur caracter, pentru că ați oprit introducerea argumentului + numeric cu C-g. + +Dacă ați tastat un din greșeală, puteți să-l anulați cu un C-g. + + +* COMENZI DEZAFECTATE +--------------------- + +Anumite comenzi sunt dezafectate în Emacs, în așa fel încât +utilizatorii să nu le poată folosi din neatenție. + +Dacă tastați una din comenzile dezafectate, Emacs-ul va afișa un mesaj +spunând ce comandă ați tastat și întrebându-vă dacă doriți să +continuați. + +Dacă într-adevăr doriți să încercați comanda respectivă, tastați +SPAȚIU. În mod normal, dacă nu doriți să executați comanda +dezafectată, răspundeți cu "n". + +>> Tastați `C-x n p' (care este o comandă dezafectată), apoi tastați n + ca răspuns la întrebarea pusă de Emacs. + + +* FERESTRE +---------- + +Emacs-ul poate avea mai multe ferestre, fiecare afișând propriul său +text. De remarcat că "fereastră" în sensul folosit de Emacs nu se +referă la ferestrele ce se pot suprapune într-un sistem bazat pe +ferestre (cum ar fi X Window System), ci la secțiuni separate într-o +singură fereastră X. (Emacs-ul poate avea multiple ferestre X - +"frame"-uri în terminologia Emacs. Acestea vor fi descrise mai +târziu.) + +În acest moment este mai bine să nu detaliem tehnicile de folosire a +ferestrelor multiple, dar trebuie să știți cum să închideți ferestrele +care ar putea apare ca rezultat al afișării unor documentații sau +rezultate specifice anumitor comenzi. Este simplu: + + C-x 1 o singură fereastră (adică închide toate celelalte + ferestre). + +Asta înseamnă CONTROL-x urmat de cifra 1. C-x 1 mărește fereastra +care conține cursorul până când ocupă întregul ecran. Toate celelalte +ferestre sunt distruse. + +>> Mutați cursorul la această linie și tastați C-u 0 C-l. + +(După cum vă amintiți, C-l redesenează ecranul. Un argument numeric +înseamnă "redesenează ecranul și pune linia curentă la o distanță (în +număr de linii) de partea de sus a ecranului egală cu argumentul +numeric". În concluzie, C-u 0 C-l înseamnă "redesenează ecranul, +poziționând linia curentă la început.") + +>> Tastați C-x 2. Observați cum această fereastră se micșorează, în + timp ce o nouă fereastră apare, afișând același text. + +>> Tastați C-x 1 și observați cum noua fereastră dispare. + + +* INTRODUCEREA ȘI ȘTERGEREA +--------------------------- + +Dacă vreți să introduceți text, pur și simplu tastați textul dorit. +Caracterele pe care le puteți vedea, cum ar fi A, 7, *, etc. sunt +interpretate de Emacs ca text și introduse imediat. Tastați +(tasta mai este etichetată uneori) pentru a introduce un +caracter NEWLINE. + +Puteți șterge ultimul caracter pe care l-ați introdus tastând +. este o tastă pe tastatură etichetată "Del" sau +"Delete". În unele cazuri tasta "Backspace" poate acționa ca +, dar nu întotdeauna! + +Mai general, șterge caracterul dinaintea poziției curente a +cursorului. + +>> Executați următoarele operații acum - tastați câteva caractere, + apoi ștergeți-le tastând de câteva ori. Nu vă temeți că + veți schimba acest fișier; nu veți altera versiunea principală a + tutorialului. Aceasta este copia dumneavoastră personală. + +Când o linie de text devine prea mare pentru a putea fi reprezentată +pe o linie de ecran, linia de text este continuată pe următoarea linie +de pe ecran. Un caracter backslash ("\") la marginea din dreapta +indică o linie care a fost continuată. + +>> Introduceți text până când depășiți cu câteva caractere marginea + din dreapta a ecranului. Veți observa apariția liniei de + continuare. + +>> Folosiți -uri pentru a șterge textul până când linia încape + din nou pe o linie de ecran. Linia de continuare va dispărea. + +Puteți șterge un caracter NEWLINE ca pe orice alt caracter. Ștergerea +unui NEWLINE dintre două linii concateneaza cele două linii. Dacă +linia rezultată este prea lungă pentru a fi afișată pe ecran, va fi +afișată cu o linie de continuare. + +>> Mutați cursorul la începutul unei linii și tastați . + Aceasta concatenează linia curentă cu cea precedentă. + +>> Tastați pentru a reintroduce caracterul NEWLINE șters. + +Așa cum vă reamintiți, majoritatea comenzilor Emacs pot primi un +argument numeric ce acționează ca un contor de repetiție; introducerea +caracterelor ascultă aceleași reguli. Un argument numeric dat unui +caracter duce la introducerea caracterului respectiv de numărul +specificat de ori. + +>> Încercați asta acum - tastați C-u 8 * pentru a introduce ********. + +Ați învățat acum metodele elementare de tastat și corectat erori în +Emacs. Puteți de asemenea șterge cuvinte sau linii. Acesta este un +sumar al operațiilor de ștergere. + + șterge caracterul de dinaintea cursorului + C-d șterge caracterul de după cursor + + M- șterge cuvântul de dinaintea cursorului + M-d șterge cuvântul de după cursor + + C-k șterge de la poziția curentă până la sfârșitul + liniei + M-k șterge de la poziția curentă până la sfârșitul + frazei + +De remarcat că și C-d versus M- și M-d extind +paralela începută de C-f și M-f ( nu este cu adevărat un +caracter bazat pe CONTROL, dar nu o să ne ocupăm de asta acum). C-k +și M-k sunt ca C-e și M-e, într-un fel, dacă facem o paralelă între +linii și fraze. + +Când ștergeți mai mult de un caracter la un moment dat, Emacs-ul +păstrează intern textul distrus în așa fel încât îl puteți restaura. +Termenul folosit de Emacs pentru operațiunea de restaurare a textului +distrus este "yanking". Puteți restaura textul distrus fie în același +loc, fie în alt loc în fișier. Puteți de asemenea restaura textul de +mai multe ori pentru a face mai multe copii. Comanda de restaurare +este C-y. + +Diferența dintre "distrugerea" și "ștergerea" unei porțiuni din text +este aceea ca porțiunile de text "distruse" pot fi restaurate, în timp +ce porțiunile de text "șterse", nu. În general, comenzile care +distrug porțiuni semnificative din text, păstrează intern textul +respectiv, în timp ce comenzile care șterg doar un caracter, linii +goale sau spații, nu fac acest lucru. + +>> Mutați cursorul la începutul unei linii care nu este goală. + Tastați apoi C-k pentru a distruge textul de pe linia respectivă. +>> Tastați C-k o a doua oară. Veți observa distrugerea caracterului + NEWLINE de la sfârșitul liniei. + +După cum vedeți, un singur C-k distruge conținutul liniei, iar un al +doilea C-k distruge linia însăși, facând toate celelalte linii să se +mute în sus. C-k tratează un argument numeric în mod special: +distruge numărul specificat de linii și conținutul lor. Această +comportare nu este doar o simplă repetiție. C-u 2 C-k distruge două +linii și NEWLINE-urile de după ele; tastând C-k de două ori nu +obțineți același rezultat. + +Pentru a extrage ultimul text distrus și a-l plasa la poziția curentă +a cursorului, tastați C-y. + +>> Tastați C-y pentru a restaura textul distrus anterior. + +Gânditi-vă la C-y ca și cum ați recupera ceva ce v-a fost luat. +Observați că dacă executați mai multe C-k-uri la rând, tot textul +distrus este stocat într-o singură bucată, în așa fel încât un singur +C-y va restaura toate liniile. + +>> Tastați acum C-k de câteva ori. + +Acum încercați să restaurați textul distrus: + +>> Tastați C-y. Mutați apoi cursorul câteva linii mai jos și tastați + C-y din nou. Veți vedea cum se copiază porțiuni de text. + +Ce faceți dacă aveți porțiuni de text pe care vreți să le restaurați, +dar între timp distrugeți o altă porțiune de text? C-y va restaura +porțiunea de text care a fost distrusă cel mai recent. Cu toate +acestea, textul distrus anterior nu este pierdut. Puteți să-l +restaurați folosind comanda M-y. După ce ați executat C-y pentru a +obține textul cel mai recent distrus, tastând M-y veți înlocui textul +ce tocmai a fost restaurat cu textul distrus înaintea lui. Tastând +M-y de mai multe ori puteți obține porțiuni de text distrus din ce în +ce mai vechi. Odată ajunși la textul care vă interesează, puteți să +continuați editarea fără să mai faceți nimic special, lasând textul +restaurat în poziția în care se găsește. + +Dacă tastați M-y de suficient de multe ori, veți ajunge în cele din +urmă la punctul de plecare (textul distrus cel mai de curând). + +>> Distrugeți o linie, mutați-vă puțin în jurul ei, distrugeți o altă + linie. Executați apoi C-y pentru a obține înapoi cea de-a doua + linie distrusă. Executați apoi M-y și veți constata că este + înlocuită de prima linie distrusă. Executați mai multe M-y-uri și + observați ce obțineți. Continuați să le executați până când a doua + linie apare din nou, etc. Dacă doriți, puteți încerca să-i dați + comenzii M-y argumente numerice pozitive și negative. + + +* ANULARE +--------- + +Dacă faceți o schimbare în text, și apoi constatați că ați greșit, +puteți anula schimbarea cu comanda de anulare, C-x u. + +În mod normal, C-x u anulează schimbările făcute de o comandă; dacă +repetați C-x u de câteva ori la rând, fiecare nouă repetiție anulează +încă o comandă. + +Există însă două excepții: comenzile care nu schimbă textul nu sunt +luate în considerare (acestea includ comenzile de mutat cursorul și +cele de "scrolling"), iar caracterele introduse individual sunt +tratate în grupuri de maxim 20. (Motivația din spatele acestei +abordări este aceea de a reduce numărul de C-x u-uri pe care trebuie +să le tastați pentru anularea inserărilor de text). + +>> Distrugeți linia aceasta cu C-k, apoi tastați C-x u; linia ar + trebui să reapară. + +C-_ este o altă comandă de anulare; funcționează exact ca și C-x u, +dar este mai ușor de tastat de mai multe ori la rând. Dezavantajul +lui C-_ este că pe anumite tastaturi nu este clar cum trebuie tastat. +Din acest motiv există C-x u. Pe unele terminale se poate să tastați +C-_ tastând "/" în timp ce țineți apăsată tasta CONTROL. + +Un argument numeric la C-_ sau C-x u acționează ca un contor de +repetiție. + + +* FIȘIERE +--------- + +Pentru a face permanente modificările din textul pe care îl editați, +trebuie să-l stocați (salvați) într-un fișier. Altminteri, +modificările se vor pierde în momentul părăsirii Emacs-ului. Puneți +textul într-un fișier "deschizând" (sau "vizitând") fișierul. + +Deschiderea unui fișier înseamnă că puteți vedea conținutul fișierului +în Emacs. Este ca și cum ați edita chiar fișierul, singura diferență +fiind aceea că schimbările nu devin permanente până când nu îl +"salvați" ("save" în limba engleză). Se evită astfel existența în +sistem a unor fișiere incomplet modificate atunci când nu doriți acest +lucru. Chiar și când salvați fișierul, Emacs-ul păstrează fișierul +inițial (cu un nume schimbat) în așa fel încât să-l puteți recupera în +cazul în care decideți că modificările efectuate au fost greșite. + +Aproape de marginea de jos a ecranului veți observa o linie care +începe și se termină cu minusuri, și conține șirul "Emacs: +TUTORIAL.ro". Această parte a ecranului arată întotdeauna numele +fișierului pe care îl vizitați. Acum vizitați fișierul "TUTORIAL.ro" +care este copia dumneavoastră de încercări a tutorialului în limba +română. Orice fișier ați edita, numele acelui fișier va apărea în +poziția respectivă. + +Comenzile pentru găsirea și salvarea fișierelor sunt diferite de +celelalte comenzi pe care le-ați învățat, în sensul că sunt compuse +din două caractere. Amândouă încep cu caracterul C-x. Există o +întreagă serie de comenzi care încep cu C-x; multe dintre ele sunt +legate de fișiere, buffere și alte lucruri înrudite. Aceste comenzi +sunt compuse din două, trei sau patru caractere. + +Comenzii de deschidere a unui fișier trebuie să îi spuneți numele +fișierului dorit. Spunem despre comandă ca "citește un argument de la +terminal" (în acest caz, argumentul este numele fișierului). După ce +tastați comanda + + C-x C-f (deschide un fișier) + +Emacs-ul vă va cere să introduceți numele fișierului. Numele pe care +îl tastați apare pe ultima linie a ecranului. Această linie se +numeste "minibuffer" când este folosită pentru acest tip de +introducere. Comenzile normale de editare în Emacs pot fi folosite și +pentru editarea numelui fișierului. + +În timp ce introduceți numele fișierului (sau orice alt tip de +introducere de date în minibuffer), puteți anula comanda cu C-g. + +>> Tastați C-x C-f, apoi tastați C-g. Aceasta anulează minibuffer-ul, + și, de asemenea, anulează comanda C-x C-f care îl folosea. În + concluzie, nu veți mai deschide nici un fișier. + +Când ați terminat de introdus numele fișierului, tastați +pentru a-l încheia. După aceasta, comanda C-x C-f începe să lucreze +și deschide fișierul pe care l-ați ales. Minibuffer-ul dispare când +comanda C-x C-f se termină. + +După câteva momente, conținutul fișierului apare pe ecran și îl puteți +edita. Când doriti să faceți schimbările permanente, tastați comanda + + C-x C-s (salvează fișierul) + +Aceasta copiază textul din Emacs într-un fișier. Prima oară când +faceți acest lucru, Emacs-ul redenumește fișierul inițial în așa fel +încât să nu se piardă. Noul nume este creat prin adăugarea +caracterului "~" la numele inițial. + +Când operațiunea de salvare este terminată, Emacs-ul afișează numele +fișierului salvat. Se recomandă salvarea la intervale relativ mici, +pentru a nu pierde prea multă muncă în cazul unei eventuale blocări a +sistemului. + +>> Tastați C-x C-s, pentru a salva copia tutorialului. + Aceasta ar trebui să afișeze "Wrote ...TUTORIAL.ro" la marginea de + jos a ecranului. + +OBSERVAȚIE: În unele sisteme, tastarea comenzii C-x C-s va bloca +ecranul și nu veți mai primi nici un de răspuns din partea Emacs-ului. +Aceasta indică faptul că o facilitate a sistemului de operare numită +"controlul fluxului" ("flow control" în limba engleză) interceptează +C-s, nelasându-l să ajungă la Emacs. Pentru deblocarea ecranului, +tastați C-q. Puteți găsi detalii referitoare la această așa-numită +"facilitate" în secțiunea "Spontaneous Entry to Incremental Search" +din manualul Emacs-ului. + +Puteți deschide un fișier existent, pentru a-l vedea sau edita. +Puteți de asemenea deschide un fișier care nu există. Aceasta este +modalitatea în care creați noi fișiere cu Emacs-ul: deschideți +fișierul (care va fi gol inițial), apoi începeți să introduceți text +în el. Când îi veți cere să "salveze" fișierul, Emacs-ul va crea +fișierul cu textul pe care l-ați introdus. De acum înainte puteți +considera că editați un fișier existent. + + +* BUFFERE +--------- + +Dacă deschideți un al doilea fișier cu C-x C-f, primul va continua să +existe în Emacs. Puteți să vă mutați înapoi la el deschizându-l din +nou cu C-x C-f. În acest fel puteți avea un număr destul de mare de +fișiere deschise în Emacs. + +>> Creați un fișier numit "foo" tastând C-x C-f foo . + Introduceți un text oarecare, editați-l, apoi salvați "foo" tastând + C-x C-s. În cele din urmă, tastați C-x C-f TUTORIAL.ro + pentru a vă întoarce la tutorial. + +Emacs-ul stochează textul fiecărui fișier într-un obiect numit +"buffer". Deschiderea unui fișier creează un nou buffer în Emacs. +Pentru a vedea o listă a bufferelor existente în Emacs, tastați + + C-x C-b (lista de buffere) + +>> Încercați C-x C-b acum. + +Observați cum fiecare buffer are un nume și, uneori, un nume de fișier +corespunzător fișierului al cărui conținut este menținut în buffer-ul +respectiv. Unele buffere nu corespund nici unui fișier. De exemplu, +buffer-ul numit "*Buffer List*" nu are nici un fișier asociat. Este +buffer-ul care conține lista de buffere și a fost creat de comanda C-x +C-b. Orice text pe care îl vedeți într-o fereastră a Emacs-ului este +întotdeauna parte dintr-un buffer. + +>> Tastați C-x 1 pentru a scăpa de lista de buffere. + +Dacă faceți schimbări în textul unui fișier, apoi deschideți un alt +fișier, primul fișier nu este salvat. Schimbările efectuate rămân în +Emacs, în buffer-ul asociat acelui fișier. Crearea sau editarea +buffer-ului celui de-al doilea fișier nu are nici un efect asupra +buffer-ului primului fișier. Acest lucru este foarte util, dar +înseamnă că aveți nevoie de o modalitate convenabilă de a salva +buffer-ul primului fișier. Ar fi obositor să fie necesar să vă mutați +înapoi la el cu C-x C-f pentru a-l putea salva cu C-x C-s. Din acest +motiv există comanda: + + C-x s salvează niște buffere + +C-x s vă întreabă despre fiecare buffer care conține modificări (și +care nu a fost salvat) dacă doriți să-l salvați. + +>> Introduceți o linie de text, apoi tastați C-x s. + Ar trebui să vă întrebe dacă să salveze buffer-ul TUTORIAL.ro. + Raspundeți "da" la întrebare tastând "y". + + +* FOLOSIREA MENIULUI +-------------------- + +Dacă sunteți la consola unui terminal X, veți observa o bară de +meniuri ("menubar" în limba engleză) la marginea de sus a ferestrei +Emacs-ului. Puteți folosi acest menubar pentru a accesa toate +comenzile uzuale ale Emacs-ului, cum ar fi "deschide fișier". +Probabil că vi se va părea mai ușor la început, pentru că nu este +nevoie să vă amintiți tastele necesare accesării comenzilor. Odată +acomodați cu Emacs-ul, va fi ușor să începeți să folosiți tastatura, +deoarece fiecare element din meniu, care are o comandă asociată, +afișează și tastele cu care acea comandă poate fi accesată. + +Există multe elemente în meniu care nu au nici un echivalent într-o +secvență de taste. De exemplu, meniul Buffers listează toate +buffer-ele existente în ordinea celei mai recente folosiri. Puteți să +vă mutați la orice buffer găsindu-i și selectându-i numele în meniul +Buffers. + + +* FOLOSIREA MOUSE-ului +---------------------- + +Când rulează sub X, Emacs-ul oferă suport integrat pentru mouse. +Puteți poziționa cursorul în text apăsând butonul stâng deasupra +poziției dorite; puteți selecta text trăgând mouse-ul peste porțiunea +dorită, în timp ce butonul stâng este apăsat. O metodă alternativă +este să apăsați butonul stâng al mouse-ului deasupra uneia dintre +extremitățile porțiunii de text dorite, apoi să vă mutați la cealaltă +extremitate și să apăsați butonul stâng, ținând tasta SHIFT apăsată +pentru a selecta textul. + +Ca să distrugeți textul selectat, puteți folosi C-w sau "Cut" în meniu +de editare ("Edit"). Există însă o diferență între cele două +modalități. C-w nu face decât să distrugă textul (păstrând o copie +internă), în timp ce "Cut" face același lucru, dar pune textul și în +clipboard-ul X-ului, de unde poate fi accesat de către alte aplicații. + +Dacă vreți să extrageți textul din clipboard-ul X-ului, folosiți +"Paste" in meniul "Edit". + +Butonul din mijloc al mouse-ului este folosit pentru a alege elemente +care sunt vizibile pe ecran. De exemplu, dacă intrați în Info +(documentația Emacs-ului) folosind C-h i sau meniul "Help", puteți +selecta o legatură pusă în evidență apăsând butonul din mijloc al +mouse-ului deasupra ei. În mod analog, dacă introduceți un nume de +fișier (de exemplu când deschideți un fișier cu "Find File") și +tastați TAB pentru a obține completările posibile, puteți apăsa +butonul din mijloc al mouse-ului pe una din completări, pentru a o +selecta. + +Butonul din dreapta al mouse-ului invocă un meniu popup. Conținutul +acestui meniu variază în funcție de modul de editare curent și, în mod +normal, conține câteva comenzi uzuale, pentru a le face mai ușor +accesibile. + +>> Apăsați butonul din dreapta al mouse-ului acum. + +Va trebui să țineți butonul apăsat pentru a menține meniul vizibil. + + +* EXTINDEREA SETULUI DE COMENZI +------------------------------- + +Există mult mai multe comenzi Emacs decât combinații de taste bazate +pe CONTROL și META. Soluția în Emacs este folosirea comenzilor +eXtinse. Acestea sunt de două feluri: + + C-x eXtinde un caracter; urmată de un caracter + M-x eXtinde un nume; urmată de un nume lung + +Acestea sunt comenzi care sunt utile în general, dar folosite mai rar +decât comenzile despre care ați învățat până acum. Ați văzut deja +două dintre ele: comanda de deschis fișiere (C-x C-f) și comanda de +salvat fișiere (C-x C-s). Un alt exemplu este comanda de părăsit +Emacs-ul: C-x C-c. (Nu vă temeți că veți pierde schimbări făcute în +fișiere; înainte de a termina sesiunea curentă Emacs, C-x C-c vă va +întreba dacă doriți să salvați fișierele modificate.) + +C-z este comanda cu care puteți ieși din Emacs *temporar* - astfel +încât să puteți să vă întoarceți la aceeași sesiune Emacs mai târziu. + +Pe sistemele unde este posibil, C-z "suspendă" Emacs-ul; asta înseamnă +că, deși vă veți întoarce la prompt-ul shell-ului, Emacs-ul nu a fost +distrus. În shell-urile (interpretoarele de comenzi Unix) cele mai +uzuale puteți reactiva Emacs-ul cu comanda `fg' sau `%emacs'. + +Pe sistemele care nu implementează mecanismele de suspendare, C-z +creează un subshell care rulează sub Emacs pentru a vă oferi +posibilitatea de a rula alte programe și de a vă întoarce la Emacs mai +târziu; pe aceste sisteme C-z nu iese cu adevărat din Emacs - comanda +`exit' la promptul subshell-ului este modalitatea uzuală de a vă +întoarce în Emacs. + +În general C-x C-c se folosește înainte de părăsirea sistemului. +Puteți folosi această comandă și pentru a ieși din instanțe de Emacs +lansate de programe de citit mail sau alte utilitare, deoarece acestea +s-ar putea să nu fie capabile să folosească facilitațile de suspendare +ale Emacs-ului. În mod normal însă, dacă nu sunteți pe cale să +părăsiți sistemul, este mai bine să suspendați Emacs-ul cu C-z decât +să ieșiți complet cu C-x C-c. + +Emacs-ul are multe comenzi prefixate cu C-x. Aceasta este lista celor +pe care le-ați învățat până acum: + + C-x C-f deschide un fișier + C-x C-s salvează fișierul + C-x C-b listează bufferele + C-x C-c părăsește Emacs-ul + C-x u anulează + +Comenzile eXtinse cu nume sunt comenzile care sunt folosite și mai rar +sau comenzile care sunt folosite numai în anumite moduri. Un exemplu +este comanda replace-string (înlocuiește-șir) care înlocuiește global +toate aparițiile unui șir de caractere cu alt șir de caractere. Când +tastați M-x, Emacs-ul afișează pe ultima linie de pe ecran "M-x" și +puteți introduce numele comenzii - în cazul nostru "replace-string". +Puteți să tastați doar "repl s" și Emacs-ul va completa numele. +Terminați comanda cu . + +Comanda replace-string necesită două argumente - șirul ce va fi +înlocuit și șirul înlocuitor. La sfârșitul introducerii fiecărui +argument trebuie să tastați . + +>> Mutați cursorul pe linia goală care se găseste două linii mai jos. + Tastați apoi M-x repl smodificatalterat. + + Observați modul în care această linie s-a modificat: ați înlocuit + toate aparițiile cuvântului s-c-h-i-m-b-a-t cu "alterat", după + poziția inițială a cursorului. + + +* SALVARE AUTOMATĂ +------------------ + +Dacă ați facut schimbări într-un fișier, dar nu le-ați salvat, aceste +schimbări se pot pierde în cazul în care sistemul se blochează. +Pentru a vă proteja munca, Emacs-ul salvează periodic un fișier de +"autosalvare" pentru fiecare fișier pe care îl editați. Acest fișier +are un "#" la început și unul la sfârșit; de exemplu, dacă fișierul +dumneavoastră se numeste "hello.c", fișierul de autosalvare +corespunzător se va numi "#hello.c#". Când salvați fișierul în mod +normal, Emacs-ul șterge fișierul de autosalvare. + +În cazul unei căderi a sistemului, puteți să vă recuperați fișierul de +autosalvare deschizând fișierul în mod normal (fișierul pe care îl +editați, nu pe cel de autosalvare) și tastând după aceea M-x recover +file. Când vi se cere confirmarea, tastați yes pentru +a continua și a recupera fișierul. + + +* ZONA DE ECOU +-------------- + +Dacă Emacs-ul observă că tastați comenzile încet, vi le va arăta la +marginea de jos a ecranului într-o zona numită "zona de ecou". Zona +de ecou conține cea mai de jos linie a ecranului. + + +* LINIA DE MOD +-------------- + +Linia de deasupra zonei de ecou se numește "linia de mod" ("modeline" +în limba engleză). Linia de mod conține ceva de genul: + +--**-XEmacs: TUTORIAL (Fundamental)--L670--58%---------------- + +Această linie prezintă informații utile despre starea Emacs-ului și +despre textul pe care îl editați. + +Stiți deja ce înseamnă numele fișierului - este fișierul pe care l-ați +deschis. -NN%-- indică poziția curentă a cursorului în text - NN la +sută din text este deasupra primei linii de pe ecran. Dacă începutul +fișierului este vizibil pe ecran, veți vedea --Top-- în loc de +--00%--. Dacă sfârșitul fișierului este vizibil pe ecran, veți vedea +--Bot-- (de la "bottom" în limba engleză). Dacă fișierul este atât de +mic, încât încape în întregime pe ecran, pe linia de mod veți vedea +--All--. + +Stelele de la începutul liniei de mod semnalizează existența unor +modificări nesalvate în text. Imediat după deschiderea fișierului, +porțiunea respectivă din linia de mod nu conține nici o stea, doar +minusuri. + +Porțiunea dinăuntrul parantezelor vă spune modul de editare curent. +Modul implicit este "Fundamental", modul pe care îl folosiți chiar +acum. Este un exemplu de "mod major". + +Emacs-ul are multe moduri majore. Unele dintre ele sunt destinate +editării diferitelor limbaje și/sau tipuri de text, cum ar fi modul +Lisp, modul Text, etc. Numai un mod major poate fi activ la un moment +dat și numele său va fi întotdeauna acolo unde este "Fundamental" +acum. + +Fiecare mod major schimbă comportamentul unor comenzi. De exemplu +există comenzi pentru crearea comentariilor într-un program, dar, cum +fiecare limbaj de programare are o idee diferită despre felul cum ar +trebui să arate un comentariu, fiecare mod major trebuie să le +introducă într-un alt fel. Există câte o comandă asociată fiecărui +mod major - aceasta este modalitatea de a schimba modul major. De +exemplu, M-x fundamental-mode este comanda cu care poate fi ales modul +"Fundamental". + +Dacă editați text în limba română, cum ar fi de exemplu acest fișier, +ar trebui probabil să folosiți modul Text. + +>> Tastați M-x text-mode. + +Nu vă temeti, nici una din comenzile pe care le-ați învățat până acum +nu schimbă Emacs-ul prea mult. Puteți observa acum că M-f și M-b +tratează apostrofurile ca parte din cuvinte. Înainte, în modul +Fundamental, M-f și M-b tratau apostrofurile ca separatoare de +cuvinte. + +Modurile majore operează schimbări subtile, ca cea descrisă mai sus. +Majoritatea comenzilor execută aceeași operație în fiecare mod major, +dar funcționează puțin diferit. + +Pentru a vedea documentația referitoare la modul major curent, tastați +C-h m. + +>> Folosiți C-u C-v o dată sau de mai multe ori pentru a aduce această + linie aproape de începutul ecranului. Tastați C-h m ca să aflați + diferențele dintre modul Text și modul Fundamental. Tastați q + pentru a șterge documentația de pe ecran. + +Modurile majore se numesc "majore" pentru că există și moduri minore. +Modurile minore sunt ajustări minore ale modurilor majore. Fiecare +mod minor poate fi activat sau dezactivat separat, independent de +celelalte moduri minore și independent de modul major curent. Puteți +să nu folosiți nici un mod minor, un mod minor sau orice combinație de +moduri minore. + +Un mod minor care este foarte util, în mod special când editați text, +este modul "Auto Fill". Când acest mod este activat, Emacs-ul sparge +automat liniile la spațiul dintre cuvinte de fiecare dată când +introducând text creați o linie care este prea lungă. + +Puteți activa modul "Auto Fill" executând M-x auto-fill-mode. +Când acest mod este activat, îl puteți dezactiva executând aceeași +comandă. Dacă modul este dezactivat, această comandă îl activează, +când este activat, comanda îl dezactivează. Se spune că această +comandă inversează modul. + +>> Tastați M-x auto-fill-mode acum. Introduceți apoi o linie + conținând "asdf " de mai multe ori, până când linia se sparge în + două. Trebuie să puneți spații între cuvinte pentru că Auto Fill + sparge linia numai la spații. + +Marginea este stabilită în mod normal la 70 de caractere, dar puteți +schimba această valoare cu comanda C-x f. Introduceți valoarea dorită +ca argument numeric pentru C-x f. + +>> Tastați C-x f cu 20 ca argument numeric. (C-u 2 0 C-x f). + Introduceți apoi un text oarecare și observați cum Emacs-ul umple + linii de maximum 20 de caractere. Restaurați marginea la 70 de + caractere folosind din nou C-x f. + +Dacă faceți schimbări în mijlocul unui paragraf, modul Auto Fill nu +rearanjează paragraful. Pentru a face acest lucru, trebuie să tastați +M-q (META-q) cu cursorul poziționat înăuntrul paragrafului. + +>> Mutați cursorul în paragraful precedent și tastați M-q. + + +* CĂUTARE +--------- + +Emacs-ul poate caută șiruri (grupuri continue de caractere sau +cuvinte) fie înainte, fie înapoi (față de poziția curentă a cursorului +în text). Căutarea unui șir este o operație ce mută cursorul; +cursorul este mutat în poziția corespunzătoare următoarei apariții a +șirului în text. + +Căutarea este diferită în Emacs față de majoritatea editoarelor, +deoarece este "incrementală". Asta înseamnă că execuția operațiunii +de căutare se face în timp ce tastați șirul de căutat. + +Comanda ce inițiază căutarea este C-s pentru căutare înainte și C-r +pentru căutare înapoi. AȘTEPTAȚI! Nu le încercați acum. + +Când tastați C-s veți remarca faptul că șirul "I-search" apare ca +prompt în zona de ecou. Aceasta vă spune că Emacs-ul este în modul de +căutare incrementală, așteptând ca dumneavoastră să introduceți șirul +pe care doriți să-l căutați. Căutarea poate fi terminată cu . + +>> Tastați acum C-s pentru a porni o căutare. ÎNCET, câte o singură + literă la un moment dat, tastați cuvântul "cursor", făcând o pauză + după fiecare caracter tastat ca să observați ce se întamplă cu + cursorul. Acum ați terminat de căutat prima apariție a cuvântului + "cursor". +>> Tastați C-s din nou, pentru a căuta următoarea apariție a + cuvântului "cursor". +>> Tastați acum de patru ori și observați mișcarea + cursorului. +>> Tastați pentru a termina căutarea. + +Ați observat ce s-a întamplat? În timpul unei căutări incrementale +Emacs-ul încearcă să se poziționeze pe prima apariție a șirului pe +care l-ați introdus până în momentul respectiv, punându-o în evidență +pentru ca să o puteți identifica mai ușor. Dacă vreți să vă +poziționați pe următoarea apariție a cuvântului "cursor", nu trebuie +decât să tastați C-s încă o dată. Dacă nu mai există o altă apariție, +Emacs-ul va emite un sunet și vă va anunța că operațiunea de căutare a +eșuat ("failing" în limba engleză). C-g este o altă metodă de a +termina căutarea. + +OBSERVAȚIE: Pe unele sisteme, C-s va bloca ecranul și nu veți mai +primi nici un răspuns de la Emacs. Aceasta indică faptul că o +"facilitate" a sistemului de operare numită "controlul fluxului" +("flow control" în limba engleză) interceptează caracterul C-s și +acesta nu mai ajunge la Emacs. Pentru deblocarea ecranului, apăsați +C-q. Puteți găsi detalii referitoare la această așa-numită +"facilitate" în secțiunea "Spontaneous Entry to Incremental Search" +din manualul Emacs-ului. + +Dacă sunteți în mijlocul unei căutări incrementale și tastați +, veți observa că ultimul caracter în căutarea incrementală +este șters și căutarea se întoarce la poziția anterioară. De exemplu, +să presupunem că ați tastat "c", pentru a căuta prima apariție a lui +"c". Dacă tastați "u", cursorul se va muta la prima apariție a lui +"cu". Tastați acum . Aceasta va șterge "u"-ul din șirul de +căutare și cursorul se va muta înapoi la prima apariție a lui "c". + +Căutarea incrementală poate fi terminată prin tastarea unui caracter +bazat pe CONTROL sau META (cu câteva excepții - caracterele care sunt +specifice căutării, cum ar fi C-s și C-r). + +C-s începe o căutare care inspectează textul de DUPĂ poziția curentă a +cursorului. Dacă doriți să căutați în textul dinaintea poziției +curente a cursorului, folosiți C-r. Toată discuția referitoare la C-s +se aplică și comenzii C-r, cu mențiunea că direcția de căutare este +inversă. + + +* FERESTRE MULTIPLE +------------------- + +Una dintre facilitățile importante ale Emacs-ului este aceea de a +afișa pe ecran mai multe ferestre simultan. + +>> Mutați cursorul pe această linie și tastați C-u 0 C-l. + +>> Tastați acum C-x 2 pentru a împărți ecranul în două ferestre. + Amândouă ferestrele vor afișa acest tutorial. Cursorul va rămane + în fereastra din partea de sus a ecranului. + +>> Tastați C-M-v pentru a mișca textul din fereastra de jos. + (Dacă nu aveți o tastă META, tastați ESC C-v.) + +>> Tastați C-x o ("o" de la "other" - "cealaltă" în limba + engleză) pentru a muta cursorul în fereastra de jos. + +>> Tastați C-v și M-v în fereastra de jos pentru a muta textul. + Continuați să citiți aceste instrucțiuni în fereastra de sus. + +>> Tastați C-x o din nou pentru a muta cursorul înapoi în fereastra de + sus. Cursorul va fi plasat în locul unde a fost anterior. + +Puteți continua să folosiți C-x o pentru a vă muta între ferestre. +Fiecare fereastră are propria ei poziție a cursorului, dar numai o +fereastră arată cursorul la un moment dat. Toate operațiile normale +de editare au efect în fereastra în care se găsește cursorul - +fereastra respectivă se numește "fereastra selectată". + +Comanda C-M-v este foarte utilă când editați text într-o fereastră și +folosiți cealaltă fereastră pentru a citi documentații. Puteți ține +întotdeauna cursorul în fereastra în care editați, în timp ce avansați +textul din cealaltă fereastră cu C-M-v. + +C-M-v este un exemplu de caracter CONTROL-META. Dacă aveți o tastă +META, puteți tasta C-M-v ținând apăsate și CONTROL și META când +tastați v. Nu contează care dintre CONTROL sau META este apăsată mai +întâi, pentru că amândouă acționează prin modificarea caracterului pe +care îl tastați. + +Dacă nu aveți o tastă META și folosiți ESC în loc, ordinea este +importantă: trebuie să tastați ESC urmat de CONTROL-v; CONTROL-ESC v +nu va funcționa, din cauza faptului că ESC este un caracter de sine +stătător, nu un modificator. + +>> Tastați C-x 1 (în fereastra de sus) ca să renunțați la fereastra + de jos. + +(Dacă ați tastat C-x 1 în fereastra de jos, această comandă va închide +fereastra de sus. Gândiți-vă la ea așa "Păstrează doar o fereastră - +cea în care sunt acum.") + +Nu este nevoie să afisați același buffer în ambele ferestre. Dacă +folosiți C-x C-f pentru a deschide un fișier într-o fereastră, +cealaltă fereastră nu se schimbă. Puteți deschide un fișier diferit +în fiecare fereastră. + +O altă modalitate de a folosi două ferestre ca să afișați lucruri +diferite: + +>> Tastați C-x 4 C-f apoi numele unui fișier. Terminați comanda + cu Observați că fișierul specificat apare în fereastra de + jos. Cursorul la fel. + +>> Tastați C-x o pentru a vă muta în fereastra de sus, apoi tastați + C-x 1 pentru a șterge fereastra de jos. + + +* NIVELURI DE EDITARE RECURSIVĂ +------------------------------- + +Uneori veți intra în ceea ce se numeste un "nivel de editare +recursivă". Acesta este indicat de prezența unor paranteze drepte în +linia de mod în jurul numelui modului major. De exemplu, s-ar putea +să vedeți [(Fundamental)] în loc de (Fundamental). + +Pentru a ieși din nivelul de editare recursivă, tastați ESC ESC ESC. +Aceasta este o comandă de ieșire de uz general. O puteți folosi și ca +să ieșiți din minibuffer sau ca să eliminați ferestrele în plus. + +>> Tastați M-x pentru a intra în minibuffer; tastați apoi ESC ESC ESC + ca să ieșiți. + +Nu puteți folosi C-g pentru a ieși dintr-un nivel de editare recursivă +deoarece comanda C-g este folosită pentru a anula comenzi și argumente +înăuntrul unui nivel de editare recursivă. + + +* CUM PUTEȚI OBȚINE MAI MULTE INFORMAȚII +---------------------------------------- + +În acest tutorial am încercat să furnizăm suficiente informații pentru +a face primii pași în Emacs. Există atât de multe comenzi în Emacs +încât ar fi imposibil să le explicăm pe toate aici. S-ar putea însă +să doriți să învațați mai multe despre Emacs, deoarece oferă foarte +multe facilitați interesante. Există comenzi pentru a citi +documentația despre comenzile Emacs-ului. Aceste comenzi ajutătoare +sunt prefixate cu caracterul C-h, denumit și "caracterul de ajutor". + +Pentru a folosi aceste facilități de ajutor, tastați caracterul C-h, +apoi un caracter ce specifică tipul de ajutor de care aveți nevoie. +În cazul în care sunteți nelămurit, tastați C-h ? și Emacs-ul vă va +spune ce fel de ajutor vă poate oferi. Dacă ați tastat C-h și vă +răzgândiți (nu mai doriți ajutor) puteți tasta C-g pentru a anula +comanda. + +(Anumite site-uri remapează caracterul C-h. Nu ar trebui să facă asta +orbește pentru toți utilizatorii - aveți motiv să vă plângeți +administratorului de sistem. Între timp, dacă C-h nu afișează un +mesaj despre ajutor la marginea de jos a ecranului, încercați M-x +help în loc.) + +Comanda elementară de ajutor este C-h c. Tastați C-h, apoi caracterul +c și o comandă alcătuită dintr-un caracter sau secvență de caractere +și Emacs-ul va afișa o scurtă descriere a comenzii. + +>> Tastați C-h c C-p. + +Mesajul ar trebui să fie ceva de genul + + C-p runs the command previous-line + +Aceasta vă spune "numele funcției". Numele de funcții sunt folosite +în principal pentru a adapta și extinde Emacs-ul, dar, cum numele +funcțiilor sunt alese în așa fel încât să indice actiunea comenzii +respective, ele pot servi ca o documentație foarte scurtă, suficientă +ca să vă amintească de comenzi pe care le-ați învățat deja. + +Comenzile formate din mai multe caractere (cum ar fi C-x C-s) și (dacă +nu aveți o tasta META, EDIT sau ALT) v sunt de asemenea permise +după C-h c. + +Pentru a obține mai multe informații despre o comandă, folosiți C-h k +în loc de C-h c. + +>> Tastați C-h k C-p. + +Această comandă afișează documentația și numele funcției într-o +fereastră separată. Când terminați de citit, tastați q pentru a +o elimina. + +Câteva comenzi C-h utile: + + C-h f descrie o funcție al cărei nume trebuie să-l + introduceți + +>> Încercați să tastați C-h f previous-line. + Aceasta afișează toată informația pe care o are Emacs-ul despre + funcția ce implementează comanda C-p. + + C-h a Hyper Apropos. Tastați un cuvânt cheie și Emacs-ul va + lista toate funcțiile și variabilele ale căror nume + conțin acel cuvânt cheie. La stânga comenzilor care + pot fi invocate cu M-x va fi afișată o steluță. + +>> Tastați C-h a newline. + +Aceasta afișează lista tuturor funcțiilor și variabilelor al căror +nume conține "newline". Tastați sau apăsați butonul din +mijloc al mouse-ului, pentru a afla mai multe despre o funcție sau +variabilă. Tastați q ca să ieșiți din hyper-apropos. + + +* CONCLUZII +----------- + +Țineți minte, pentru a ieși permanent din Emacs, folosiți C-x C-c. +Pentru a ieși temporar într-un shell (în așa fel încât să vă puteți +întoarce la Emacs mai târziu) folosiți C-z. (sub X, această comandă +minimizeaza frame-ul curent al Emacs-ului.) + +Acest tutorial a fost organizat în așa fel încât să fie pe înțelesul +noilor utilizatori - nu vă sfiiți să vă plângeți autorilor dacă gasiți +ceva neclar! + + +COPIERE +------- + +Acest tutorial este rezultatul prelucrării unei serii lungi de +tutoriale pentru Emacs derivate din cel scris de Stuart Cracraft +pentru versiunea inițială de Emacs. Ben Wing a adaptat tutorialul +pentru X Windows. Martin Buchholz și Hrvoje Niksic au adăugat +corecții pentru XEmacs. + +Cu scopul evitării oricăror confuzii datorate traducerii, las în +continuare noțita de copyright originală în limba engleză. + +This version of the tutorial, like GNU Emacs, is copyrighted, and +comes with permission to distribute copies on certain conditions: + +Copyright (c) 1985, 1996 Free Software Foundation + + 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. + + 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. + +Condițiile de copiere a Emacs-ului sunt mai complexe, dar în același +spirit. Citiți fișierul COPYING și apoi distribuiți prietenilor copii +ale Emacs-ului. Contribuiți la eliminarea obstrucționismului software +folosind, scriind și distribuind free software! diff -r deca3c1083ac -r 70ad99077275 etc/TUTORIAL.ru --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/TUTORIAL.ru Mon Aug 13 10:39:40 2007 +0200 @@ -0,0 +1,1082 @@ +Copyright (c) 1985, 1996 Free Software Foundation, Inc. See end for conditions. + +śÙ ȚÉÔÁĆÔĆ ŐȚĆÂÎÉË Emacs. + +äÌŃ ŐĐÒÁŚÌĆÎÉŃ Emacs ÏÂÙȚÎÏ ÉÓĐÏÌŰÚŐĆÔÓŃ ËÌÁŚÉÛÁ CONTROL (ÉÎÏÇÄÁ ÏÔÍĆȚÁĆÍÁŃ ËÁË +CTRL ÉÌÉ CTL) ÉÌÉ ËÌÁŚÉÛÁ META. îÁ ÎĆËÏÔÏÒÙÈ ËÌÁŚÉÁÔŐÒÁÈ, ËÌÁŚÉÛÁ META +ÏÔÍĆȚĆÎÁ ALT ÉÌÉ EDIT ÉÌÉ ËÁË-ÎÉÂŐÄŰ ĆĘĆ (ÎÁĐÒÉÍĆÒ, ÎÁ ËÌÁŚÉÁÔŐÒÁÈ Sun, +"the diamond key" ÓÌĆŚÁ ÏÔ ĐÒÏÂĆÌÁ É ĆÓÔŰ META). ćÓÌÉ Ő ŚÁÓ ÎĆÔ ËÌÁŚÉÛÉ +META, ŚÙ ÍÏÖĆÔĆ ÉÓĐÏÌŰÚÏŚÁÔŰ ESC ŚÍĆÓÔÏ ÎĆĆ. äÁÌĆĆ ŚÍĆÓÔÏ META ÉÌÉ +CONTROL ËÁÖÄÙÊ ÒÁÚ ÍÙ ÂŐÄĆÍ ÉÓĐÏÌŰÚÏŚÁÔŰ ĐÒĆÆÉËÓÎÙÊ ÓÉÍŚÏÌ Ś ÓÌĆÄŐÀĘÉÈ +ÓÏËÒÁĘĆÎÉŃÈ: + + C- ÓÌĆÄŐĆÔ ŐÄĆÒÖÉŚÁÔŰ ËÌÁŚÉÛŐ CONTROL ĐÏËÁ ÎÁÂÉÒÁĆÔÓŃ ÓÉÍŚÏÌ + ôÁË, C-f ÄÏÌÖÎÏ ÏÚÎÁȚÁÔŰ: ÎÁÖÁÔŰ ËÌÁŚÉÛŐ CONTROL É f. + M- ÓÌĆÄŐĆÔ ŐÄĆÒÖÉŚÁÔŰ ËÌÁŚÉÛŐ META ĐÏËÁ ÎÁÂÉÒÁĆÔÓŃ ÓÉÍŚÏÌ . + ćÓÌÉ ÔÁËÏŚÏÊ ÎĆÔ, ÎÁÖÍÉÔĆ , ÏÔĐŐÓÔÉÔĆ ĆĆ, ĐÏÔÏÍ ÓÉÍŚÏÌ . + +śÁÖÎÏĆ ÚÁÍĆȚÁÎÉĆ: ÄÌŃ ÚÁŚĆÒÛĆÎÉŃ ÓĆÁÎÓÁ Emacs, ÎÁÂĆÒÉÔĆ C-x C-c. (äŚÁ +ÓÉÍŚÏÌÁ). óÉÍŚÏÌÙ ">>" Ó ÌĆŚÏÊ ÓÔÏÒÏÎÙ ŐËÁÚÙŚÁÀÔ, ȚÔÏ ŚÁÍ ÎŐÖÎÏ ÄĆÌÁÔŰ, +ȚÔÏ ĐÒÉÍĆÎÉÔŰ ËÏÍÁÎÄŐ. îÁĐÒÉÍĆÒ: + +>> ôĆĐĆÒŰ ÎÁÖÍÉÔĆ C-v (đÒÏÓÍÏÔÒ ÓÌĆÄŐÀĘĆÇÏ ÜËÒÁÎÁ) ÄÌŃ ĐĆÒĆÍĆĘĆÎÉŃ ÎÁ + ÓÌĆÄŐÀĘÉÊ ÜËÒÁÎ. (ÉÄÉÔĆ ŚĐĆÒĆÄ, ŐÄĆÒÖÉŚÁŃ ËÌÁŚÉÛŐ Control ÎÁÖÉÍÁŃ v). + ôĆĐĆÒŰ ŚÙ ÄÏÌÖÎÙ ÜÔÏ ÓÄĆÌÁÔŰ ĆĘĆ ÒÁÚ, ËÏÇÄÁ ÚÁËÏÎȚÉÔĆ ȚÉÔÁÔŰ ÜËÒÁÎ. + +ïÂÒÁÔÉÔĆ ŚÎÉÍÁÎÉĆ ÎÁ ÔÏ, ȚÔÏ, ĐÏËÁ ŚÙ ÄŚÉÖĆÔĆÓŰ Ó ÜËÒÁÎÁ ÎÁ ÜËÒÁÎ, +ĐĆÒĆËÒÙŚÁÀÔÓŃ ÄŚĆ ÓÔÒÏȚËÉ; ÜÔÏ ÏÂĆÓĐĆȚÉŚÁĆÔ ÎĆËÏÔÏÒŐÀ ÎĆĐÒĆÒÙŚÎÏÓÔŰ, ÔÁËÉÍ +ÏÂÒÁÚÏÍ ŚÙ ÍÏÖĆÔĆ ĐÒÏÄÏÌÖÁÔŰ ȚÉÔÁÔŰ ÔĆËÓÔ. + +đĆÒŚÏĆ ȚÔÏ ŚÁÍ ÎĆÏÂÈÏÄÉÍÏ ÚÎÁÔŰ - ËÁË ĐĆÒĆÄŚÉÇÁÔŰÓŃ ĐÏ ÔĆËÓÔŐ ÉÚ ÏÄÎÏÇÏ ÍĆÓÔÁ +Ś ÄÒŐÇÏĆ. śÙ ŐÖĆ ÚÎÁĆÔĆ, ËÁË ĐĆÒĆÄŚÉÎŐÔŰ ŚĐĆÒĆÄ ÏÄÉÎ ÜËÒÁÎ, ÉÓĐÏÌŰÚŐŃ C-v. +äÌŃ ĐĆÒĆÍĆĘĆÎÉŃ ÎÁÚÁÄ ÏÄÎÏÇÏ ÜËÒÁÎÁ, ÎÁÖÍÉÔĆ M-v (ŐÄĆÒÖÉŚÁÊÔĆ ËÌÁŚÉÛŐ META +É ÎÁÂĆÒÉÔĆ v, ÉÌÉ ÎÁÖÍÉÔĆ v ĆÓÌÉ Ő ŚÁÓ ÎĆÔ ËÌÁŚÉÛŐ META, EDIT, ÉÌÉ ALT). + +>> ĐÏĐÒÏÂŐÊÔĆ ÎÁÂÒÁÔŰ M-v É ĐÏÔÏÍ C-v, ÎĆÓËÏÌŰËÏ ÒÁÚ. + + +* ëòáôëï +--------- + +óÌĆÄŐÀĘÉĆ ËÏÍÁÎÄÙ ÉÓĐÏÌŰÚŐÀÔÓŃ ÄÌŃ ĐÒÏÓÍÏÔÒÁ: + + C-v đĆÒĆÊÔÉ ÎÁ ÏÄÉÎ ÜËÒÁÎ ŚĐĆÒĆÄ + M-v đĆÒĆÊÔÉ ÎÁ ÏÄÉÎ ÜËÒÁÎ ÎÁÚÁÄ + C-l ïȚÉÓÔÉÔŰ ÜËÒÁÎ É ÏÔÏÂÒÁÚÉÔŰ ŚÓĆ ÚÁÎÏŚÏ, ÒÁÚÍĆÓÔÉŚ + ÔĆËÓÔ, ÎÁÈÏÄŃĘÉÊÓŃ ŚÏÚÌĆ ËŐÒÓÏÒÁ, Ś ĂĆÎÔÒĆ ÜËÒÁÎÁ. + (üÔÏ control-L, ÎĆ control-1.) + +>> îÁÊÄÉÔĆ ËŐÒÓÏÒ, É ÚÁĐÏÍÎÉÔĆ ÔĆËÓÔ ŚÏÚÌĆ ÎĆÇÏ. + đÏÔÏÍ ÎÁÖÍÉÔĆ C-l. + îÁÊÄÉÔĆ ËŐÒÓÏÒ ÓÎÏŚÁ É ŐÂĆÄÉÔĆÓŰ, ȚÔÏ ŚÏÚÌĆ ÎĆÇÏ ŚÓĆ ÔÏÔ ÖĆ ÔĆËÓÔ. + + +* âáúïśïć őđòáśìćîéć ëőòóïòïí +----------------------------- + +äŚÉÖĆÎÉĆ ÏÔ ÜËÒÁÎÁ Ë ÜËÒÁÎŐ ŐÄÏÂÎÏ, ÎÏ ËÁË ĐĆÒĆÍĆÓÔÉÔŰÓŃ Ś +ÏĐÒĆÄĆÌĆÎÎÏĆ ÍĆÓÔÏ ĐÏ ÔĆËÓÔŐ ÎÁ ÜËÒÁÎĆ? + +ćÓÔŰ ÎÁÓËÏÌŰËÏ ĐŐÔĆÊ, ȚÔÏÂÙ ÓÄĆÌÁÔŰ ÜÔÏ. ïÓÎÏŚÎÏÊ ĐŐÔŰ - ÉÓĐÏÌŰÚÏŚÁÔŰ ËÏÍÁÎÄÙ +C-p, C-b, C-f, É C-n. ëÁÖÄÁŃ ÉÚ ÜÔÉÈ ËÏÍÁÎÄ ĐĆÒĆÄŚÉÇÁĆÔ ËŐÒÓÏÒ ÎÁ ÏÄÎŐ +ÓÔÒÏËŐ ÉÌÉ ËÏÌÏÎËŐ ÎÁ ÜËÒÁÎĆ Ś ÏĐÒĆÄĆÌĆÎÎÏÍ ÎÁĐÒÁŚÌĆÎÉÉ. üÔÁ ÔÁÂÌÉĂÁ +ĐÏËÁÚÙŚÁĆÔ ȚĆÔÙÒĆ ËÏÍÁÎÄÙ É ȚĆÔÙÒĆ ÎÁĐÒÁŚÌĆÎÉŃ ÄŚÉÖĆÎÉŃ: + + đÒĆÄÙÄŐĘÁŃ ÓÔÒÏËÁ, C-p + : + : + îÁÚÁÄ, C-b .... ôĆËŐĘÁŃ ĐÏÚÉĂÉŃ ËŐÒÓÏÒÁ .... śĐĆÒĆÄ, C-f + : + : + óÌĆÄŐÀĘÁŃ ÓÔÒÏËÁ, C-n + +>> đĆÒĆÍĆÓÔÉÔĆ ËŐÒÓÏÒ ÎÁ ÓÔÒÏËŐ ÒŃÄÏÍ Ó ÄÉÁÇÒÁÍÍÏÊ, ÉÓĐÏÌŰÚŐŃ C-n ÉÌÉ C-p. + đÏÔÏÍ, ÎÁÖÍÉÔĆ C-l É ĐÏÓÍÏÔÒÉÔĆ ËÁË ÄÉÁÇÒÁÍÍÁ ÒÁÚÍĆÓÔÉÔÓŃ Ś ĂĆÎÔÒĆ ÜËÒÁÎÁ. + +śÁÍ ÂŐÄĆÔ ÎĆÓÌÏÖÎÏ ÚÁĐÏÍÎÉÔŰ ĐÏ ÂŐËŚÁÍ (// ÎÄÁ, ÚÎÁŃ ÁÎÇÌÉÊÓËÉÊ - ÓÏŚÓĆÍ +ÌĆÇËÏ ) : P-ĐÒĆÄÙÄŐĘÉÊ (previous), N-ÓÌĆÄŐÀĘÉÊ (next), B-ÎÁÚÁÄ (backward) É +F-ŚĐĆÒĆÄ (forward). üÔÏ ÏÓÎÏŚÎÙĆ ËÏÍÁÎÄÙ ĐÏÚÉĂÉÏÎÉÒÏŚÁÎÉŃ ËŐÒÓÏÒÁ, ËÏÔÏÒÙÍÉ śÙ +ÂŐÄĆÔĆ ĐÏÌŰÚÏŚÁÔŰÓŃ śóćçäá, ÔÁË ȚÔÏ ÂŐÄĆÔ ÎĆĐÌÏÈÏ ÉÈ ŚÙŐȚÉÔŰ. + +>> îÁÖÍÉÔĆ ÎĆÓËÏÌŰËÏ ÒÁÚ C-n ȚÔÏ ÏĐŐÓÔÉÔŰ ËŐÒÓÏÒ ŚÎÉÚ ÎÁ ÜÔŐ ÓÔÒÏËŐ. + +>> đĆÒĆÍĆÓÔÉÔĆÓŰ ĐÏ ÓÔÒÏËĆ, ÉÓĐÏÌŰÚŐŃ C-f É ĐÏÔÏÍ ĐÏÄÎÉÍÉÔĆÓŰ ŚŚĆÒÈ Ó ĐÏÍÏĘŰÀ + C-p. đÏÓÍÏÔÒÉÔĆ, ËÁË ÉÚÍĆÎÉÌÏÓŰ ĐÏÌÏÖĆÎÉĆ ËŐÒÓÏÒÁ ĐÒÉ ÎÁÖÁÔÉÉ ó-Ò, ĆÓÌÉ ÏÎ + ÎÁÈÏÄÉÌÓŃ Ś ÓĆÒĆÄÉÎĆ ÓÔÒÏËÉ. + +ëÁÖÄÁŃ ÓÔÒÏËÁ ÔĆËÓÔÁ ÚÁŚĆÒÛÁĆÔÓŃ ÓÉÍŚÏÌÏÍ îÏŚÁŃóÔÒÏËÁ (Newline character), +ËÏÔÏÒÙÊ ÏÔÄĆÌŃĆÔ ĆĆ ÏÔ ÓÌĆÄŐÀĘĆÊ ÓÔÒÏËÉ. đÏÓÌĆÄÎŃŃ ÓÔÒÏËÁ Ś ŚÁÛĆÍ ÆÁÊÌĆ +ÄÏÌÖÎÁ ÂÙ ÔÏÖĆ ÚÁŚĆÒÛÁÔŰÓŃ ÓÉÍŚÏÌÏÍ îÏŚÁŃóÔÒÏËÁ (ÎÏ Emacs ÎĆ ÔÒĆÂŐĆÔ ÜÔÏÇÏ). + +>> đÏĐÒÏÂŐÊÔĆ ÉÓĐÏÌŰÚÏŚÁÔŰ C-b Ś ÎÁȚÁÌĆ ÓÔÒÏËÉ. ëŐÒÓÏÒ ÄÏÌÖĆÎ ĐĆÒĆÍĆÓÔÉÔŰÓŃ ÎÁ + ËÏÎĆĂ ĐÒĆÄÙÄŐĘĆÊ ÓÔÒÏËÉ. üÔÏ ĐÒÏÉÓÈÏÄÉÔ ĐÏÔÏÍŐ, ȚÔÏ ÏÎ ÄŚÉÖĆÔÓŃ ÎÁÚÁÄ ȚĆÒĆÚ + ÓÉÍŚÏÌ îÏŚÁŃóÔÒÏËÁ. + +C-f ÍÏÖĆÔ ĐĆÒĆÍĆĘÁÔŰ ËŐÒÓÏÒ ȚĆÒĆÚ îÏŚŐÀóÔÒÏËŐ ÔÁË ÖĆ, ËÁË É C-b. + +>> đÏĐÒÏÂŐÊÔĆ ÎĆÓËÏÌŰËÏ ÒÁÚ ĐÒÉÍĆÎÉÔŰ C-b, ÔÁË ȚÔÏÂÙ śÙ ŐŚÉÄĆÌÉ, ËÁË ÄŚÉÖĆÔÓŃ + ËŐÒÓÏÒ. + äÁÌĆĆ ÉÓĐÏÌŰÚŐÊÔĆ C-f ȚÔÏÂÙ ŚĆÒÎŐÔŰÓŃ ÎÁ ËÏÎĆĂ ÓÔÒÏËÉ. + îÁÖÍÉÔĆ C-f ĆĘĆ ÒÁÚ, ȚÔÏÂÙ ĐĆÒĆÊÔÉ Ë ÎÁȚÁÌŐ ÓÌĆÄŐÀĘĆÊ ÓÔÒÏËÉ. + +ëÏÇÄÁ ŚÙ ĐĆÒĆÍĆĘÁĆÔĆÓŰ ÚÁ ŚĆÒÈÎÉÊ ÉÌÉ ÎÉÖÎÉÊ ËÒÁÊ ÜËÒÁÎÁ, ÔĆËÓÔ, ÎÁÈÏÄŃĘÉÊÓŃ +ÚÁ ÜËÒÁÎÏÍ, ÓÄŚÉÇÁĆÔÓŃ ŚÎŐÔÒŰ ÜËÒÁÎÁ. üÔÏ ÎÁÚÙŚÁĆÔÓŃ "ÓËÒÏÌÌÉÎÇ". óËÒÏÌÌÉÎÇ +ĐÏÚŚÏÌŃĆÔ Emacs`Ő ĐĆÒĆÍĆĘÁÔŰ ËŐÒÓÏÒ Ś ÎŐÖÎÏĆ ÍĆÓÔÏ ÔĆËÓÔÁ ÂĆÚ ĐĆÒĆÍĆĘĆÎÉŃ +ĆÇÏ ÚÁ ĐÒĆÄĆÌÙ ÜËÒÁÎÁ. + +>> đÏĐÒÏÂŐÊÔĆ ĐĆÒĆÍĆÓÔÉÔŰ ËŐÒÓÏÒ ÚÁ ÎÉÖÎÀÀ ÇÒÁÎÉĂŐ ÜËÒÁÎÁ, ÉÓĐÏÌŰÚŐŃ C-n, + É ĐÏÓÍÏÔÒÉÔĆ, ȚÔÏ ÉÚÍĆÎÉÔÓŃ. + +ćÓÌÉ ĐÏÓÉÍŚÏÌŰÎÏĆ ĐĆÒĆÍĆĘĆÎÉĆ ÓÌÉÛËÏÍ ÍĆÄÌĆÎÎÏ, śÙ ÍÏÖĆÔĆ ÄŚÉÇÁÔŰÓŃ ĐÏ +ÓÌÏŚÁÍ. M-f (Meta-f) ĐĆÒĆÍĆĘÁĆÔ ŚĐĆÒĆÄ ÎÁ ÓÌÏŚÏ, Á M-b ÎÁÚÁÄ ÎÁ ÓÌÏŚÏ. + +>> îÁÖÍÉÔĆ ÎĆÓËÏÌŰËÏ ÒÁÚ M-f É M-b. + +ćÓÌÉ ËŐÒÓÏÒ ÎÁÈ. Ś ÓĆÒĆÄÉÎĆ ÓÌÏŚÁ, M-f ĐĆÒĆÍĆÓÔÉÔ ĆÇÏ Ś ËÏÎĆĂ ÓÌÏŚÁ. +ćÓÌÉ ËŐÒÓÏÒ ÎÁÈ. ÍĆÖÄŐ ÓÌÏŚÁÍÉ, 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-a É C-e ĐĆÒĆÍĆĘÁĆÔ +ËŐÒÓÏÒ Ś ÎÁȚÁÌÏ É ËÏÎĆĂ ÓÔÒÏËÉ, Á M-a É M-e ĐĆÒĆÍĆĘÁĆÔ ËŐÒÓÏÒ Ś ÎÁȚÁÌÏ É +ËÏÎĆĂ ĐÒĆÄÌÏÖĆÎÉŃ. + +>> đÏĐÒÏÂŐÊÔĆ ÎÁÖÁÔŰ ĐÁÒŐ ÒÁÚ C-a, É ĐÏÔÏÍ ĐÁÒŐ ÒÁÚ C-e. + đÏĐÒÏÂŐÊÔĆ ĐÁÒŐ ÒÁÚ ÎÁÖÁÔŰ M-a, ĐÏÓÌĆ ÜÔÏÇÏ ĐÁÒŐ ÒÁÚ ÎÁÖÁÔŰ M-e. + +đÏÓÍÏÔÒÉÔĆ, ȚÔÏ ĐÏŚÔÏÒ C-a ÎÉȚĆÇÏ ÎĆ ÉÚÍĆÎŃĆÔ, Á ĐÏŚÔÏÒ M-a ĐÒÏÄÏÌÖÁĆÔ ÄŚÉÖĆÎÉĆ +ËŐÒÓÏÒÁ Ë ÓÌĆÄŐÀĘĆÍŐ ĐÒĆÄÌÏÖĆÎÉÀ. üÔÏ ÎĆ ÓÏÈÒÁÎŃĆÔ ÁÎÁÌÏÇÉÀ, ÎÏ ŚÙÇÌŃÄÉÔ +ĆÓÔĆÓÔŚĆÎÎÏ. + +đÏÌÏÖĆÎÉĆ ËŐÒÓÏÒÁ Ś ÔĆËÓÔĆ ÔÁËÖĆ ÎÁÚÙŚÁÀÔ "ÔÏȚËÁ". óËÁÖĆÍ ÉÎÁȚĆ: ËŐÒÓÏÒ +ĐÏËÁÚÙŚÁĆÔ ÍĆÓÔÏ ÎÁ ÜËÒÁÎĆ Ś ËÁËÏÊ ÔÏȚËĆ ÂŐÄĆÔ ÒÁÓĐÏÌÏÖĆÎ ŚŚÏÄÉÍÙÊ ÔĆËÓÔ. + +úÄĆÓŰ ÓÏÂÒÁÎÙ ĐÒÏÓÔÙĆ ËÏÍÁÎÄÙ ĐĆÒĆÍĆĘĆÎÉŃ ËŐÒÓÏÒÁ, ŚËÌÀȚÁŃ ÄŚÉÖĆÎÉĆ ĐÏ ÓÌÏŚÁÍ +É ĐÒĆÄÌÏÖĆÎÉŃÍ: + + C-f îÁ ÓÉÍŚÏÌ ŚĐĆÒĆÄ + C-b îÁ ÓÉÍŚÏÌ ÎÁÚÁÄ + + M-f îÁ ÓÌÏŚÏ ŚĐĆÒĆÄ + M-b îÁ ÓÌÏŚÏ ÎÁÚÁÄ + + C-n îÁ ÓÌĆÄŐÀĘŐÀ ÓÔÒÏËŐ + C-p îÁ ĐÒĆÄÙÄŐĘŐÀ ÓÔÒÏËŐ + + C-a ś ÎÁȚÁÌÏ ÓÔÒÏËÉ + C-e ś ËÏÎĆĂ ÓÔÒÏËÉ + + M-a îÁÚÁÄ, Ś ÎÁȚÁÌÏ ĐÒĆÄÌÏÖĆÎÉŃ + M-e śĐĆÒĆÄ, Ś ËÏÎĆĂ ĐÒĆÄÌÏÖĆÎÉŃ + +>> đÏĐÒÏÂŐÊÔĆ ÓĆÊȚÁÓ ÎÁ ĐÒÁËÔÉËĆ ĐÒÉÍĆÎÉÔŰ ÎĆÓËÏÌŰËÏ ÒÁÚ ŚÓĆ ÜÔÉ ËÏÍÁÎÄÙ. + üÔÏ ÎÁÉÂÏÌĆĆ ÉÓĐÏÌŰÚŐĆÍÙĆ ËÏÍÁÎÄÙ. + +äŚĆ ÄÒŐÇÉĆ ŚÁÖÎÙĆ ËÏÍÁÎÄÙ ÄŚÉÖĆÎÉŃ ËŐÒÓÏÒÁ M-< (Meta Less-then {íĆÎŰÛĆ-țĆÍ}), +ËÏÔÏÒÁŃ ĐĆÒĆÍĆĘÁĆÔ ËŐÒÓÏÒ Ś ÎÁȚÁÌÏ ÔĆËÓÔÁ, É M-> (Meta Greater-than {âÏÌŰÛĆ-țĆÍ}), +ËÏÔÏÒÁŃ ĐĆÒĆÍĆĘÁĆÔ ËŐÒÓÏÒ Ś ËÏÎĆĂ ÔĆËÓÔÁ. + +îÁ ÂÏÌŰÛÉÎÓÔŚĆ ÔĆÒÍÉÎÁÌÏŚ ÓÉÍŚÏÌ "<" ÎÁÈÏÄÉÔÓŃ ÎÁÄ ÔÏȚËÏÊ, É ŚÙ ÄÏÌÖÎÙ +ÉÓĐÏÌŰÚÏŚÁÔŰ ËÌÁŚÉÛŐ Shift ȚÔÏ ÎÁÂÒÁÔŰ ĆÇÏ. îÁ ÜÔÉÈ ÔĆÒÍÉÎÁÌÁÈ ŚÙ ÔÁË ÖĆ +ÄÏÌÖÎÙ ÉÓĐÏÌŰÚÏŚÁÔŰ Shift ȚÔÏ ÎÁÂÒÁÔŰ M-<; âĆÚ ŐÄĆÒÖÁÎÉŃ ËÌÁŚÉÛÉ Shift ŚÙ +ÎÁÂĆÒĆÔĆ M-ÔÏȚËÁ. + +>> óĆÊȚÁÓ ĐÏĐÒÏÂŐÊÔĆ M-<, ȚÔÏ ĐĆÒĆÍĆÓÔÉÔŰÓŃ Ś ÎÁȚÁÌÏ ŐȚĆÂÎÉËÁ. + đÏÔÏÍ ÉÓĐÏÌŰÚŐÊÔĆ C-v ȚÔÏ ŚĆÒÎŐÔŰÓŃ ÎÁÚÁÄ. + +>> óĆÊȚÁÓ ĐÏĐÒÏÂŐÊÔĆ M->, ȚÔÏ ĐĆÒĆÍĆÓÔÉÔŰÓŃ Ë ËÏÎĂŐ ŐȚĆÂÎÉËÁ. + éÓĐÏÌŰÚŐÊÔĆ M-v ȚÔÏ ŚĆÒÎŐÔŰÓŃ ÓÎÏŚÁ. + +ëŐÒÓÏÒ ÍÏÖÎÏ ĐĆÒĆÍĆĘÁÔŰ ÓÔÒĆÌÏȚËÁÍÉ, ĆÓÌÉ śÁÛ ÔĆÒÍÉÎÁÌ ÉÍĆĆÔ ÉÈ. +íÙ ÒĆËÏÍĆÎÄŐĆÍ ŚÙŐȚÉÔŰ C-b, C-f, C-n É C-p ĐÏ ÔÒĆÍ ĐÒÉȚÉÎÁÍ. đĆÒŚÏĆ, ÏÎÉ +ÒÁÂÏÔÁÀÔ ÎÁ ÌÀÂÙÈ ÔĆÒÍÉÎÁÌÁÈ. śÔÏÒÏĆ, ÏÄÎÁÖÄÙ ĐÏÌŐȚÉŚ ĐÒÁËÔÉËŐ ÉÓĐÏÌŰÚÏŚÁÎÉŃ +Emacs, ŚÙ ĐÏÊÍĆÔĆ, ȚÔÏ ÉÓĐÏÌŰÚÏŚÁÔŰ CTRL-ÓÉÍŚÏÌÙ ŐÄÏÂÎĆĆ É ÂÙÓÔÒĆĆ, ȚĆÍ ËÎÏĐËÉ +ÓÏ ÓÔÒĆÌÏȚËÁÍÉ (ĐÏÔÏÍŐ ȚÔÏ ŚÙ ÎĆ ŐÂÉÒÁĆÔĆ ÒŐËÉ Ó ÏÂÙȚÎÏÇÏ ÉÈ ĐÏÌÏÖĆÎÉŃ ĐÒÉ +ĐĆȚÁÔÉ). ôÒĆÔŰĆ, ËÁË ÔÏÌŰËÏ ŚÙ ĐÒÉŚÙËÎÉÔĆ ÉÓĐÏÌŰÚÏŚÁÔŰ CTRL-ÓÉÍŚÏÌÙ, ŚÙ +ÓÍÏÖĆÔĆ ÔÁË ÖĆ ÌĆÇËÏ ŚÙŐȚÉÔŰ É ÉÓĐÏÌŰÚÏŚÁÔŰ ÄÒŐÇÉĆ, ÂÏÌĆĆ ÓĐĆĂÉÁÌŰÎÙĆ +ËÏÍÁÎÄÙ ĐĆÒĆÍĆĘĆÎÉŃ ËŐÒÓÏÒÁ. + +âÏÌŰÛÉÎÓÔŚÏ ËÏÍÁÎÄ Emacs`Á ÄÏĐŐÓËÁÀÔ ĂÉÆÒÏŚÏÊ ÁÒÇŐÍĆÎÔ; ÄÌŃ ÂÏÌŰÛÉÎÓÔŚÁ +ËÏÍÁÎÄ, ÜÔÏ ÓÌŐÖÉÔ ÓȚĆÔȚÉËÏÍ ĐÏŚÔÏÒĆÎÉŃ. țÔÏ ÚÁÄÁÔŰ ÓȚĆÔȚÉË ĐÏŚÔÏÒĆÎÉŃ ÄÌŃ +ËÏÍÁÎÄÙ, ÎÁÖÍÉÔĆ C-u, ĐÏÔÏÍ ȚÉÓÌÏ ĐÏŚÔÏÒĆÎÉÊ, ŐËÁÖÉÔĆ ËÏÍÁÎÄŐ. ćÓÌÉ Ő +ŚÁÓ ĆÓÔŰ ËÌÁŚÉÛÁ META (ÉÌÉ EDIT ÉÌÉ ALT), ĆÓÔŰ ÄÒŐÇÏÊ ÓĐÏÓÏ ÚÁÄÁÔŰ ĂÉÆÒÏŚÏÊ +ÁÒÇŐÍĆÎÔ: ÎÁÂĆÒÉÔĆ ĂÉÆÒÙ, ŐÄĆÒÖÉŚÁŃ ËÎÏĐËŐ META. íÙ ÒĆËÏÍĆÎÄŐĆÍ ÏÓŚÏÉÔŰ +ÉÓĐÏÌŰÚÏŚÁÎÉĆ C-u, Ô.Ë ÜÔÁ ĐÏÓÌĆÄÏŚÁÔĆÌŰÎÏÓÔŰ ËÌÁŚÉÛ ÒÁÂÏÔÁĆÔ ÎÁ ÌÀÂÏÍ ÔĆÒÍÉÎÁÌĆ. + +îÁĐÒÉÍĆÒ, C-u 8 C-f ĐĆÒĆÍĆÓÔÉÔ ËŐÒÓÏÒ ÎÁ ŚÏÓĆÍŰ ÓÉÍŚÏÌÏŚ ŚĐĆÒĆÄ. + +>> đÏĐÒÏÂŐÊÔĆ ÉÓĐÏÌŰÚÏŚÁÔŰ C-n ÉÌÉ C-p Ó ĂÉÆÒÏŚÙÍ ÁÒÇŐÍĆÎÔÏÍ, ȚÔÏÂÙ ĐĆÒĆÍĆÓÔÉÔŰ + ËŐÒÓÏÒ ÎÁ ÓÔÒÏËŐ ÒŃÄÏÍ Ó ÜÔÏÊ ËÏÍÁÎÄÏÊ. + +íÎÏÇÉĆ ËÏÍÁÎÄÙ ÉÓĐÏÌŰÚŐÀÔ ȚÉÓÌÏŚÏÊ ÁÒÇŐÍĆÎÔ ËÁË ÓȚĆÔȚÉË ĐÏŚÔÏÒĆÎÉÊ. îÏ ĆÓÔŰ +ÉÓËÌÀȚĆÎÉŃ. ôÁËÉĆ ÉÓËÌÀȚĆÎÉŃ - C-v É M-v . +đÒÉ ĐÏÌŐȚĆÎÉÉ ȚÉÓÌÏŚÏÇÏ ÁÒÇŐÍĆÎÔÁ, ÏÎÉ ÓËÒÏÌÌÉÒŐÀÔ ÜËÒÁÎ ŚŚĆÒÈ ÉÌÉ ŚÎÉÚ +ÎÁ ŐËÁÚÁÎÎÏĆ ȚÉÓÌÏ ÓÔÒÏË, ŚÍĆÓÔÏ ÔÁËÏÇÏ ÖĆ ȚÉÓÌÁ ÜËÒÁÎÏŚ. îÁĐÒÉÍĆÒ, C-u 4 C-v +ĐÒÏËÒŐÔÉÔ ÜËÒÁÎ ÎÁ 4 ÓÔÒÏËÉ. + +>> óĆÊȚÁÓ ĐÏĐÒÏÂŐÊÔĆ ËÏÍÂÉÎÁĂÉÀ C-u 8 C-v. + +üÔÁ ËÏÍÁÎÄÁ ÄÏÌÖÎÁ ĐÒÏËÒŐÔÉÔŰ ÜËÒÁÎ ÎÁ 8 ÓÔÒÏË ŚŚĆÒÈ. ćÓÌÉ ŚÙ ÈÏÔÉÔĆ +ĐÒÏËÒŐÔÉÔŰ ĆÇÏ ŚÎÉÚ, ÍÏÖĆÔĆ ÚÁÄÁÔŰ ÁÒÇŐÍĆÎÔ ÄÌŃ M-v. + +ćÓÌÉ ŚÙ ÉÓĐÏÌŰÚŐĆÔĆ X Window, ŚĆÒÏŃÔÎÏ ĆÓÔŰ ĐÒŃÍÏŐÇÏÌŰÎÉË ÉÍĆÎŐĆÍÙÊ ĐÏÌÏÓÁ +ĐÒÏËÒŐÔËÉ (scroll bar) Ó ÓĐÒÁŚÏÊ ÓÔÏÒÏÎÙ ÏËÎÁ Emacs. śÙ ÍÏÖĆÔĆ ÓËÒÏÌÌÉÒÏŚÁÔŰ +ÔĆËÓÔ, ÍÁÎÉĐŐÌÉÒŐŃ ÍÙÛŰÀ. + +>> đÏĐÒÏÂŐÊÔĆ ÎÁÖÁÔŰ ÓÒĆÄÎÀÀ ËÎÏĐËŐ ÍÙÛËÉ ŚŚĆÒÈŐ ĐÏÄÓŚĆȚĆÎÎÏÊ ÏÂÌÁÓÔÉ + ŚÎŐÔÒÉ ĐÏÌÏÓÙ ĐÒÏËÒŐÔËÉ. ôĆËÓÔ ÄÏÌÖĆÎ ĐÒÏËÒŐÔÉÔŰÓŃ ÄÏ ĐÏÚÉĂÉÉ, + ÏĐÒĆÄĆÌĆÎÎÏÊ ÔĆÍ, ËÁË ŚÙÓÏËÏ ÉÌÉ ÎÉÚËÏ ŚÙ ÎÁÖÍĆÔĆ. + +>> đĆÒÍĆÓÔÉÔĆ ÍÙÛËŐ Ś ÔÏȚËŐ ĐÏÌÏÓÙ ĐÒÏËÒŐÔËÉ ŚÏÚÌĆ ÔÒĆÔĆÊ ÓÔÒÏËÉ ÓŚĆÒÈŐ + É ÎÁÖÍÉÔĆ ÌĆŚŐÀ ËÎÏĐËŐ ĐÁÒŐ ÒÁÚ. + + +* őđòáśìćîéć ëőòóïòïí îá X-ôćòíéîáìć +------------------------------------ + +ćÓÌÉ Ő ŚÁÓ X-ÔĆÒÍÉÎÁÌ, ŚÁÍ, ŚĆÒÏŃÔÎÏ, ĐÏËÁÖĆÔÓŃ ÂÏÌĆĆ ÌĆÇËÉÍ ÉÓĐÏÌŰÚÏŚÁÔŰ ËÌÁŚÉÛÉ +ÎÁ keypad`Ć ÄÌŃ ŐĐÒÁŚÌĆÎÉŃ ËŐÒÓÏÒÏÍ. óÔÒĆÌËÉ ŚÌĆŚÏ, ŚĐÒÁŚÏ, ŚŚĆÒÈ É ŚÎÉÚ +ĐĆÒĆÄŚÉÇÁÀÔ ËŐÒÓÏÒ Ś ÏÖÉÄÁĆÍÏÍ ÎÁĐÒÁŚÌĆÎÉÉ; ÏÎÉ ÆŐÎËĂÉÏÎÉÒŐÀÔ ÔÏȚÎÏ ËÁË 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. + +śÓĆ ÜÔÉ ËÏÍÁÎÄÙ ÍÏÇŐÔ ĐÏÌŐȚÁÔŰ ĂÉÆÒÏŚÏÊ ÁÒÇŐÍĆÎÔ, ËÁË ÒÁÓÓËÁÚÁÎÏ ŚÙÛĆ. +śÙ ÍÏÖĆÔĆ ÉÓĐÏÌŰÚÏŚÁÔŰ shortcut ÄÌŃ ŚŚÏÄÁ ÜÔÏÇÏ ÁÒÇŐÍĆÎÔÁ: ĐÒÏÓÔÏ ÎÁÖÍÉÔĆ +CONTROL ÉÌÉ META É ÎÁÂĆÒÉÔĆ ȚÉÓÌÏ. îÁĐÒÉÍĆÒ, ÄÌŃ ĐĆÒĆÍĆĘĆÎÉŃ ÎÁ 12 ÓÌÏŚ +ŚĐÒÁŚÏ, ÎÁÂĆÒÉÔĆ C-1 C-2 C-right. úÁĐÏÍÎÉÔĆ ȚÔÏ ÔÁË ÏȚĆÎŰ ÌĆÇËÏ ÎÁÂÉÒÁÔŰ, +ĐÏÔÏÍŐ ȚÔÏ ŚÙ ÎĆ ÏÔĐŐÓËÁĆÔĆ ËÎÏĐËŐ CONTROL ÍĆÖÄŐ ÎÁÖÁÔÉŃÍÉ. + + +* ćóìé EMACS úáśéó +------------------ + +ćÓÌÉ Emacs ĐĆÒĆÓÔÁÌ ÒĆÁÇÉÒÏŚÁÔŰ ÎÁ ŚÁÛÉ ËÏÍÁÎÄÙ, ŚÙ ÍÏÖĆÔĆ ÏÓÔÁÎÏŚÉÔŰ ÜÔÏ +ĐÒÏÓÔÏ ÎÁÖÁŚ C-g. śÙ ÍÏÖĆÔĆ ÉÓĐÏÌŰÚÏŚÁÔŰ C-g ȚÔÏ ÏÓÔÁÎÏŚÉÔŰ ËÏÍÁÎÄŐ ËÏÔÏÒÁŃ +ÓÌÉÛËÏÍ ÄÏÌÇÏ ŚÙĐÏÌÎŃĆÔÓŃ. + +śÙ ÔÁË ÖĆ ÍÏÖĆÔĆ ÉÓĐÏÌŰÚÏŚÁÔŰ C-g ÄÌŃ ÏÔÍĆÎÙ ĂÉÆÒÏŚÏÇÏ ÁÒÇŐÍĆÎÔÁ ÉÌÉ ÎÁȚÁÔÏÊ +ËÏÍÁÎÄÙ ËÏÔÏÒŐÀ ŚÙ ÎĆ ÈÏÔÉÔĆ ÚÁŚĆÒÛÁÔŰ. + +>> îÁÂĆÒÉÔĆ C-u 100 ÄÌŃ ÚÁÄÁÎÉŃ ÁÒÇŐÍĆÎÔÁ 100, ĐÏÔÏÍ ÎÁÖÍÉÔĆ C-g. + ôĆĐĆÒŰ ÎÁÖÍÉÔĆ C-f. ëŐÒÓÏÒ ÄÏÌÖĆÎ ĐĆÒĆÍĆÓÔÉÔŰÓŃ ŚÓĆÇÏ ÎÁ ÏÄÉÎ ÓÉÍŚÏÌ, + ĐÏÔÏÍŐ ȚÔÏ ŚÙ ÏÔÍĆÎÉÌÉ ÁÒÇŐÍĆÎÔ ÎÁÖÁÔÉĆÍ C-g. + +ćÓÌÉ ŚÙ ÎÁÖÁÌÉ ĐÏ ÏÛÉÂËĆ, ŚÙ ÔÁË ÖĆ ÍÏÖĆÔĆ ÉÚÂÁŚÉÔŰÓŃ ÏÔ ÜÔÏÇÏ ÎÁÖÁÔÉĆÍ +C-g. + + +* śùëìàțćîîùć ëïíáîäù (DISABLED COMMANDS) +----------------------------------------- + +îĆËÏÔÏÒÙĆ ËÏÍÁÎÄÙ Emacs "ŚÙËÌÀȚĆÎÙ" ÔÁË ËÁË ÎÁȚÉÎÁÀĘÉĆ ĐÏÌŰÚÏŚÁÔĆÌÉ ÍÏÇŐÔ ÉÈ +ÉÓĐÏÌŰÚÏŚÁÔŰ ÓÌŐȚÁÊÎÏ. + +ćÓÌÉ ŚÙ ÎÁÂÒÁÌÉ ÏÄÎŐ ÉÚ ŚÙËÌÀȚĆÎÎÙÈ ËÏÍÁÎÄ, Emacs ĐÏËÁÖĆÔ ÓÏÏÂĘĆÎÉĆ ÇÏŚÏÒŃĘĆĆ +ËÁËÁŃ ËÏÍÁÎÄÁ ŚÙÚÙŚÁĆÔÓŃ, É ÓĐÒÏÓÉÔ, ÈÏÔÉÔĆ ÌÉ ŚÙ ĐÒÏÄÏÌÖÉÔŰ É ŚÙĐÏÌÎÉÔŰ +ËÏÍÁÎÄŐ. + +ćÓÌÉ ŚÙ ÄĆÊÓÔŚÉÔĆÌŰÎÏ ÈÏÔÉÔĆ ĐÏĐÒÏÂÏŚÁÔŰ ËÏÍÁÎÄŐ, ÎÁÖÍÉÔĆ đÒÏÂĆÌ (Space) Ś +ÏÔŚĆÔ ÎÁ ÜÔÏÔ ŚÏĐÒÏÓ. ïÂÙȚÎÏ, ĆÓÌÉ ŚÙ ÎĆ ÈÏÔÉÔĆ ŚÙĐÏÌÎŃÔŰ ŚÙËÌÀȚĆÎÎŐÀ +ËÏÍÁÎÄŐ, ÏÔŚĆȚÁÊÔĆ ÎÁ ŚÏĐÒÏÓ "n". + +>> îÁÖÍÉÔĆ `C-x n p' (ŚÙËÌÀȚĆÎÎÁŃ ËÏÍÁÎÄÁ), ĐÏÔÏÍ ÏÔŚĆÔŰÔĆ "n" ÎÁ ŚÏĐÒÏÓ. + + +* ïëîá +------ + +Emacs ÍÏÖĆÔ ÉÍĆÔŰ ÎĆÓËÏÌŰËÏ ÏËÏÎ, ËÁÖÄÏĆ ÏÔÏÂÒÁÖÁĆÔ ÓŚÏÊ ÔĆËÓÔ. +úÁÍĆÔŰÔĆ, "ÏËÎÏ" ÉÓĐÏÌŰÚŐĆÍÏĆ Emacs`ÏÍ ÜÔÏ ÎĆ ÏÔÄĆÌŰÎÙĆ ĐĆÒĆËÒÙŚÁÀĘĆĆÓŃ +ÏËÎÁ Ś ÏËÏÎÎÏÊ ÓÉÓÔĆÍÙ, ÜÔÏ ÏÔÄĆÌŰÎÙĆ ÏÂÌÁÓÔÉ Ś ÏÄÎÏÍ ÏËÎĆ X window. +(Emacs ÔÁË ÖĆ ÍÏÖĆÔ ÉÍĆÔŰ ÎĆÓËÏÌŰËÏ ÏËÏÎ X windows, ÉÌÉ "ËÁÄÒÏŚ" ("frames") +Ś ÔĆÒÍÉÎÏÌÏÇÉÉ Emacs. üÔÏ ÂŐÄĆÔ ÏĐÉÓÁÎÏ ĐÏÚÖĆ.) + +îÁ ÜÔÏÊ ÓÔÁÄÉÉ ÌŐȚÛĆ ÎĆ ĐÏÇÒŐÖÁÔŰÓŃ Ś ÔĆÈÎÏÌÏÇÉÀ ÉÓĐÏÌŰÚÏŚÁÎÉŃ ÍÎÏÖĆÓÔŚÁ +ÏËÏÎ. îÏ ŚÁÍ ÎŐÖÎÏ ÚÎÁÔŰ, ËÁË ÉÚÂÁŚÌŃÔŰÓŃ ÏÔ ÌÉÛÎÉÈ ÏËÏÎ, ËÏÔÏÒÙĆ ÍÏÇŐÔ +ĐÏŃŚÌŃÔŰÓŃ ȚÔÏ ÏÔÏÂÒÁÚÉÔŰ ĐÏÍÏĘŰ, ÉÌÉ ŚÙŚÏÄ ÏĐÒĆÄĆÌĆÎÎÙÈ ËÏÍÁÎÄ. üÔÏ +ĐÒÏÓÔÏ: + + C-x 1 ïÄÎÏ ÏËÎÏ. (ÚÁËÒÙÔŰ ŚÓĆ ÄÒŐÇÉĆ ÏËÎÁ). + +üÔÏ Control-x ÓÏ ÓÌĆÄŐÀĘĆÊ ĂÉÆÒÏÊ 1. C-x 1 ÒÁÚŚĆÒÎĆÔ ÏËÎÏ ËÏÔÏÒÏĆ ÓÏÄĆÒÖÉÔ +ËŐÒÓÏÒ, ÔÁË, ȚÔÏ ÏÎÏ ÚÁÎŃÌÏ ŚĆÓŰ ÜËÒÁÎ. üÔÏ ŐÄÁÌÉÔ ŚÓĆ ÄÒŐÇÉĆ ÏËÎÁ. + +>> đĆÒĆÍĆÓÔÉÔĆ ËŐÒÓÏÒ ÎÁ ÜÔŐ ÓÔÒÏËŐ É ÎÁÖÍÉÔĆ C-u 0 C-l. + +(úÁĐÏÍÎÉÔĆ ȚÔÏ C-l ĐĆÒĆÒÉÓÏŚÙŚÁĆÔ ÜËÒÁÎ. ćÓÌÉ ŚÙ ÚÁÄÁĆÔĆ ĂÉÆÒÏŚÏÊ +ÁÒÇŐÍĆÎÔ ÄÌŃ ÜÔÏÊ ËÏÍÁÎÄÙ, ÜÔÏ ÚÎÁȚÉÔ "ĐĆÒĆÒÉÓÏŚÁÔŰ ÜËÒÁÎ É ĐÏÍĆÓÔÉÔŰ +ÔĆËŐĘŐÀ ÓÔÒÏËŐ ÎÁ ÓÔÏÌŰËÏ-ÔÏ ÓÔÒÏË ÏÔ ÎÁȚÁÌÁ ÜËÒÁÎÁ." ôÁË C-u 0 C-l +ÏÚÎÁȚÁĆÔ "ĐĆÒĆÒÉÓÏŚÁÔŰ ÜËÒÁÎ, ĐÏÍĆÓÔÉÔŰ ÔĆËŐĘŐÀ ÓÔÒÏËŐ Ś ÎÁȚÁÌĆ.") + +>> îÁÂĆÒÉÔĆ Control-x 2 + đÏÓÍÏÔÒÉÔĆ, ËÁË ÔĆËŐĘĆĆ ÏËÎÏ ÓÏÖÍĆÔÓŃ, ËÏÇÄÁ ÎÏŚÏĆ ĐÏŃŚÉÔÓŃ É + ÏÔÏÂÒÁÚÉÔ ÓÏÄĆÒÖÉÍÏĆ ÜÔÏÇÏ ÂŐÆĆÒÁ. + +>> îÁÂĆÒÉÔĆ C-x 1 É ĐÏÓÍÏÔÒÉÔĆ ËÁË ÏËÎÏ ÉÓȚĆÚÎĆÔ. + + +* śóôáśëá é őäáìćîéć +-------------------- + +ćÓÌÉ ŚÙ ÈÏÔÉÔĆ ŚÓÔÁŚÉÔŰ ÔĆËÓÔ, ĐÒÏÓÔÏ ÎÁÂĆÒÉÔĆ ÔĆËÓÔ. óÉÍŚÏÌÙ, ËÏÔÏÒÙĆ ŚÙ +ÍÏÖĆÔĆ ŚÉÄĆÔŰ, ÔÁËÉĆ ËÁË A, 7, *, É ĐÒ. ĐÏÎÉÍÁÀÔÓŃ Emacs`ÏÍ ËÁË ÔĆËÓÔ É +ŚÓÔÁŚÌŃÀÔÓŃ ÎĆÍĆÄÌĆÎÎÏ. îÁÖÍÉÔĆ (ËÎÏĐËÁ ĐĆÒĆŚÏÄÁ ËÁÒĆÔËÉ) ÄÌŃ +ŚÓÔÁŚËÉ ÓÉÍŚÏÌÁ îÏŚÁŃóÔÒÏËÁ. + +śÙ ÍÏÖĆÔĆ ŐÄÁÌÉÔŰ ĐÏÓÌĆÄÎÉÊ ÎÁÂÒÁÎÎÙÊ ÓÉÍŚÏÌ ÎÁÖÉÍÁŃ . +ëÌÁŚÉÛÁ ÎÁ ËÌÁŚÉÁÔŐÒĆ ÍÏÖĆÔ ÂÙÔŰ ÏÂÏÚÎÁȚĆÎÁ ËÁË "Del". +ś ÎĆËÏÔÏÒÙÈ ÓÌŐȚÁŃÈ, ËÌÁŚÉÛĆ "Backspace" ÒÁÂÏÔÁĆÔ ËÁË , +ÎÏ ÎĆ ŚÓĆÇÄÁ! + +ś ÏÓÎÏŚÎÏÍ, ŐÄÁÌŃĆÔ ÓÉÍŚÏÌ ÎĆĐÏÓÒĆÄÓÔŚĆÎÎÏ ĐĆÒĆÄ ÔĆËŐĘĆÊ ĐÏÚÉĂÉĆÊ +ËŐÒÓÏÒÁ. + +>> đÏĐÒÏÂŐÊÔĆ ÜÔÏ ÓĆÊȚÁÓ -- ÎÁÂĆÒÉÔĆ ÎĆÓËÏÌŰËÏ ÓÉÍŚÏÌÏŚ, ĐÏÔÏÍ ŐÄÁÌÉÔĆ ÉÈ + ÎÁÖÉÍÁŃ ÎĆÓËÏÌŰËÏ ÒÁÚ. îĆ ŚÏÌÎŐÊÔĆÓŰ Ï ÉÚÍĆÎĆÎÉŃÈ ÜÔÏÇÏ ÆÁÊÌÁ; + ŚÙ ÎĆ ÉÚÍĆÎŃĆÔĆ ÇÌÁŚÎÙÊ ŐȚĆÂÎÉË. üÔÏ ŚÁÛÁ ÌÉȚÎÁŃ ËÏĐÉŃ ŐȚĆÂÎÉËÁ. + +ëÏÇÄÁ ÓÔÒÏËÁ ÔĆËÓÔÁ ÓÔÁÎÏŚÉÔÓŃ ÓÌÉÛËÏÍ ÂÏÌŰÛÏÊ ÄÌŃ ÓÔÒÏËÉ ÜËÒÁÎÁ, ÓÔÒÏËÁ +ÔĆËÓÔÁ "ĐÒÏÄÏÌÖÁĆÔÓŃ" ÎÁ ÓÌĆÄŐÀĘĆÊ ÓÔÒÏËĆ ÜËÒÁÎÁ. óÉÍŚÏÌ "ÏÂÒÁÔÎÏĆ ÄĆÌĆÎÉĆ" +("\") Ó ĐÒÁŚÏÊ ÇÒÁÎÉĂÙ ĐÏËÁÚÙŚÁĆÔ, ȚÔÏ ÓÔÒÏËÁ ÂŐÄĆÔ ĐÒÏÄÏÌÖĆÎÁ. + +>> śÓÔÁŚÌŃÊÔĆ ÔĆËÓÔ, ĐÏËÁ ÎĆ ÄÏÓÔÉÇÎÉÔĆ ĐÒÁŚÏÊ ÇÒÁÎÉĂÙ, É ĐÒÏÄÏÌÖÁÊÔĆ ŚÓÔÁŚËŐ. + śÙ ŐŚÉÄÉÔĆ, ËÁË ĐÏŃŚÉÔÓŃ ÓÉÍŚÏÌ ĐÒÏÄÏÌÖĆÎÉŃ ÓÔÒÏËÉ. + +>> éÓĐÏÌŰÚŐÊÔĆ ÄÌŃ ŐÄÁÌĆÎÉŃ ÔĆËÓÔÁ, ĐÏËÁ ÓÔÒÏËÁ ÎĆ ĐÏÍĆÓÔÉÔÓŃ Ś + ÜËÒÁÎ ÓÎÏŚÁ. óÉÍŚÏÌ ĐÒÏÄÏÌÖĆÎÉŃ ÓÔÒÏËÉ ÉÓȚĆÚÎĆÔ. + +íÏÖÎÏ ŐÄÁÌŃÔŰ ÓÉÍŚÏÌ îÏŚÁŃóÔÒÏËÁ ÔÁË ÖĆ, ËÁË É ÌÀÂÏÊ ÄÒŐÇÏÊ. őÄÁÌĆÎÉĆ ÓÉÍŚÏÌÁ +îÏŚÁŃóÔÒÏËÁ ÍĆÖÄŐ ÄŚŐÍŃ ÓÔÒÏËÁÍÉ ĐÒÉŚĆÄĆÔ Ë ÓËÌĆÊËĆ ÉÈ Ś ÏÄÎŐ. ćÓÌÉ +ÒĆÚŐÌŰÔÉÒŐÀĘÁŃ ÓÔÒÏËÁ ÓÌÉÛËÏÍ ÄÌÉÎÎÁŃ, ȚÔÏÂÙ ŚÍĆÓÔÉÔŰÓŃ Ś ÜËÒÁÎ, ÏÎÁ ÂŐÄĆÔ +ÏÔÏÂÒÁÖĆÎÁ ËÁË ĐÒÏÄÏÌÖĆÎÎÁŃ ÓÔÒÏËÁ. + +>> đĆÒĆÍĆÓÔÉÔĆ ËŐÒÓÏÒ Ś ÎÁȚÁÌÏ ÓÔÒÏËÉ É ÎÁÖÍÉÔĆ . üÔÏ ÓÏĆÄÉÎÉÔ + ÔĆËŐĘŐÀ ÓÔÒÏËŐ É ĐÒĆÄÙÄŐĘŐÀ. + +>> îÁÖÍÉÔĆ ÄÌŃ ŚÓÔÁŚËÉ ÓÉÍŚÏÌÁ îÏŚÁŃóÔÒÏËÁ ÓÎÏŚÁ, ŚÍĆÓÔÏ + ŐÄÁÌĆÎÎÏÇÏ ŚÁÍÉ. + +đÏÍÎÉÔĆ, ȚÔÏ ÍÎÏÇÉĆ ËÏÍÁÎÄÙ Emacs ÍÏÇŐÔ ĐÏÌŐȚÁÔŰ ÓȚĆÔȚÉË ĐÏŚÔÏÒĆÎÉŃ; +ĐÒÏÓÔÙĆ ÓÉÍŚÏÌÙ ÎĆ ÉÓËÌÀȚĆÎÉĆ. îĆÂĆÒÁÊÔĆ ĐÒÏÓÔÙĆ ÓÉÍŚÏÌÙ ŚÓÔÁŚÌŃŃ +ÉÈ ĐÏ ÎĆÓËÏÌŰËÏ ÚÁ ÏÄÉÎ ÒÁÚ. + +>> đÏĐÒÏÂŐÊÔĆ ÜÔÏ -- ÎÁÂĆÒÉÔĆ C-u 8 * ÄÌŃ ŚÓÔÁŚËÉ ********. + +ôĆĐĆÒŰ ŚÙ ÎÁŐȚÉÌÉÓŰ ÏÓÎÏŚÎÏÍŐ ÓĐÏÓÏÂŐ ÎÁÂÒÉÔŰ ȚÔÏ-ÎÉÂŐÄŰ Ś Emacs É +ÉÓĐÒÁŚÌŃÔŰ ÏÛÉÂËÉ. ôÁË ÖĆ ŚÙ ÍÏÖĆÔĆ ŐÄÁÌŃÔŰ ÓÌÏŚÁ É ÓÔÒÏËÉ. +úÄĆÓŰ ÓÏÂÒÁÎÙ ÏĐĆÒÁĂÉÉ ŐÄÁÌĆÎÉŃ: + + ŐÄÁÌÉÔŰ ÓÉÍŚÏÌ ĐĆÒĆÄ ËŐÒÓÏÒÏÍ + C-d ŐÄÁÌÉÔŰ ÓÉÍŚÏÌ ÓÌĆÄŐÀĘÉÊ ÚÁ (ÎÁÄ) ËŐÒÓÏÒÏÍ + + M- őÂÉÔŰ ÓÔÒÏËŐ ÎĆĐÏÓÒĆÄÓÔŚĆÎÎÏ ĐĆÒĆÄ ËŐÒÓÏÒÏÍ + M-d őÂÉÔŰ ÓÌÏŚÏ ÓÌĆÄŐÀĘĆĆ ÚÁ ËŐÒÓÏÒÏÍ + + C-k őÂÉÔŰ ŚÓĆ ÏÔ ËŐÒÓÏÒÁ ÄÏ ËÏÎĂÁ ÓÔÒÏËÉ + M-k őÂÉÔŰ ŚÓĆ ÄÏ ËÏÎĂÁ ĐÒĆÄÌÏÖĆÎÉŃ + +úÁÍĆÔŰÔĆ, ȚÔÏ É C-d ĐÒÏÔÉŚ M- É M-d ÒÁÓÛÉÒŃÀÔ ĐÁÒÁÌÌĆÌŰ +ÎÁȚÁÔŐÀ, C-f É M-f (ÄÁ, ÜÔÏ ÎĆ ÒĆÁÌŰÎÙÊ control-ÓÉÍŚÏÌ, ÎÏ +ÎĆ ÎŐÖÎÏ ŚÏÌÎÏŚÁÔŰÓŃ Ï ÜÔÏÍ). C-k É M-k ËÁË É C-e É M-e, ĐÒÏŚÏÄŃÔ +ĐÁÒÁÌÌĆÌŰ ÍĆÖÄŐ ÓÔÒÏËÁÍÉ É ĐÒĆÄÌÏÖĆÎÉŃÍÉ. + +ëÏÇÄÁ ŚÙ ŐÄÁÌŃĆÔĆ ÂÏÌĆĆ ȚĆÍ ÏÄÉÎ ÓÉÍŚÏÌ ÓÒÁÚŐ, Emacs ÓÏÈÒÁÎŃĆÔ ŐÄÁÌĆÎÎÙÊ +ÔĆËÓÔ, ȚÔÏÂÙ ŚÙ ÍÏÇÌÉ ŚĆÒÎŐÔŰ ĆÇÏ ÏÂÒÁÔÎÏ. śÏÚŚÒÁÔ ÔĆËÓÔÁ, ŐÄÁÌĆÎÎÏÇÏ ÒÁÎĆĆ, +ÎÁÚÙŚÁÀÔ "ŚÏÓÓÔÁÎÏŚÌĆÎÉĆ" ("yanking"). śÙ ÍÏÖĆÔĆ ŚÏÓÓÔÁÎÏŚÉÔŰ ŐÄÁÌĆÎÎÙÊ +ÔĆËÓÔ Ś ÔÏÍ ÖĆ ÍĆÓÔĆ, ÉÌÉ Ś ÌÀÂÏÍ ÄÒŐÇÏÍ. śÙ ÍÏÖĆÔĆ ŚÏÓÓÔÁÎÏŚÉÔŰ +ÔĆËÓÔ ÎĆÓËÏÌŰËÏ ÒÁÚ É ĐÏÌŐȚÉÔŰ ÍÎÏÇÏ ËÏĐÉÊ. ëÏÍÁÎÄÁ "ŚÏÓÓÔÁÎÏŚÉÔŰ" - C-y. + +úÁÍĆÔŰÔĆ, ȚÔÏ ĆÓÔŰ ÒÁÚÎÉĂÁ ÍĆÖÄŐ "ŐÄÁÌÉÔŰ" É "ŐÂÉÔŰ" ȚÔÏ-ÎÉÂŐÄŰ. "őÂÉÔÏĆ" +ÍÏÖĆÔ ÂÙÔŰ ŚÏÓÓÔÁÎÏŚÌĆÎÏ ÎÁÚÁÄ, Á ŐÄÁÌĆÎÎÏĆ - ÎĆÔ. ïÂÙȚÎÏ, ËÏÍÁÎÄÙ, ËÏÔÏÒÙĆ +ÍÏÇŐÔ ŐÂÉÒÁÔŰ ÍÎÏÇÏ ÔĆËÓÔÁ, ÓÏÈÒÁÎŃÀÔ ĆÇÏ, Á ËÏÍÁÎÄÙ, ŐÄÁÌŃÀĘÉĆ ÏÄÉÎ ÓÉÍŚÏÌ +ÉÌÉ ĐÒÏÓÔÏ ĐŐÓÔŐÀ ÓÔÒÏËŐ, ÎĆ ÓÏÈÒÁÎŃÀÔ ŐÄÁÌĆÎÎÏĆ. + +>> đĆÒĆÍĆÓÔÉÔĆ ËŐÒÓÏÒ ÎÁ ÎÁȚÁÌÏ ÎĆĐŐÓÔÏÊ ÓÔÒÏËÉ. + ôĆĐĆÒŰ ÎÁÖÍÉÔĆ C-k ȚÔÏ ŐÂÉÔŰ ÔĆËÓÔ Ś ÜÔÏÊ ÓÔÒÏËĆ. + +>> îÁÖÍÉÔĆ C-k ĆĘĆ ÒÁÚ. śÙ ŚÉÄÉÔĆ, ȚÔÏ ÜÔÏ ŐÂßĆÔ ÓÉÍŚÏÌ îÏŚÁŃóÔÒÏËÁ + ÓÌĆÄŐÀĘÉÊ ÚÁ ÜÔÏÊ ÓÔÒÏËÏÊ. + +úÁÍĆÔŰÔĆ ȚÔÏ ĐĆÒŚÏĆ C-k ŐÂÉŚÁĆÔ ÓÏÄĆÒÖÉÍÏĆ ÓÔÒÏËÉ, Á ŚÔÏÒÏĆ C-k ŐÂÉŚÁĆÔ +ÓÁÍŐ ÓÔÒÏËŐ É ĐÏÄÎÉÍÁĆÔ ÄÒŐÇÉĆ ÓÔÒÏËÉ ŚŚĆÒÈ. C-k ÏÂÒÁÂÁÔÙŚÁĆÔ ȚÉÓÌÏŚÏÊ +ÁÒÇŐÍĆÎÔ ÓĐĆĂÉÁÌŰÎÙÍ ÏÂÒÁÚÏÍ: ŐÂÉŚÁĆÔ ÍÎÏÇÏ ÓÔÒÏË _é_ ÉÈ ÓÏÄĆÒÖÉÍÏĆ. +ÜÔÏ ÎĆ ĐÒÏÓÔÏ ĐÏŚÔÏÒĆÎÉĆ. C-u 2 C-k ŐÂ`ĆÔ ÄŚĆ ÓÔÒÏÉ É ÚÁŚĆÒÛÁÀĘÉĆ ÉÈ +ÓÉÍŚÏÌÙ îÏŚÁŃóÔÒÏËÁ; śŚÏÄ C-k ÄŚÁÖÄÙ ÎĆ ÓÄĆÌÁĆÔ ÜÔÏÇÏ. + +äÌŃ ÔÏÇÏ ȚÔÏ ŚĆÒÎŐÔŰ ĐÏÓÌĆÄÎÉÊ ŐÂÉÔÙÊ ÔĆËÓÔ Ś ÍĆÓÔÏ ÒÁÓĐÏÌÏÖĆÎÉĆ ËŐÒÓÏÒÁ +ÎÁÂĆÒÉÔĆ C-y. + +>> đÏĐÒÏÂŐÊÔĆ ÜÔÏ; ÎÁÂĆÒÉÔĆ C-y ȚÔÏ ŚĆÒÎŐÔŰ ÔĆËÓÔ ÎÁÚÁÄ. + +äŐÍÁÊÔĆ Ï C-y ËÁË Ï ÓĐÏÓÏÂĆ ŚĆÒÎŐÔŰ ȚÔÏ-ÔÏ ÎÁÚÁÄ, ȚÔÏ ŚÙ ĐÏÔĆÒŃÌÉ. +đÏÍÎÉÔĆ, ĆÓÌÉ ŚÙ ÉÓĐÏÌŰÚÏŚÁÌÉ ÎĆÓËÏÌŰËÏ C-k' Ś ÓÔÒÏËĆ, ŚÓĆ ŐÂÉÔÙĆ ÓÔÒÏËÉ +ÂŐÄŐÔ ÓÏÈÒÁÎĆÎÙ ŚÍĆÓÔĆ, ÔÁË, ȚÔÏ C-y ŚÏÓÓÔÁÎÏŚÉÔ ÉÈ ŚÍĆÓÔĆ. + +>> đÏĐÒÏÂŐÊÔĆ ÜÔÏ ÓĆÊȚÁÓ, ÎÁÖÍÉÔĆ C-k ÎĆÓËÏÌŰËÏ ÒÁÚ. + +ôĆĐĆÒŰ ŚĆÒÎĆÍ ÜÔÏÔ ŐÂÉÔÙÊ ÔĆËÓÔ: + +>> îÁÖÍÉÔĆ C-y. ôĆĐĆÒŰ ĐĆÒĆÍĆÓÔÉÔĆ ËŐÒÓÏÒ ÎÁ ÎĆÓËÏÌŰËÏ ÓÔÒÏË ŚÎÉÚ, É ÓÎÏŚÁ + ÎÁÖÍÉÔĆ C-y. óĆÊȚÁÓ ŚÙ ŚÉÄÉÔĆ ËÁË ÍÏÖÎÏ ÓËÏĐÉÒÏŚÁÔŰ ÎĆËÏÔÏÒÙÊ ÔĆËÓÔ. + +țÔÏ ÄĆÌÁÔŰ ĆÓÌÉ ĆÓÔŰ ÎĆËÏÔÏÒÙÊ ÔĆËÓÔ, ËÏÔÏÒÙÊ ŚÙ ÈÏÔÉÔĆ ŚĆÒÎŐÔŰ ÎÁÚÁÄ É +ĐÏÔÏÍ ŐÂÉÔŰ ȚÔÏ-ÔÏ ĆĘĆ? C-y ŚĆÒÎĆÔ ÎĆ ÂÏÌĆĆ ȚĆÍ ĐÏÓÌĆÄÎÉÊ ŐÄÁÌĆÎÎÙÊ ÔĆËÓÔ. +îÏ ĐÒĆÄÙÄŐĘÉÊ ÔĆËÓÔ ÎĆ ÂŐÄĆÔ ĐÏÔĆÒŃÎ. śÙ ÓÍÏÖĆÔĆ ĆÇÏ ŚĆÒÎŐÔŰ ÎÁÚÁÄ ÉÓĐÏÌŰÚŐŃ +ËÏÍÁÎÄŐ M-y. đÏÓÌĆ ÔÏÇÏ ËÁË ŚÙ ŚĆÒÎŐÌÉ ĐÏÓÌĆÄÎÉÊ ŐÄÁÌĆÎÎÙÊ ÔĆËÓÔ, ÎÁÖÍÉÔĆ +M-y, É ÚÁÍĆÎÉÔĆ ÜÔÏÔ ŚÏÓÓÔÁÎÏŚÌĆÎÎÙÊ ÔĆËÓÔ ÔĆÍ, ËÏÔÏÒÙÊ ÂÙÌ ŐÂÉÔ ÒÁÎĆĆ. +îÁÖÁÔÉĆ M-y ÓÎÏŚÁ É ÓÎÏŚÁ ÂŐÄĆÔ ŚÏÚŚÒÁĘÁÔŰ ŚÓĆ ÒÁÎĆĆ É ÒÁÎĆĆ ŐÂÉÔÙÊ ÔĆËÓÔ. +ëÏÇÄÁ ŚÙ ÄÏÓÔÉÇÎÉÔĆ ÉÓËÏÍÏÇÏ ÔĆËÓÔÁ, ŚÁÍ ÎĆ ÎŐÖÎÏ ÄĆÌÁÔŰ ÎÉȚĆÇÏ ÂÏÌĆĆ ȚÔÏ +ÓÏÈÒÁÎÉÔŰ ĆÇÏ. đÒÏÓÔÏ ĐÒÏÄÏÌÖÁÊÔĆ ÒĆÄÁËÔÉÒÏŚÁÎÉĆ, ÏÓÔÁŚÉŚ ŚÏÓÓÔÁÎÏŚÌĆÎÎÙÊ +ÔĆËÓÔ ÔÁÍ, ÇÄĆ ÏÎ ĆÓÔŰ. + +îÁÖÉÍÁŃ M-y ÄÏÓÔÁÔÏȚÎÏĆ ȚÉÓÌÏ ÒÁÚ, ŚÙ ÍÏÖĆÔĆ ŚĆÒÎŐÔŰÓŃ Ś ÎÁȚÁÌŰÎŐÀ ÔÏȚËŐ +(ÎÁÉÂÏÌĆĆ ÒÁÎÎĆĆ ŐÄÁÌĆÎÉĆ). + +>> őÂĆÊÔĆ ÓÔÒÏËŐ, ĐÏËÒŐÔÉÔĆÓŰ ËŐÒÓÏÒÏÍ ŚÏËÒŐÇ, ĐÏÔÏÍ ŐÄÁÌÉÔĆ ĆĘĆ ÏÄÎŐ ÓÔÒÏËŐ. + úÁÔĆÍ ÉÓĐÏÌŰÚŐÊÔĆ C-y ÄÌŃ ŚÏÓÓÔÁÎÏŚÌĆÎÉŃ ŚÔÏÒÏÊ ŐÂÉÔÏÊ ÓÔÒÏËÉ. + úÁÔĆÍ ÉÓĐÏÌŰÚŐÊÔĆ M-y É ÏÎÁ ÂŐÄĆÔ ÚÁÍĆÎĆÎÁ ĐĆÒŚÏÊ ŐÂÉÔÏÊ ÓÔÒÏËÏÊ. + îÁÖÍÉÔĆ ĆĘĆ ÎĆÓËÏÌŰËÏ ÒÁÚ M-y ȚÔÏ ՌÉÄĆÔŰ ȚÔÏ ĐÏÌŐȚÉÔÓŃ. đÒÏÄÏÌÖÁÊÔĆ + ÄĆÌÁÔŰ ÜÔÏ ĐÏËÁ ŚÔÏÒÁŃ ŐÂÉÔÁŃ ÓÔÒÏËÁ ÎĆ ŚĆÒÎĆÔÓŃ, É ĆĘĆ ȚŐÔŰ-ȚŐÔŰ. + ćÓÌÉ ŚÁÍ ÈÏȚĆÔÓŃ, ŚÙ ÍÏÖĆÔĆ ÚÁÄÁŚÁÔŰ ÄÌŃ M-y ĐÏÌÏÖÉÔĆÌŰÎÙĆ É ÏÔÒÉĂÁÔĆÌŰÎÙ + ÁÒÇŐÍĆÎÔÙ. + + +* ïôíćîá (UNDO) +--------------- + +ćÓÌÉ ŚÙ ÓÄĆÌÁÌÉ ÉÚÍĆÎĆÎÉŃ Ś ÔĆËÓÔĆ, É ÒĆÛÉÌÉ, ȚÔÏ ÏÛÉÂÌÉÓŰ, ÍÏÖĆÔĆ +ÏÔÍĆÎÉÔŰ ÉÚÍĆÎĆÎÉŃ ËÏÍÁÎÄÏÊ "ÏÔÍĆÎÁ", C-x u. + +ïÂÙȚÎÏ, C-x u ÏÔÍĆÎŃĆÔ ÉÚÍĆÎĆÎÉŃ, ÓÄĆÌÁÎÎÙĆ ÏÄÎÏÊ ËÏÍÁÎÄÏÊ; ĆÓÌÉ ĐÏŚÔÏÒÉÔŰ C-x +u ÎĆÓËÏÌŰËÏ ÒÁÚ ĐÏÄÒŃÄ, ËÁÖÄÙÊ ÒÁÚ ÂŐÄĆÔ ÏÔÍĆÎŃÔŰÓŃ ĆĘĆ ÏÄÎÁ ËÏÍÁÎÄÁ. + +îÏ ĆÓÔŰ ÄŚÁ ÉÓËÌÀȚĆÎÉŃ: ËÏÍÁÎÄÙ ËÏÔÏÒÙĆ ÎĆ ÉÚÍĆÎŃÀÔ ÔĆËÓÔ ÎĆ ŐȚÉÔÙŚÁÀÔÓŃ (ÜÔÏ +ŚËÌÀȚÁĆÔ ËÏÍÁÎÄÙ ĐĆÒĆÍĆĘĆÎÉŃ ËŐÒÓÏÒÁ É ĐÒÏËÒŐÔËÉ), É ÓÁÍÏŚÓÔÁŚÌŃÀĘÉĆÓŃ +(self-inserting) ÓÉÍŚÏÌÙ ÏÂÒÁÂÁÔÙŚÁÀÔÓŃ ÇÒŐĐĐÁÍÉ ÄÏ 20. (üÔÏ ŐÍĆÎŰÛÁĆÔ ȚÉÓÌÏ +C-x u ËÏÔÏÒÙĆ ŚÙ ÍÏÖĆÔĆ ÎÁÂÒÁÔŰ ÄÌŃ ÏÔÍĆÎÙ ŚŚÏÄÁ ÔĆËÓÔÁ.) + +>> őÂĆÊÔĆ ÜÔŐ ÓÔÒÏËŐ ÉÓĐÏÌŰÚŐŃ C-k, ÚÁÔĆÍ ÎÁÂĆÒÉÔĆ C-x u + É ÏÎÁ ÄÏÌÖÎÁ ŚĆÒÎŐÔŰÓŃ ÎÁÚÁÄ. + +C-_ ÁÌŰÔĆÒÎÁÔÉŚÎÁŃ ËÏÍÁÎÄÁ ÏÔÍĆÎÙ; ÏÎÁ ÒÁÂÏÔÁĆÔ ÔÁËÖĆ ËÁË É C-x u, ÎÏ ÌĆÇȚĆ Ś +ÉÓĐÏÌŰÚÏŚÁÎÉÉ ÎĆÓËÏÌŰËÏ ÒÁÚ ĐÏÄÒŃÄ. îĆŐÄÏÂÎÏĆ ĐÏÌÏÖĆÎÉĆ C-_ Á ÎÁ ÎĆËÏÔÏÒÙÈ +ËÌÁŚÉÁÔŐÒÁÈ ÄĆÌÁĆÔ ÎĆÏȚĆŚÉÄÎÙÍ ÓĐÏÓÏ ĆĆ ÎÁÂÏÒÁ. đÏÜÔÏÍŐ ÍÙ ĐÒĆÄÌÁÇÁĆÍ C-x u +Ë ÉÓĐÏÌŰÚÏŚÁÎÉÀ. îÁ ÎĆËÏÔÏÒÙÈ ÔĆÒÍÉÎÁÌÁÈ, ŚÙ ÍÏÖĆÔĆ ÎÁÂÉÒÁÔŰ C-_ ÎÁÖÉÍÁŃ / É +ŐÄĆÒÖÉŚÁŃ ËÌÁŚÉÛŐ CTRL. + +țÉÓÌÏŚÏÊ ÁÒÇŐÍĆÎÔ ÄÌŃ C-_ ÉÌÉ C-x u ÒÁÂÏÔÁĆÔ ËÁË ÓȚĆÔȚÉË ĐÏŚÔÏÒĆÎÉŃ. + + +* æáêìù +------- + +țÔÏÂÙ ÓÏÚÄÁÎÎÙÊ ÔĆËÓÔ ÍÏÖÎÏ ÂÙÌÏ ÒĆÄÁËÔÉÒÏŚÁÔŰ ĐÏÚÖĆ, ŚÙ ÄÏÌÖÎÙ ĆÇÏ +ĐÏÍĆÓÔÉÔŰ Ś ÆÁÊÌ. éÎÁȚĆ, ÏÎ ÉÓȚĆÚÎĆÔ ËÏÇÄÁ ŚÙ ŚÙÊÄÉÔĆ ÉÚ Emacs. śÙ ĐÏÍĆĘÁĆÔĆ +ŚÁÛ ÔĆËÓÔ Ś ÆÁÊÌ "ÏÔËÒÙŚÁŃ" ÆÁÊÌ. (ćĘĆ ÜÔÏ ÎÁÚÙŚÁÀÔ "ĐÒÉÊÔÉ" Ś ÆÁÊÌ.) +(// Ś ÏÒÉÇÉÎÁÌĆ ÔĆÒÍÉÎÙ "finding", É "visiting") + +ïÔËÒÙÔŰ ÆÁÊÌ ÏÚÎÁȚÁĆÔ ĐÏÓÍÏÔÒĆÔŰ ĆÇÏ ÓÏÄĆÒÖÉÍÏĆ ÉÓĐÏÌŰÚŐŃ Emacs. śÏ ÍÎÏÇÉÈ +ÓÌŐȚÁŃÈ, ÜÔÏ ĐÒÏÉÓÈÏÄÉÔ ËÏÇÄÁ ŚÙ ÒĆÄÁËÔÉÒŐĆÔĆ ÆÁÊÌ ÓÁÍÉ. ïÄÎÁËÏ ŚÁÛÉ +ÉÚÍĆÎĆÎÉŃ, ÓÄĆÌÁÎÎÙĆ Ó ÉÓĐÏÌŰÚÏŚÁÎÉĆÍ Emacs ÎĆ ÂŐÄŐÔ ÚÁÆÉËÓÉÒÏŚÁÎÙ, ĐÏËÁ ŚÙ ÎĆ +"ÓÏÈÒÁÎÉÔĆ" ("save") ÆÁÊÌ. ôÁË ŚÙ ÍÏÖĆÔĆ ÎĆ ÏÓÔÁŚÌŃÔŰ ĐÏÌŐÉÚÍĆÎĆÎÎÙÊ ÆÁÊÌ Ś +ÓÉÓÔĆÍĆ, ĆÓÌÉ ŚÙ ÎĆ ÈÏÔÉÔĆ ÜÔÏÇÏ. äÁÖĆ ËÏÇÄÁ ŚÙ ÓÏÈÒÁÎŃĆÔĆ ÆÁÊÌ, Emacs +ÏÓÔÁŚÌŃĆÔ ÏÒÉÇÉÎÁÌŰÎÙÊ ÆÁÊÌ Ó ÉÚÍĆÎĆÎÎÙÍ ÉÍĆÎĆÍ, ȚÔÏ ŚÙ ÍÏÇÌÉ ĐÏÚÖĆ ÒĆÛÉÔŰ +ȚÔÏ ŚÁÛÉ ÉÚÍĆÎĆÎÉŃ ÂÙÌÉ ÏÛÉÂÏȚÎÙ. + +ćÓÌÉ ĐÏÓÍÏÔÒĆÔŰ Ś ÎÉÖÎÀÀ ȚÁÓÔŰ ÜËÒÁÎÁ, ŚÙ ŐŚÉÄÉÔĆ ÓÔÒÏËŐ ËÏÔÏÒÁŃ ÎÁȚÉÎÁĆÔÓŃ Ó +ÔÉÒĆ É ÓÏÄĆÒÖÉÔ ÓÔÒÏËŐ "Emacs: TUTORIAL.ru". üÔÁ ȚÁÓÔŰ ÜËÒÁÎÁ ŚÓĆÇÄÁ +ĐÏËÁÚÙŚÁĆÔ ÉÍŃ ÆÁÊÌÁ ËÏÔÏÒÙÊ ŚÙ ÏÔËÒÙÌÉ. éÔÁË, ÓĆÊȚÁÓ ŚÙ ÏÔËÒÙÌÉ ÆÁÊÌ Ó +ÉÍĆÎĆÍ "TUTORIAL.ru" ËÏÔÏÒÙÊ ŃŚÌŃĆÔÓŃ ŚÁÛĆÊ ĐĆÒÓÏÎÁÌŰÎÏÊ ËÏĐÉĆÊ ŐȚĆÂÎÉËÁ +Emacs. ìÀÂÏÊ ÆÁÊÌ ËÏÔÏÒÙÊ ŚÙ ÏÔËÒÏĆÔĆ, ÜÔÏ ÉÍŃ ÆÁÊÌÁ Ó ÄÏÂÁŚÌĆÎÎÏÊ ÍÁÌĆÎŰËÏÊ +ËÒÁĐÉÎËÏÊ. (Whatever file you find, that file's name will appear in that +precise spot.) + +ëÏÍÁÎÄÙ ÄÌŃ ÏÔËÒÙÔÉŃ É ÓÏÈÒÁÎĆÎÉŃ ÆÁÊÌÁ Ś ÏÔÌÉȚÉÉ ÏÔ ÄÒŐÇÉÈ ËÏÍÁÎÄ, ËÏÔÏÒÙĆ ŚÙ +ŐÖĆ ŚÙŐȚÉÌÉ, ÔÒĆÂŐÀÔ ÄŚŐÈ ÓÉÍŚÏÌÏŚ. ïÎÉ ÏÂÁ ÎÁȚÉÎÁÀÔÓŃ Ó ÓÉÍŚÏÌÁ Control-x. +âÏÌŰÛÁŃ ÓĆÒÉŃ ËÏÍÁÎÄ ÎÁȚÉÎÁĆÔÓŃ Ó ÓÉÍŚÏÌÁ Control-x; íÎÏÇÉĆ ÉÈ ÎÉÈ ÒÁÂÏÔÁÀÔ Ó +ÆÁÊÌÁÍÉ, ÂŐÆĆÒÁÍÉ É ĐÏÈÏÖÉÍÉ ŚĆĘÁÍÉ. üÔÏ ËÏÍÁÎÄÙ Ś ÄŚÁ, ÔÒÉ ÉÌÉ ȚĆÔÙÒĆ +ÓÉÍŚÏÌÁ ÄÌÉÎÏÊ. + +óÌĆÄŐÀĘĆĆ, ȚÔÏ ŚÁÍ ÎŐÖÎÏ ÚÎÁÔŰ Ï ËÏÍÁÎÄĆ ÏÔËÒÙÔÉŃ ÆÁÊÌÁ - ÜÔÏ ÔÏ, ȚÔÏ ŚÙ +ÄÏÌÖÎÙ ŚŚĆÓÔÉ ÉÍŃ ÆÁÊÌÁ, ËÏÔÏÒÙÊ ÎŐÖÎÏ ȚÉÔÁÔŰ. íÙ ÜÔÏ ÎÁÚÙŚÁĆÍ ËÏÍÁÎÄÁ "ȚÉÔÁÀĘÁŃ +ÁÒÇŐÍĆÎÔ Ó ÔĆÒÍÉÎÁÌÁ" (Ś ÜÔÏÍ ÓÌŐȚÁĆ, ÁÒÇŐÍĆÎÔ ÜÔÏ ÉÍŃ ÆÁÊÌÁ). đÏÓÌĆ ŚŚÏÄÁ +ËÏÍÁÎÄÙ + + C-x C-f ïÔËÒÙÔŰ (ÎÁÊÔÉ) ÆÁÊÌ + +Emacs ĐÏĐÒÏÓÉÔ ŚÁÓ ŚŚĆÓÔÉ ÉÍŃ ÆÁÊÌÁ. éÍŃ ÆÁÊÌÁ ŚÙ ÎÁÂĆÒĆÔĆ Ś ÎÉÖÎĆÊ ÓÔÒÏËĆ +ÜËÒÁÎÁ. îÉÖÎŃŃ ÓÔÒÏËÁ ÎÁÚÙŚÁĆÔÓŃ ÍÉÎÉÂŐÆĆÒ, ÏÎ ÉÓĐÏÌŰÚŐĆÔÓŃ ÄÌŃ ËÏÒÏÔËÏÇÏ +ŚŚÏÄÁ. śÙ ÍÏÖĆÔĆ ÉÓĐÏÌŰÚÏŚÁÔŰ ÏÂÙȚÎÙĆ ËÏÍÁÎÄÙ ÒĆÄÁËÔÉÒÏŚÁÎÉŃ Emacs ÄÌŃ +ÒĆÄÁËÔÉÒÏŚÁÎÉŃ ÉÍĆÎÉ. + +ëÏÇÄÁ ŚÙ ŚŚÏÄÉÔĆ ÉÍŃ ÆÁÊÌÁ (ÉÌÉ ÌÀÂŐÀ ÉÎÆÏÒÍÁĂÉÀ Ś ÍÉÎÉÂŐÆĆÒ), ŚÙ ÍÏÖĆÔĆ +ÏÔÍĆÎÉÔŰ ËÏÍÁÎÄŐ ÎÁÖÁŚ C-g. + +>> îÁÖÍÉÔĆ C-x C-f, ÚÁÔĆÍ ÎÁÖÍÉÔĆ C-g. üÔÏ ÏÔÍĆÎÉÔ ÍÉÎÉÂŐÆĆÒ, É ËÏÍÁÎÄŐ + C-x C-f ËÏÔÏÒÁŃ ÉÓĐÏÌŰÚÏŚÁÌÁ ÍÉÎÉÂŐÆĆÒ. ś ÉÔÏÇĆ, ŚÙ ÎĆ ÏÔËÒÙÌÉ ÎÉ ÏÄÎÏÇÏ + ÆÁÊÌÁ. + +ëÏÇÄÁ ŚÙ ÚÁŚĆÒÛÉÔĆ ŚŚÏÄ ÉÍĆÎÉ ÆÁÊÌÁ, ÎÁÖÍÉÔĆ . äÁÌĆĆ ÓÒÁÂÏÔÁĆÔ +ËÏÍÁÎÄÁ C-x C-f, É ÏÔËÒÏĆÔ ÆÁÊÌ ŚÙÂÒÁÎÎÙÊ ŚÁÍÉ. íÉÎÉÂŐÆĆÒ ÉÓȚĆÚÎĆÔ ËÏÇÄÁ +ËÏÍÁÎÄ C-x C-f ÚÁŚĆÒÛÉÔÓŃ. + +é ÍÇÎÏŚĆÎÉĆÍ ĐÏÚÖĆ ÓÏÄĆÒÖÉÍÏĆ ÆÁÊÌÁ ĐÏŃŚÉÔÓŃ ÎÁ ÜËÒÁÎĆ, É ŚÙ ÓÍÏÖĆÔĆ ĆÇÏ +ÒĆÄÁËÔÉÒÏŚÁÔŰ. ëÏÇÄÁ ŚÙ ÚÁËÏÎȚÉÔĆ ÒĆÄÁËÔÉÒÏŚÁÎÉĆ, ȚÔÏÂÙ ÓÏÈÒÁÎÉÔŰ ÉÚÍĆÎĆÎÉŃ +ÎÁÂĆÒÉÔĆ ËÏÍÁÎÄŐ + + C-x C-s óÏÈÒÁÎÉÔŰ ÆÁÊÌ + +üÔÏ ÓËÏĐÉÒŐĆÔ ÔĆËÓ ÉÚ Emacs Ś ÆÁÊÌ. ś ĐĆÒŚÙÊ ÒÁÚ, ËÏÇÄÁ ŚÙ ÜÔÏ ÓÄĆÌÁĆÔĆ, +Emacs ĐĆÒĆÉÍĆÎŐĆÔ ÏÒÉÇÉÎÁÌŰÎÙÊ ÆÁÊÌ Ó ÎÏŚÙÍ ÉÍĆÎĆÍ, ȚÔÏÂÙ ÏÎ ÎĆ ĐÏÔĆÒŃÌÓŃ. +îÏŚÏĆ ÉÍŃ ĐÏÌŐȚÁĆÔÓŃ ÄÏÂÁŚÌĆÎÉĆÍ ÓÉÍŚÏÌÁ "~" Ë ÏÒÉÇÉÎÁÌŰÎÏÍŐ ÉÍĆÎÉ ÆÁÊÌÁ. + +ëÏÇÄÁ ÓÏÈÒÁÎĆÎÉĆ ÚÁŚĆÒÛÉÔÓŃ, Emacs ÎÁĐĆȚÁÔÁĆÔ ÉÍŃ ÚÁĐÉÓÁÎÎÏÇÏ ÆÁÊÌÁ. +śÙ ÄÏÌÖÎÙ ÓÏÈÒÁÎŃÔŰ ÉÚÍĆÎĆÎÉŃ ÄÏÓÔÁÔÏȚÎÏ ȚÁÓÔÏ, ÔÁË ȚÔÏÂÙ ÎĆ ĐÏÔĆÒŃÔŰ +ÍÎÏÇÏ ÒÁÂÏÔÙ ĆÓÌÉ ŚÄÒŐÇ ÓÉÓÔĆÍÁ ĐÏÇÉÂÎĆÔ. + +>> îÁÂĆÒÉÔĆ C-x C-s, ÓÏÈÒÁÎÉÔĆ ŚÁÛŐ ËÏĐÉÀ ŐȚĆÂÎÉËÁ. + äÏÌÖÎÁ ĐÏŃŚÉÔŰÓŃ ÎÁÄĐÉÓŰ "Wrote ...TUTORIAL.ru" Ś ÎÉÖÎĆÊ ÓÔÒÏËĆ ÜËÒÁÎÁ. + +úáíćțáîéć: îÁ ÎĆËÏÔÏÒÙÈ ÓÉÓÔĆÍÁÈ, ŚŚÏÄ C-x C-s ÚÁÍÏÒÏÚÉÔ ÜËÒÁÎ É ŚÙ ÎĆ +ŐŚÉÄÉÔĆ ĐÏÓÌĆÄŐÀĘĆÇÏ ŚÙŚÏÄÁ Emacs`Á. üÔÏ ÏÚÎÁȚÁĆÔ ȚÔÏ ÏĐĆÒÁĂÉÏÎÎÁŃ ÓÉÓÔĆÍÁ +ÉÍĆĆÔ "ÏÓÏÂĆÎÎÏÓÔŰ" ÉÍĆÎŐĆÍŐÀ "flow control" ĐĆÒĆÈŚÁÔÙŚÁÀĘŐÀ C-s É ÎĆ +ĐÒÏĐŐÓËÁÀĘŐÀ ÜÔÏÔ ÓÉÍŚÏÌ Ë Emacs`Ő. äÌŃ ÒÁÚÍÏÒÏÚËÉ ÜËÒÁÎÁ, ÎÁÖÍÉÔĆ C-q. +óÍÏÔÒÉÔĆ ÒÁÚÄĆÌ "Spontaneous Entry to Incremental Search" ÒŐËÏŚÏÄÓÔŚÁ Emacs +ȚÔÏÂÙ ŐÚÎÁÔŰ ËÁË ÂÏÒÏÔŰÓŃ Ó ÜÔÏÊ "ÏÓÏÂĆÎÎÏÓÔŰÀ". + +śÙ ÍÏÖĆÔĆ ÏÔËÒÙÔŰ ÓŐĘĆÓÔŚŐÀĘÉÊ ÆÁÊÌ ÄÌŃ ĐÒÏÓÍÏÔÒÁ ÉÌÉ ÒĆÄÁËÔÉÒÏŚÁÎÉŃ. śÙ +ÔÁË-ÖĆ ÍÏÖĆÔĆ ÎÁÊÔÉ ÆÁÊÌ, ËÏÔÏÒÙÊ ĆĘĆ ÎĆ ÓŐĘĆÓÔŚŐĆÔ. äÒŐÇÉÍÉ ÓÌÏŚÁÍÉ - +ÓÏÚÄÁÔŰ ÆÁÊÌ Ó ĐÏÍÏĘŰÀ Emacs: ÎÁÊÔÉ ÆÁÊÌ, ÓÏÚÄÁÔŰ ÎÏŚÙÊ, É ÎÁȚÁÔŰ ŚŚÏÄÉÔŰ +ÔĆËÓÔ. ëÏÇÄÁ ŚÙ ÓËÁÖÉÔĆ "ÓÏÈÒÁÎÉ" ÆÁÊÌ, 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 ÎÁÂĆÒÉÔĆ + + C-x C-b óĐÉÓÏË ÂŐÆĆÒÏŚ + +>> đÏĐÒÏÂŐÊÔĆ C-x C-b ÓĆÊȚÁÓ. + +íÙ ŚÉÄÉÍ ȚÔÏ ËÁÖÄÙÊ ÂŐÆĆÒ ÉÍĆĆÔ ÉÍŃ, É ÍÏÖĆÔ ÉÍĆÔŰ ÉÍŃ ÆÁÊÌÁ, ÓÏÄĆÒÖÉÍÏĆ +ËÏÔÏÒÏÇÏ Ś ÎĆÍ ÈÒÁÎÉÔÓŃ. îĆËÏÔÏÒÙĆ ÂŐÆĆÒÁ ÎĆ ÓÏÏÔŚĆÔÓÔŚŐÀÔ ÆÁÊÌÁÍ. îÁĐÒÉÍĆÒ, +ÂŐÆĆÒ ÎÁÚŚÁÎÎÙÊ "*Buffer List*" ÎĆ ÓÏÄĆÒÖÉÔ ÎÉËÁËÏÇÏ ÆÁÊÌÁ. ś ÜÔÏÍ ÂŐÆĆÒĆ +ÓÏÄĆÒÖÉÔÓŃ ÓĐÉÓÏË ÂŐÆĆÒÏŚ, ËÏÔÏÒÙÊ ÂÙÌ ÓÏÚÄÁÎ ËÏÍÁÎÄÏÊ C-x C-b. ìàâïê ÔĆËÓÔ +ËÏÔÏÒÙÊ ŚÉ ŚÉÄÉÔĆ Ś ÏËÎĆ Emacs ŚÓĆÇÄÁ ŃŚÌŃĆÔÓŃ ȚÁÓÔŰÀ ËÁËÏÇÏ-ÌÉÂÏ ÂŐÆĆÒÁ. + +>> îÁÂĆÒÉÔĆ C-x 1 ȚÔÏÂÙ ÉÚÂÁŚÉÔŰÓŃ ÏÔ ÓĐÉÓËÁ ÂŐÆĆÒÏŚ. + +ćÓÌÉ ŚÙ ÉÚÍĆÎŃĆÔĆ ÔĆËÓÔ ÏÄÎÏÇÏ ÆÁÊÌÁ, ĐÏÔÏÍ ÏÔËÒÙŚÁĆÔĆ ÄÒŐÇÏÊ, ÔÏ ĐĆÒŚÙÊ +ÏÓÔÁĆÔÓŃ ÎĆ ÓÏÈÒÁÎĆÎÎÙÍ. éÚÍĆÎĆÎÉŃ ÏÓÔÁÎŐÔÓŃ ŚÎŐÔÒÉ Emacs, Ś ÆÁÊÌÏŚÏÍ ÂŐÆĆÒĆ. +óÏÚÄÁÎÉĆ ÉÌÉ ÒĆÄÁËÔÉÒÏŚÁÎÉĆ ÓÌĆÄŐÀĘĆÇÏ ÆÁÊÌÏŚÏÇÏ ÂŐÆĆÒÁ ÎĆ ÓËÁÚÙŚÁĆÔÓŃ ÎÁ +ĐĆÒŚÏÍ ÂŐÆĆÒĆ. üÔÏ ÏȚĆÎŰ ŐÄÏÂÎÏ, ÎÏ ÉÍĆÊÔĆ Ś ŚÉÄŐ ȚÔÏ ŚÁÍ ÎŐÖÎÏ ÉÍĆÔŰ ŐÄÏÂÎÙÊ +ÓĐÏÓÏ ÓÏÈÒÁÎÉÔŰ ĐĆÒŚÙÊ ÆÁÊÌÏŚÙÊ ÂŐÆĆÒ. âÙÌÏ ÂÙ ÎĆĐÒÉŃÔÎÏ ËÁÖÄÙÊ ÒÁÚ +ŚÏÚŚÒÁĘÁÔŰÓŃ ÎÁÚÁÄ Ó ĐÏÍÏĘŰÀ C-x C-f É ĐÏÔÏÍ ÉÓĐÏÌŰÚÏŚÁÔŰ C-x C-s. +đÏÜÔÏÍŐ ÓŐĘĆÓÔŚŐĆÔ + + C-x s óÏÈÒÁÎÉÔŰ ÎĆËÏÔÏÒÙĆ ÂŐÆĆÒÁ. (Save some buffers) + +C-x s ÓĐÒÁÛÉŚÁĆÔ ŚÁÓ Ï ËÁÖÄÏÍ ÂŐÆĆÒĆ ËÏÔÏÒÙÊ ÓÏÄĆÒÖÉÔ ÎĆ ÓÏÈÒÁÎĆÎÎÙĆ +ÉÚÍĆÎĆÎÉŃ. äÌŃ ËÁÖÄÏÇÏ ÔÁËÏÇÏ ÂŐÆĆÒÁ Ő ŚÁÓ ÓĐÒÁÛÉŚÁÀÔ ÓÏÈÒÁÎŃÔŰ ÉÌÉ ÎĆ +ÓÏÈÒÁÎŃÔŰ ÉÚÍĆÎĆÎÉŃ. + +>> śÓÔÁŚŰÔĆ ÓÔÒÏËŐ ÔĆËÓÔÁ, ĐÏÔÏÍ ÎÁÂĆÒÉÔĆ C-x s. + ő ŚÁÓ ÄÏÌÖÎÙ ÓĐÒÏÓÉÔŰ ÓÏÈÒÁÎŃÔŰ ÌÉ ÂŐÆĆÒ Ó ÉÍĆÎĆÍ TUTORIAL.ru. + ïÔŚĆÔŰÔĆ ÎÁ ŚÏĐÒÏÓ ÄÁ ÎÁÂÒÁŚ "y". + +* éóđïìűúïśáîéć íćîà +-------------------- + +ćÓÌÉ Ő ŚÁÓ X-ÔĆÒÍÉÎÁÌ, ŚÙ ÚÁÍĆÔÉÔĆ ĐÏÌÏÓÙ ÍĆÎÀ ŚŚĆÒÈŐ ÜËÒÁÎÁ Emacs. śÙ +ÍÏÖĆÔĆ ÉÓĐÏÌŰÚÏŚÁÔŰ ÜÔÏ ÍĆÎÀ ÄÌŃ ÄÏÓÔŐĐÁ ËÏ ŚÓĆÍ ÎÁÉÂÏÌĆĆ ÏÂĘÉÍ ËÏÍÁÎÄÁÍ +Emacs, ÔÁËÉĆ ËÁË "ÏÔËÒÙÔŰ ÆÁÊÌ" ("find file"). śÙ ÓÒÁÚŐ ÎÁÊÄĆÔĆ ȚÔÏ ÜÔÏ +ĐÒÏÓÔÏ, ĐÏÔÏÍŐ ȚÔÏ ŚÁÍ ÎĆ ÎŐÖÎÏ ÚÁĐÏÍÉÎÁÔŰ ÓÏȚĆÔÁÎÉŃ ËÌÁŚÉÛ ÎĆÏÂÈÏÄÉÍÙÈ ÄÌŃ +ÄÏÓÔŐĐÁ Ë ËÁÖÄÏÊ ËÏÍÁÎÄÙ. ëÏÇÄÁ ŚÙ ĐÒÉŚÙËÎÉÔĆ Ë Emacs, ŚÁÍ ÂŐÄÉÔĆ ÌĆÇËÏ +ÉÓĐÏÌŰÚÏŚÁÔŰ ËÌÁŚÉÁÔŐÒÎÙĆ ËÏÍÁÎÄÙ, ĐÏÔÏÍŐ ȚÔÏ ËÁÖÄÏÍ ĐŐÎËÔĆ ÍĆÎÀ, Ë ËÏÔÏÒÏÍŐ +ĐÒÉŚŃÚÁÎÁ ÓÏȚĆÔÁÎÉĆ ËÌÁŚÉÛ, ÎÁĐÉÓÁÎÏ ÜÔÏ ÓÏȚĆÔÁÎÉĆ. + +úÁÍĆÔÉÍ ȚÔÏ ÍÎÏÇÏ ĐŐÎËÔÏŚ ÍĆÎÀ ÎĆ ÓÏÄĆÒÖÁÔ ËÌÁŚÉÁÔŐÒÎÙĆ ÜËŚÉŚÁÌĆÎÔÙ. +îÁĐÒÉÍĆÒ, ÓĐÉÓÏË ÍĆÎÀ ÓÏ ŚÓĆÍÉ ÄÏÓÔŐĐÎÙÍÉ ÂŐÆĆÒÁÍÉ. śÙ ÍÏÖĆÔĆ ĐĆÒĆËÌÀȚÉÔŰ Ś +ÌÀÂÏÊ ÂŐÆĆÒ đÒÏÓÔÏ ÎÁÊÄŃ ĆÇÏ ÉÍŃ Ś ÍĆÎÀ ÂŐÆĆÒÏŚ (Buffers menu) É ŚÙÂÒÁŚ ĆÇÏ. + + +* éóđïìűúïśáîéć íùûé +-------------------- + +śÙĐÏÌÎŃĆÍÙÊ Ś X, Emacs ĐÏÌÎÏÓÔŰÀ ÉÎÔĆÇÒÉÒÏŚÁÎ Ó ÍÙÛŰÀ. śÙ ÍÏÖĆÔĆ +ĐÏÚÉĂÉÏÎÉÒÏŚÁÔŰ ËŐÒÓÏÒ ÎÁÖÁÔÉĆÍ ÌĆŚÏÊ ËÎÏĐËÉ Ś ÖĆÌÁĆÍÏÍ ÍĆÓÔĆ, ŚÙ ÍÏÖĆÔĆ +ÏÔÍĆȚÁÔŰ ÔĆËÓÔ ĐÏÔŃÎŐŚ ÍÙÛËŐ Ó ÎÁÖÁÔÏÊ ÌĆŚÏÊ ËÎÏĐËÏÊ ȚĆÒĆÚ ÔŐ ȚÁÓÔŰ, ËÏÔÏÒŐÀ +ÈÏÔÉÔĆ ÏÔÍĆÔÉÔŰ. (éÌÉ ËÌÉËÎŐÔŰ ÌĆŚÏÊ ËÎÏĐËÏÊ ÍÙÛËÉ Ś ÏÄÎÏÍ ËÏÎĂĆ ÔĆËÓÔÁ, +ÚÁÔĆÍ ĐĆÒĆÍĆÓÔÉÔŰÓŃ Ś ÄÒŐÇÏÊ, É ËÌÉËÎŐÔŰ ĆĘĆ ÒÁÚ, ŐÄĆÒÖÉŚÁŃ Shift ȚÔÏÂÙ +ÏÔÍĆÔÉÔŰ ÔĆËÓÔ.) + +ȚÔÏÂÙ ŐÂÉÔŰ ÎĆËÏÔÏÒÙÊ ŚÙÄĆÌĆÎÎÙÊ ÔĆËÓÔ, ŚÙ ÍÏÖĆÔĆ ÉÓĐÏÌŰÚÏŚÁÔŰ C-w ÉÌÉ ŚÙÂÒÁÔŰ +ĐŐÎËÔ ÍĆÎÀ "śÙÒĆÚÁÔŰ" ("Cut") ÉÚ ÍĆÎÀ "òĆÄÁËÔÉÒÏŚÁÔŰ" ("Edit"). úÁÍĆÔŰÔĆ, ȚÔÏ +ÜÔÏ *ÎĆ* ÏÄÎÏ É ÔÏ ÖĆ: C-w ÓÏÈÒÁÎŃĆÔ ÔĆËÓÔ ÔÏÌŰËÏ ŚÎŐÔÒÉ Emacs (ÁÎÁÌÏÇÉȚÎÏ C-k +ÏĐÉÓÁÎÎÏÇÏ ÒÁÎĆĆ), "śÙÒĆÚÁÔŰ" ("Cut") ÄĆÌÁĆÔ ÜÔÏ ÖĆ, É ĐÏÍĆĘÁĆÔ ÔĆËÓÔ Ś ÂŐÆĆÒ +ÏÂÍĆÎÁ X (X clipboard), ÇÄĆ ÏÎ ÍÏÖĆÔ ÂÙÔŰ ÄÏÓÔŐĐĆÎ ÄÒŐÇÉÍ ĐÒÏÇÒÁÍÍÁÍ. + +ȚÔÏÂÙ ĐÏÌŐȚÉÔŰ ÔĆËÓÔ ÉÚ ÂŐÆĆÒÁ ÏÂÍĆÎÁ X, ÉÓĐÏÌŰÚŐÊÔĆ ËÏÍÁÎÄŐ "śÓÔÁŚÉÔŰ" +("Insert") ÉÚ ÍĆÎÀ "òĆÄÁËÔÉÒÏŚÁÔŰ" ("Edit"). + +óÒĆÄÎŃŃ ËÎÏĐËÁ ÍÙÛÉ ÏÂÙȚÎÏ ÉÓĐÏÌŰÚŐĆÔÓŃ ÄÌŃ ŚÙÂÏÒÁ ĐŐÎËÔÏŚ (items), ŚÉÄÉÍÙÈ ÎÁ +ÜËÒÁÎĆ. îÁĐÒÉÍĆÒ, ĆÓÌÉ ŚÙ ŚÏÛÌÉ Ś Info (on-line ÄÏËŐÍĆÎÔÁĂÉŃ Emacs) ÉÓĐÏÌŰÚŐŃ +C-h i ÉÌÉ ÍĆÎÀ đÏÍÏĘŰ (Help), ŚÙ ÍÏÖĆÔĆ ÓÌĆÄÏŚÁÔŰ ĐÏÄÓŚĆȚĆÎÎÙÍ ÓÓÙÌËÁÍ +ĐÒÏÓÔÙÍ ÎÁÖÁÔÉĆÍ ÓÒĆÄÎĆÊ ËÎÏĐËÉ ÎÁ ÎÉÈ. áÎÁÌÏÇÉȚÎÏ, ĆÓÌÉ ŚÙ ŚŚÏÄÉÔĆ ÉÍŃ ÆÁÊÌÁ +(ÎÁĐÒÉÍĆÒ Ś ĐÒÉÇÌÁÛĆÎÉÉ "ÏÔËÒÙÔŰ ÆÁÊÌ") É ŚÙ ÎÁÖÉÍÁĆÔĆ TAB ȚÔÏÂÙ ŐŚÉÄĆÔŰ +ŚÏÚÍÏÖÎÙĆ ŚÁÒÉÁÎÔÙ (completions), ŚÙ ÍÏÖĆÔĆ ËÌÉËÎŐÔŰ ÓÒĆÄÎÀÀ ËÎÏĐËŐ ÍÙÛÉ ÎÁ +ÏÄÎÏÍ ÉÚ ŚÁÒÉÁÎÔÏŚ, ȚÔÏÂÙ ŚÙÂÒÁÔŰ ĆÇÏ. + +đÒÁŚÁŃ ËÎÏĐËÁ ÍÙÛÉ ŚÙÚÙŚÁĆÔ ŚÓĐÌÙŚÁÀĘĆĆ ÍĆÎÀ (popup menu). óÏÄĆÒÖÉÍÏĆ ÜÔÏÇÏ +ÍĆÎÀ ÉÚÍĆÎŃĆÔÓŃ Ś ÚÁŚÉÓÉÍÏÓÔÉ ÏÔÏ ÔÏÇÏ ÇÄĆ ŚÙ ÎÁÈÏÄÉÔĆÓŰ, É ÏÂÙȚÎÏ ÓÏÄĆÒÖÉÔ +ÎĆÓËÏÌŰËÏ ȚÁÓÔÏ ÉÓĐÏÌŰÚŐĆÍÙÈ ËÏÍÁÎÄ ÄÌŃ ÂÏÌĆĆ ĐÒÏÓÔÏÇÏ ÄÏÓÔŐĐÁ Ë ÎÉÍ. + +>> îÁÖÍÉÔĆ ĐÒÁŚŐÀ ËÎÏĐËŐ ÍÙÛÉ ÓĆÊȚÁÓ. + +śÁÍ ÎŐÖÎÏ ŐÄĆÒÖÉŚÁÔŰ ËÎÏĐËŐ ÎÁÖÁÔÏÊ, ȚÔÏÂÙ ÓÏÈÒÁÎÉÔŰ ÍĆÎÀ ÏÔËÒÙÔÙÍ. +(// You will have to hold the button down in order to keep the menu up.) + + +* òáóûéòćîîùê îáâïò ëïíáîä +-------------------------- + +ő Emacs ÏȚĆÎŰ ÍÎÏÇÏ ËÏÍÁÎÄ, ÏÎÉ ÍÏÇŐÔ ÂÙÔŰ ÎÁÚÎÁȚĆÎÙ ÎÁ ŚÓĆ control- É meta- +ÓÉÍŚÏÌÙ. Emacs ÏÂÈÏÄÉÔ ÜÔÏ, ÉÓĐÏÌŰÚŐŃ X-ËÏÍÁÎÄŐ (eXtend). ćÓÔŰ ÄŚĆ +ŚÏÚÍÏÖÎÏÓÔÉ: + + C-x óÉÍŚÏÌ ÒÁÓÛÉÒĆÎÉŃ (Character eXtend). + úÁ ÎÉÍ ÓÌĆÄŐĆÍ ÏÄÉÎ ÓÉÍŚÏÌ. + M-x éÍĆÎÎÏŚÁÎÙĆ ÒÁÓÛÉÒĆÎÎÙĆ ËÏÍÁÎÄÙ (Named command eXtend). + úÁ ÎÉÍ ÓÌĆÄŐĆÔ ÉÍŃ ËÏÍÁÎÄÙ. + +üÔÏ ËÏÍÁÎÄÙ ËÏÔÏÒÙĆ ÏÂÙȚÎÏ ÉÓĐÏÌŰÚŐÀÔÓŃ, ÎÏ ŚÙ ŐÖĆ ŚÙŐȚÉÌÉ ÎĆËÏÔÏÒÙĆ ÉÚ ÎÉÈ. +śÙ ŐÖĆ ŚÉÄĆÌÉ: ËÏÍÁÎÄÙ ÒÁÂÏÔÙ Ó ÆÁÊÌÁÍÉ C-x C-f - ÏÔËÒÙÔŰ, É C-x C-s +ÓÏÈÒÁÎÉÔŰ. äÒŐÇÏÊ ĐÒÉÍĆÒ - ÚÁŚĆÒÛĆÎÉŃ ÒÁÂÏÔÙ Ó Emacs -- ÜÔÏ ËÏÍÁÎÄÁ C-x C-c. +(ÎĆ ŚÏÌÎŐÊÔĆÓŰ Ï ÔÏÍ, ȚÔÏ ŚÙ ĐÏÔĆÒŃĆÔĆ ÓÄĆÌÁÎÎÙĆ ÉÚÍĆÎĆÎÉŃ, C-x C-c +ĐÒĆÄÌÁÇÁĆÔ ÓÏÈÒÁÎÉÔŰ ÉÚÍĆÎĆÎÉŃ ĐĆÒĆÄ ÔĆÍ ËÁË ŐÄÁÌÉÔ ÂŐÆĆÒ Emacs.) + +C-z ÜÔÏ ËÏÍÁÎÄÁ *ŚÒĆÍĆÎÎÏÇÏ* ŚÙÈÏÄÁ ÉÚ Emacs -- ŚÙ ÍÏÖĆÔĆ ŚĆÒÎŐÔŰÓŃ Ś ÔŐÖĆ +ÓĆÓÓÉÀ Emacs ĐÏÓÌĆ. + +îÁ ÓÉÓÔĆÍÁÈ, ËÏÔÏÒÙĆ ÄÏĐŐÓËÁÀÔ ÜÔÏÇÏ, C-z "ĐÒÉÏÓÔÁÎÁŚÌÉŚÁÀÔ" ("suspends") +Emacs; śÏÚŚÒÁĘÁÀÔ Ś ÏÂÏÌÏȚËŐ (shell), ÎÏ ÎĆ ÚÁËÒÙŚÁÀÔ Emacs. ś ÂÏÌŰÛÉÎÓÔŚĆ +ÏÂÏÌÏȚĆË ŚÙ ÍÏÖĆÔĆ ĐÒÏÄÏÌÖÉÔŰ ÒÁÂÏÔŐ Ś Emacs ÉÓĐÏÌŰÚŐŃ ËÏÍÁÎÄŐ `fg' ÉÌÉ +`%emacs'. + +ś ÓÉÓÔĆÍÁÈ ÎĆ ĐÏÄÄĆÒÖÉŚÁÀĘÉÈ ĐÒÉÏÓÔÁÎÏŚ, C-z ÓÏÚÄÁĆÔ ÎÏŚŐÀ ÏÂÏÌÏȚËŐ (subshell), +ÚÁĐŐĘĆÎÎŐÀ ÉÚ-ĐÏÄ Emacs ȚÔÏÂÙ ÄÁÔŰ ŚÁÍ ŚÏÚÍÏÖÎÏÓÔŰ ŚÙĐÏÌÎÉÔŰ ÄÒŐÇŐÀ ĐÒÏÇÒÁÍÍŐ, +É ĐÏÔÏÍ ŚĆÒÎŐÔŰÓŃ Ś Emacs; üÔÏ ÎĆ ÎÁÓÔÏŃĘÉÊ ŚÙÈÏÄ ÉÚ Emacs. ś ÜÔÏÍ ÓÌŐȚÁĆ, +ËÏÍÁÎÄÁ `exit' ŚĆÒÎĆÔ ŚÁÓ Ś Emacs ÉÚ ÏÂÏÌÏȚËÉ. + +éÓĐÏÌŰÚŐÊÔĆ C-x C-c ĆÓÌÉ ŚÙ ÈÏÔÉÔĆ ŚÙÊÔÉ (log out) ÉÚ ÓÉÓÔĆÍÙ. üÔÏ ÔÁËÖĆ +ÉÓĐÏÌŰÚŐĆÔÓŃ ȚÔÏÂÙ ŚÙÊÔÉ ÉÚ Emacs ŚÙÚŚÁÎÎÏÇÏ ÉÚ ĐÏȚÔÏŚÏÊ ĐÒÏÇÒÁÍÍÙ, ÉÌÉ ÄÒŐÇÏÊ +ŐÔÉÌÉÔÙ, ËÏÔÏÒÁŃ ÍÏÖĆÔ ÎĆ ÚÎÁĆÔ ËÁË ÓĐÒÁŚÉÔŰÓŃ Ó ĐÒÉÏÓÔÁÎÏŚÌĆÎÎÙÍ Emacs. +ïÂÙȚÎÏ, ÔÁËÉ ĆÓÌÉ ŚÙ ÎĆ ŚÙÈÏÄÉÔĆ ÉÚ ÓÉÓÔĆÍÙ, ÌŐȚÛĆ ĐÒÉÏÓÔÁÎÏŚÉÔŰ Emacs +ÉÓĐÏÌŰÚŐŃ C-z ŚÍĆÓÔÏ ŚÙÈÏÄÁ ÉÈ ÎĆÇÏ. + +ïȚĆÎŰ ÍÎÏÇÏ C-x ËÏÍÁÎÄ. üÔÉ ŚÙ ŐÖĆ ŚÙŐȚÉÌÉ: + + C-x C-f ïÔËÒÙÔŰ ÆÁÊÌ. + C-x C-s óÏÈÒÁÎÉÔŰ ÆÁÊÌ. + C-x C-b óĐÉÓÏË ÂŐÆĆÒÏŚ. + C-x C-c śÙÈÏÄ ÉÚ Emacs. + C-x u ïÔÍĆÎÁ. + +éÍĆÎÏŚÁÎÎÙĆ ÒÁÓÛÉÒĆÎÎÙĆ ËÏÍÁÎÄÙ ÉÓĐÏÌŰÚŐÀÔÓŃ ÇÏÒÁÚÄÏ ÒĆÖĆ, ÉÌÉ ÉÓĐÏÌŰÚŐÀÔÓŃ +ÔÏÌŰËÏ Ś ÏĐÒĆÄĆÌĆÎÎÙÈ ÒĆÖÉÍÁÈ. ś ËÁȚĆÓÔŚĆ ĐÒÉÍĆÒÁ ËÏÍÁÎÄÁ ÚÁÍĆÎÁ ÓÔÒÏËÉ, +ËÏÔÏÒÁŃ ÚÁÍĆÎŃĆÔ ÏÄÎŐ ÓÔÒÏËŐ ÎÁ ÄÒŐÇŐÀ ŚÏ ŚÓĆÍ ÔĆËÓÔĆ. ëÏÇÄÁ ŚÙ ÎÁÂĆÒĆÔĆ M-x, +Emacs ĐÒĆÄÌÏÖÉÔ ŚÁÍ ŚŚĆÓÔÉ ÉÍŃ ËÏÍÁÎÄÙ Ś ÎÉÖÎĆÊ ÓÔÒÏËĆ ÜËÒÁÎÁ; Ś ÎÁÛĆÍ ÓÌŐȚÁĆ, +"replace-string". ôÏÌŰËÏ ÎÁÂĆÒÉÔĆ "repl s" É Emacs ÄÏĐÏÌÎÉÔ +ÉÍŃ. úÁŚĆÒÛÉÔĆ ÉÍŃ ŚŚÏÄÏÍ . + +ëÏÍÁÎÄÁ ÚÁÍĆÎÙ ÓÔÒÏËÉ (replace-string) ÔÒĆÂŐĆÔ ÄŚÁ ÁÒÇŐÍĆÎÔÁ -- ÓÔÒÏËŐ +ËÏÔÏÒÁŃ ÂŐÄĆÔ ÚÁÍĆÎĆÎÁ, É ÓÔÒÏËÁ ÎÁ ËÏÔÏÒŐÀ ÎŐÖÎÏ ÚÁÍĆÎÉÔŰ. śÙ ÄÏÌÖÎÙ +ÚÁŚĆÒÛÁÔŰ ËÁÖÄÙÊ ÁÒÇŐÍĆÎÔ ŚŚÏÄÏÍ . + +>> đĆÒĆÍĆÓÔÉÔĆ ËŐÒÓÏÒ ÎÁ ÄŚĆ ĐŐÓÔÙĆ ÓÔÒÏËÉ ÎÉÖĆ ÜÔÏÊ. + îÁÂĆÒÉÔĆ M-x repl schangedaltered. + + úÁÍĆÔŰÔĆ ËÁË ÜÔÁ ÓÔÒÏËÁ ÉÚÍĆÎÉÔÓŃ: ŚÙ ÚÁÍĆÎÉÔĆ ÓÌÏŚÏ c-h-a-n-g-e-d + ÓÌÏŚÏÍ "altered" ŚĆÚÄĆ, ÇÄĆ ÏÎÏ ŚÓÔÒĆÔÉÔÓŃ, ÎÉÖĆ ĐÏÚÉĂÉÉ ËŐÒÓÏÒÁ. + + +* áśôïóïèòáîćîéć +---------------- + +ëÏÇÄÁ ŚÙ ÍÏÄÉÆÉĂÉÒŐĆÔĆ ÆÁÊÌ, ÎÏ ÎĆ ÓÏÈÒÁÎŃĆÔĆ ĆÇÏ, ŚÙ ÍÏÖĆÔĆ ĐÏÔĆÒŃÔŰ +ÉÎÆÏÒÍÁĂÉÀ Ś ÓÌŐȚÁĆ ËÒÁÈÁ ÓÉÓÔĆÍÙ. ȚÔÏÂÙ ÚÁĘÉÔÉÔŰ ŚÁÓ ÏÔ ÜÔÏÇÏ, Emacs +ĐĆÒÉÏÄÉȚĆÓËÉ ÚÁĐÉÓÙŚÁĆÔ ËÁÖÄÙÊ ÆÁÊÌ, ËÏÔÏÒÙÊ ŚÙ ÒĆÄÁËÔÉÒŐĆÔĆ. áŚÔÏÓÏÈÒÁÎĆÎÉĆ +ĐÒÏÉÓÈÏÄÉÔ Ś ÆÁÊÌ, ÉÍŃ ËÏÔÏÒÏÇÏ ÔÁËÏĆ ÖĆ, ÎÏ ÎÁȚÉÎÁĆÔÓŃ É ÚÁËÁÎȚÉŚÁĆÔÓŃ +ÓÉÍŚÏÌÏÍ "#"; ÎÁĐÒÉÍĆÒ, ĆÓÌÉ ŚÁÛ ÆÁÊÌ ÎÁÚÙŚÁĆÔÓŃ "hello.c", ÔÏ +ÁŚÔÏÓÏÈÒÁÎĆÎÎÙÊ ÆÁÊÌ ÂŐÄĆÔ ÎÁÚÙŚÁÔŰÓŃ "#hello.c#". ëÏÇÄÁ ŚÙ ÓÏÈÒÁÎÉÔĆ ÆÁÊÌ +ÏÂÙȚÎÙÍ ÓĐÏÓÏÂÏÍ. Emacs ŐÄÁÌÉÔ ÁŚÔÏÓÏÈÒÁÎĆÎÎÙÊ ÆÁÊÌ. + +ćÓÌÉ ÓÉÓÔĆÍÁ ĐÏÄŚÉÓÁĆÔ, ŚÙ ÍÏÖĆÔĆ ŚÏÓÓÔÁÎÏŚÉÔŰ ŚÁÛÉ ÉÚÍĆÎĆÎÉŃ ËÏÔÏÒÙÊ ÂÙÌÉ +ÓÏÈÒÁÎĆÎÙ ÁŚÔÏÍÁÔÉȚĆÓËÉ, ĐŐÔĆÍ ÏÔËÒÙÔÉŃ ÎÏÒÍÁÌŰÎÏÇÏ ÆÁÊÌÁ (ÆÁÊÌÁ ËÏÔÏÒÙÊ ŚÙ +ÒĆÄÁËÔÉÒÏŚÁÌÉ, ÎĆ ÁŚÔÏÓÏÈÒÁÎĆÎÎÏÇÏ) É ÚÁÔĆÍ ÎÁÂÒÁÔŰ M-x recover file. +ëÏÇÄÁ Ő ŚÁÓ ÓĐÒÏÓŃÔ ĐÏÄÔŚĆÒÖÄĆÎÉĆ, ÎÁÂĆÒÉÔĆ yes ȚÔÏÂÙ ŚÏÓÓÔÁÎÏŚÉÔŰ +ÁŚÔÏÓÏÈÒÁÎĆÎÎÙĆ ÄÁÎÎÙĆ. + + +* ïâìáóôű üèï (ECHO AREA) +------------------------- + +ćÓÌÉ Emacs ŚÉÄÉÔ ȚÔÏ ŚÙ ÍĆÄÌĆÎÎÏ ÎÁÂÉÒÁĆÔĆ ËÏÍÁÎÄÙ, ÏÎ ĐÏËÁÚÙŚÁĆÔ ÉÈ ŚÁÍ +ŚÎÉÚŐ ÜËÒÁÎÁ, Ś ÏÂÌÁÓÔÉ ÎÁÚÙŚÁĆÍÏÊ "ÏÂÌÁÓÔŰ ÜÈÏ". ïÂÌÁÓÔŰ ÜÈÏ ÜÔÏ ÎÉÖÎŃŃ +ÓÔÒÏËÁ ÜËÒÁÎÁ. + + +* óôòïëá óïóôïńîéń +------------------ + +óÔÒÏËÁ ÓÒÁÚŐ ÎÁÄ ÏÂÌÁÓÔŰÀ ÜÈÏ ÎÁÚÙŚÁĆÔÓŃ "ÓÔÒÏËÁ ÓÏÓÔÏŃÎÉŃ". +śÙÇÌŃÄÉÔ ÜÔÁ ÓÔÒÏËÁ ĐÒÉÍĆÒÎÏ ÔÁË: + +--**-XEmacs: TUTORIAL.ru (Fundamental)--L670--66%---------------- + +üÔÁ ÓÔÒÏËÁ ÓÏÏÂĘÁĆÔ ĐÏÌĆÚÎŐÀ ÉÎÆÏÒÍÁĂÉÀ Ï ÓÏÓÔÏŃÎÉÉ Emacs É ÔĆËÓÔÁ, ËÏÔÏÒÙÊ +ŚÙ ÒĆÄÁËÔÉÒŐĆÔĆ. + +śÙ ŐÖĆ ÚÎÁĆÔĆ ȚÔÏ ÏÚÎÁȚÁĆÔ ÉÍŃ ÆÁÊÌÁ - ÜÔÏ ÆÁÊÌ, ËÏÔÏÒÙÊ ŚÙ ÏÔËÒÙÌÉ. -NN%-- +ĐÏËÁÚÙŚÁĆÔ ÔĆËŐĘŐÀ ĐÏÚÉĂÉÀ ËŐÒÓÏÒÁ Ś ÔĆËÓÔĆ; ÜÔÏ ÏÚÎÁȚÁĆÔ ȚÔÏ NN ĐÒÏĂĆÎÔÏŚ +ÔĆËÓÔÁ ŚÙÛĆ ȚĆÍ ÎÁȚÁÌÏ ÜËÒÁÎÁ. ćÓÌÉ ĐĆÒŚÁŃ ÓÔÒÏËÁ ÎÁÈÏÄÉÔÓŃ Ś ĐĆÒŚÏÊ ÓÔÒÏËĆ +ÜËÒÁÎÁ, ŚÙ ÔÁÍ ŐŚÉÄÉÔĆ --Top-- ŚÍĆÓÔÏ --00%--. ćÓÌÉ ĐÏÓÌĆÄÎŃŃ ÓÔÒÏËÁ +ÏÔÏÂÒÁÖÁĆÔÓŃ ÎÁ ÜËÒÁÎĆ, ÔÁÍ ÂŐÄĆÔ --Bot--. ćÓÌÉ ÔĆËÓÔ ÎÁÓÔÏÌŰËÏ ÍÁÌ, ȚÔÏ ŚĆÓŰ +ŚÍĆĘÁĆÔÓŃ Ś ÜËÒÁÎ, ÓÔÒÏËÁ ÓÏÓÔÏŃÎÉŃ ÓÏÏÂĘÉÔ --All--. + +úŚĆÚÄÏȚËÉ Ś ÎÁȚÁÌĆ ÓÔÒÏËÉ ÏÚÎÁȚÁÀÔ ȚÔÏ ŚÙ ÉÚÍĆÎŃÌÉ ÔĆËÓÔ. ëÁË ÔÏÌŰËÏ ŚÙ +ÏÔËÒÙÌÉ ÉÌÉ ÓÏÈÒÁÎÉÌÉ ÆÁÊÌ, ÜÔÁ ȚÁÓÔŰ ÓÔÒÏËÉ ÂŐÄĆÔ ÓÏÄĆÒÖÁÔŰ ÎĆ ÚŚĆÚÄÏȚËÉ, Á +ÔÉÒĆ. + +țÁÓÔŰ ÓÔÒÏËÉ ÓÔÁÔŐÓÁ ŚÎŐÔÒÉ ÓËÏÂÏȚĆË ÓÏÏÂĘÁĆÔ ŚÁÍ ÒĆÖÉÍ ÒĆÄÁËÔÉÒÏŚÁÎÉŃ, +ËÏÔÏÒÙÍ ŚÙ ĐÏÌŰÚŐĆÔĆÓŰ. óÔÁÎÄÁÒÔÎÙÊ ÒĆÖÉÍ - Fundamental, ĆÇÏ ŚÙ ÉÓĐÏÌŰÚŐĆÔĆ +É ÓĆÊȚÁÓ. üÔÏ ĐÒÉÍĆÒ "ÏÓÎÏŚÎÏÇÏ ÒĆÖÉÍÁ" ("major mode"). + +Emacs ÉÍĆĆÔ ÍÎÏÇÏ ÒÁÚÌÉȚÎÙÈ ÏÓÎÏŚÎÙÈ ÒĆÖÉÍÏŚ. îĆËÏÔÏÒÙĆ ÉÚ ÒĆÖÉÍÏŚ ÏÚÎÁȚÁÀÔ, +ȚÔÏ ŚÙ ÒĆÄÁËÔÉÒŐĆÔĆ ÔĆËÓÔ ÎÁ ÒÁÚÌÉȚÎÏÍ ŃÚÙËĆ É/ÉÌÉ ÒÁÚÌÉȚÎÙĆ ŚÉÄÙ ÔĆËÓÔÁ, +ÔÁËÉĆ ËÁË Lisp-ÒĆÖÉÍ, Text-ÒĆÖÉÍ É ĐÒ. ś ÌÀÂÏĆ ŚÒĆÍŃ ÔÏÌŰËÏ ÏÄÉÎ ÏÓÎÏŚÎÏÊ +ÒĆÖÉÍ ÁËÔÉŚÉÒÏŚÁÎ, É ĆÇÏ ÎÁÚŚÁÎÉĆ ŚÙ ÍÏÖĆÔĆ ÎÁÊÔÉ Ś ÓËÏÂÏȚËÁÈ, ÇÄĆ ÓĆÊȚÁÓ +ÎÁÈÏÄÉÔÓŃ ÓÌÏŚÏ "Fundamental" (ÂÁÚÏŚÙÊ). + +ëÁÖÄÙÊ ÏÓÎÏŚÎÏÊ ÒĆÖÉÍ ÉÍĆĆÔ ÎĆÓËÏÌŰËÏ ÏÔÌÉȚÉÔĆÌŰÎÙÈ ËÏÍÁÎÄ. îÁĐÒÉÍĆÒ, ËÏÍÁÎÄÙ +ÓÏÚÄÁÎÉŃ ËÏÍÍĆÎÔÁÒÉŃ Ś ĐÒÏÇÒÁÍÍĆ, É ĐÏÓËÏÌŰËŐ Ś ËÁÖÄÏÍ ŃÚÙËĆ ĐÒÏÇÒÁÍÍÉÒÏŚÁÎÉŃ +ËÏÍÍĆÎÔÁÒÉÉ ÚÁĐÉÓÙŚÁÀÔÓŃ ĐÏ-ÓŚÏĆÍŐ, ËÁÖÄÙÊ ÏÓÎÏŚÎÏÊ ÒĆÖÉÍ ŚÓÔÁŚÌŃĆÔ ÉÈ +ĐÏ-ÒÁÚÎÏÍŐ. ëÁÖÄÙÊ ÏÓÎÏŚÎÏÊ ÒĆÖÉÍ ÉÍĆĆÔ ÉÍĆÎÏŚÁÎÎŐÀ ËÏÍÁÎÄŐ, ËÏÔÏÒÁŃ ŚËÌÀȚÁĆÔ +ĆÇÏ. îÁĐÒÉÍĆÒ, M-x fundamental-mode - ËÏÍÁÎÄÁ, ËÏÔÏÒÁŃ ĐĆÒĆËÌÀȚÁĆÔ Ś ÂÁÚÏŚÙÊ +(Fundamental) ÒĆÖÉÍ. + +ćÓÌÉ ŚÙ ÒĆÄÁËÔÉÒŐĆÔĆ ÁÎÇÌÉÊÓËÉÊ ÔĆËÓÔ, ÎÁĐÒÉÍĆÒ ËÁË ÜÔÏÔ (//ËÏÎĆȚÎÏ ÎĆ ÉÍĆÎÎÏ +ÜÔÏÔ, Á TUTORIAL) ÆÁÊÌ, ŚÙ ŚĆÒÏŃÔÎÏ ÄÏÌÖÎÙ ĐĆÒĆËÌÀȚÉÔŰÓŃ Ś Text-ÒĆÖÉÍ. + +>> îÁÂĆÒÉÔĆ M-x text-mode. + +îĆ ŚÏÌÎŐÊÔĆÓŰ, ÎÉ ÏÄÎÁ ÉÚ ŚÙŐȚĆÎÎÙÈ ŚÁÍÉ ËÏÍÁÎÄ Emacs ÎĆ ÉÚÍĆÎÉÌÁÓŰ. îÏ ŚÙ +ÍÏÖÉÔĆ ÚÁÍĆÔÉÔŰ, ȚÔÏ M-f É M-b ÔĆĐĆÒŰ ÒÁÚÌÉȚÁÔŰ ÁĐÏÓÔÒÏÆÙ ËÁË ȚÁÓÔÉ ÓÌÏŚÁ. +òÁÎĆĆ, Ś ÂÁÚÏŚÏÍ ÒĆÖÉÍĆ (Fundamental mode), M-f É M-b ĐÏÎÉÍÁÌÉ ÁĐÏÓÔÒÏÆÙ +ËÁË ÒÁÚÄĆÌÉÔĆÌÉ ÓÌÏŚ. + +ïÓÎÏŚÎÏÊ ÒĆÖÉÍ ÏÂÙȚÎÏ ÄĆÌÁĆÔ ÎĆÂÏÌŰÛÉĆ ÉÚÍĆÎĆÎÉŃ, ÔÁËÉĆ ËÁË: ÂÏÌŰÛÉÎÓÔŚÏ +ËÏÍÁÎÄ ÄĆÌÁÀÔ "ÔŐÖĆ ÒÁÂÏÔŐ" Ś ËÁÖÄÏÍ ÉÚ ÒĆÖÉÍÏŚ, ÎÏ ÉÈ ÒÁÂÏÔÁ ÏÔÌÉȚÁĆÔÓŃ +ËÁËÏÊ-ÎÉÂŐÄŰ ÍĆÌÏȚŰÀ. + +äÌŃ ĐÒÏÓÍÏÔÒÁ ÄÏËŐÍĆÎÔÁĂÉÉ Ï ŚÁÛĆÍ ÔĆËŐĘĆÍ ÏÓÎÏŚÎÏÍ ÒĆÖÉÍĆ, ÎÁÖÍÉÔĆ C-h m. + +>> éÓĐÏÌŰÚŐÊÔĆ C-u C-v ÏÄÉÎ ÒÁÚ ÉÌÉ ÂÏÌĆĆ, ȚÔÏÂÙ ÒÁÓĐÏÌÏÖÉÔŰ ÜÔŐ ÓÔÒÏËŐ ÂÌÉÖĆ + Ë ŚĆÒÈŐ ÜËÒÁÎÁ. +>> îÁÂĆÒÉÔĆ C-h m, ȚÔÏ ĐÏÓÍÏÔÒĆÔŰ ÏÔÌÉȚÉŃ Text-ÒĆÖÉÍÁ ÏÔ ÂÁÚÏŚÏÇÏ. +>> îÁÂĆÒÉÔĆ q ȚÔÏÂÙ ŐÂÒÁÔŰ ÄÏËŐÍĆÎÔÁĂÉÀ Ó ÇÌÁÚ ÄÏÌÏÊ :) + +ïÓÎÏŚÎÏÊ ÒĆÖÉÍ ÎÁÚÙŚÁĆÔÓŃ ÏÓÎÏŚÎÙÍ ĐÏÔÏÍŐ, ȚÔÏ ĆÓÔŰ ÎĆÓËÏÌŰËÏ ÄÏĐÏÌÎÉÔĆÌŰÎÙÈ +(minor) ÒĆÖÉÍÏŚ. äÏĐÏÌÎÉÔĆÌŰÎÙĆ ÒĆÖÉÍÙ ÎĆ ÁÌŰÔĆÒÎÁÔÉŚÙ Ë ÏÓÎÏŚÎÙÍ, ÏÎÉ ÔÏÌŰËÏ +ȚŐÔŰ-ȚŐÔŰ ÍÏÄÉÆÉĂÉÒŐÀÔ ÉÈ. ëÁÖÄÙÊ ÄÏĐÏÌÎÉÔĆÌŰÎÙÊ ÒĆÖÉÍ ŚËÌÀȚÁĆÔÓŃ/ŚÙËÌÀȚÁĆÔÓŃ +ÎĆÚÁŚÉÓÉÍÏ ÏÔ ÄÒŐÇÉÈ ÄÏĐÏÌÎÉÔĆÌŰÎÙÈ ÒĆÖÉÍÏŚ, É ÎĆÚÁŚÉÓÉÍÏ ÏÔ ŚÁÛĆÇÏ ÏÓÎÏŚÎÏÇÏ +ÒĆÖÉÍÁ. śÙ ÍÏÖĆÔĆ ÉÓĐÏÌŰÚÏŚÁÔŰ ÏÓÎÏŚÎÏÊ ÒĆÖÉÍ ÂĆÚ ÄÏĐÏÌÎÉÔĆÌŰÎÙÈ, ÉÌÉ Ó ÌÀÂÏÊ +ÉÈ ËÏÍÂÉÎÁĂÉĆÊ. + +ïÄÉÎ ÉÚ ÄÏĐÏÌÎÉÔĆÌŰÎÙÈ ÒĆÖÉÍÏŚ ÏȚĆÎŰ ĐÏÌĆÚĆÎ, ÏÓÏÂĆÎÎÏ ÄÌŃ ÒĆÄÁËÔÉÒÏŚÁÎÉŃ +ÁÎÇÌÉÊÓËÏÇÏ ÔĆËÓÔÁ - ÜÔÏ ÒĆÖÉÍ ÁŚÔÏÚÁĐÏÌÎĆÎÉŃ (Auto Fill mode). ëÏÇÄÁ ÜÔÏÔ +ÒĆÖÉÍ ŚËÌÀȚĆÎ, Emacs ÒÁÚÒÙŚÁĆÔ ÓÔÒÏËÉ ÍĆÖÄŐ ÓÌÏŚÁÍÉ ÁŚÔÏÍÁÔÉȚĆÓËÉ, ËÏÇÄÁ ŚÙ +ŚÓÔÁŚÌŃĆÔĆ ÔĆËÓÔ É ÄĆÌÁĆÔĆ ÓÔÒÏËÉ ÓÌÉÛËÏÍ ÄÌÉÎÎÙÍÉ. + +śÙ ÍÏÖĆÔĆ ŚËÌÀȚÉÔŰ ÒĆÖÉÍ ÁŚÔÏÚÁĐÏÌÎĆÎÉŃ ÎÁÂÒÁŚ M-x auto-fill-mode. +ëÏÇÄÁ ÜÔÏÔ ÒĆÖÉÍ ŚËÌÀȚĆÎ, ĆÇÏ ÍÏÖÎÏ ŚÙËÌÀȚÉÔŰ - M-x auto-fill-mode. +ćÓÌÉ ÒĆÖÉÍ ŚËÌÀȚĆÎ - ËÏÍÁÎÄÁ ĆÇÏ ŚÙËÌÀȚÉÔ, ĆÓÌÉ ŚÙËÌÀȚĆÎ - ŚËÌÀȚÉÔ. íÙ +ÎÁÚÙŚÁĆÍ ÜÔÏ ËÏÍÁÎÄÁ "ĐĆÒĆËÌÀȚĆÎÉŃ ÒĆÖÉÍÁ". + +>> îÁÂĆÒÉÔĆ M-x auto-fill-mode. úÁÔĆÍ ŚÓÔÁŚÌŃÊÔĆ ÓÔÒÏËŐ + ÉÚ "ÆÙŚÁ " ĐÏËÁ ÎĆ ŐŚÉÄÉÔĆ ËÁË ÏÎÁ ÒÁÚÄĆÌÉÔÓŃ ÎÁ ÄŚĆ ÓÔÒÏËÉ. + śÙ ÄÏÌÖÎÙ ĐÏÍĆĘÁÔŰ ĐÒÏÂĆÌÙ ÍĆÖÄŐ ÓÌÏŚÁÍÉ, ĐÏÔÏÍŐ ȚÔÏ ÒĆÖÉÍ ÁŚÔÏÚÁĐÏÌÎĆÎÉŃ + ÒÁÚÄĆÌŃĆÔ ÓÔÒÏËÉ ÔÏÌŰËÏ ĐÏ ĐÒÏÂĆÌÁÍ. + +çÒÁÎÉĂÁ ÏÂÙȚÎÏ ŚÙÓÔÁŚÌĆÎÁ ÎÁ 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. + + +* đïéóë +------- + +Emacs ŐÍĆĆÔ ÉÓËÁÔŰ ÓÔÒÏËÉ (ÜÔÏ ÎĆĐÒĆÒÙŚÎÙĆ ÇÒŐĐĐÙ ÓÉÍŚÏÌÏŚ ÉÌÉ ÓÌÏŚÁ) ŚĐĆÒĆÄ +ĐÏ ÔĆËÓÔŐ, ÉÌÉ ÎÁÚÁÄ. đÏÉÓË ÓÔÒÏËÉ ÜÔÏ ËÏÍÁÎÄÁ ĐĆÒĆÍĆĘĆÎÉŃ ËŐÒÓÏÒÁ; ÏÎÁ +ĐĆÒĆÍĆĘÁĆÔ ËŐÒÓÏÒ Ś ÓÌĆÄŐÀĘŐÀ ÔÏȚËŐ, ÇÄĆ ÎÁÊÄĆÎÁ ÉÓËÏÍÁŃ ÓÔÒÏËÁ. + +ëÏÍÁÎÄÁ ĐÏÉÓËÁ Emacs ÏÔÌÉȚÁÀÔÓŃ ÏÔ ÁÎÁÌÏÇÉȚÎÙÈ ËÏÍÁÎÄ ÂÏÌŰÛÉÎÓÔŚÁ ÄÒŐÇÉÈ +ÒĆÄÁËÔÏÒÏŚ ÔĆÍ, ȚÔÏ ÏÎÁ ÉÎËÒĆÍĆÎÔÁÌŰÎÁŃ. üÔÏ ÏÚÎÁȚÁĆÔ ȚÔÏ ĐÏÉÓË ĐÒÏÉÓÈÏÄÉÔ ĐÏ +ÍĆÒĆ ÔÏÇÏ ËÁË ŚÙ ÎÁÂÉÒÁĆÔĆ ÉÓËÏÍŐÀ ÓÔÒÏËŐ. + +ëÏÍÁÎÄÁ, ÎÁȚÉÎÁÀĘÁŃ ĐÏÉÓË ŚĐĆÒĆÄ - C-s, É C-r ÉĘĆÔ ÎÁÚÁÄ. +đïäïöäéôć! îĆ ÎŐÖÎÏ ĐÒÏÂÏŚÁÔŰ ÜÔÏ ĐÒŃÍÏ ÓĆÊȚÁÓ. + +ëÏÇÄÁ ŚÙ ÎÁÖÍĆÔĆ C-s ŚÙ ŐŚÉÄÉÔĆ ÓÔÒÏËŐ "I-search", ĐÏŃŚÉŚÛŐÀÓŃ Ś ÏÂÌÁÓÔÉ ÜÈÏ. +śÁÍ ÓÏÏÂĘÁĆÔÓŃ ȚÔÏ Emacs ÖÄĆÔ ŚŚÏÄÁ ÓÌÏŚÁ, ËÏÔÏÒÏĆ ŚÙ ÈÏÔÉÔĆ ÎÁÊÔÉ. + ÚÁŚĆÒÛÁĆÔ ĐÏÉÓË. + +>> ôĆĐĆÒŰ, ÎÁÖÍÉÔĆ C-s ÄÌŃ ÎÁȚÁÌÁ ĐÏÉÓËÁ. íĆÄÌĆÎÎÏ, ÏÄÎŐ ÂŐËŚŐ ÚÁ ÏÄÉÎ ÒÁÚ, + ÎÁÂÉÒÁÊÔĆ ÓÌÏŚÏ, 'ËŐÒÓÏÒ', ÏÓÔÁÎÁŚÌÉŚÁŃÓŰ ĐÏÓÌĆ ËÁÖÄÏÊ ŚŚĆÄĆÎÎÏÊ ÂŐËŚÙ, + ÚÁÍĆȚÁŃ ȚÔÏ ĐÒÏÉÓÈÏÄÉÔ Ó ËŐÒÓÏÒÏÍ. + óĆÊȚÁÓ ŚÙ ÎÁÛÌÉ ĐĆÒŚÏĆ ŚÈÏÖÄĆÎÉĆ ÓÌÏŚÁ "ËŐÒÓÏÒ". +>> îÁÖÍÉÔĆ C-s ÓÎÏŚÁ, ȚÔÏÂÙ ÎÁÊÔÉ ÓÌĆÄŐÀĘĆĆ ŚÈÏÖÄĆÎÉĆ ÓÌÏŚÁ "ËŐÒÓÏÒ". +>> ôĆĐĆÒŰ ÎÁÖÍÉÔĆ ȚĆÔÙÒĆ ÒÁÚÁ É ĐÒÏÓÌĆÄÉÔĆ ÚÁ ĐĆÒĆÍĆĘĆÎÉŃÍÉ ËŐÒÓÏÒÁ. +>> îÁÖÍÉÔĆ ÄÌŃ ÚÁŚĆÒÛĆÎÉŃ ĐÏÉÓËÁ. + +śÙ ŚÉÄĆÌÉ ȚÔÏ ĐÒÏÉÓÈÏÄÉÌÏ? 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", ĐÏÉÓË ĐĆÒĆÊÄĆÔ Ë +ĐĆÒŚÏÍŐ ŚÈÏÖÄĆÎÉÀ ÓÉÍŚÏÌÁ "c". ôĆĐĆÒŰ ĆÓÌÉ ŚÙ ÎÁÂĆÒĆÔĆ "u", ËŐÒÓÏÒ ĐĆÒĆÊÄĆÔ Ë +ĐĆÒŚÏÍŐ ŚÈÏÖÄĆÎÉÀ "cu". îÁÖÁÔÉĆ ŐÄÁÌÉÔ ÓÉÍŚÏÌ "u" ÉÈ ÓÔÒÏËÉ ĐÏÉÓËÁ, É +ËŐÒÓÏÒ ŚĆÒÎĆÔÓŃ Ë ĐĆÒŚÏÍŐ ŚÈÏÖÄĆÎÉÀ "c". + +ćÓÌÉ ŚÙ ŚÏ ŚÒĆÍŃ ĐÏÉÓËÁ ŚŚĆÄĆÔĆ control- ÉÌÉ meta- ÓÉÍŚÏÌ (ÚÁ ÎĆËÏÔÏÒÙÍÉ +ÉÓËÌÀȚĆÎÉŃÍÉ -- ÓÉÍŚÏÌÙ ŚÙÚÙŚÁÀĘÉĆ ĐÏÉÓË, Á ÉÍĆÎÎÏ C-s É C-r), ĐÏÉÓË +ĐÒĆËÒÁÔÉÔÓŃ. + +C-s ÎÁȚÉÎÁĆÔ ĐÏÉÓË É ÓÍÏÔÒÉÔ ÎÁ ÌÀÂÙĆ ŚÈÏÖÄĆÎÉŃ ÉÓËÏÍÏÊ ÓÔÒÏËÉ đïóìć ÔĆËŐĘĆÊ +ĐÏÚÉĂÉÉ ËŐÒÓÏÒÁ. ćÓÌÉ ŚÙ ÈÏÔÉÔĆ ÎÁÊÔÉ ȚÔÏ-ÔÏ ÒÁÎĆĆ Ś ÔĆËÓÔĆ, ÎÁÖÍÉÔĆ C-r. śÓĆ +ȚÔÏ ÍÙ ÇÏŚÏÒÉÌÉ Ï C-s ĐÒÉÍĆÎÉÍÏ É Ë C-r, ÚÁ ÉÓËÌÀȚĆÎÉĆÍ ĐÒÏÔÉŚÏĐÏÌÏÖÎÏÇÏ +ÎÁĐÒÁŚÌĆÎÉŃ ĐÏÉÓËÁ. + + +* íîïçï ïëïî (MULTIPLE WINDOWS) +------------------------------- + +ïÄÎÁ ÉÚ ĐÒÉŃÔÎÙÈ ÏÓÏÂĆÎÎÏÓÔĆÊ Emacs ÜÔÏ ÔÏ, ȚÔÏ ŚÙ ÍÏÖĆÔĆ ÏÔÏÂÒÁÖÁÔŰ ÂÏÌĆĆ ȚĆÍ +ÏÄÎÏ ÏËÎÏ ÎÁ ÜËÒÁÎĆ ÏÄÎÏŚÒĆÍĆÎÎÏ. + +>> đĆÒĆÍĆÓÔÉÔĆ ËŐÒÓÏÒ ÎÁ ÜÔŐ ÌÉÎÉÀ, É ÎÁÂĆÒÉÔĆ C-u 0 C-l. + +>> ôĆĐĆÒŰ, ÎÁÂĆÒÉÔĆ C-x 2, ȚÔÏ ÒÁÚÄĆÌÉÔ ÜËÒÁÎ ÎÁ ÄŚÁ ÏËÎÁ. + ïÂÁ ÏËÎÁ ÏÔÏÂÒÁÖÁÀÔ ŐȚĆÂÎÉË. ëŐÒÓÏÒ ÏÓÔÁÌÓŃ Ś ŚĆÒÈÎĆÍ ÏËÎĆ. + +>> îÁÖÍÉÔĆ C-M-v ÄÌŃ ĐÒÏËÒŐÔËÉ ÎÉÖÎĆÇÏ ÏËÎÁ. + (ĆÓÌÉ Ő ŚÁÓ ÎĆÔ ÎÁÓÔÏŃĘĆÊ ËÎÏĐËÉ Meta (Alt), ÎÁÖÍÉÔĆ ESC C-v.) + +>> îÁÖÍÉÔĆ C-x o ("o" ÏÔ ÓÌÏŚÁ "other" - ÄÒŐÇÏĆ) ÄÌŃ ĐĆÒĆÍĆĘĆÎÉŃ ËŐÒÓÏÒÁ Ś + ÎÉÖÎĆĆ ÏËÎÏ. +>> éÓĐÏÌŰÚŐÊÔĆ C-v É M-v Ś ÎÉÖÎĆÍ ÏËÎĆ ȚÔÏ ĐÒÏËÒŐȚÉŚÁÔŰ ĆÇÏ. + đÒÏÄÏÌÖÉÔĆ ȚÔĆÎÉĆ ÜÔÉÈ ÉÎÓÔÒŐËĂÉÊ Ś ŚĆÒÈÎĆÍ ÏËÎĆ. + +>> îÁÖÍÉÔĆ C-x o ÓÎÏŚÁ ȚÔÏÂÙ ĐĆÒĆÍĆÓÔÉÔŰ ËŐÒÓÏÒ ÎÁÚÁÄ Ś ŚĆÒÈÎĆĆ ÏËÎÏ. + ëŐÒÓÏÒ Ś ŚĆÒÈÎĆÍ ÏËÎĆ ÔÁÍ ÖĆ, ÇÄĆ É ÂÙÌ ÄÏ ÔÏÇÏ. + +śÙ ÍÏÖĆÔĆ ĐÒÏÄÏÌÖÁÔŰ ĐĆÒĆËÌÀȚÁÔŰÓŃ ÍĆÖÄŐ ÏËÎÁÍÉ, ÉÓĐÏÌŰÚŐŃ C-x o. ëÁÖÄÏĆ ÏËÎÏ +ÈÒÁÎÉÔ ÓŚÏÀ ĐÏÚÉĂÉÀ ËŐÒÓÏÒÁ, ÎÏ ÔÏÌŰËÏ ÏÄÎÏ ĐÏËÁÚÙŚÁĆÔ ËŐÒÓÏÒ. śÓĆ ÏÂÙȚÎÙĆ +ËÏÍÁÎÄÙ ÒĆÄÁËĂÉÉ ĐÒÉÍĆÎŃÀÔÓŃ Ë ÏËÎŐ, Ś ËÏÔÏÒÏÍ ÏÔÏÂÒÁÖÁĆÔÓŃ ËŐÒÓÏÒ. +íÙ ÎÁÚÙŚÁĆÍ ĆÇÏ "ŚÙÂÒÁÎÎÏĆ ÏËÎÏ" ("selected window"). + +ëÏÍÁÎÄÁ C-M-v ÏȚĆÎŰ ŐÄÏÂÎÁ, ËÏÇÄÁ ŚÙ ÒĆÄÁËÔÉÒŐĆÔĆ ÔĆËÓÔ Ś ÏÄÎÏÍ ÏËÎĆ, É +ÉÓĐÏÌŰÚŐĆÔĆ ŚÔÏÒÏĆ Ś ËÁȚĆÓÔŚĆ ÓĐÒÁŚÏȚÎÉËÁ. śÙ ÍÏÖĆÔĆ ŚÓĆÇÄÁ ÓÏÈÒÁÎŃÔŰ ËŐÒÓÏÒ +Ś ÏËÎĆ ÒĆÄÁËÔÉÒÏŚÁÎÉŃ É ĐÏÓÌĆÄÏŚÁÔĆÌŰÎÏ ĐÒÏÄŚÉÇÁÔŰÓŃ ŚÏ ŚÔÏÒÏÍ, ÉÓĐÏÌŰÚŐŃ +C-M-v. + +C-M-v ĐÒÉÍĆÒ CONTROL-META ÓÉÍŚÏÌÁ. ćÓÌÉ Ő ŚÁÓ ĆÓÔŰ ÎÁÓÔÏŃĘÁŃ ËÎÏĐËÁ META +(Alt), ŚÙ ÍÏÖĆÔĆ ÎÁÂÒÁÔŰ C-M-v ÎÁÖÁŚ ÏÄÎÏŚÒĆÍĆÎÎÏ CTRL É META É ÎĆ ÏÔĐŐÓËÁŃ +ÎÁÖÁÔŰ v. é ÎĆ ŚÁÖÎÏ ËÔÏ ÂŐÄĆÔ ÎÁÖÁÔ ĐĆÒŚÙÍ, CTRL ÉÌÉ META, ĐÏÔÏÍŐ ȚÔÏ ÜÔÉ +ËÎÏĐËÉ ÍÏÄÉÆÉĂÉÒŐÀÔ ÔÉĐ ÓÉÍŚÏÌÁ. + +ćÓÌÉ Ő ŚÁÓ ÎĆÔ ÎÁÓÔÏŃĘĆÊ ËÎÏĐËÉ META, É ŚÙ ÉÓĐÏÌŰÚŐĆÔĆ ESC ŚÍĆÓÔÏ ÎĆĆ, +ĐÏÒŃÄÏË ÄÏÌÖĆÎ ÂÙÔŰ ÓÌĆÄŐÀĘÉÍ: ŚÙ ÄÏÌÖÎÙ ÎÁÖÁÔŰ ESC Á ÓÌĆÄÏÍ CTRL-v; +CTRL-ESC v ÎĆ ÂŐÄĆÔ ÒÁÂÏÔÁÔŰ. đÏÔÏÍŐ, ȚÔÏ ESC ÉÍĆĆÔ ÓŚÏÊ ÓÏÂÓÔŚĆÎÎÙÊ ÓÉÍŚÏÌ, +ÜÔÏ ÎĆ ÍÏÄÉÆÉĂÉÒŐÀĘÁŃ ËÎÏĐËÁ. + +>> îÁÖÍÉÔĆ C-x 1 (Ś ŚĆÒÈÎĆÍ ÏËÎĆ) ȚÔÏÂÙ ÉÚÂÁŚÉÔŰÓŃ ÏÔ ÎÉÖÎĆÇÏ. + +(ćÓÌÉ ŚÙ ÎÁÖÁÌÉ C-x 1 Ś ÎÉÖÎĆÍ ÏËÎĆ, ÔÏ ŚÙ ÉÚÂÁŚÉÌÉÓŰ ÏÔ ŚĆÒÈÎĆÇÏ. đÏÎÉÍÁÊÔĆ +ÜÔŐ ËÏÍÁÎÄŐ ËÁË "ïÓÔÁŚÉÔŰ ÔÏÌŰËÏ ÏÄÎÏ ÏËÎÏ, ÔÏ Ś ËÏÔÏÒÏÍ Ń ÓĆÊȚÁÓ ÎÁÈÏÖŐÓŰ"). + +śÁÍ ÎĆ ÎŐÖÎÏ ÏÔÏÂÒÁÖÁÔŰ ÏÄÉÎ É ÔÏÔ ÖĆ ÂŐÆĆÒ Ś ÏÂÏÉÈ ÏËÎÁÈ. ćÓÌÉ ŚÙ ÉÓĐÏÌŰÚŐĆÔĆ +C-x C-f ȚÔÏÂÙ ÏÔËÒÙÔŰ ÆÁÊÌ Ś ÏÄÎÏÍ ÏËÎĆ, ÄÒŐÇÏĆ ÏÓÔÁÎĆÔÓŃ ÂĆÚ ÉÚÍĆÎĆÎÉŃ. śÙ +ÍÏÖĆÔĆ ÏÔËÒÙŚÁÔŰ ÆÁÊÌÙ Ś ËÁÖÄÏÍ ÏËÎĆ ÎĆÚÁŚÉÓÉÍÏ. + +ćÓÔŰ ÄÒŐÇÏÊ ĐŐÔŰ ÉÓĐÏÌŰÚÏŚÁÔŰ ÄŚÁ ÏËÎÁ ÏÔÏÂÒÁÖÁÀĘÉÈ ÒÁÚÎÙĆ ÆÁÊÌÙ: + +>> îÁÂĆÒÉÔĆ C-x 4 C-f ÚÁÔĆÍ ÉÍŃ ÏÄÎÏÇÏ É ŚÁÛÉÈ ÆÁÊÌÏŚ. úÁŚĆÒÛÉÔĆ . + đÏÓÍÏÔÒÉÔĆ ȚÔÏ ŚÙÂÒÁÎÎÙÊ ÆÁÊÌ ĐÏŃŚÉÌÓŃ Ś ÎÉÖÎĆÍ ÏËÎĆ. ëŐÒÓÏÒ ĐĆÒĆÛĆÌ + ÔŐÄÁ ÖĆ. + +>> îÁÂĆÒÉÔĆ C-x o ȚÔÏÂÙ ŚĆÒÎŐÔŰÓŃ Ś ŚĆÒÈÎĆĆ ÏËÎÏ, É C-x 1 ȚÔÏÂÙ ŐÄÁÌÉÔŰ ÎÉÖÎĆĆ + ÏËÎÏ. + + +* òćëőòóéśîùć őòïśîé òćäáëôéòïśáîéń (RECURSIVE EDITING LEVELS) +-------------------------------------------------------------- + +éÎÏÇÄÁ ŚÙ ÂŐÄĆÔĆ ŚËÌÀȚÁÔŰ ÔÁË ÎÁÚÙŚÁĆÍÙĆ "ÒĆËŐÒÓÉŚÎÙĆ ŐÒÏŚÎÉ ÒĆÄÁËÔÉÒÏŚÁÎÉŃ". +îÁ ÜÔÏ ŐËÁÚÙŚÁÀÔ ĐÒŃÍÏŐÇÏÌŰÎÙĆ ÓËÏÂÏȚËÉ Ś ÓÔÒÏËĆ ÓÏÓÔÏŃÎÉŃ, ÏËÒŐÖÁÀĘÉĆ ÏÂÙȚÎÙĆ +ÓËÏÂËÉ ŚÏËÒŐÇ ÉÍĆÎÉ ÏÓÎÏŚÎÏÇÏ ÒĆÖÉÍÁ. îÁĐÒÉÍĆÒ ŚÙ ÍÏÖĆÔĆ ŐŚÉÄĆÔŰ +[(Fundamental)] ŚÍĆÓÔÏ (Fundamental). + +ȚÔÏÂÙ ŚÙÊÔÉ ÉÚ ÒĆËŐÒÓÉŚÎÙÈ ŐÒÏŚÎĆÊ ÒĆÄÁËÔÉÒÏŚÁÎÉŃ, ÎÁÖÍÉÔĆ ESC ESC ESC. +üÔÏ ÍÎÏÇÏĂĆÌĆŚÁŃ ËÏÍÁÎÄÁ "ŚÙÈÏÄ". śÙ ÔÁË ÖĆ ÍÏÖĆÔĆ ÉÓĐÏÌŰÚÏŚÁÔŰ ĆĆ ÄÌŃ +ŐÎÉȚÔÏÖĆÎÉŃ ÌÉÛÎÉÈ ÏËÏÎ, É ŚÙÈÏÄÁ ÉÚ ÍÉÎÉÂŐÆĆÒÁ. + +>> îÁÖÍÉÔĆ M-x ȚÔÏÂÙ ĐÏĐÁÓÔŰ Ś ÍÉÎÉÂŐÆĆÒ; ÚÁÔĆÍ ÎÁÖÍÉÔĆ ESC ESC ESC + ȚÏ ŚÙÊÔÉ. + +śÙ ÎĆ ÍÏÖĆÔĆ ÉÓĐÏÌŰÚÏŚÁÔŰ C-g ȚÔÏÂÙ ŐÊÔÉ ÉÚ ÒĆËŐÒÓÉŚÎÙÈ ŐÒÏŚÎĆÊ ÒĆÄÁËÔÉÒÏŚÁÎÉŃ. +đÏÔÏÍŐ ȚÔÏ C-g ÉÓĐÏÌŰÚŐĆÔÓŃ ÄÌŃ ÏÔÍĆÎÙ ËÏÍÁÎÄÙ É ÁÒÇŐÍĆÎÔÏŚ âćú ÒĆËŐÒÓÉŚÎÙÈ +ŐÒÏŚÎĆÊ ÒĆÄÁËÔÉÒÏŚÁÎÉŃ. + + +* ëáë đïìőțéôű đïíïęű (GETTING MORE HELP) +----------------------------------------- + +ś ÜÔÏÍ ŐȚĆÂÎÉËĆ ÍÙ ĐÏĐÙÔÁÌÉÓŰ ÓÎÁÂÄÉÔŰ ŚÁÓ ÔÏÌŰËÏ ÔÏÊ ÉÎÆÏÒÍÁĂÉĆÊ, ËÏÔÏÒÁŃ +ĐÏÍÏÖĆÔ ÎÁȚÁÔŰ ÉÓĐÏÌŰÚÏŚÁÔŰ Emacs. ïȚĆÎŰ ÍÎÏÇÏ ÉÎÆÏÒÍÁĂÉÉ ÄÏÓÔŐĐÎÏ Ś +Emacs, É ÎĆŚÏÚÍÏÖÎÏ ŚÓÀ ĆĆ ĐÒĆÄÓÔÁŚÉÔŰ ÚÄĆÓŰ. ïÄÎÁËÏ, ŚÙ ÍÏÖĆÔĆ +ŚÙŐȚÉÔŰ ÂÏÌŰÛĆ ŚÏÚÍÏÖÎÏÓÔĆÊ Emacs, ŐÚÎÁÔŰ ÄÒŐÇÉĆ ĐÏÌĆÚÎÙĆ ÏÓÏÂĆÎÎÏÓÔÉ. Emacs +ĐÒĆÄÏÓÔÁŚÌŃĆÔ ËÏÍÁÎÄÙ ÄÌŃ ȚÔĆÎÉŃ ÄÏËŐÍĆÎÔÁĂÉÉ Ï ËÏÍÁÎÄÁÈ Emacs. üÔÉ ËÏÍÁÎÄÙ +"ĐÏÍÏĘÉ" ("help") ŚÓĆ ÎÁȚÉÎÁÀÔÓŃ Ó ÓÉÍŚÏÌÁ Control-h, ËÏÔÏÒÙÊ ŃŚÌŃĆÔÓŃ +"ÓÉÍŚÏÌÏÍ ĐÏÍÏĘÉ". + +ȚÔÏÂÙ ÉÓĐÏÌŰÚÏŚÁÔŰ ÏÓÏÂĆÎÎÏÓÔÉ đÏÍÏĘÉ, ÎÁÖÍÉÔĆ C-h, É ÚÁÔĆÍ ÓÉÍŚÏÌ, ËÏÔÏÒÙÊ +ÒÁÓÓËÁÖĆÔ ËÁËÏÊ ÉÍĆÎÎÏ ŚÉÄ ĐÏÍÏĘÉ ŚÙ ÈÏÔÉÔĆ ĐÏÌŐȚÉÔŰ. ćÓÌÉ ŚÙ äćêóôśéôćìűîï +ÒÁÓÔĆÒŃÌÉÓŰ, ÎÁÂĆÒÉÔĆ C-h ? É Emacs ÒÁÓÓËÁÖĆÔ ŚÁÍ ËÁËŐÀ ĐÏÍÏĘŰ ÏÎ ÍÏÖĆÔ ŚÁÍ +ĐÒĆÄÏÓÔÁŚÉÔŰ. ćÓÌÉ ŚÙ ÎÁÖÁÌÉ C-h É ĐĆÒĆÄŐÍÁÌÉ ÏÂÒÁĘÁÔŰÓŃ Ë ĐÏÍÏĘÉ, ĐÒÏÓÔÏ +ÎÁÖÍÉÔĆ C-g ȚÔÏÂÙ ÏÔÍĆÎÉÔŰ ÜÔŐ ËÏÍÁÎÄŐ. + +(ëÏĆ-ÇÄĆ ĐĆÒĆÎÁÚÎÁȚÁÀÔ ÓÉÍŚÏÌ C-h. òĆÁÌŰÎÏÊ ÎĆÏÂÈÏÄÉÍÏÓÔÉ Ś ÜÔÏÍ ÎĆÔ, +ÓÏÏÂĘÉÔĆ Ï ÎĆÊ ÓÉÓÔĆÍÎÏÍŐ ÁÄÍÉÎÉÓÔÒÁÔÏÒŐ. ôĆÍ ŚÒĆÍĆÎĆÍ, ĆÓÌÉ C-h ÎĆ +ŚÙÚÙŚÁĆÔ ÓÏÏÂĘĆÎÉĆ ĐÏÍÏĘÉ ŚÎÉÚŐ ÜËÒÁÎÁ, ĐÏĐÒÏÂŐÊÔĆ ÎÁÂÒÁÔŰ M-x help RET +ŚÍĆÓÔÏ ÜÔÏÇÏ.) + +óÁÍÁŃ ÏÓÎÏŚÎÁŃ ŚÏÚÍÏÖÎÏÓÔŰ đïíïęé - C-h c. îÁÖÍÉÔĆ C-h, ÚÁÔĆÍ c, É ÓÉÍŚÏÌ +ËÏÍÁÎÄÙ ÉÌÉ ĐÏÓÌĆÄÏŚÁÔĆÌŰÎÏÓÔŰ, É Emacs ÏÔÏÂÒÁÚÉÔ ÏȚĆÎŰ ËÒÁÔËÏĆ ÏĐÉÓÁÎÉĆ +ËÏÍÁÎÄÙ. + +>> îÁÖÍÉÔĆ C-h c Control-p. + óÏÏÂĘĆÎÉĆ ÄÏÌÖÎÏ ŚÙÇÌŃÄĆÔŰ ĐÒÉÍĆÒÎÏ ÔÁË + + C-p runs the command previous-line + (C-p ŚÙĐÏÌÎŃĆÔ ËÏÍÁÎÄŐ previous-line {ĐÒĆÄÙÄŐĘÁŃ-ÌÉÎÉŃ}) + +śÁÍ ÓÏÏÂĘÁÀÔ "ÉÍŃ ÆŐÎËĂÉÉ". éÍĆÎÁ ÆŐÎËĂÉÉ ÉÓĐÏÌŰÚŐÀÔÓŃ Ś ÏÓÎÏŚÎÏÍ ÄÌŃ +ÎÁÓÔÒÏÊËÉ É ÒÁÓÛÉÒĆÎÉŃ Emacs. éÍĆÎÁ ÆŐÎËĂÉÊ ŚÙÂÒÁÎÙ ÔÁË, ȚÔÏÂÙ ĐÏËÁÚÁÔŰ ȚÔÏ +ÉÍĆÎÎÏ ËÏÍÁÎÄÁ ÄĆÌÁĆÔ, ÔÁË ÖĆ ÏÎÉ ĐÏÚŚÏÌŃÀÔ Ó ĐÏÍÏĘŰÀ ÜÔÏÊ ËÒÁÔËÏÊ ÉÎÆÏÒÍÁĂÉÉ +ÌĆÇȚĆ ÚÁĐÏÍÎÉÔŰ ŐÖĆ ŚÙŐȚĆÎÎÙĆ ËÏÍÁÎÄÙ. + +íÎÏÇÏÓÉÍŚÏÌŰÎÙĆ ËÏÍÁÎÄÙ, ÔÁËÉĆ ËÁË C-x C-s É (ĆÓÌÉ Ő ŚÁÓ ÎĆÔ ËÎÏĐËÉ META ÉÌÉ +EDIT ÉÌÉ ALT) v ÔÁË ÖĆ ÂŐÄŐÔ ÄÏÓÔŐĐÎÙ ĐÏÓÌĆ C-h c. + +đÏÌŐȚÉÔĆ ÂÏÌŰÛĆ ÉÎÆÏÒÍÁĂÉÉ Ï ËÏÍÁÎÄĆ ÉÓĐÏÌŰÚŐŃ C-h k ŚÍĆÓÔÏ C-h c. + +>> îÁÂĆÒÉÔĆ C-h k Control-p. + +śÙ ŐŚÉÄÉÔĆ ÏĐÉÓÁÎÉĆ ÆŐÎËĂÉÉ, Á ÔÁËÖĆ ĆĆ ÉÍŃ Ś ÏÔÄĆÌŰÎÏÍ ÏËÎĆ Emacs. ëÏÇÄÁ ŚÙ +ÚÁŚĆÒÛÉÔĆ ȚÔĆÎÉĆ, ÎÁÖÍÉÔĆ q ȚÔÏÂÙ ÉÚÂÁŚÉÔŰÓŃ ÏÔ ÔĆËÓÔÁ ĐÏÍÏĘÉ. + +ćÓÔŰ ĆĘĆ ÎĆÓËÏÌŰËÏ ĐÏÌĆÚÎÙÈ ÏĐĂÉÊ C-h: + + C-h f ïĐÉÓÙŚÁĆÔ ÆŐÎËĂÉÀ. śÁÍ ÎĆÏÂÈÏÄÉÍÏ ÎÁÂÒÁÔŰ ÉÍŃ ÆŐÎËĂÉÉ. + +>> đÏĐÒÏÂŐÊÔĆ ÎÁÂÒÁÔŰ C-h f previous-line. + üÔÏ ÒÁÓĐĆȚÁÔÁĆÔ ÉÎÆÏÒÍÁĂÉÀ Emacs Ï ÜÔÏÊ ÆŐÎËĂÉÉ, ËÏÔÏÒÁŃ ŚÙĐÏÌÎŃĆÔÓŃ + ËÏÍÁÎÄÏÊ C-p. + + C-h a Hyper Apropos. śŚĆÄÉÔĆ ËÌÀȚĆŚÏĆ ÓÌÏŚÏ É Emacs ĐÏËÁÖĆÔ ŚÁÍ + ÓĐÉÓÏË ŚÓĆÈ ÆŐÎËĂÉÊ É ĐĆÒĆÍĆÎÎÙÈ, ÉÍĆÎÁ ËÏÔÏÒÙÈ ÓÏÄĆÒÖÁÔ ÜÔÏ + ÓÌÏŚÏ. ëÏÍÁÎÄÙ, ËÏÔÏÒÙĆ ÍÏÇŐÔ ÂÙÔŰ ŚÙÚŚÁÎÙ ȚĆÒĆÚ Meta-x, + ÂŐÄŐÔ ÏÔÍĆȚĆÎÙ ÚŚĆÚÄÏȚËÏÊ ÓÌĆŚÁ. + +>> îÁÂĆÒÉÔĆ C-h a newline. + +ÜÔÏ ÏÔÏÂÒÁÚÉÔ ĐÏÌÎÙÊ ÓĐÉÓÏË ÆŐÎËĂÉÊ É ĐĆÒĆÍĆÎÎÙÈ ÉÍĆÎÁ ËÏÔÏÒÙÈ ÎÁȚÉÎÁÀÔÓŃ Ó +"newline". îÁÖÍÉÔĆ ÉÌÉ ËÌÉËÎÉÔĆ ÓÒĆÄÎĆÊ ËÎÏĐËÏÊ ÍÙÛËÉ ȚÔÏÂÙ ĐÏÌŐȚÉÔŰ +ÂÏÌŰÛĆ Ï ÆŐÎËĂÉÉ ÉÌÉ ĐĆÒĆÍĆÎÎÏÊ. îÁÖÍÉÔĆ `q' ȚÏ ŚÙÊÔÉ ÉÚ hyper-apropos. + + +* úáëìàțćîéć +------------ + +úÁĐÏÍÎÉÔĆ, ȚÔÏÂÙ ŚÙÊÔÉ ÉÚ Emacs ÎÁÓÏŚÓĆÍ ÉÓĐÏÌŰÚŐÊÔĆ C-x C-c. ȚÔÏÂÙ ŚÒĆÍĆÎÎÏ +ŚÙÊÔÉ Ś ÏÂÏÌÏȚËŐ (shell) É ĐÏÔÏÍ ŚĆÒÎŐÔŰÓŃ ÏÂÒÁÔÎÏ, ÉÓĐÏÌŰÚŐÊÔĆ C-z. +(Ś X, ÜÔÏ ÓŚĆÒÎĆÔ ÔĆËŐĘĆĆ ÏËÎÏ Emacs Ś ÉËÏÎËŐ.) + +üÔÏÔ ŐȚĆÂÎÉË ÄÏÌÖĆÎ ÂÙÔŰ ĐÏÎŃÔĆÎ ŚÓĆÍ ÎÏŚÙÍ ĐÏÌŰÚÏŚÁÔĆÌŃÍ, ĆÓÌÉ ŚÙ ÎÁÊÄĆÔĆ +ȚÔÏ-ÎÉÂŐÄŰ ÎĆŃÓÎÏĆ, ÎĆ ÎŐÖÎÏ ÓÉÄĆÔŰ É ĐÏÒÉĂÁÔŰ ÓĆÂŃ - ÖÁÌŐÊÔĆÓŰ! + + +COPYING +------- + +üÔÏÔ ŐȚĆÂÎÉË ĐÒÏÉÚÏÛĆÌ ÉÚ ÄÌÉÎÎÏÊ ÓĆÒÉÉ ŐȚĆÂÎÉËÏŚ Emacs, ÎÁȚÁÔÏÊ Ó ÏÄÎÁÖÄÙ +ÎÁĐÉÓÁÎÎÏÇÏ by Stuart Cracraft ÄÌŃ ÏÒÉÇÉÎÁÌŰÎÏÇÏ Emacs. Ben Wing ĐÏÄĐÒÁŚÉÌ +ŐȚĆÂÎÉË ÄÌŃ X Windows. Martin Buchholz É Hrvoje Niksic ÄÏÂÁŚÉÌÉ ÍÎÏÇÏ +ÉÓĐÒÁŚÌĆÎÉÊ ÄÌŃ XEmacs. + +üÔÁ ŚĆÒÓÉŃ ŐȚĆÂÎÉËÁ, ËÁË É GNU Emacs, ÚÁĘÉĘĆÎÁ ĐÒÁŚÁÍÉ ËÏĐÉÒÏŚÁÎÉŃ +(copyrighted), É ĐÒÉÈÏÄÉÔ Ó ÏÇÒÁÎÉȚĆÎÉŃÍÉ ÒÁÓĐÒÏÓÔÒÁÎĆÎÉŃ ËÏĐÉÊ ÓÏ +ÓÌĆÄŐÀĘÉÍÉ ÓÏÇÌÁÛĆÎÉŃÍÉ: + +Copyright (c) 1985, 1996 Free Software Foundation + + 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. + + 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. + +őÓÌÏŚÉŃ ËÏĐÉÒÏŚÁÎÉŃ ÓÁÍÏÇÏ Emacs ÂÏÌĆĆ ÓÌÏÖÎÙĆ, ÎÏ Ś ÔÏÍ ÖĆ ÄŐÈĆ. +đÏÖÁÌŐÊÓÔÁ, ĐÒÏȚÔÉÔĆ ÆÁÊÌ COPYING É ÚÁÔĆÍ ÄÁÊÔĆ ËÏĐÉÀ GNU Emacs ŚÁÛÉ +ÄÒŐÚŰŃÍ. Help stamp out software obstructionism ("ownership") by using, +writing, and sharing free software! + +// ÚÁÍĆȚÁÎÉŃ, ÉÓĐÒÁŚÌĆÎÉŃ ÏÛÉÂÏË Ó ÎĆÔĆÒĐĆÎÉĆÍ ÖÄŐ ĐÏ ÁÄÒĆÓŐ bor@vb.dn.ua +// Vladimir Bormotov. \ No newline at end of file diff -r deca3c1083ac -r 70ad99077275 etc/enriched.doc --- a/etc/enriched.doc Mon Aug 13 10:38:47 2007 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,263 +0,0 @@ -Content-Type: text/enriched -Text-Width: 70 - -
bluewhiteenriched.el: - -bluewhiteWYSIWYG rich text editing for GNU Emacs - - -
bluewhiteINTRODUCTION - - - -Emacs now has the ability to edit enriched text, which is text -containing faces, colors, indentation, and other properties. -This document is a quick introduction to some of the new features, -and is also an example file in the text/enriched format. - - -bluewhiteINSTALLATION and STARTUP - - - -Most of the time, you need not do anything to get these features -to work. If you visit a file that has been written out in -text/enriched format, it will automatically be decoded, Emacs will -enter `enriched-mode' while visiting it, and whenever you save it -it will be saved in the same format it was read in. - - -If you wish to create a new file, however, you will need to turn -on enriched-mode yourself: - - -M-x enriched-mode RET - - -Or, if you get a text/enriched file that Emacs does not -automatically recognize and decode, you can tell Emacs to decode -it (which also turns on enriched-mode automatically): - - - M-x format-decode-buffer RET text/enriched RET - - - -bluewhiteWHAT IS ENCODED - - - -Here is the current list of text-properties that are saved; they -are discussed in more detail below. -Most of these can be added or changed with the "Text Properties" -menu, available under the "Edit" item in the menu-bar, or on -C-mouse-2 (Control + the middle mouse button). - -Faces: default, bold, italic, underline, fixed, etc. - -Colors: redDarkSlateGrayanyDarkSlateGrayorangething yellowyourgreen screenblue light bluecanviolet display... - -Newlines: Which ones are real ("hard") newlines, and which can be -changed to fit lines into the margins. - -Margins: can be indented on the left or right. - -Justification (whether lines should be flush with the left margin, -the right margin, fully justified, centered, or left alone). - -Excerpts: "For quoted material." - -Read-only regions. - - -bluewhiteFACES and COLORS - - - -You can add faces either with the menu or with M-g. The face is -applied to the current region. If you are using -`transient-mark-mode' and the region is not active, then the face -applies to whatever you type next. Any face can have colors, but -faces have no other attributes are put on the color submenus of -the "Text Properties" menu. - - -bluewhiteNEWLINES and PARAGRAPHS - - - -Text/enriched format distinguishes between hard and soft newlines. -Hard newlines are used to separate paragraphs, or items in a list, -or anywhere that must be a line break no matter what the margins -are. Soft newlines are the ones inserted in order to fit text -between the margins. The fill and auto-fill functions insert soft -newlines as necessary, but hard newlines are only inserted by -direct request, such as using the return key or the C-o -(open-line) function. - - -bluewhiteINDENTATION - - - -The fill functions also understand margins, which can be set -for any region of a document. In addition to the menu items, -which increase or decrease the margins, there are two commands -for setting the margins absolutely: C-c l (set-left-margin) -and C-c r (set-right-margin). - - -You can change indentation at any point in a paragraph, which -makes it possible to do interesting things like -hanging-indents: this paragraph was indented by selecting the -region from the second word to the end of the paragraph, and -indenting only that part. - - - -bluewhiteJUSTIFICATION - - - -Several styles of justification are possible, the simplest being unfilled. -This means that your lines will be left as you write them. -This paragraph is unfilled. - -The most common (for English) style is FlushLeft. This means -lines are aligned at the left margin but left uneven at the -right. - - - FlushRight makes each line flush with the right margin instead. - - - -FlushBoth regions, which are sometimes called "fully justified" -are aligned evenly on both edges, so that the text on the page has -a smooth appearance as in a book or newspaper article. -Unfortunately this does not look as nice with a fixed-width font -as it does in a proportionally-spaced printed document; the extra -spaces that are needed on the screen can make it hard to read. - - -
Center - -
Finally, there is center justification. - The normal center-paragraph key, M-S, can be used to turn on - center justification in enriched-mode. - - M-j or the "Text Properties" menu also can be used to change - justification. - - - -
Note that justification can only change at hard newlines, because -that is the unit over which filling gets done. - - -
bluewhiteEXCERPTS - - - -This is an example of an excerpt. You can use them for quoted -parts of other people's email messages and the like. It is just a -face, which is the same as the `italic' face by default. - - -bluewhiteTHE FILE FORMAT - - - -Enriched-mode documents are saved in an extended version of a -format called text/enriched, which is defined as part of the MIME -standard. This means that your documents are transportable (even -through email) to many other systems. In the future other file -formats may be supported as well. - - -Since Emacs adds some non-standard features to the format (colors - -and read-only regions), not all systems will be able to recreate -all of the features of your document, but they will get as close -as possible. - - -The MIME standard is defined in internet RFC 1521; text/enriched -is defined in RFC 1563. Details on obtaining these documents via -FTP or email may be obtained by sending an email message to -rfc-info@isi.edu with the message body: - -help: ways_to_get_rfcs - - -See also the newsgroup comp.mail.mime. - - -bluewhiteCUSTOMIZATION - - - -- The fixed and excerpt faces should be set to your liking. - -- User-preference variables: default-justification, enriched-verbose. -- You can add annotations for your own text properties by making -additions to enriched-annotation-alist. Note that the -standard requires you to name your annotation starting "x-" -(as in "x-read-only"). Please send me any such additions that -you think might be of general interest so that I can include -them in the distribution. - - -bluewhiteTO-DO LIST - - - -[Feel free to work on these and send me the results!] - -- Be smarter about fixing malformed files. - -- Make the indentation work more seamlessly and robustly: - -+ Create an aggressive auto-fill function that will keep the -paragraph properly filled all the time, without slowing -down editing too much. - -+ Refill after yank. - -+ Make deleting a newline also delete the indentation -following it. - -+ Never let point enter indentation?? - -- Notice and re-fill when window changes widths (optionally). - -- Deal with the `category' text-property in a smart way. - -- Interface w/ GNUS, VM, RMAIL. Maybe Info too? - -- Support more formats: RTF, HTML... - - -bluewhiteFinal Notes: - - - -This code and documentation is under development. - Comments and bug reports are welcome. - - -whiteblueBoris Goldowskylight blue light blue<blue - -bluewhite April 1995 blue - - - - - - - - - - - - diff -r deca3c1083ac -r 70ad99077275 etc/gnuserv.1 --- a/etc/gnuserv.1 Mon Aug 13 10:38:47 2007 +0200 +++ b/etc/gnuserv.1 Mon Aug 13 10:39:40 2007 +0200 @@ -291,4 +291,4 @@ etc/emacsclient.c, etc/server.c and lisp/server.el from the GNU Emacs 18.52 distribution. Various modifications from Bob Weiner (weiner@mot.com), Darrell Kindred (dkindred@cmu.edu), Arup Mukherjee (arup@cmu.edu), Ben -Wing (wing@666.com) and Hrvoje Niksic (hniksic@srce.hr). +Wing (ben@xemacs.org) and Hrvoje Niksic (hniksic@srce.hr). diff -r deca3c1083ac -r 70ad99077275 etc/gnuserv.README --- a/etc/gnuserv.README Mon Aug 13 10:38:47 2007 +0200 +++ b/etc/gnuserv.README Mon Aug 13 10:39:40 2007 +0200 @@ -50,7 +50,7 @@ This version of gnuserv has been enhanced by a number of people, including Bob Weiner , Darrell Kindred , -Arup Mukherjee , and Ben Wing . The +Arup Mukherjee , and Ben Wing . The modifications are basically as follows: Bob Weiner: diff -r deca3c1083ac -r 70ad99077275 etc/jmiller.xpm.Z Binary file etc/jmiller.xpm.Z has changed diff -r deca3c1083ac -r 70ad99077275 etc/jmillerm.xpm.Z Binary file etc/jmillerm.xpm.Z has changed diff -r deca3c1083ac -r 70ad99077275 etc/mcook-m.xpm.Z Binary file etc/mcook-m.xpm.Z has changed diff -r deca3c1083ac -r 70ad99077275 etc/mcook.xpm.Z Binary file etc/mcook.xpm.Z has changed diff -r deca3c1083ac -r 70ad99077275 etc/photos/mcook-m.xpm.Z Binary file etc/photos/mcook-m.xpm.Z has changed diff -r deca3c1083ac -r 70ad99077275 etc/photos/mcook.xpm.Z Binary file etc/photos/mcook.xpm.Z has changed diff -r deca3c1083ac -r 70ad99077275 etc/xemacs-ja.1 --- a/etc/xemacs-ja.1 Mon Aug 13 10:38:47 2007 +0200 +++ b/etc/xemacs-ja.1 Mon Aug 13 10:39:40 2007 +0200 @@ -679,7 +679,7 @@ .SH "ĂűŒÔ" .PP .B XEmacs -€ÏĄąChuck Thompson ĄąBen Wing Ąą +€ÏĄąChuck Thompson ĄąBen Wing Ąą Jamie Zawinski ĄąRichard Mlynarik Ąą Martin Buchholz ŸĄą€Ë€è€Ă€Æœń€«€ì€Ț€·€żĄŁ Free Software Foundation €Î Richard Stallman €Îœń€€€ż diff -r deca3c1083ac -r 70ad99077275 etc/xemacs.1 --- a/etc/xemacs.1 Mon Aug 13 10:38:47 2007 +0200 +++ b/etc/xemacs.1 Mon Aug 13 10:39:40 2007 +0200 @@ -786,31 +786,6 @@ .PP ftp://ftp.xemacs.org/pub/xemacs/ .PP -or from a mirror site near you. Here is an approximate (possibly -out-of-date) list of mirror sites: -.PP -ftp://ftp.ai.mit.edu/pub/xemacs/ -.br -ftp://ftp.uu.net/systems/gnu/xemacs/ -.br -ftp://ftp.sunet.se/pub/gnu/xemacs/ -.br -ftp://ftp.cenatls.cena.dgac.fr/pub/Emacs/xemacs/ -.br -ftp://liasun3.epfl.ch/pub/gnu/xemacs/ -.br -ftp://ftp.th-darmstadt.de/pub/editors/xemacs/ -.br -ftp://audrey.levels.unisa.edu.au/xemacs/ -.br -ftp://sunsite.doc.ic.ac.uk/gnu/xemacs/ -.br -ftp://ftp.ibp.fr/pub/emacs/xemacs/ -.br -ftp://uiarchive.cso.uiuc.edu/pub/packages/xemacs/ -.br -ftp://ftp.technion.ac.il/pub/unsupported/gnu/xemacs/ -.br -ftp://thphys.irb.hr/pub/xemacs/ -.PP -See the Web site for an up-to-date list of mirror sites. +or from a mirror site near you. Mirror sites are listed in the file +etc/FTP in the XEmacs distribution or see the Web site for an up-to-date +list of mirror sites. diff -r deca3c1083ac -r 70ad99077275 lib-src/ChangeLog --- a/lib-src/ChangeLog Mon Aug 13 10:38:47 2007 +0200 +++ b/lib-src/ChangeLog Mon Aug 13 10:39:40 2007 +0200 @@ -1,3 +1,7 @@ +1998-07-09 SL Baur + + * XEmacs 21.0-pre4 is released. + 1998-06-16 Jan Vroonhof * gnuclient.c (main): Use disconnect_from_server to read & echo diff -r deca3c1083ac -r 70ad99077275 lisp/ChangeLog --- a/lisp/ChangeLog Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/ChangeLog Mon Aug 13 10:39:40 2007 +0200 @@ -1,3 +1,132 @@ +1998-07-09 SL Baur + + * XEmacs 21.0-pre4 is released. + +1998-06-28 Hrvoje Niksic + + * menubar-items.el (default-menubar): Use `report-emacs-bug' for + reporting bugs. + (maybe-add-init-button): Fix semantics under Windows. Use + `expand-file-name' rather than `concat'. + + * help.el (print-messages): New function. + +1998-07-05 Oscar Figueiredo + + * ldap.el (ldap-host-parameters-alist): Docstring fixes + +1998-07-04 Jonathan Harris + + * about.el: Tweaked my entry in about-hackers. + + * find-paths.el (paths-emacs-root-p): + Relaxed emacs-root checking of an in-place installation to + also accomodate the flat layout used on MS Windows. + +1998-06-29 John Jones + + * package-get.el: calls to package-get-update-all will only + update packages which are already installed. + +1998-07-05 Andy Piper + + * faces.el (xpm-color-symbols): remove hardcoded defaults these + are handled by the gui-element face fallbacks now. + + * x-faces.el: default gui-element face to "background" as well as + the default face. + + * msw-faces.el (mswindows-init-device-faces): remove gui-element + and default face settings since these are set as fallbacks now in + the appropriate domain. + +1998-07-02 SL Baur + + * text-mode.el (text-mode): Reorder regexp so the OR part + corresponding to `page-delim' goes first and the hack in + `forward-paragraph' will work. + With bug analysis from Bob Weiner + +1998-06-29 Kyle Jones + + * subr.el (remove-hook): When checking the hook value + with functionp, don't apply car to it. + +1998-06-24 Jonathan Harris + + * package-get.el (package-get-remote-filename): + Don't use file-name-as-directory because the local directory + separator conventions might not be the same as ftp's. + +1998-06-27 Oscar Figueiredo + + * ldap.el (ldap-host-parameters-alist): New name of + `ldap-host-parameters-plist' + +1998-06-26 Adrian Aichner + + * package-get.el: Using (require 'package-get-base), now that it + provides itself. Consequently removed all instances of (load + "package-get-base.el"). + +1998-06-29 Kyle Jones + + * subr.el (remove-hook): Don't treat the hook value as a + list unless it is both consp and not functionp. + +1998-06-29 SL Baur + + * about.el: Email address for Ben Wing is ben@xemacs.org. + * auto-show.el: Ditto. + * bytecomp.el: Ditto. + * faces.el: Ditto. + * x-scrollbar.el: Ditto. + * x-misc.el: Ditto. + * tty-init.el: Ditto. + * toolbar-items.el: Ditto. + * symbol-syntax.el: Ditto. + * specifier.el: Ditto. + * objects.el: Ditto. + * hyper-apropos.el: Ditto. + * glyphs.el: Ditto. + +1998-06-27 Hrvoje Niksic + + * mouse.el (drag-window-divider): vertical-divider-draggable-p -> + vertical-divider-always-visible-p. + (default-mouse-motion-handler): Ditto. + +1998-06-21 Hrvoje Niksic + + * scrollbar.el (scrollbars-visible-p): Simplify. Always set the + global value. + +1998-06-21 Oliver Graf + + * build-reports.el: changed receiver to xemacs-build-reports list + +1998-06-19 Jonathan Harris + + * font.el: Split font-family-mappings into X and + mswindows-specific versions. + mswindows-font-create-[object|name]: Treat supplied size + as a pointsize. Added underline and strikethru handling. + + * msw-faces.el: changed default mswindows charset to western. + + * msw-glyphs.el: removed space in border-glyph font string that + was inserted to get round bugs in the mswindows C font code. + +1998-06-27 SL Baur + + * about.el (about-hackers): Credits update. + + * help-nomule.el (tutorial-supported-languages): Add Romanian + TUTORIAL. + + * code-files.el (file-coding-system-alist): Hardwire TUTORIAL.ro + to ISO-8859-2. + 1998-06-19 Jonathan Harris * font.el: Split font-family-mappings into X and diff -r deca3c1083ac -r 70ad99077275 lisp/about.el --- a/lisp/about.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/about.el Mon Aug 13 10:39:40 2007 +0200 @@ -26,7 +26,7 @@ ;;; Synched up with: Not in FSF. ;; Original code: Jamie Zawinski -;; Text: Ben Wing , Jamie Zawinski +;; Text: Ben Wing , Jamie Zawinski ;; Hard: Amiga 1000, Progressive Peripherals Frame Grabber. ;; Soft: FG 2.0, DigiPaint 3.0, pbmplus (dec 91), xv 3.0. ;; Modified for 19.11 by Eduardo Pelegri-Llopart @@ -66,6 +66,7 @@ (jareth "Jareth Hein" "jareth@camelot.co.jp") (jason "Jason Mastaler" "jason@mastaler.com") (jens "Jens Lautenbacher" "jens@lemcbed.lem.uni-karlsruhe.de") + (jmiller "Jeff Miller" "jmiller@smart.net") (juhp "Jens-Ulrik Holger Petersen" "petersen@kurims.kyoto-u.ac.jp") (jwz "Jamie Zawinski" "jwz@netscape.com") (kazz "IENAGA Kazuyuki" "ienaga@jsys.co.jp") @@ -88,7 +89,7 @@ (stigb "Stig Bjorlykke" "stigb@tihlde.hist.no") (thiessel "Marcus Thiessel" "thiessel@rhrk.uni-kl.de") (vladimir "Vladimir Ivanovic" "vladimir@mri.com") - (wing "Ben Wing" "wing@xemacs.org") + (wing "Ben Wing" "ben@xemacs.org") (wmperry "William Perry" "wmperry@aventail.com")) "Alist of XEmacs hackers.") @@ -986,6 +987,16 @@ See: ") (about-url-link 'jason "Visit Jason's homepage") (widget-insert ".\n")) + (jmiller + (widget-inset "\ +Jeff grew up in Indiana and is a country boy at heart. He currently lives +in, of all places, Millersville Maryland. He spends a lot of his free +time tinkering with Linux and hacking on XEmacs and loves it when he finds +new cool features in either. When he's not doing that, he enjoys downhill +skiing, puzzles, and sci-fi. Jeff is also really interested in classical +Roman history and enjoys making trips to Italy, where he was born, and +seeing the sights") + (widget-insert ".\n")) )) ;; Setup the buffer for a maintainer. @@ -1193,6 +1204,8 @@ (about-show-linked-info 'jason "\ Beta tester and manager of the various XEmacs mailing lists. Originator and maintainer of the gnus.org domain.\n") + (about-show-linked-info 'jmiller "\ +Beta tester and last hacker of calendar.\n") (flet ((print-short (name addr &optional shortinfo) (concat (about-with-face name 'italic) (about-tabs name) @@ -1235,6 +1248,10 @@ will get to finish it sometime sooner rather than later. I do vaguely remember University where it seems like I had more spare time that I can believe now. Oh well, such is life.\n") + (print-short "Jonathan Harris" "jhar@tardis.ed.ac.uk" "\ +Manages the team responsible for the EPOC kernel at Symbian Ltd. Started +the mswindows native-GUI port of XEmacs because he felt lost using +Microsoft Windows without a real editor.\n") (print-short "Michael R. Cook" "mcook@cognex.com" "\ Author of the \"shy groups\" and minimal matching regular expression extensions.\n") @@ -1330,7 +1347,6 @@ (print-short "ChangGil Han" "cghan@phys401.phys.pusan.ac.kr") (print-short "Derek Harding" "dharding@lssec.bt.co.uk") (print-short "Michael Harnois" "mharnois@sbt.net") - (print-short "Jonathan Harris" "jhar@tardis.ed.ac.uk") (print-short "John Haxby" "J.Haxby@isode.com") (print-short "Karl M. Hegbloom" "karlheg@inetarena.com") (print-short "Benedikt Heinen" "beh@icemark.thenet.ch") @@ -1342,6 +1358,7 @@ (print-short "Chris Holt" "xris@migraine.stanford.edu") (print-short "Tetsuya HOYANO" "hoyano@ari.bekkoame.or.jp") (print-short "David Hughes" "djh@harston.cv.com") + (print-short "Tudor Hulubei" "tudor@cs.unh.edu") (print-short "Tatsuya Ichikawa" "ichikawa@hv.epson.co.jp") (print-short "Andrew Innes" "andrewi@harlequin.co.uk") (print-short "Andreas Jaeger" "aj@arthur.rhein-neckar.de") diff -r deca3c1083ac -r 70ad99077275 lisp/auto-show.el --- a/lisp/auto-show.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/auto-show.el Mon Aug 13 10:39:40 2007 +0200 @@ -30,7 +30,7 @@ ;; This file is dumped with XEmacs. -;; Modified by: Ben Wing +;; Modified by: Ben Wing ;; This file provides functions that ;; automatically scroll the window horizontally when the point moves diff -r deca3c1083ac -r 70ad99077275 lisp/build-report.el --- a/lisp/build-report.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/build-report.el Mon Aug 13 10:39:40 2007 +0200 @@ -61,7 +61,7 @@ :group 'build) (defcustom build-report-destination - "xemacs-beta@xemacs.org" + "xemacs-build-reports@xemacs.org" "The mail address XEmacs Build Reports should go to." :type 'string :group 'build-report) diff -r deca3c1083ac -r 70ad99077275 lisp/bytecomp.el --- a/lisp/bytecomp.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/bytecomp.el Mon Aug 13 10:39:40 2007 +0200 @@ -3003,7 +3003,7 @@ ((= len 4) (byte-compile-three-args form)) (t (byte-compile-subr-wrong-args form "2-3"))))) -;; from Ben Wing : some inlined functions have extra +;; from Ben Wing : some inlined functions have extra ;; optional args added to them in XEmacs 19.12. Changing the byte ;; interpreter to deal with these args would be wrong and cause ;; incompatibility, so we generate non-inlined calls for those cases. diff -r deca3c1083ac -r 70ad99077275 lisp/code-files.el --- a/lisp/code-files.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/code-files.el Mon Aug 13 10:39:40 2007 +0200 @@ -67,6 +67,7 @@ ("\\.\\(jpeg\\|jpg\\)$" . (binary . binary)) ("TUTORIAL\\.hr$" . iso-8859-2) ("TUTORIAL\\.pl$" . iso-8859-2) + ("TUTORIAL\\.ro$" . iso-8859-2) ;; ("\\.\\(el\\|emacs\\|info\\(-[0-9]+\\)?\\|texi\\)$" . iso-2022-8) ;; ("\\(ChangeLog\\|CHANGES-beta\\)$" . iso-2022-8) ("\\.\\(gz\\|Z\\)$" . binary) diff -r deca3c1083ac -r 70ad99077275 lisp/faces.el --- a/lisp/faces.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/faces.el Mon Aug 13 10:39:40 2007 +0200 @@ -4,7 +4,7 @@ ;; Copyright (C) 1995 Board of Trustees, University of Illinois ;; Copyright (C) 1995, 1996 Ben Wing -;; Author: Ben Wing +;; Author: Ben Wing ;; Keywords: faces, internal, dumped ;; This file is part of XEmacs. @@ -1674,16 +1674,14 @@ (x-get-resource "backgroundToolBarColor" "BackgroundToolBarColor" 'string)) - (face-background 'toolbar) - "Gray80"))) + (face-background 'toolbar)))) (purecopy '("foregroundToolBarColor" (or (and (featurep 'x) (x-get-resource "foregroundToolBarColor" "ForegroundToolBarColor" 'string)) - (face-foreground 'toolbar) - "Black"))) + (face-foreground 'toolbar)))) ))) (when (featurep 'tty) diff -r deca3c1083ac -r 70ad99077275 lisp/find-paths.el --- a/lisp/find-paths.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/find-paths.el Mon Aug 13 10:39:40 2007 +0200 @@ -100,11 +100,10 @@ (file-directory-p (paths-construct-path (list directory "lib" emacs-program-name))) - ;; in-place + ;; in-place or windows-nt (and - (file-directory-p (paths-construct-path (list directory "lib-src"))) (file-directory-p (paths-construct-path (list directory "lisp"))) - (file-directory-p (paths-construct-path (list directory "src")))))) + (file-directory-p (paths-construct-path (list directory "etc")))))) (defun paths-chase-symlink (file-name) "Chase a symlink until the bitter end." diff -r deca3c1083ac -r 70ad99077275 lisp/glyphs.el --- a/lisp/glyphs.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/glyphs.el Mon Aug 13 10:39:40 2007 +0200 @@ -3,7 +3,7 @@ ;; Copyright (C) 1994, 1997 Free Software Foundation, Inc. ;; Copyright (C) 1995, 1996 Ben Wing. -;; Author: Chuck Thompson , Ben Wing +;; Author: Chuck Thompson , Ben Wing ;; Maintainer: XEmacs Development Team ;; Keywords: extensions, internal, dumped diff -r deca3c1083ac -r 70ad99077275 lisp/help-nomule.el --- a/lisp/help-nomule.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/help-nomule.el Mon Aug 13 10:39:40 2007 +0200 @@ -35,7 +35,8 @@ ("German" de iso-8859-1) ("Norwegian" no iso-8859-1) ("Croatian" hr iso-8859-2) - ("Polish" pl iso-8859-2)) + ("Polish" pl iso-8859-2) + ("Romanian" ro iso-8859-2)) "Alist of supported languages in TUTORIAL files. Add languages here, as more are translated.") diff -r deca3c1083ac -r 70ad99077275 lisp/help.el --- a/lisp/help.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/help.el Mon Aug 13 10:39:40 2007 +0200 @@ -762,6 +762,26 @@ :type 'integer :group 'help) +(defun print-recent-messages (n) + "Print N most recent messages to standard-output, most recent first. +If N is nil, all messages will be printed." + (save-excursion + (let ((buffer (get-buffer-create " *Message-Log*")) + oldpoint extent) + (goto-char (point-max buffer) buffer) + (set-buffer standard-output) + (while (and (not (bobp buffer)) + (or (null n) (>= (decf n) 0))) + (setq oldpoint (point buffer)) + (setq extent (extent-at oldpoint buffer + 'message-multiline nil 'before)) + ;; If the message was multiline, move all the way to the + ;; beginning. + (if extent + (goto-char (extent-start-position extent) buffer) + (forward-line -1 buffer)) + (insert-buffer-substring buffer (point buffer) oldpoint))))) + (defun view-lossage () "Display recent input keystrokes and recent minibuffer messages. The number of keys shown is controlled by `view-lossage-key-count'. @@ -781,24 +801,7 @@ ;; reversing their order and handling multiline messages ;; correctly. (princ "\n\n\nRecent minibuffer messages (most recent first):\n\n") - (save-excursion - (let ((buffer (get-buffer-create " *Message-Log*")) - (count 0) - oldpoint extent) - (goto-char (point-max buffer) buffer) - (set-buffer standard-output) - (while (and (not (bobp buffer)) - (< count view-lossage-message-count)) - (setq oldpoint (point buffer)) - (setq extent (extent-at oldpoint buffer - 'message-multiline nil 'before)) - ;; If the message was multiline, move all the way to the - ;; beginning. - (if extent - (goto-char (extent-start-position extent) buffer) - (forward-line -1 buffer)) - (insert-buffer-substring buffer (point buffer) oldpoint) - (incf count))))) + (print-recent-messages view-lossage-message-count)) "lossage")) (define-function 'help 'help-for-help) diff -r deca3c1083ac -r 70ad99077275 lisp/hyper-apropos.el --- a/lisp/hyper-apropos.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/hyper-apropos.el Mon Aug 13 10:39:40 2007 +0200 @@ -52,7 +52,7 @@ ;; ;; Mouse bindings and menus are provided for XEmacs. ;; -;; additions by Ben Wing July 1995: +;; additions by Ben Wing July 1995: ;; added support for function aliases, made programmer's apropos be the ;; default, various other hacking. ;; Massive changes by Christoph Wedler diff -r deca3c1083ac -r 70ad99077275 lisp/ldap.el --- a/lisp/ldap.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/ldap.el Mon Aug 13 10:39:40 2007 +0200 @@ -5,7 +5,7 @@ ;; Author: Oscar Figueiredo ;; Maintainer: Oscar Figueiredo ;; Created: Jan 1998 -;; Version: $Revision: 1.5 $ +;; Version: $Revision: 1.7 $ ;; Keywords: help comm ;; This file is part of XEmacs @@ -41,8 +41,8 @@ (defvar ldap-default-host nil "*Default LDAP server.") -(defvar ldap-host-parameters-plist nil - "*A property list of per host options for LDAP transactions +(defvar ldap-host-parameters-alist nil + "*An alist of per host options for LDAP transactions The list elements look like (HOST PROP1 VAL1 PROP2 VAL2 ...) HOST is the name of an LDAP server. PROPn and VALn are property/value pairs describing parameters for the server. Valid properties: @@ -67,7 +67,7 @@ ATTRSONLY if non nil retrieves the attributes only without the associated values. Additional search parameters can be specified through -`ldap-host-parameters-plist' which see." +`ldap-host-parameters-alist' which see." (interactive "sFilter:") (let (host-plist res ldap) (if (null host) @@ -75,7 +75,7 @@ (if (null host) (error "No LDAP host specified")) (setq host-plist - (cdr (assoc host ldap-host-parameters-plist))) + (cdr (assoc host ldap-host-parameters-alist))) (message "Opening LDAP connection to %s..." host) (setq ldap (ldap-open host host-plist)) (message "Searching with LDAP on %s..." host) diff -r deca3c1083ac -r 70ad99077275 lisp/menubar-items.el --- a/lisp/menubar-items.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/menubar-items.el Mon Aug 13 10:39:40 2007 +0200 @@ -576,6 +576,11 @@ :style toggle :selected scrollbars-visible-p])) ;; I don't think this is of any interest. - dverna apr. 98 + ;; #### I beg to differ! Many FSFmacs converts hate the 3D + ;; modeline, and it was perfectly fine to be able to turn them + ;; off through the Options menu. I would have uncommented this + ;; source, but the code for saving options would not save the + ;; modeline 3D-ness. Grrr. --hniksic ;; ["3D Modeline" ;; (progn ;; (if (zerop (specifier-instance modeline-shadow-thickness)) @@ -927,8 +932,7 @@ ["No Warranty" describe-no-warranty] ["XEmacs License" describe-copying] ["The Latest Version" describe-distribution]) - ["Submit Bug Report" send-pr - :active (fboundp 'send-pr)])))) + ["Send Bug Report..." report-emacs-bug])))) (defun maybe-add-init-button () @@ -937,13 +941,7 @@ ;; by Stig@hackvan.com (cond (init-file-user nil) - ((file-exists-p (cond - ((eq system-type 'ms-dos) - (concat "~" (user-login-name) "/_emacs")) - ((eq system-type 'vax-vms) - "sys$login:.emacs") - (t - (concat "~" (user-login-name) "/.emacs")))) + ((file-exists-p (expand-file-name ".emacs" "~")) (add-menu-button nil ["Load .emacs" (progn (delete-menu-item '("Load .emacs")) diff -r deca3c1083ac -r 70ad99077275 lisp/mouse.el --- a/lisp/mouse.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/mouse.el Mon Aug 13 10:39:40 2007 +0200 @@ -1340,7 +1340,9 @@ '(modeline-pointer-glyph nontext-pointer-glyph text-pointer-glyph)) ((and (event-over-vertical-divider-p event) - (specifier-instance vertical-divider-draggable-p + ;; #### I disagree with the check below. + ;; Discuss it with Kirill for 21.1. --hniksic + (specifier-instance vertical-divider-always-visible-p (event-window event))) '(divider-pointer-glyph nontext-pointer-glyph text-pointer-glyph)) @@ -1416,9 +1418,11 @@ window-divider-map. You would not call it, but you may bind it to other mouse buttons." (interactive "e") - (if (not (specifier-instance vertical-divider-draggable-p + ;; #### I disagree with the check below. + ;; Discuss it with Kirill for 21.1. --hniksic + (if (not (specifier-instance vertical-divider-always-visible-p (event-window event))) - (error "Not over a window!")) + (error "Not over a window")) (let-specifier ((vertical-divider-shadow-thickness (- (specifier-instance vertical-divider-shadow-thickness (event-window event))) diff -r deca3c1083ac -r 70ad99077275 lisp/msw-faces.el --- a/lisp/msw-faces.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/msw-faces.el Mon Aug 13 10:39:40 2007 +0200 @@ -34,11 +34,6 @@ (defun mswindows-init-device-faces (device) (set-face-font 'default '((mswindows default) . "Courier New:Regular:10") 'global) - ;; gui elements - (set-face-foreground 'gui-element '((mswindows default) . "Black") 'global) - (set-face-background 'gui-element '((mswindows default) . "Gray75") 'global) - (set-face-foreground 'default '((mswindows default) . "black") 'global) - (set-face-background 'default '((mswindows default) . "white") 'global) ) diff -r deca3c1083ac -r 70ad99077275 lisp/objects.el --- a/lisp/objects.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/objects.el Mon Aug 13 10:39:40 2007 +0200 @@ -4,7 +4,7 @@ ;; Copyright (C) 1995 Ben Wing ;; Author: Chuck Thompson -;; Author: Ben Wing +;; Author: Ben Wing ;; Maintainer: XEmacs Development Team ;; Keywords: faces, internal, dumped diff -r deca3c1083ac -r 70ad99077275 lisp/package-get-base.el --- a/lisp/package-get-base.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/package-get-base.el Mon Aug 13 10:39:40 2007 +0200 @@ -1,19 +1,19 @@ (setq package-get-base '((eudc (standards-version 1.0 - version "1.08" - author-version "1.08" - date "1998-06-07" - build-date "1998-06-14" + version "1.09" + author-version "1.09" + date "1998-06-30" + build-date "1998-06-30" maintainer "Oscar Figueiredo " distribution stable priority low category "comm" dump nil description "Emacs Unified Directory Client (LDAP, PH)." - filename "eudc-1.08-pkg.tar.gz" - md5sum "bc03e55ae76a0bb9770ec86e8ee19737" - size 40854 + filename "eudc-1.09-pkg.tar.gz" + md5sum "517bfd3112700fd3dcfc59e02bbb0b12" + size 40867 provides (eudc eudc-ldap eudc-ph) requires (fsf-compat xemacs-base) type regular @@ -58,19 +58,19 @@ )) (gnus (standards-version 1.0 - version "1.16" - author-version "5.6.10" - date "1998-06-01" - build-date "1998-06-01" + version "1.21" + author-version "5.6.23" + date "1998-07-06" + build-date "1998-07-09" maintainer "XEmacs Development Team " distribution stable priority medium category "comm" dump nil description "The Gnus Newsreader and Mailreader." - filename "gnus-1.16-pkg.tar.gz" - md5sum "e78088ca22f5566ba7d9b7075ed70cff" - size 1658207 + filename "gnus-1.21-pkg.tar.gz" + md5sum "6d58f34293ec00bbd297a6abb98fe2e9" + size 1693384 provides (gnus message) requires (gnus w3 mh-e mailcrypt rmail mail-lib xemacs-base) type regular @@ -94,6 +94,25 @@ requires (gnus vm mail-lib xemacs-base) type regular )) +(mew + (standards-version 1.0 + version "1.0" + author-version "1.93b38" + date "1998-06-21" + build-date "1998-06-21" + maintainer "XEmacs Development Team " + distribution contrib + priority low + category "comm" + dump nil + description "Messaging in an Emacs World." + filename "mew-1.0-pkg.tar.gz" + md5sum "be366b8dd9495ecb7b3b6a7a46563faa" + size 441775 + provides (mew) + requires (mew) + type regular +)) (mh-e (standards-version 1.0 version "1.05" @@ -115,38 +134,38 @@ )) (net-utils (standards-version 1.0 - version "1.06" - author-version "21.0b42" - date "1998-05-18" - build-date "1998-06-01" + version "1.08" + author-version "21.0" + date "1998-07-01" + build-date "1998-07-09" maintainer "XEmacs Development Team " distribution stable priority low category "comm" dump nil description "Miscellaneous Networking Utilities." - filename "net-utils-1.06-pkg.tar.gz" - md5sum "fe144ff7f6ef3582ed7dd9bd64d316c2" - size 83496 + filename "net-utils-1.08-pkg.tar.gz" + md5sum "2591eca88f5ea04272012e479ea8665c" + size 107983 provides (ilisp-browse-cltl2 emacsbug feedmail metamail net-utils rcompile shadowfile webjump webster-www) requires (w3 efs mail-lib xemacs-base) type single )) (rmail (standards-version 1.0 - version "1.03" + version "1.04" author-version "21.0" - date "1998-01-24" - build-date "1998-06-14" + date "1998-06-28" + build-date "1998-07-09" maintainer "XEmacs Development Team " distribution contrib priority low category "comm" dump nil description "An obsolete Emacs mailer." - filename "rmail-1.03-pkg.tar.gz" - md5sum "74f7b559857c74432470ead395e6b1c3" - size 83667 + filename "rmail-1.04-pkg.tar.gz" + md5sum "5a4fc73565cb0e9ea62d6b0665ccb013" + size 85711 provides (rmail rmailsum) requires (tm apel mail-lib xemacs-base) type regular @@ -172,39 +191,38 @@ )) (tm (standards-version 1.0 - version "1.08" + version "1.09" author-version "21.0" - date "function, -" - build-date "1998-06-14" + date "1998-06-09" + build-date "1998-07-09" maintainer "XEmacs Development Team " distribution stable priority low category "comm" dump nil description "Emacs MIME support." - filename "tm-1.08-pkg.tar.gz" - md5sum "e64a641be99298eb1edfd0539ba4559c" - size 253280 + filename "tm-1.09-pkg.tar.gz" + md5sum "a5697117fc719a9c5a74a62f6b812101" + size 253269 provides (tm tm-edit tm-view mime-setup) requires (gnus mh-e rmail vm mailcrypt mail-lib apel xemacs-base) type regular )) (vm (standards-version 1.0 - version "1.08" - author-version "6.50" - date "1998-02-17" - build-date "1998-06-14" + version "1.09" + author-version "6.53" + date "1998-06-26" + build-date "1998-07-09" maintainer "XEmacs Development Team " distribution stable priority medium category "comm" dump t description "An Emacs mailer." - filename "vm-1.08-pkg.tar.gz" - md5sum "17b14c101cc930d367032d7620d5a381" - size 513332 + filename "vm-1.09-pkg.tar.gz" + md5sum "a3dd4a14155abf835275120c62ca82fd" + size 514307 provides (vm) requires (mail-lib xemacs-base) type regular @@ -249,19 +267,19 @@ )) (games (standards-version 1.0 - version "1.04" - author-version "1.02" - date "1998-04-07" - build-date "1998-06-01" - maintainer "XEmacs Development Team " + version "1.05" + author-version "1.04" + date "1998-06-04" + build-date "1998-07-09" + maintainer "Glynn Clements " distribution stable priority low category "games" dump nil description "Tetris, Sokoban, and Snake." - filename "games-1.04-pkg.tar.gz" - md5sum "05d820825de83a3b717cca756a12fd8c" - size 31208 + filename "games-1.05-pkg.tar.gz" + md5sum "2b856bc25a05ad32400bdd947fec6231" + size 32000 provides (gamegrid snake tetris sokoban) requires (xemacs-base) type regular @@ -439,38 +457,38 @@ )) (sounds-au (standards-version 1.0 - version "1.01" + version "1.02" author-version "21.0" - date "1998-06-19" - build-date "1998-06-19" + date "1998-06-30" + build-date "1998-07-09" maintainer "XEmacs Development Team " distribution stable priority high category "libs" dump nil description "XEmacs Sun sound files." - filename "sounds-au-1.01-pkg.tar.gz" - md5sum "878bde0798d5479ec3c2e1b4da8d5ee5" - size 125689 + filename "sounds-au-1.02-pkg.tar.gz" + md5sum "061ab67267c7cdfe37472141130d19ff" + size 125736 provides () requires () type regular )) (sounds-wav (standards-version 1.0 - version "1.01" + version "1.02" author-version "21.0" - date "1998-06-19" - build-date "1998-06-19" + date "1998-06-30" + build-date "1998-07-09" maintainer "XEmacs Development Team " distribution stable priority high category "libs" dump nil description "XEmacs Microsoft sound files." - filename "sounds-wav-1.01-pkg.tar.gz" - md5sum "cec8161f3c0ef188d416bb81bd2472c9" - size 148571 + filename "sounds-wav-1.02-pkg.tar.gz" + md5sum "c970808088c408bfd780dc8466a848b3" + size 148621 provides () requires () type regular @@ -496,19 +514,19 @@ )) (xemacs-base (standards-version 1.0 - version "1.20" - author-version "21.0b40" - date "1998-05-15" - build-date "1998-05-15" + version "1.21" + author-version "21.0" + date "1998-07-02" + build-date "1998-07-09" maintainer "XEmacs Development Team " distribution mule priority high category "libs" dump nil description "Fundamental XEmacs support, you almost certainly need this." - filename "xemacs-base-1.20-pkg.tar.gz" - md5sum "4329fd1b5649e5b6b184377985444cae" - size 454236 + filename "xemacs-base-1.21-pkg.tar.gz" + md5sum "1807f3591bc644c52d41bf472cd30bfc" + size 458268 provides (add-log advice annotations assoc case-table chistory comint-xemacs comint compile debug ebuff-menu echistory edmacro ehelp electric enriched env facemenu ffap helper imenu iso-syntax macros novice outline overlay passwd pp regi ring shell skeleton sort thing time-stamp timezone xbm-button xpm-button) requires () type regular @@ -534,39 +552,39 @@ )) (edict (standards-version 1.0 - version "1.02" + version "1.03" author-version "0.9.8" - date "1998-06-01" - build-date "1998-06-01" + date "1998-06-29" + build-date "1998-07-09" maintainer "Stephen J. Turnbull " distribution mule priority high category "mule" - dump t + dump nil description "Lisp Interface to EDICT, Kanji Dictionary" - filename "edict-1.02-pkg.tar.gz" - md5sum "0169ee34db577ac5555765b90f09ac4c" - size 94768 - provides () + filename "edict-1.03-pkg.tar.gz" + md5sum "0f317174ab3e163780f26c6fcfe0eccb" + size 94823 + provides (dui-registry dui edict-edit edict-english edict-japanese edict-morphology edict-test edict ts-mode) requires (mule-base xemacs-base) type regular )) (egg-its (standards-version 1.0 - version "1.04" - author-version "21.0b35" - date "1998-01-24" - build-date "1998-04-04" + version "1.05" + author-version "21.0" + date "1998-06-20" + build-date "1998-07-09" maintainer "XEmacs Development Team " distribution mule priority high category "mule" dump t description "Wnn (4.2 and 6) support. SJ3 support." - filename "egg-its-1.04-pkg.tar.gz" - md5sum "a5bccad96425d89d9a590580c14fddee" - size 259362 - provides () + filename "egg-its-1.05-pkg.tar.gz" + md5sum "ef131233410ea57fad940b40cb3c786c" + size 259670 + provides (egg-cnpinyin egg-cnzhuyin egg-cwnn-leim egg-jisx0201 egg-jsymbol egg-kwnn-leim egg-leim egg-sj3-client egg-sj3-leim egg-sj3 egg-wnn egg) requires (leim mule-base xemacs-base) type regular )) @@ -610,19 +628,19 @@ )) (mule-base (standards-version 1.0 - version "1.17" - author-version "21.0b40" - date "1998-05-10" - build-date "1998-05-15" + version "1.19" + author-version "21.0" + date "1998-07-09" + build-date "1998-07-09" maintainer "SL Baur " distribution mule priority high category "mule" dump t description "Basic Mule support, required for building with Mule." - filename "mule-base-1.17-pkg.tar.gz" - md5sum "bce5a73395ef4167ed5c3bf94e2f70de" - size 489829 + filename "mule-base-1.19-pkg.tar.gz" + md5sum "ac5ed26ee38de23d3591c37a283bc7b5" + size 488988 provides (canna-leim canna char-table china-util cyril-util isearch-ext japan-util ccl can-n-egg mule-help) requires (fsf-compat xemacs-base) type regular @@ -667,19 +685,19 @@ )) (calendar (standards-version 1.0 - version "1.03" - author-version "21.0b35" - date "1998-01-25" - build-date "1998-04-04" + version "1.04" + author-version "21.0" + date "1998-06-19" + build-date "1998-07-09" maintainer "XEmacs Development Team " distribution stable priority low category "oa" dump nil description "Calendar and diary support." - filename "calendar-1.03-pkg.tar.gz" - md5sum "6d36eec11379155801304020b0c3ccf3" - size 168747 + filename "calendar-1.04-pkg.tar.gz" + md5sum "c0955508d51af1524ca8ef6687b362f1" + size 239851 provides (appt cal-dst cal-french cal-mayan cal-x cal-xemacs calendar diary-ins diary-lib holidays lunar solar) requires (xemacs-base) type regular @@ -800,19 +818,19 @@ )) (psgml (standards-version 1.0 - version "1.07" + version "1.08" author-version "1.01" - date "1998-03-20" - build-date "1998-05-02" + date "1998-07-06" + build-date "1998-07-09" maintainer "XEmacs Development Team " distribution stable priority medium category "oa" dump nil description "Validated HTML/SGML editing." - filename "psgml-1.07-pkg.tar.gz" - md5sum "957f026375a4e4bd4c2d8952eb1bbeba" - size 418672 + filename "psgml-1.08-pkg.tar.gz" + md5sum "757842225e4d3e9841bf6de1d3fdbbc4" + size 419252 provides (psgml sgml) requires (edit-utils) type regular @@ -895,19 +913,19 @@ )) (text-modes (standards-version 1.0 - version "1.07" - author-version "21.0b35" - date "1998-03-25" - build-date "1998-04-04" + version "1.08" + author-version "21.0" + date "1998-07-03" + build-date "1998-07-09" maintainer "XEmacs Development Team " distribution stable priority high category "oa" dump nil description "Miscellaneous support for editing text files." - filename "text-modes-1.07-pkg.tar.gz" - md5sum "a9a674d12ba0aebc83fb6a0ea998fff8" - size 171607 + filename "text-modes-1.08-pkg.tar.gz" + md5sum "7334a90ddbcedec459caecf8e0314bad" + size 171811 provides (autoinsert crontab-edit filladapt fold-isearch folding image-mode iso-acc iso-ascii iso-cvt iso-insert iso-swed swedish tabify whitespace-mode winmgr-mode xpm-mode xrdb-mode) requires (fsf-compat xemacs-base) type regular @@ -933,19 +951,19 @@ )) (eterm (standards-version 1.0 - version "1.04" - author-version "21.0b37" - date "1998-04-19" - build-date "1998-04-22" + version "1.05" + author-version "21.0" + date "1998-06-28" + build-date "1998-07-09" maintainer "XEmacs Development Team " distribution stable priority medium category "os" dump nil description "Terminal emulation." - filename "eterm-1.04-pkg.tar.gz" - md5sum "e8a818c8596b4965899f12db0d305b8d" - size 105512 + filename "eterm-1.05-pkg.tar.gz" + md5sum "0c1660a9a8426077534caf84762e7ec1" + size 144233 provides (eterm) requires (xemacs-base) type regular @@ -1085,20 +1103,20 @@ )) (debug (standards-version 1.0 - version "1.03" - author-version "21.0b42" - date "1998-06-01" - build-date "1998-06-01" + version "1.04" + author-version "21.0" + date "1998-07-09" + build-date "1998-07-09" maintainer "XEmacs Development Team " distribution contrib priority low category "prog" dump nil description "GUD, gdb, dbx debugging support." - filename "debug-1.03-pkg.tar.gz" - md5sum "8714c8ed2dd221501b2ec9818c773d29" - size 90336 - provides () + filename "debug-1.04-pkg.tar.gz" + md5sum "f881ca1a0593d218ca6a0e19dd10d8a0" + size 90350 + provides (dbx gdb-highlight gdb gdbsrc gud history) requires (xemacs-base) type regular )) @@ -1142,57 +1160,57 @@ )) (jde (standards-version 1.0 - version "1.01" - author-version "2.01" - date "1998-04-19" - build-date "1998-06-01" + version "1.04" + author-version "2.05" + date "1998-07-09" + build-date "1998-07-09" maintainer "Andy Piper " distribution stable priority medium category "prog" dump nil description "Java language and development support." - filename "jde-1.01-pkg.tar.gz" - md5sum "e8c52579687f2fcafc045937f9f01781" - size 115790 + filename "jde-1.04-pkg.tar.gz" + md5sum "97b90e88928033f405005a9441b7e141" + size 126784 provides (jde) requires (cc-mode debug speedbar edit-utils mail-lib xemacs-base) type regular )) (pcl-cvs (standards-version 1.0 - version "1.09" - author-version "21.0b40" - date "1998-05-15" - build-date "1998-05-15" + version "1.11" + author-version "21.0" + date "1998-06-18" + build-date "1998-07-09" maintainer "XEmacs Development Team " distribution stable priority low category "prog" dump nil description "CVS frontend." - filename "pcl-cvs-1.09-pkg.tar.gz" - md5sum "b1722c8b42e14b17111cba9163e7e9bb" - size 172405 + filename "pcl-cvs-1.11-pkg.tar.gz" + md5sum "7592786d2734d87778915e50561c472d" + size 141698 provides (pcl-cvs dll elib-node generic-sc) requires (xemacs-base) type regular )) (prog-modes (standards-version 1.0 - version "1.05" - author-version "21.0b38" - date "1998-04-29" - build-date "1998-05-01" + version "1.06" + author-version "21.0" + date "1998-05-04" + build-date "1998-07-09" maintainer "XEmacs Development Team " distribution stable priority medium category "prog" dump nil description "Support for various programming languages." - filename "prog-modes-1.05-pkg.tar.gz" - md5sum "94622c06c1c7416bc4bf69e64ec7acb9" - size 539786 + filename "prog-modes-1.06-pkg.tar.gz" + md5sum "38d494e334b846fe735f45d573759ed9" + size 539915 provides (autoconf-mode cperl-mode eiffel3 f90 fortran ksh-mode m4-mode makefile perl-mode postscript python-mode rexx-mode simula-mode tcl teco verilog-mod) requires (mail-lib xemacs-base) type regular @@ -1237,19 +1255,19 @@ )) (vc-cc (standards-version 1.0 - version "1.03" - author-version "21.0b35" - date "1998-01-24" - build-date "1998-04-04" + version "1.04" + author-version "21.0" + date "1998-06-30" + build-date "1998-07-09" maintainer "XEmacs Development Team " distribution contrib priority low category "prog" dump t description "Version Control for ClearCase (UnFree) systems." - filename "vc-cc-1.03-pkg.tar.gz" - md5sum "fbdd450eb5db37a1fd76829b9b93ebc2" - size 96065 + filename "vc-cc-1.04-pkg.tar.gz" + md5sum "07557cc75c0b2aafc5966cca1c0a22e2" + size 96262 provides (vc) requires (dired xemacs-base) type regular @@ -1313,19 +1331,19 @@ )) (crisp (standards-version 1.0 - version "1.03" - author-version "1.31" + version "1.04" + author-version "1.33" date "1998-01-24" - build-date "1998-04-04" + build-date "1998-07-09" maintainer "XEmacs Development Team " distribution stable priority low category "wp" dump nil description "Crisp/Brief emulation." - filename "crisp-1.03-pkg.tar.gz" - md5sum "422b7bcbb0b0097a0f3688e0f475e3b5" - size 9059 + filename "crisp-1.04-pkg.tar.gz" + md5sum "2a51917984d7556019b1b20ff85a9feb" + size 10189 provides (crisp scroll-lock) requires () type regular @@ -1370,19 +1388,19 @@ )) (texinfo (standards-version 1.0 - version "1.08" + version "1.09" author-version "21.0" - date "1998-06-10" - build-date "1998-06-14" + date "1998-07-01" + build-date "1998-07-09" maintainer "XEmacs Development Team " distribution stable priority high category "wp" dump nil description "XEmacs TeXinfo support." - filename "texinfo-1.08-pkg.tar.gz" - md5sum "a97bf24a5bde1832a354d6005a688baf" - size 126611 + filename "texinfo-1.09-pkg.tar.gz" + md5sum "7ab1fa9774456869027cfc0846d8f3fc" + size 127683 provides (makeinfo tex-mode texinfmt texinfo texnfo-tex texnfo-upd) requires (xemacs-base) type regular diff -r deca3c1083ac -r 70ad99077275 lisp/package-get.el --- a/lisp/package-get.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/package-get.el Mon Aug 13 10:39:40 2007 +0200 @@ -97,6 +97,7 @@ ;;; Code: (require 'package-admin) +(require 'package-get-base) (defvar package-get-base nil "List of packages that are installed at this site. @@ -165,7 +166,6 @@ "Fetch and install the latest versions of all currently installed packages." (interactive) ;; Load a fresh copy - (load "package-get-base.el") (mapcar (lambda (pkg) (package-get-all (car pkg) nil)) @@ -179,7 +179,6 @@ latest version. Optional argument FETCHED-PACKAGES is used to keep track of packages already fetched." (interactive "sPackage: \nsVersion: ") - (load "package-get-base.el") (let* ((the-package (package-get-info-find-package package-get-base package)) (this-package (package-get-info-version @@ -230,7 +229,6 @@ sum does not match that stored in `package-get-base' for this version of the package, an error is signalled." (interactive "xPackage List: ") - (load "package-get-base.el") (let* ((this-package (package-get-info-version (package-get-info-find-package package-get-base @@ -362,10 +360,13 @@ " (if (efs-ftp-path filename) filename - (concat "/" - (car search) ":" - (file-name-as-directory (cadr search)) - filename))) + (let ((dir (cadr search))) + (concat "/" + (car search) ":" + (if (string-match "/$" dir) + dir + (concat dir "/")) + filename)))) (defun package-get-installedp (package version) @@ -385,7 +386,6 @@ consp, then it must match a corresponding (provide (SYM VERSION)) from the package." (interactive "SSymbol: ") - (load "package-get-base.el") (let ((packages package-get-base) (done nil) (found nil)) @@ -418,7 +418,6 @@ "Fetch and install the latest versions of all customized packages." (interactive) ;; Load a fresh copy - (load "package-get-base.el") (load "package-get-custom.el") (mapcar (lambda (pkg) (if (eval (intern (concat (symbol-name (car pkg)) "-package"))) @@ -456,7 +455,6 @@ Entries in the customization file are retrieved from package-get-base.el." (interactive) ;; Load a fresh copy - (load "package-get-base.el") (let ((custom-buffer (find-file-noselect (or (package-get-file-installed-p "package-get-custom.el") diff -r deca3c1083ac -r 70ad99077275 lisp/scrollbar.el --- a/lisp/scrollbar.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/scrollbar.el Mon Aug 13 10:39:40 2007 +0200 @@ -30,21 +30,16 @@ ;;; Code: -(defcustom scrollbars-visible-p ;; added for the options menu - dverna - (specifier-instance vertical-scrollbar-visible-p (selected-device)) - "Whether the scrollbars are globally visible. This variable can be -customized through the options menu." - :group 'display +;; added for the options menu - dverna +(defcustom scrollbars-visible-p t + "Whether the scrollbars are globally visible. +This variable can be customized through the options menu." :type 'boolean - :set '(lambda (var val) - (if val - (progn - (remove-specifier vertical-scrollbar-visible-p 'global) - (remove-specifier horizontal-scrollbar-visible-p 'global)) - (set-specifier vertical-scrollbar-visible-p nil 'global) - (set-specifier horizontal-scrollbar-visible-p nil 'global)) - (setq scrollbars-visible-p val)) - ) + :set (lambda (var val) + (set-specifier vertical-scrollbar-visible-p val) + (set-specifier horizontal-scrollbar-visible-p val) + (setq-default scrollbars-visible-p val)) + :group 'display) (defun init-scrollbar-from-resources (locale) (when (and (featurep 'x) diff -r deca3c1083ac -r 70ad99077275 lisp/specifier.el --- a/lisp/specifier.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/specifier.el Mon Aug 13 10:39:40 2007 +0200 @@ -3,7 +3,7 @@ ;; Copyright (C) 1997 Free Software Foundation, Inc. ;; Copyright (C) 1995, 1996 Ben Wing. -;; Author: Ben Wing +;; Author: Ben Wing ;; Keywords: internal, dumped ;;; Synched up with: Not in FSF. diff -r deca3c1083ac -r 70ad99077275 lisp/subr.el --- a/lisp/subr.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/subr.el Mon Aug 13 10:39:40 2007 +0200 @@ -194,14 +194,14 @@ (and (local-variable-p hook (current-buffer)) (not (memq t (symbol-value hook))))) (let ((hook-value (symbol-value hook))) - (if (consp hook-value) + (if (and (consp hook-value) (not (functionp hook-value))) (if (member function hook-value) (setq hook-value (delete function (copy-sequence hook-value)))) (if (equal hook-value function) (setq hook-value nil))) (set hook hook-value)) (let ((hook-value (default-value hook))) - (if (consp hook-value) + (if (and (consp hook-value) (not (functionp hook-value))) (if (member function hook-value) (setq hook-value (delete function (copy-sequence hook-value)))) (if (equal hook-value function) diff -r deca3c1083ac -r 70ad99077275 lisp/symbol-syntax.el --- a/lisp/symbol-syntax.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/symbol-syntax.el Mon Aug 13 10:39:40 2007 +0200 @@ -29,7 +29,7 @@ ;;; Commentary: -;; Last modified by: Ben Wing, wing@666.com +;; Last modified by: Ben Wing, ben@xemacs.org ;; Last modified on: Mon Oct 2 02:32:05 GMT 1995 ;;; Code: diff -r deca3c1083ac -r 70ad99077275 lisp/text-mode.el --- a/lisp/text-mode.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/text-mode.el Mon Aug 13 10:39:40 2007 +0200 @@ -82,7 +82,7 @@ (setq local-abbrev-table text-mode-abbrev-table) (set-syntax-table text-mode-syntax-table) (make-local-variable 'paragraph-start) - (setq paragraph-start (concat "[ \t]*$\\|" page-delimiter)) + (setq paragraph-start (concat page-delimiter "\\|[ \t]*$")) (make-local-variable 'paragraph-separate) (setq paragraph-separate paragraph-start) (setq mode-name "Text") diff -r deca3c1083ac -r 70ad99077275 lisp/toolbar-items.el --- a/lisp/toolbar-items.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/toolbar-items.el Mon Aug 13 10:39:40 2007 +0200 @@ -3,7 +3,7 @@ ;; Copyright (C) 1997 Free Software Foundation, Inc. ;; Copyright (C) 1994 Andy Piper ;; Copyright (C) 1995 Board of Trustees, University of Illinois -;; Copyright (C) 1996 Ben Wing +;; Copyright (C) 1996 Ben Wing ;; Maintainer: XEmacs development team ;; Keywords: frames, dumped diff -r deca3c1083ac -r 70ad99077275 lisp/tty-init.el --- a/lisp/tty-init.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/tty-init.el Mon Aug 13 10:39:40 2007 +0200 @@ -1,7 +1,7 @@ ;;; tty-init.el --- initialization code for tty's ;; Copyright (C) 1994, 1997 Free Software Foundation, Inc. -;; Copyright (C) 1996 Ben Wing . +;; Copyright (C) 1996 Ben Wing . ;; Maintainer: XEmacs Development Team ;; Keywords: terminals, dumped diff -r deca3c1083ac -r 70ad99077275 lisp/x-faces.el --- a/lisp/x-faces.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/x-faces.el Mon Aug 13 10:39:40 2007 +0200 @@ -473,7 +473,8 @@ ;; frames or devices because then, common resource specs like ;; "*Foreground: black" will have unwanted effects. ;; - (if (and (eq (face-name face) 'default) + (if (and (or (eq (face-name face) 'default) + (eq (face-name face) 'gui-element)) (or (null locale) (eq locale 'global))) (progn (or fn (setq fn (x-get-resource diff -r deca3c1083ac -r 70ad99077275 lisp/x-misc.el --- a/lisp/x-misc.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/x-misc.el Mon Aug 13 10:39:40 2007 +0200 @@ -4,7 +4,7 @@ ;; Copyright (C) 1995 Sun Microsystems. ;; Copyright (C) 1995, 1996 Ben Wing. -;; Author: Ben Wing +;; Author: Ben Wing ;; Maintainer: XEmacs Development Team ;; Keywords: extensions, dumped diff -r deca3c1083ac -r 70ad99077275 lisp/x-scrollbar.el --- a/lisp/x-scrollbar.el Mon Aug 13 10:38:47 2007 +0200 +++ b/lisp/x-scrollbar.el Mon Aug 13 10:39:40 2007 +0200 @@ -4,7 +4,7 @@ ;; Copyright (C) 1995 Sun Microsystems. ;; Copyright (C) 1995, 1996 Ben Wing. -;; Author: Ben Wing +;; Author: Ben Wing ;; Maintainer: XEmacs Development Team ;; Keywords: extensions, dumped diff -r deca3c1083ac -r 70ad99077275 man/ChangeLog --- a/man/ChangeLog Mon Aug 13 10:38:47 2007 +0200 +++ b/man/ChangeLog Mon Aug 13 10:39:40 2007 +0200 @@ -1,3 +1,57 @@ +1998-07-09 SL Baur + + * XEmacs 21.0-pre4 is released. + +1998-07-09 Oliver Graf + + * lispref/dragndrop.texi: added warning to OffiX Protocol section + +1998-07-09 SL Baur + + * lispref/ldap.texi (Syntax of Search Filters): Fix QP encoding + damage in transit. + +1998-07-05 Oscar Figueiredo + + * lispref/tooltalk.texi: Fixed NEXT to @node LDAP + + * lispref/internationalization.texi: Fixed PREV to @node LDAP + + * lispref/lispref.texi: Added LDAP chapter from ldap.texi + + * lispref/Makefile: Added ldap.texi to srcs + +1998-06-29 SL Baur + + * standards.texi (Preface): Revert previous change to @node + because it doesn't pass makeinfo. + +1998-06-27 Adrian Aichner + + * cl.texi: See ALL. + * info-stnd.texi: Fixed @setfilename. + * info.texi: Fixed @setfilename and a typo. + * standards.texi: Added NEXT to @node Preface. See ALL. + * texinfo.texi: Fixed section names, quoted usage of @TeX{}, + changed some occurences of `:' to `colon'. + * xemacs-faq.texi: See ALL. + * internals/internals.texi: See ALL. + * lispref/back.texi: Fixed @setfilename. + * lispref/compile.texi: See ALL. + * lispref/debugging.texi: See ALL. + * lispref/edebug-inc.texi: Added NEXT and UP to @node Edebug. + * lispref/eval.texi: See ALL. + * lispref/extents.texi: See ALL. + * lispref/loading.texi: See ALL. + * lispref/searching.texi: Escaped `(' in + @cindex @samp{(?:} in regex + * lispref/variables.texi: See ALL. + +1998-06-28 SL Baur + + * xemacs/calendar.texi: Massive update. + From Jeff Miller + 1998-06-20 Michael Sperber [Mr. Preprocessor] * xemacs/abbrevs.texi: diff -r deca3c1083ac -r 70ad99077275 man/cl.texi --- a/man/cl.texi Mon Aug 13 10:38:47 2007 +0200 +++ b/man/cl.texi Mon Aug 13 10:39:40 2007 +0200 @@ -3221,7 +3221,7 @@ (defsubst foo (...) ...) ; instead of defun; Emacs 19 only @end example -@strong{Note:} This declaration remains in effect after the +@strong{Please note:} This declaration remains in effect after the containing source file is done. It is correct to use it to request that a function you have defined should be inlined, but it is impolite to use it to request inlining of an external diff -r deca3c1083ac -r 70ad99077275 man/info-stnd.texi --- a/man/info-stnd.texi Mon Aug 13 10:38:47 2007 +0200 +++ b/man/info-stnd.texi Mon Aug 13 10:39:40 2007 +0200 @@ -1,6 +1,6 @@ \input texinfo @c -*-texinfo-*- @comment %**start of header -@setfilename info-stnd.info +@setfilename ../info/info-stnd.info @settitle GNU Info @set InfoProgVer 2.11 @paragraphindent none @@ -9,7 +9,7 @@ @synindex fn cp @synindex ky cp @comment %**end of header -@comment $Id: info-stnd.texi,v 1.2 1997/07/19 22:11:47 steve Exp $ +@comment $Id: info-stnd.texi,v 1.3 1998/06/30 06:35:28 steve Exp $ @dircategory Texinfo documentation system @direntry diff -r deca3c1083ac -r 70ad99077275 man/info.texi --- a/man/info.texi Mon Aug 13 10:38:47 2007 +0200 +++ b/man/info.texi Mon Aug 13 10:39:40 2007 +0200 @@ -1,9 +1,9 @@ \input texinfo @c -*-texinfo-*- @comment %**start of header -@setfilename info.info +@setfilename ../info/info.info @settitle Info 1.0 @comment %**end of header -@comment $Id: info.texi,v 1.3 1997/07/19 22:11:48 steve Exp $ +@comment $Id: info.texi,v 1.4 1998/06/30 06:35:28 steve Exp $ @dircategory Texinfo documentation system @direntry @@ -397,7 +397,7 @@ screen. There is one more line beneath that one, but usually it is blank. If it is empty, Info is ready for a command, such as @kbd{n} or @kbd{b} or Space or @kbd{m}. If that line contains text ending -in a colon, it mean Info is trying to read the @dfn{argument} to a +in a colon, it means Info is trying to read the @dfn{argument} to a command. At such times, commands do not work, because Info tries to use them as the argument. You must either type the argument and finish the command you started, or type @kbd{Control-g} to cancel the diff -r deca3c1083ac -r 70ad99077275 man/internals/internals.texi --- a/man/internals/internals.texi Mon Aug 13 10:38:47 2007 +0200 +++ b/man/internals/internals.texi Mon Aug 13 10:39:40 2007 +0200 @@ -1695,11 +1695,12 @@ the @file{temacs} phase. @cindex copy-on-write - @strong{Note:} This kludge only works on a few systems nowadays, and is -rapidly becoming irrelevant because most modern operating systems provide -@dfn{copy-on-write} semantics. All data is initially shared between -processes, and a private copy is automatically made (on a page-by-page -basis) when a process first attempts to write to a page of memory. + @strong{Please note:} This kludge only works on a few systems +nowadays, and is rapidly becoming irrelevant because most modern +operating systems provide @dfn{copy-on-write} semantics. All data is +initially shared between processes, and a private copy is automatically +made (on a page-by-page basis) when a process first attempts to write to +a page of memory. Formerly, there was a requirement that static variables not be declared inside of functions. This had to do with another hack along @@ -1984,15 +1985,15 @@ @code{obarray} to a different value [although this is likely to make XEmacs crash!].) - @strong{Note:} It is potentially deadly if you declare a @samp{Q...} -variable in two different modules. The two calls to @code{defsymbol()} -are no problem, but some linkers will complain about multiply-defined -symbols. The most insidious aspect of this is that often the link will -succeed anyway, but then the resulting executable will sometimes crash -in obscure ways during certain operations! To avoid this problem, -declare any symbols with common names (such as @code{text}) that are not -obviously associated with this particular module in the module -@file{general.c}. + @strong{Please note:} It is potentially deadly if you declare a +@samp{Q...} variable in two different modules. The two calls to +@code{defsymbol()} are no problem, but some linkers will complain about +multiply-defined symbols. The most insidious aspect of this is that +often the link will succeed anyway, but then the resulting executable +will sometimes crash in obscure ways during certain operations! To +avoid this problem, declare any symbols with common names (such as +@code{text}) that are not obviously associated with this particular +module in the module @file{general.c}. Global variables whose names begin with @samp{V} are variables that contain Lisp objects. The convention here is that all global variables @@ -2048,7 +2049,7 @@ To get started debugging XEmacs, take a look at the @file{gdbinit} and @file{dbxrc} files in the @file{src} directory. -@xref{Q2.1.15: How to Debug an XEmacs problem with a debugger,,, +@xref{Q2.1.15 - How to Debug an XEmacs problem with a debugger,,, xemacs-faq, XEmacs FAQ}. @@ -4326,9 +4327,9 @@ consequently should be the most heavily nested sub-object, such as a long list.) -@strong{Note}: When the mark method is called, garbage collection -is in progress, and special precautions need to be taken -when accessing objects; see section (B) above. +@strong{Please note:} When the mark method is called, garbage collection +is in progress, and special precautions need to be taken when accessing +objects; see section (B) above. If your mark method does not need to do anything, it can be @code{NULL}. diff -r deca3c1083ac -r 70ad99077275 man/lispref/Makefile --- a/man/lispref/Makefile Mon Aug 13 10:38:47 2007 +0200 +++ b/man/lispref/Makefile Mon Aug 13 10:39:40 2007 +0200 @@ -35,13 +35,13 @@ edebug.texi errors.texi eval.texi extents.texi faces.texi files.texi \ frames.texi functions.texi glyphs.texi hash-tables.texi help.texi \ hooks.texi index.texi internationalization.texi intro.texi \ - keymaps.texi lispref.texi lists.texi loading.texi locals.texi macros.texi \ - maps.texi markers.texi menus.texi minibuf.texi modes.texi mouse.texi \ - mule.texi numbers.texi objects.texi os.texi positions.texi processes.texi \ - range-tables.texi scrollbars.texi searching.texi sequences.texi \ - specifiers.texi streams.texi strings.texi symbols.texi syntax.texi \ - text.texi tips.texi toolbar.texi tooltalk.texi variables.texi windows.texi \ - x-windows.texi index.unperm index.perm + keymaps.texi ldap.texi lispref.texi lists.texi loading.texi locals.texi \ + macros.texi maps.texi markers.texi menus.texi minibuf.texi modes.texi \ + mouse.texi mule.texi numbers.texi objects.texi os.texi positions.texi \ + processes.texi range-tables.texi scrollbars.texi searching.texi \ + sequences.texi specifiers.texi streams.texi strings.texi symbols.texi \ + syntax.texi text.texi tips.texi toolbar.texi tooltalk.texi variables.texi \ + windows.texi x-windows.texi index.unperm index.perm all : info info : ../../info/$(NAME).info diff -r deca3c1083ac -r 70ad99077275 man/lispref/back.texi --- a/man/lispref/back.texi Mon Aug 13 10:38:47 2007 +0200 +++ b/man/lispref/back.texi Mon Aug 13 10:39:40 2007 +0200 @@ -1,6 +1,6 @@ \input /home/gd/gnu/doc/texinfo.tex @c -*-texinfo-*- @c %**start of header -@setfilename back-cover +@setfilename ../../info/back-cover @settitle XEmacs Lisp Reference Manual @c %**end of header . diff -r deca3c1083ac -r 70ad99077275 man/lispref/compile.texi --- a/man/lispref/compile.texi Mon Aug 13 10:38:47 2007 +0200 +++ b/man/lispref/compile.texi Mon Aug 13 10:39:40 2007 +0200 @@ -483,7 +483,7 @@ This function constructs and returns a compiled-function object with @var{elements} as its elements. -@emph{NOTE:} Unlike all other Emacs-lisp functions, calling this with +@emph{Please note:} Unlike all other Emacs-lisp functions, calling this with five arguments is @emph{not} the same as calling it with six arguments, the last of which is @code{nil}. If the @var{interactive} arg is specified as @code{nil}, then that means that this function was defined diff -r deca3c1083ac -r 70ad99077275 man/lispref/debugging.texi --- a/man/lispref/debugging.texi Mon Aug 13 10:38:47 2007 +0200 +++ b/man/lispref/debugging.texi Mon Aug 13 10:39:40 2007 +0200 @@ -190,7 +190,7 @@ If the function is already set up to invoke the debugger on entry, @code{debug-on-entry} does nothing. - @strong{Note:} if you redefine a function after using + @strong{Please note:} if you redefine a function after using @code{debug-on-entry} on it, the code to enter the debugger is lost. @code{debug-on-entry} returns @var{function-name}. diff -r deca3c1083ac -r 70ad99077275 man/lispref/dragndrop.texi --- a/man/lispref/dragndrop.texi Mon Aug 13 10:38:47 2007 +0200 +++ b/man/lispref/dragndrop.texi Mon Aug 13 10:39:40 2007 +0200 @@ -45,6 +45,10 @@ @subsection OffiX DND @cindex OffiX DND +@emph{WARNING}: If you compile in OffiX, you may not be able to use +multiple X displays successfully. If the two servers are from +different vendors, the results may be unpredictable. + The OffiX Drag'n'Drop protocol is part of a X API/Widget library created by Cesar Crusius. It is based on X-Atoms and ClientMessage events, and works with any X platform supporting them. diff -r deca3c1083ac -r 70ad99077275 man/lispref/edebug-inc.texi --- a/man/lispref/edebug-inc.texi Mon Aug 13 10:38:47 2007 +0200 +++ b/man/lispref/edebug-inc.texi Mon Aug 13 10:39:40 2007 +0200 @@ -1,6 +1,6 @@ @comment -*-texinfo-*- -@node Edebug +@node Edebug, , Compilation Errors, Top @section Edebug @cindex Edebug mode diff -r deca3c1083ac -r 70ad99077275 man/lispref/eval.texi --- a/man/lispref/eval.texi Mon Aug 13 10:38:47 2007 +0200 +++ b/man/lispref/eval.texi Mon Aug 13 10:39:40 2007 +0200 @@ -109,7 +109,7 @@ after reading a form from text being edited or getting one from a property list. On these occasions, use the @code{eval} function. - @strong{Note:} it is generally cleaner and more flexible to call + @strong{Please note:} it is generally cleaner and more flexible to call functions that are stored in data structures, rather than to evaluate expressions stored in data structures. Using functions provides the ability to pass information to them as arguments. diff -r deca3c1083ac -r 70ad99077275 man/lispref/extents.texi --- a/man/lispref/extents.texi Mon Aug 13 10:38:47 2007 +0200 +++ b/man/lispref/extents.texi Mon Aug 13 10:39:40 2007 +0200 @@ -45,7 +45,7 @@ are invisible to functions that merely examine the text of a buffer or string. - @emph{NOTE}: An alternative way to add properties to a buffer or + @emph{Please note:} An alternative way to add properties to a buffer or string is to use text properties. @xref{Text Properties}. An extent is logically a Lisp object consisting of a start position, diff -r deca3c1083ac -r 70ad99077275 man/lispref/internationalization.texi --- a/man/lispref/internationalization.texi Mon Aug 13 10:38:47 2007 +0200 +++ b/man/lispref/internationalization.texi Mon Aug 13 10:39:40 2007 +0200 @@ -3,7 +3,7 @@ @c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/internationalization.info -@node Internationalization, MULE, ToolTalk Support, top +@node Internationalization, MULE, LDAP Support, top @chapter Internationalization @menu diff -r deca3c1083ac -r 70ad99077275 man/lispref/ldap.texi --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/man/lispref/ldap.texi Mon Aug 13 10:39:40 2007 +0200 @@ -0,0 +1,299 @@ +@c -*-texinfo-*- +@c This is part of the XEmacs Lisp Reference Manual. +@c Copyright (C) 1998 Free Software Foundation, Inc. +@c See the file lispref.texi for copying conditions. +@setfilename ../../info/ldap.info +@node LDAP Support, Internationalization, ToolTalk Support, top +@chapter LDAP Support +@cindex LDAP + +XEmacs can be linked with a LDAP client library to provide Elisp primitives +to access directory servers using the Lightweight Directory Access Protocol. + +@menu +* Building XEmacs with LDAP support:: How to add LDAP support to XEmacs +* XEmacs LDAP API:: Lisp access to LDAP functions +* Syntax of Search Filters:: A brief summary of RFC 1558 +@end menu + +@node Building XEmacs with LDAP support, XEmacs LDAP API, LDAP Support, LDAP Support +@comment node-name, next, previous, up +@section Building XEmacs with LDAP support + +LDAP support must be added to XEmacs at build time since it requires +linking to an external LDAP client library. As of 21.0, XEmacs has been +successfully built and tested with + +@itemize @bullet +@item University of Michigan's LDAP 3.3 (@url{http://www.umich.edu/~dirsvcs/ldap/}) +@item LDAP SDK 1.0 from Netscape Corp. (@url{http://developer.netscape.com/}) +@end itemize + +Other libraries conforming to RFC 1823 will probably work also but may +require some minor tweaking at C level. + +The standard XEmacs configure script autodetects an installed LDAP +library provided the library itself and the corresponding header files +can be found in the library and include paths. A successful detection +will be signalled in the final output of the configure script. + + + +@node XEmacs LDAP API, Syntax of Search Filters, Building XEmacs with LDAP support, LDAP Support +@comment node-name, next, previous, up +@section XEmacs LDAP API + +XEmacs LDAP API consists of two layers: a low-level layer which tries +to stay as close as possible to the C API (where practical) and a +higher-level layer which provides more convenient primitives to +effectively use LDAP. + +As of XEmacs 21.0, only interfaces to basic LDAP search functions are +provided, broader support is planned in future versions. + +@menu +* LDAP Variables:: Lisp variables related to LDAP +* The High-Level LDAP API:: High-level LDAP lisp functions +* The Low-Level LDAP API:: Low-level LDAP lisp primitives +@end menu + + +@node LDAP Variables, The High-Level LDAP API, XEmacs LDAP API, XEmacs LDAP API +@comment node-name, next, previous, up +@subsection LDAP Variables + +@defvar ldap-default-host +The default LDAP server +@end defvar + +@defvar ldap-default-port +Default TCP port for LDAP connections. +Initialized from the LDAP library. Default value is 389. +@end defvar + +@defvar ldap-default-base +Default base for LDAP searches. +This is a string using the syntax of RFC 1779. +For instance, "oŹME, cÿ" limits the search to the +Acme organization in the United States. +@end defvar + +@defvar ldap-host-parameters-alist +An alist of per host options for LDAP transactions. +The list elements look like @code{(HOST PROP1 VAL1 PROP2 VAL2 ...)} +@var{host} is the name of an LDAP server. @var{propn} and @var{valn} are +property/value pairs describing parameters for the server. Valid +properties: +@table @code +@item binddn +The distinguished name of the user to bind as. This may look like +@samp{cÿ, oŹme, cnÿnny Bugs}, see RFC 1779 for details. +@item passwd +The password to use for authentication. +@item auth +The authentication method to use, possible values depend on the LDAP +library XEmacs was compiled with, they may include @code{simple}, +@code{krbv41} and @code{krbv42}. +@item base +The base for the search. This may look like @samp{cÿ, oŹme}, see +RFC 1779 for syntax details. +@item scope +One of the symbols @code{base}, @code{onelevel} or @code{subtree} +indicating the scope of the search limited to a base +object, to a single level or to the whole subtree. +@item deref +The dereference policy is one of the symbols @code{never}, +@code{always}, @code{search} or @code{find} and defines how aliases are +dereferenced. +@table @code +@item never +Aliases are never dereferenced +@item always +Aliases are always dereferenced +@item search +Aliases are dereferenced when searching +@item find +Aliases are dereferenced when locating the base object for the search +@end table +@item timelimit +The timeout limit for the connection in seconds. +@item sizelimit +The maximum number of matches to return for searches performed on this connection. +@end table +@end defvar + + + +@node The High-Level LDAP API, The Low-Level LDAP API, LDAP Variables, XEmacs LDAP API +@comment node-name, next, previous, up +@subsection The High-Level LDAP API + +As of this writing the high-level Lisp LDAP API only provides for LDAP +searches. Further support is planned in the future. + +The @code{ldap-search} function provides the most convenient interface +to perform LDAP searches. It opens a connection to a host, performs the +query and cleanly closes the connection thus insulating the user from +all the details of the low-level interface such as LDAP Lisp objects +@pxref{The Low-Level LDAP API} + +@defun ldap-search filter &optional host attributes attrsonly +Perform an LDAP search. +@var{filter} is the search filter @pxref{Syntax of Search Filters} +@var{host} is the LDAP host on which to perform the search +@var{attributes} is the specific attributes to retrieve, @code{nil} means +retrieve all +@var{attrsonly} if non-@code{nil} retrieves the attributes only without +their associated values. +Additional search parameters can be specified through +@code{ldap-host-parameters-alist}. +@end defun + +@node The Low-Level LDAP API, , The High-Level LDAP API, XEmacs LDAP API +@comment node-name, next, previous, up +@subsection The Low-Level LDAP API + +@menu +* The LDAP Lisp Object:: +* Opening and Closing a LDAP Connection:: +* Searching on a LDAP Server (Low-level):: +@end menu + +@node The LDAP Lisp Object, Opening and Closing a LDAP Connection, The Low-Level LDAP API, The Low-Level LDAP API +@comment node-name, next, previous, up +@subsubsection The LDAP Lisp Object + +An internal built-in @code{ldap} lisp object represents a LDAP +connection. + +@defun ldapp object +This function returns non-@code{nil} if @var{object} is a @code{ldap} object. +@end defun + +@defun ldap-host ldap +Return the server host of the connection represented by @var{ldap} +@end defun + +@defun ldap-live-p ldap +Return non-@code{nil} if @var{ldap} is an active LDAP connection +@end defun + + +@node Opening and Closing a LDAP Connection, Searching on a LDAP Server (Low-level), The LDAP Lisp Object, The Low-Level LDAP API +@comment node-name, next, previous, up +@subsubsection Opening and Closing a LDAP Connection + +@defun ldap-open host &optional plist +Open a LDAP connection to @var{host}. +@var{plist} is a property list containing additional parameters for the connection. +Valid keys in that list are: +@table @code +@item port +The TCP port to use for the connection if different from +@code{ldap-default-port} or the library builtin value +@item auth +The authentication method to use, possible values depend on the LDAP +library XEmacs was compiled with, they may include @code{simple}, +@code{krbv41} and @code{krbv42}. +@item binddn +The distinguished name of the user to bind as. This may look like +@samp{cÿ, oŹme, cnÿnny Bugs}, see RFC 1779 for details. +@item passwd +The password to use for authentication. +@item deref +The dereference policy is one of the symbols @code{never}, +@code{always}, @code{search} or @code{find} and defines how aliases are +dereferenced. +@table @code +@item never +Aliases are never dereferenced +@item always +Aliases are always dereferenced +@item search +Aliases are dereferenced when searching +@item find +Aliases are dereferenced when locating the base object for the search +@end table +The default is @code{never}. +@item timelimit +The timeout limit for the connection in seconds. +@item sizelimit +The maximum number of matches to return for searches performed on this connection. +@end table +@end defun + +@defun ldap-close ldap +Close the connection represented by @var{ldap} +@end defun + + +@node Searching on a LDAP Server (Low-level), , Opening and Closing a LDAP Connection, The Low-Level LDAP API +@comment node-name, next, previous, up +@subsubsection Searching on a LDAP Server (Low-level) + +@code{ldap-search-internal} is the low-level primitive to perform a +search on a LDAP server. It works directly on an open LDAP connection +thus requiring a preliminary call to @code{ldap-open}. Multiple +searches can be made on the same connection, then the session must be +closed with @code{ldap-close}. + + +@defun ldap-search-internal ldap filter base scope attrs attrsonly +Perform a search on an open connection @var{ldap} created with @code{ldap-open}. +@var{filter} is a filter string for the search @pxref{Syntax of Search Filters} +@var{base} is the distinguished name at which to start the search. +@var{scope} is one of the symbols @code{base}, @code{onelevel} or +@code{subtree} indicating the scope of the search limited to a base +object, to a single level or to the whole subtree. The default is +@code{subtree}. +@code{attrs} is a list of strings indicating which attributes to retrieve +for each matching entry. If @code{nil} all available attributes are returned. +If @code{attrsonly} is non-@code{nil} then only the attributes are retrieved, not +their associated values +The function returns a list of matching entries. Each entry being itself +an alist of attribute/values. +@end defun + + + + + +@node Syntax of Search Filters, , XEmacs LDAP API, LDAP Support +@comment node-name, next, previous, up +@section Syntax of Search Filters + +LDAP search functions use RFC1558 syntax to describe the search filter. +In that syntax simple filters have the form: + +@example +( ) +@end example + +@code{} is an attribute name such as @code{cn} for Common Name, +@code{o} for Organization, etc... + +@code{} is the corresponding value. This is generally an exact +string but may also contain @code{*} characters as wildcards + +@code{filtertype} is one @code{=} @code{~=}, @code{<=}, @code{>=} which +respectively describe equality, approximate equality, inferiority and +superiority. + +Thus @code{(cn=John Smith)} matches all records having a canonical name +equal to John Smith. + +A special case is the presence filter @code{(=*} which matches +records containing a particular attribute. For instance @code{(mail=*)} +matches all records containing a @code{mail} attribute. + +Simple filters can be connected together with the logical operators +@code{&}, @code{|} and @code{!} which stand for the usual and, or and +not operators. + +@code{(&(objectClass=Person)(mail=*)(|(sn=Smith)(givenname=John)))} +matches records of class @code{Person} containing a @code{mail} +attribute and corresponding to people whose last name is @code{Smith} or +whose first name is @code{John}. + + + diff -r deca3c1083ac -r 70ad99077275 man/lispref/lispref.texi --- a/man/lispref/lispref.texi Mon Aug 13 10:38:47 2007 +0200 +++ b/man/lispref/lispref.texi Mon Aug 13 10:39:40 2007 +0200 @@ -196,6 +196,8 @@ variables, and other such things. * X-Windows:: Functions specific to the X Window System. * ToolTalk Support:: Interfacing with the ToolTalk message service. +* LDAP Support:: Interfacing with the Lightweight Directory + Access Protocol. * Internationalization:: How Emacs supports different languages and cultural conventions. * MULE:: Specifics of the Asian-language support. @@ -1076,6 +1078,24 @@ * Sending Messages:: * Receiving Messages:: +LDAP Support + +* Building XEmacs with LDAP support:: How to add LDAP support to XEmacs +* XEmacs LDAP API:: Lisp access to LDAP functions +* Syntax of Search Filters:: A brief summary of RFC 1558 + +XEmacs LDAP API + +* LDAP Variables:: Lisp variables related to LDAP +* The High-Level LDAP API:: High-level LDAP lisp functions +* The Low-Level LDAP API:: Low-level LDAP lisp primitives + +The Low-Level LDAP API + +* The LDAP Lisp Object:: +* Opening and Closing a LDAP Connection:: +* Searching on a LDAP Server (Low-level):: + Internationalization * I18N Levels 1 and 2:: Support for different time, date, and currency formats. @@ -1171,6 +1191,7 @@ @include os.texi @include x-windows.texi @include tooltalk.texi +@include ldap.texi @include internationalization.texi @include mule.texi diff -r deca3c1083ac -r 70ad99077275 man/lispref/loading.texi --- a/man/lispref/loading.texi Mon Aug 13 10:38:47 2007 +0200 +++ b/man/lispref/loading.texi Mon Aug 13 10:39:40 2007 +0200 @@ -647,7 +647,7 @@ ; @r{FSF Emacs 19.34 and later.} @end example -@strong{NOTE}: The advanced arguments of this function (anything other than a +@strong{Please note:} The advanced arguments of this function (anything other than a symbol) are not yet supported by FSF Emacs. If you feel they are useful for supporting multiple Emacs variants, lobby Richard Stallman at @samp{}. diff -r deca3c1083ac -r 70ad99077275 man/lispref/searching.texi --- a/man/lispref/searching.texi Mon Aug 13 10:38:47 2007 +0200 +++ b/man/lispref/searching.texi Mon Aug 13 10:39:40 2007 +0200 @@ -455,7 +455,7 @@ the same exact text. @item \(?: @dots{} \) -@cindex @samp{(?:} in regex +@cindex @samp{\(?:} in regexp @cindex regexp grouping is called a @dfn{shy} grouping operator, and it is used just like @samp{\( @dots{} \)}, except that it does not cause the matched diff -r deca3c1083ac -r 70ad99077275 man/lispref/tooltalk.texi --- a/man/lispref/tooltalk.texi Mon Aug 13 10:38:47 2007 +0200 +++ b/man/lispref/tooltalk.texi Mon Aug 13 10:39:40 2007 +0200 @@ -3,7 +3,7 @@ @c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/tooltalk.info -@node ToolTalk Support, Internationalization, X-Windows, top +@node ToolTalk Support, LDAP Support, X-Windows, top @chapter ToolTalk Support @cindex ToolTalk diff -r deca3c1083ac -r 70ad99077275 man/lispref/variables.texi --- a/man/lispref/variables.texi Mon Aug 13 10:38:47 2007 +0200 +++ b/man/lispref/variables.texi Mon Aug 13 10:39:40 2007 +0200 @@ -1087,7 +1087,7 @@ between different kinds of bindings; it knows only which variable the binding was made for. -@strong{Note:} do not use @code{make-local-variable} for a hook +@strong{Please note:} do not use @code{make-local-variable} for a hook variable. Instead, use @code{make-local-hook}. @xref{Hooks}. @end deffn diff -r deca3c1083ac -r 70ad99077275 man/standards.texi --- a/man/standards.texi Mon Aug 13 10:38:47 2007 +0200 +++ b/man/standards.texi Mon Aug 13 10:39:40 2007 +0200 @@ -1337,9 +1337,9 @@ @samp{-q} in Make. @item quiet -Used in many programs to inhibit the usual output. @strong{Note:} every -program accepting @samp{--quiet} should accept @samp{--silent} as a -synonym. +Used in many programs to inhibit the usual output. @strong{Please +note:} every program accepting @samp{--quiet} should accept +@samp{--silent} as a synonym. @item quiet-unshar @samp{-Q} in @code{shar} @@ -1452,7 +1452,7 @@ @item silent Used in many programs to inhibit the usual output. -@strong{Note:} every program accepting +@strong{Please note:} every program accepting @samp{--silent} should accept @samp{--quiet} as a synonym. @item size diff -r deca3c1083ac -r 70ad99077275 man/texinfo.texi --- a/man/texinfo.texi Mon Aug 13 10:38:47 2007 +0200 +++ b/man/texinfo.texi Mon Aug 13 10:39:40 2007 +0200 @@ -1,5 +1,5 @@ \input texinfo.tex @c -*-texinfo-*- -@c $Id: texinfo.texi,v 1.7 1998/06/20 00:58:34 steve Exp $ +@c $Id: texinfo.texi,v 1.8 1998/06/30 06:35:31 steve Exp $ @c %**start of header @c All text is ignored before the setfilename. @@ -9173,7 +9173,7 @@ @node pounds, minus, TeX and copyright, Insertions -@section @code{@@pounds}@{@} (@pounds{}): Pounds Sterling +@section @code{@@pounds@{@}} (@pounds{}): Pounds Sterling @findex pounds Use the @code{@@pounds@{@}} command to generate `@pounds{}'. In a @@ -9213,7 +9213,7 @@ @node math, Glyphs, minus, Insertions -@section @code{@@math}: Inserting Mathematical Expressions +@section @code{@@math} - Inserting Mathematical Expressions @findex math @cindex Mathematical expressions @@ -12310,7 +12310,7 @@ @example \input texinfo -@@setfilename @var{arg-not-used-by-@TeX{}} +@@setfilename @var{arg-not-used-by-@@TeX@{@}} @end example @noindent @@ -13383,7 +13383,7 @@ @code{INFOPATH} environment variable to initialize the value of Emacs's own @code{Info-directory-list} variable. -@cindex @samp{:} @r{last in @code{INFOPATH}} +@cindex colon @r{last in @code{INFOPATH}} However you set @code{INFOPATH}, if its last character is a colon, this is replaced by the default (compiled-in) path. This gives you a way to augment the default path with new directories without having to list all @@ -13922,7 +13922,7 @@ @item @@dots@{@} Insert an ellipsis: @samp{@dots{}}. -@xref{dots, , @code{@@dots}}.@refill +@xref{dots, , @code{@@dots@{@}}}.@refill @item @@email@{@var{address}[, @var{displayed-text}]@} Indicate an electronic mail address. @@ -14188,7 +14188,7 @@ @item @@math@{@var{mathematical-expression}@} Format a mathematical expression. -@xref{math, , @code{@@math}: Inserting Mathematical Expressions}. +@xref{math, , @code{@@math} - Inserting Mathematical Expressions}. @item @@menu Mark the beginning of a menu of nodes in Info. No effect in a printed @@ -17209,7 +17209,7 @@ see @ref{Footnotes},@* see @ref{dmn, , Format a Dimension},@* see @ref{Raise/lower sections, , @code{@@raisesections} and @code{@@lowersections}},@* -see @ref{math, , @code{@@math}: Inserting Mathematical Expressions}.@* +see @ref{math, , @code{@@math} - Inserting Mathematical Expressions}.@* see @ref{minus, , Inserting a Minus Sign},@* see @ref{paragraphindent, , Paragraph Indenting},@* see @ref{Cross Reference Commands},@* diff -r deca3c1083ac -r 70ad99077275 man/xemacs-faq.texi --- a/man/xemacs-faq.texi Mon Aug 13 10:38:47 2007 +0200 +++ b/man/xemacs-faq.texi Mon Aug 13 10:39:40 2007 +0200 @@ -7,7 +7,7 @@ @finalout @titlepage @title XEmacs FAQ -@subtitle Frequently asked questions about XEmacs @* Last Modified: $Date: 1998/06/13 04:28:18 $ +@subtitle Frequently asked questions about XEmacs @* Last Modified: $Date: 1998/06/30 06:35:33 $ @sp 1 @author Tony Rossini @author Ben Wing @@ -2796,7 +2796,7 @@ (frame-notice-user-settings) @end lisp -@strong{NOTE:} The single minibuffer frame may not be to everyone's +@strong{Please note:} The single minibuffer frame may not be to everyone's taste, and there any number of other XEmacs options settings that may make it difficult or inconvenient to use. diff -r deca3c1083ac -r 70ad99077275 man/xemacs/calendar.texi --- a/man/xemacs/calendar.texi Mon Aug 13 10:38:47 2007 +0200 +++ b/man/xemacs/calendar.texi Mon Aug 13 10:39:40 2007 +0200 @@ -3,24 +3,27 @@ @cindex calendar @findex calendar - Emacs provides the functions of a desk calendar, with a diary of past -or planned events. Display the calendar by typing @kbd{M-x calendar}. -This command creates a window containing a three-month calendar centered -on the current month, with point on the current date. Or, provide a -prefix argument by typing @kbd{C-u M-x calendar}; then you are prompted -for the month and year to be the center of the three-month calendar. In -either case, you are now in Calendar mode. + Emacs provides the functions of a desk calendar, with a diary of +planned or past events. To enter the calendar, type @kbd{M-x calendar}; +this displays a three-month calendar centered on the current month, with +point on the current date. With a numeric argument, as in @kbd{C-u M-x +calendar}, it prompts you for the month and year to be the center of the +three-month calendar. The calendar uses its own buffer, whose major +mode is Calendar mode. - Calendar mode makes it easy to look at the holidays or diary entries -associated with various dates, and to change the diary entries. You can move -freely between the Calendar window and other windows. To exit the calendar, -type @kbd{q}. - + @kbd{Button2} in the calendar brings up a menu of operations on a +particular date; @kbd{Buttons3} brings up a menu of commonly used +calendar features that are independent of any particular date. To exit +the calendar, type @kbd{q}. @xref{Calendar, Customizing the Calendar +and Diary,, elisp, The Emacs Lisp Reference Manual}, for customization +information about the calendar and diary. + @menu * Calendar Motion:: Moving through the calendar; selecting a date. * Scroll Calendar:: Bringing earlier or later months onto the screen. * Mark and Region:: Remembering dates, the mark ring. -* General Calendar:: Conveniences for moving about. +* General Calendar:: Exiting or recomputing the calendar. +* LaTeX Calendar:: Print a calendar using LaTeX. * Holidays:: Displaying dates of holidays. * Sunrise/Sunset:: Displaying local times of sunrise and sunset. * Lunar Phases:: Displaying phases of the moon. @@ -32,16 +35,20 @@ @node Calendar Motion, Scroll Calendar, Calendar/Diary, Calendar/Diary @subsection Movement in the Calendar - Calendar mode lets you move in logical units of time such as days, -weeks, months, and years. Sometimes you need to move to a specific date -in order to enter commands affecting its display or the associated diary -entries. If you move outside the three months originally displayed, the -calendar display scrolls automatically through time. +@cindex moving inside the calendar + Calendar mode lets you move through the calendar in logical units of +time such as days, weeks, months, and years. If you move outside the +three months originally displayed, the calendar display ``scrolls'' +automatically through time to make the selected date visible. Moving to +a date lets you view its holidays or diary entries, or convert it to other +calendars; moving longer time periods is also useful simply to scroll the +calendar. @menu * Calendar Unit Motion:: Moving by days, weeks, months, and years. * Move to Beginning or End:: Moving to start/end of weeks, months, and years. -* Specified Dates:: Moving to the current date or another specific date. +* Specified Dates:: Moving to the current date or another + specific date. @end menu @node Calendar Unit Motion, Move to Beginning or End, Calendar Motion, Calendar Motion @@ -67,16 +74,16 @@ @item C-x ] Move point one year forward (@code{calendar-forward-year}). @item C-x [ -Move point one year backward (@code{calendar-forward-year}). +Move point one year backward (@code{calendar-backward-year}). @end table -@kindex C-f (Calendar mode) +@kindex C-f @r{(Calendar mode)} @findex calendar-forward-day -@kindex C-b (Calendar mode) +@kindex C-b @r{(Calendar mode)} @findex calendar-backward-day -@kindex C-n (Calendar mode) +@kindex C-n @r{(Calendar mode)} @findex calendar-forward-week -@kindex C-p (Calendar mode) +@kindex C-p @r{(Calendar mode)} @findex calendar-backward-week The day and week commands are natural analogues of the usual Emacs commands for moving by characters and by lines. Just as @kbd{C-n} @@ -84,18 +91,21 @@ mode it moves to the same day in the following week. And @kbd{C-p} moves to the same day in the previous week. -@kindex M-@} (Calendar mode) + The arrow keys are equivalent to @kbd{C-f}, @kbd{C-b}, @kbd{C-n} and +@kbd{C-p}, just as they normally are in other modes. + +@kindex M-@} @r{(Calendar mode)} @findex calendar-forward-month -@kindex M-@{ (Calendar mode) +@kindex M-@{ @r{(Calendar mode)} @findex calendar-backward-month -@kindex C-x ] (Calendar mode) +@kindex C-x ] @r{(Calendar mode)} @findex calendar-forward-year -@kindex C-x [ (Calendar mode) +@kindex C-x [ @r{(Calendar mode)} @findex calendar-forward-year The commands for motion by months and years work like those for weeks, but move a larger distance. The month commands @kbd{M-@}} and @kbd{M-@{} move forward or backward by an entire month's time. The -year commands @kbd{C-x ]} and @kbd{C-x [} move forward or backward a +year commands @kbd{C-x ]} and @w{@kbd{C-x [}} move forward or backward a whole year. The easiest way to remember these commands is to consider months and @@ -105,41 +115,41 @@ and year commands move by an entire month or an entire year, which usually involves skipping across the end of a month or year. - Each of these commands accepts a numeric argument as a repeat count. For -convenience, the digit keys and the minus sign are bound in Calendar mode so -that it is unnecessary to type the @kbd{M-} prefix. For example, @kbd{100 -C-f} moves point 100 days forward from its present location. + All these commands accept a numeric argument as a repeat count. +For convenience, the digit keys and the minus sign specify numeric +arguments in Calendar mode even without the Meta modifier. For example, +@kbd{100 C-f} moves point 100 days forward from its present location. @node Move to Beginning or End, Specified Dates, Calendar Unit Motion, Calendar Motion @subsubsection Beginning or End of Week, Month or Year - A week (or month, or year) is not just a quantity of days; we think -of new weeks (months, years) as starting on particular days. So -Calendar mode provides commands to move to the beginning or end of the -week, month or year: - + A week (or month, or year) is not just a quantity of days; we think of +weeks (months, years) as starting on particular dates. So Calendar mode +provides commands to move to the beginning or end of a week, month or +year: + @table @kbd -@kindex C-a (Calendar mode) +@kindex C-a @r{(Calendar mode)} @findex calendar-beginning-of-week @item C-a -Move point to beginning of week (@code{calendar-beginning-of-week}). -@kindex C-e (Calendar mode) +Move point to start of week (@code{calendar-beginning-of-week}). +@kindex C-e @r{(Calendar mode)} @findex calendar-end-of-week @item C-e Move point to end of week (@code{calendar-end-of-week}). -@kindex M-a (Calendar mode) +@kindex M-a @r{(Calendar mode)} @findex calendar-beginning-of-month @item M-a -Move point to beginning of month (@code{calendar-beginning-of-month}). -@kindex M-e (Calendar mode) +Move point to start of month (@code{calendar-beginning-of-month}). +@kindex M-e @r{(Calendar mode)} @findex calendar-end-of-month @item M-e Move point to end of month (@code{calendar-end-of-month}). -@kindex M-< (Calendar mode) +@kindex M-< @r{(Calendar mode)} @findex calendar-beginning-of-year @item M-< -Move point to beginning of year (@code{calendar-beginning-of-year}). -@kindex M-> (Calendar mode) +Move point to start of year (@code{calendar-beginning-of-year}). +@kindex M-> @r{(Calendar mode)} @findex calendar-end-of-year @item M-> Move point to end of year (@code{calendar-end-of-year}). @@ -149,11 +159,17 @@ repeat count indicating how many weeks, months, or years to move backward or forward. +@vindex calendar-week-start-day +@cindex weeks, which day they start on +@cindex calendar, first day of week + By default, weeks begin on Sunday. To make them begin on Monday +instead, set the variable @code{calendar-week-start-day} to 1. + @node Specified Dates,,Move to Beginning or End, Calendar Motion @subsubsection Particular Dates - Calendar mode provides some commands for getting to a particular date -quickly. + Calendar mode provides commands for moving to a particular date +specified in various ways. @table @kbd @item g d @@ -161,29 +177,30 @@ @item o Center calendar around specified month (@code{calendar-other-month}). @item . -Move point to today's date (@code{calendar-current-month}). +Move point to today's date (@code{calendar-goto-today}). @end table -@kindex g d (Calendar mode) +@kindex g d @r{(Calendar mode)} @findex calendar-goto-date @kbd{g d} (@code{calendar-goto-date}) prompts for a year, a month, and a day -of the month, and then goes to that date. Because the calendar includes all +of the month, and then moves to that date. Because the calendar includes all dates from the beginning of the current era, you must type the year in its entirety; that is, type @samp{1990}, not @samp{90}. -@kindex o (Calendar mode) +@kindex o @r{(Calendar mode)} @findex calendar-other-month @kbd{o} (@code{calendar-other-month}) prompts for a month and year, then centers the three-month calendar around that month. -@kindex . (Calendar mode) -@findex calendar-current-month - You can return to the current date with @kbd{.} -(@code{calendar-current-month}). +@kindex . @r{(Calendar mode)} +@findex calendar-goto-today + You can return to today's date with @kbd{.} +(@code{calendar-goto-today}). @node Scroll Calendar, Mark and Region, Calendar Motion, Calendar/Diary @subsection Scrolling the Calendar through Time +@cindex scrolling in the calendar The calendar display scrolls automatically through time when you move out of the visible portion. You can also scroll it manually. Imagine that the calendar window contains a long strip of paper with the months on it. @@ -196,16 +213,18 @@ @item C-x > Scroll calendar one month backward (@code{scroll-calendar-right}). @item C-v +@itemx @key{NEXT} Scroll calendar three months forward (@code{scroll-calendar-left-three-months}). @item M-v +@itemx @key{PRIOR} Scroll calendar three months backward (@code{scroll-calendar-right-three-months}). @end table -@kindex C-x < (Calendar mode) +@kindex C-x < @r{(Calendar mode)} @findex scroll-calendar-left -@kindex C-x > (Calendar mode) +@kindex C-x > @r{(Calendar mode)} @findex scroll-calendar-right The most basic calendar scroll commands scroll by one month at a time. This means that there are two months of overlap between the @@ -214,20 +233,21 @@ display forward in time. @kbd{C-x >} scrolls the contents to the right, which moves backwards in time. -@kindex C-v (Calendar mode) +@kindex C-v @r{(Calendar mode)} @findex scroll-calendar-left-three-months -@kindex M-v (Calendar mode) +@kindex M-v @r{(Calendar mode)} @findex scroll-calendar-right-three-months The commands @kbd{C-v} and @kbd{M-v} scroll the calendar by an entire -``screenful''---three months---in analogy with the usual meaning of these -commands. @kbd{C-v} makes later dates visible and @kbd{M-v} makes earlier -dates visible. These commands also take a numeric argument as a repeat -count; in particular, since @kbd{C-u} (@code{universal-argument}) multiplies -the next command by four, typing @kbd{C-u C-v} scrolls the calendar forward by -a year and typing @kbd{C-u M-v} scrolls the calendar backward by a year. +``screenful''---three months---in analogy with the usual meaning of +these commands. @kbd{C-v} makes later dates visible and @kbd{M-v} makes +earlier dates visible. These commands take a numeric argument as a +repeat count; in particular, since @kbd{C-u} multiplies the next command +by four, typing @kbd{C-u C-v} scrolls the calendar forward by a year and +typing @kbd{C-u M-v} scrolls the calendar backward by a year. - Any of the special Calendar mode commands scrolls the calendar automatically -as necessary to ensure that the date you have moved to is visible. + The function keys @key{NEXT} and @key{PRIOR} are equivalent to +@kbd{C-v} and @kbd{M-v}, just as they are in other modes. + @node Mark and Region, General Calendar, Scroll Calendar, Calendar/Diary @subsection The Mark and the Region @@ -249,10 +269,10 @@ (@code{calendar-count-days-region}). @end table -@kindex C-@@ (Calendar mode) -@kindex C-SPC (Calendar mode) +@kindex C-@@ @r{(Calendar mode)} +@kindex C-SPC @r{(Calendar mode)} @findex calendar-set-mark -@kindex C-x C-x (Calendar mode) +@kindex C-x C-x @r{(Calendar mode)} @findex calendar-exchange-point-and-mark You set the mark in the calendar, as in any other buffer, by using @kbd{C-@@} or @kbd{C-SPC} (@code{calendar-set-mark}). You return to the marked date @@ -261,11 +281,12 @@ is scrolled as necessary, if the marked date was not visible on the screen. This does not change the extent of the region. -@kindex M-= (Calendar mode) +@kindex M-= @r{(Calendar mode)} @findex calendar-count-days-region To determine the number of days in the region, type @kbd{M-=} (@code{calendar-count-days-region}). The numbers of days printed is -@emph{inclusive}, that is, includes the days specified by mark and point. +@emph{inclusive}; that is, it includes the days specified by mark and +point. @cindex mark ring The main use of the mark in the calendar is to remember dates that you may @@ -278,7 +299,7 @@ the mark ring. So, repeated use of this command moves point through all the old marks on the ring, one by one. -@node General Calendar, Holidays, Mark and Region, Calendar/Diary +@node General Calendar, LaTeX Calendar, Mark and Region, Calendar/Diary @subsection Miscellaneous Calendar Commands @table @kbd @@ -286,15 +307,15 @@ Display day-in-year (@code{calendar-print-day-of-year}). @item ? Briefly describe calendar commands (@code{describe-calendar-mode}). +@item C-c C-l +Regenerate the calendar window (@code{redraw-calendar}). @item SPC Scroll the next window (@code{scroll-other-window}). -@item C-c C-l -Regenerate the calendar window (@code{redraw-calendar}). @item q Exit from calendar (@code{exit-calendar}). @end table -@kindex p d (Calendar mode) +@kindex p d @r{(Calendar mode)} @cindex day of year @findex calendar-print-day-of-year If you want to know how many days have elapsed since the start of @@ -302,38 +323,107 @@ command (@code{calendar-print-day-of-year}). This displays both of those numbers in the echo area. -@kindex ? (Calendar mode) +@kindex ? @r{(Calendar mode)} @findex describe-calendar-mode To display a brief description of the calendar commands, type @kbd{?} (@code{describe-calendar-mode}). For a fuller description, type @kbd{C-h m}. -@kindex SPC (Calendar mode) +@kindex SPC @r{(Calendar mode)} @findex scroll-other-window You can use @kbd{SPC} (@code{scroll-other-window}) to scroll the other window. This is handy when you display a list of holidays or diary entries in another window. -@kindex C-c C-l (Calendar mode) +@kindex C-c C-l @r{(Calendar mode)} @findex redraw-calendar - If the calendar window gets corrupted, type @kbd{C-c C-l} -(@code{redraw-calendar}) to redraw it. + If the calendar window text gets corrupted, type @kbd{C-c C-l} +(@code{redraw-calendar}) to redraw it. (This can only happen if you use +non-Calendar-mode editing commands.) -@kindex q (Calendar mode) +@kindex SPC @r{(Calendar mode)} + In Calendar mode, you can use @kbd{SPC} (@code{scroll-other-window}) +to scroll the other window. This is handy when you display a list of +holidays or diary entries in another window. + +@kindex q @r{(Calendar mode)} @findex exit-calendar To exit from the calendar, type @kbd{q} (@code{exit-calendar}). This -buries all buffers related to the calendar and returns the window display -to what it was when you entered the calendar. +buries all buffers related to the calendar, selecting other buffers. +(If a frame contains a dedicated calendar window, exiting from the +calendar iconifies that frame.) + +@node LaTeX Calendar, Holidays, General Calendar, Calendar/Diary +@section LaTeX Calendar +@cindex calendar and La@TeX{} + + The Calendar La@TeX{} commands produce a buffer of La@TeX{} code that +prints as a calendar. Depending on the command you use, the printed +calendar covers the day, week, month or year that point is in. -@node Holidays, Sunrise/Sunset, General Calendar, Calendar/Diary +@kindex t @r{(Calendar mode)} +@table @kbd +@item t m +Generate a one-month calendar (@code{cal-tex-cursor-month}). +@item t M +Generate a sideways-printing one-month calendar +(@code{cal-tex-cursor-month-landscape}). +@item t d +Generate a one-day calendar +(@code{cal-tex-cursor-day}). +@item t w 1 +Generate a one-page calendar for one week +(@code{cal-tex-cursor-week}). +@item t w 2 +Generate a two-page calendar for one week +(@code{cal-tex-cursor-week2}). +@item t w 3 +Generate an ISO-style calendar for one week +(@code{cal-tex-cursor-week-iso}). +@item t w 4 +Generate a calendar for one Monday-starting week +(@code{cal-tex-cursor-week-monday}). +@item t f w +Generate a Filofax-style two-weeks-at-a-glance calendar +(@code{cal-tex-cursor-filofax-2week}). +@item t f W +Generate a Filofax-style one-week-at-a-glance calendar +(@code{cal-tex-cursor-filofax-week}). +@item t y +Generate a calendar for one year +(@code{cal-tex-cursor-year}). +@item t Y +Generate a sideways-printing calendar for one year +(@code{cal-tex-cursor-landscape-year}). +@item t f y +Generate a Filofax-style calendar for one year +(@code{cal-tex-cursor-filofax-year}). +@end table + + Some of these commands print the calendar sideways (in ``landscape +mode''), so it can be wider than it is long. Some of them use Filofax +paper size (3.75in x 6.75in). All of these commands accept a prefix +argument which specifies how many days, weeks, months or years to print +(starting always with the selected one). + + If the variable @code{cal-tex-holidays} is non-@code{nil} (the +default), then the printed calendars show the holidays in +@code{calendar-holidays}. If the variable @code{cal-tex-diary} is +non-@code{nil} (the default is @code{nil}), diary entries are included +also (in weekly and monthly calendars only). + +@node Holidays, Sunrise/Sunset, LaTeX Calendar, Calendar/Diary @subsection Holidays @cindex holidays - The Emacs calendar knows about all major and many minor holidays. + The Emacs calendar knows about all major and many minor holidays, +and can display them. @table @kbd @item h -Display holidays for the date indicated by point +Display holidays for the selected date (@code{calendar-cursor-holidays}). +@item Button2 Holidays +Display any holidays for the date you click on. @item x Mark holidays in the calendar window (@code{mark-calendar-holidays}). @item u @@ -344,79 +434,104 @@ @item M-x holidays List all holidays for three months around today's date in another window. +@item M-x list-holidays +List holidays in another window for a specified range of years. @end table -@kindex h (Calendar mode) +@kindex h @r{(Calendar mode)} @findex calendar-cursor-holidays To see if any holidays fall on a given date, position point on that -date in the calendar window and use the @kbd{h} command. The holidays -are usually listed in the echo area, but if there are too many to fit in -one line, then they are displayed in a separate window. +date in the calendar window and use the @kbd{h} command. Alternatively, +click on that date with @kbd{Button2} and then choose @kbd{Holidays} +from the menu that appears. Either way, this displays the holidays for +that date, in the echo area if they fit there, otherwise in a separate +window. -@kindex x (Calendar mode) +@kindex x @r{(Calendar mode)} @findex mark-calendar-holidays -@kindex u (Calendar mode) +@kindex u @r{(Calendar mode)} @findex calendar-unmark - To find the distribution of holidays for a wider period, you can use the -@kbd{x} command. This places a @samp{*} next to every date on which a holiday -falls. The command applies both to the currently visible dates and to new -dates that become visible by scrolling. To turn marking off and erase the -current marks, type @kbd{u}, which also erases any diary marks (@pxref{Diary}). + To view the distribution of holidays for all the dates shown in the +calendar, use the @kbd{x} command. This displays the dates that are +holidays in a different face (or places a @samp{*} after these dates, if +display with multiple faces is not available). The command applies both +to the currently visible months and to other months that subsequently +become visible by scrolling. To turn marking off and erase the current +marks, type @kbd{u}, which also erases any diary marks (@pxref{Diary}). -@kindex a (Calendar mode) +@kindex a @r{(Calendar mode)} @findex list-calendar-holidays To get even more detailed information, use the @kbd{a} command, which displays a separate buffer containing a list of all holidays in the -current three-month range. +current three-month range. You can use @key{SPC} in the calendar window +to scroll that list. @findex holidays - You can display the list of holidays for the current month and the -preceding and succeeding months even if you don't have a calendar -window. Use the command @kbd{M-x holidays}. If you want the list of -holidays centered around a different month, use @kbd{C-u M-x holidays} -and type the month and year. + The command @kbd{M-x holidays} displays the list of holidays for the +current month and the preceding and succeeding months; this works even +if you don't have a calendar window. If you want the list of holidays +centered around a different month, use @kbd{C-u M-x holidays}, which +prompts for the month and year. + + The holidays known to Emacs include United States holidays and the +major Christian, Jewish, and Islamic holidays; also the solstices and +equinoxes. - The holidays known to Emacs include American holidays and the major -Christian, Jewish, and Islamic holidays; when floating point is available, -Emacs also knows about solstices and equinoxes. The dates used by Emacs -for holidays are based on @emph{current practice}, not historical fact. -Historically, for instance, the start of daylight savings time and even -its existence have varied from year to year. However present American -law mandates that daylight savings time begins on the first Sunday in -April; this is the definition that Emacs uses, even though it is wrong -for some prior years. +@findex list-holidays + The command @kbd{M-x list-holidays} displays the list of holidays for +a range of years. This function asks you for the starting and stopping +years, and allows you to chose all the holidays or one of several +categories of holidays. You can use this command even if you don't have +a calendar window. + + The dates used by Emacs for holidays are based on @emph{current +practice}, not historical fact. Historically, for instance, the start +of daylight savings time and even its existence have varied from year to +year, but present United States law mandates that daylight savings time +begins on the first Sunday in April. When the daylight savings rules +are set up for the United States, Emacs always uses the present +definition, even though it is wrong for some prior years. @node Sunrise/Sunset, Lunar Phases, Holidays, Calendar/Diary @subsection Times of Sunrise and Sunset -@cindex sunrise -@cindex sunset +@cindex sunrise and sunset - Emacs can tell you, to within a minute or two, the times of sunrise and -sunset for any date, if floating point is available. + Special calendar commands can tell you, to within a minute or two, the +times of sunrise and sunset for any date. @table @kbd @item S -Display times of sunrise and sunset for the date indicated by point +Display times of sunrise and sunset for the selected date (@code{calendar-sunrise-sunset}). +@item Button2 Sunrise/Sunset +Display times of sunrise and sunset for the date you click on. @item M-x sunrise-sunset Display times of sunrise and sunset for today's date. +@item C-u M-x sunrise-sunset +Display times of sunrise and sunset for a specified date. @end table -@kindex S (Calendar mode) +@kindex S @r{(Calendar mode)} @findex calendar-sunrise-sunset @findex sunrise-sunset - Move point to the date you want, and type @kbd{S}, to display the -@emph{local times} of sunrise and sunset in the echo area. + Within the calendar, to display the @emph{local times} of sunrise and +sunset in the echo area, move point to the date you want, and type +@kbd{S}. Alternatively, click @kbd{Button2} on the date, then choose +@kbd{Sunrise/Sunset} from the menu that appears. The command @kbd{M-x +sunrise-sunset} is available outside the calendar to display this +information for today's date or a specified date. To specify a date +other than today, use @kbd{C-u M-x sunrise-sunset}, which prompts for +the year, month, and day. - You can display the times of sunrise and sunset for the current date -even if you don't have a calendar window. Use the command @kbd{M-x -sunrise-sunset}. If you want the times of sunrise and sunset for a -different date, use @kbd{C-u M-x sunrise-sunset} and type the year, -month, and day. + You can display the times of sunrise and sunset for any location and +any date with @kbd{C-u C-u M-x sunrise-sunset}. This asks you for a +longitude, latitude, number of minutes difference from Coordinated +Universal Time, and date, and then tells you the times of sunrise and +sunset for that location on that date. Because the times of sunrise and sunset depend on the location on earth, you need to tell Emacs your latitude, longitude, and location -name. Here is an example of what to set: +name before using these commands. Here is an example of what to set: @vindex calendar-location-name @vindex calendar-longitude @@ -432,9 +547,9 @@ @code{calendar-longitude}. Your time zone also affects the local time of sunrise and sunset. -Emacs usually gets this information from the operating system, but if -these values are not what you want (or if the operating system does not -supply them), you'll need to set them yourself, like this: +Emacs usually gets time zone information from the operating system, but +if these values are not what you want (or if the operating system does +not supply them), you must set them yourself. Here is an example: @vindex calendar-time-zone @vindex calendar-standard-time-zone-name @@ -447,64 +562,59 @@ @noindent The value of @code{calendar-time-zone} is the number of minutes -difference between your local standard time and Universal Time -(Greenwich time). The values of @code{calendar-standard-time-zone-name} -and @code{calendar-daylight-time-zone-name} are the abbreviations used -in your time zone. +difference between your local standard time and Coordinated Universal +Time (Greenwich time). The values of +@code{calendar-standard-time-zone-name} and +@code{calendar-daylight-time-zone-name} are the abbreviations used in +your time zone. Emacs displays the times of sunrise and sunset +@emph{corrected for daylight savings time}. @xref{Daylight Savings}, +for how daylight savings time is determined. - Emacs displays the times of sunrise and sunset @emph{corrected for -daylight savings time} (this convenience is unusual; most tables of -sunrise and sunset use standard time). The default rule for the -starting and stopping dates of daylight savings time is the American -rule. @xref{Daylight Savings} - - You can display the times of sunrise and sunset for any location and -any date with @kbd{C-u C-u M-x sunrise-sunset}. Emacs asks you for a -longitude, latitude, number of minutes difference from Universal time, -and date, and then tells you the times of sunrise and sunset for that -location on that date. The times are usually given in the echo area, -but if the message is too long fit in one line, they are displayed in a -separate window. + As a user, you might find it convenient to set the calendar location +variables for your usual physical location in your @file{.emacs} file. +And when you install Emacs on a machine, you can create a +@file{default.el} file which sets them properly for the typical location +of most users of that machine. @xref{Init File}. @node Lunar Phases, Other Calendars, Sunrise/Sunset, Calendar/Diary @subsection Phases of the Moon @cindex phases of the moon @cindex moon, phases of - Emacs can tell you the dates and times of the phases of the moon (new -moon, first quarter, full moon, last quarter), if floating point is available. + These calendar commands display the dates and times of the phases of +the moon (new moon, first quarter, full moon, last quarter). This +feature is useful for debugging problems that ``depend on the phase of +the moon.'' @table @kbd @item M -List, in another window, the dates and times for all the quarters of the -moon for the three-month period shown in the calendar window -(@code{calendar-phases-of-moon}). +Display the dates and times for all the quarters of the moon for the +three-month period shown (@code{calendar-phases-of-moon}). @item M-x phases-of-moon -List dates and times of the quarters of the moon for three months around -today's date in another window. +Display dates and times of the quarters of the moon for three months around +today's date. @end table -@kindex M (Calendar mode) +@kindex M @r{(Calendar mode)} @findex calendar-phases-of-moon - Use the @kbd{M} command to display a separate buffer of the phases of -the moon for the current three-month range. The dates and times listed -are accurate to within a few minutes. + Within the calendar, use the @kbd{M} command to display a separate +buffer of the phases of the moon for the current three-month range. The +dates and times listed are accurate to within a few minutes. @findex phases-of-moon - You can display the list of the phases of the moon for the current -month and the preceding and succeeding months even if you don't have a -calendar window. Use the command @kbd{M-x phases-of-moon}. If you want -the phases of the moon centered around a different month, use @kbd{C-u -M-x phases-of-moon} and type the month and year. - -@vindex calendar-time-zone + Outside the calendar, use the command @kbd{M-x phases-of-moon} to +display the list of the phases of the moon for the current month and the +preceding and succeeding months. For information about a different +month, use @kbd{C-u M-x phases-of-moon}, which prompts for the month and +year. + The dates and times given for the phases of the moon are given in local time (corrected for daylight savings, when appropriate); but if -the variable @code{calendar-time-zone} is void, Universal Time (the -Greenwich time zone) is used. @xref{Daylight Savings} +the variable @code{calendar-time-zone} is void, Coordinated Universal +Time (the Greenwich time zone) is used. @xref{Daylight Savings}. -@node Other Calendars, Diary, Lunar Phases, Calendar/Diary -@subsection Our Calendar and Other Calendars +@node Other Calendars, Calendar Systems, Lunar Phases, Calendar/Diary +@subsection Conversion To and From Other Calendars @cindex Gregorian calendar The Emacs calendar displayed is @emph{always} the Gregorian calendar, @@ -512,80 +622,58 @@ the world today. However, this calendar did not exist before the sixteenth century and was not widely used before the eighteenth century; it did not fully displace the Julian calendar and gain universal -acceptance until the early twentieth century. This poses a problem for -the Emacs calendar: you can ask for the calendar of any month starting -with January, year 1 of the current era, but the calendar displayed is -the Gregorian, even for a date at which the Gregorian calendar did not -exist! +acceptance until the early twentieth century. The Emacs calendar can +display any month since January, year 1 of the current era, but the +calendar displayed is the Gregorian, even for a date at which the +Gregorian calendar did not exist. - Emacs knows about several different calendars, though, not just the -Gregorian calendar. The following commands describe the date indicated -by point in various calendar notations: + While Emacs cannot display other calendars, it can convert dates to +and from several other calendars. -@table @kbd -@item p c -Display ISO commercial calendar equivalent for selected day -(@code{calendar-print-iso-date}). -@item p j -Display Julian date for selected day (@code{calendar-print-julian-date}). -@item p a -Display astronomical (Julian) day number for selected day -(@code{calendar-print-astro-day-number}). -@item p h -Display Hebrew date for selected day (@code{calendar-print-hebrew-date}). -@item p i -Display Islamic date for selected day (@code{calendar-print-islamic-date}). -@item p f -Display French Revolutionary date for selected day -(@code{calendar-print-french-date}). -@item p m -Display Mayan date for selected day (@code{calendar-print-mayan-date}). -@end table +@menu +* Calendar Systems:: The calendars Emacs understands + (aside from Gregorian). +* To Other Calendar:: Converting the selected date to various calendars. +* From Other Calendar:: Moving to a date specified in another calendar. +* Mayan Calendar:: Moving to a date specified in a Mayan calendar. +@end menu If you are interested in these calendars, you can convert dates one at a time. Put point on the desired date of the Gregorian calendar and press the appropriate keys. The @kbd{p} is a mnemonic for ``print'' since Emacs ``prints' the equivalent date in the echo area. +@node Calendar Systems, To Other Calendar, Other Calendars, Other Calendars +@section Supported Calendar Systems -@kindex p c (Calendar mode) -@findex calendar-print-iso-date @cindex ISO commercial calendar The ISO commercial calendar is used largely in Europe. -@kindex p j (Calendar mode) -@findex calendar-print-julian-date @cindex Julian calendar The Julian calendar, named after Julius Caesar, was the one used in Europe throughout medieval times, and in many countries up until the nineteenth century. -@kindex p a (Calendar mode) -@findex calendar-print-astro-day-number @cindex Julian day numbers @cindex astronomical day numbers Astronomers use a simple counting of days elapsed since noon, Monday, January 1, 4713 B.C. on the Julian calendar. The number of days elapsed is called the @emph{Julian day number} or the @emph{Astronomical day number}. -@kindex p h (Calendar mode) -@findex calendar-print-hebrew-date @cindex Hebrew calendar - The Hebrew calendar is the one used to determine the dates of Jewish -holidays. Hebrew calendar dates begin and end at sunset. + The Hebrew calendar is used by tradition in the Jewish religion. The +Emacs calendar program uses the Hebrew calendar to determine the dates +of Jewish holidays. Hebrew calendar dates begin and end at sunset. -@kindex p i (Calendar mode) -@findex calendar-print-islamic-date @cindex Islamic calendar - The Islamic (Moslem) calendar is the one used to determine the dates -of Moslem holidays. There is no universal agreement in the Islamic -world about the calendar; Emacs uses a widely accepted version, but the -precise dates of Islamic holidays often depend on proclamation by -religious authorities, not on calculations. As a consequence, the -actual dates of occurrence can vary slightly from the dates computed by -Emacs. Islamic calendar dates begin and end at sunset. + The Islamic calendar is used in many predominantly Islamic countries. +Emacs uses it to determine the dates of Islamic holidays. There is no +universal agreement in the Islamic world about the calendar; Emacs uses +a widely accepted version, but the precise dates of Islamic holidays +often depend on proclamation by religious authorities, not on +calculations. As a consequence, the actual dates of observance can vary +slightly from the dates computed by Emacs. Islamic calendar dates begin +and end at sunset. -@kindex p f (Calendar mode) -@findex calendar-print-french-date @cindex French Revolutionary calendar The French Revolutionary calendar was created by the Jacobins after the 1789 revolution, to represent a more secular and nature-based view of the annual @@ -593,8 +681,6 @@ the metric system. The French government officially abandoned this calendar at the end of 1805. -@kindex p m (Calendar mode) -@findex calendar-print-mayan-date @cindex Mayan calendar The Maya of Central America used three separate, overlapping calendar systems, the @emph{long count}, the @emph{tzolkin}, and the @emph{haab}. @@ -602,40 +688,142 @@ exact correlation between the Mayan calendar and our calendar; Emacs uses the Goodman-Martinez-Thompson correlation in its calculations. - You can move to dates that you specify on the Commercial, Julian, -astronomical, Hebrew, Islamic, or French calendars: +@cindex Coptic calendar +@cindex Ethiopic calendar + The Copts use a calendar based on the ancient Egyptian solar calendar. +Their calendar consists of twelve 30-day months followed by an extra +five-day period. Once every fourth year they add a leap day to this +extra period to make it six days. The Ethiopic calendar is identical in +structure, but has different year numbers and month names. + +@cindex Persian calendar + The Persians use a solar calendar based on a design of Omar Khayyam. +Their calendar consists of twelve months of which the first six have 31 +days, the next five have 30 days, and the last has 29 in ordinary years +and 30 in leap years. Leap years occur in a complicated pattern every +four or five years. + +@cindex Chinese calendar + The Chinese calendar is a complicated system of lunar months arranged +into solar years. The years go in cycles of sixty, each year containing +either twelve months in an ordinary year or thirteen months in a leap +year; each month has either 29 or 30 days. Years, ordinary months, and +days are named by combining one of ten ``celestial stems'' with one of +twelve ``terrestrial branches'' for a total of sixty names that are +repeated in a cycle of sixty. + +@node To Other Calendar, From Other Calendar, Calendar Systems, Other Calendars +@section Converting To Other Calendars + + The following commands describe the selected date (the date at point) +in various other calendar systems: -@kindex g c (Calendar mode) +@table @kbd +@item Button2 Other Calendars +Display the date that you click on, expressed in various other calendars. +@kindex p @r{(Calendar mode)} +@findex calendar-print-iso-date +@item p c +Display ISO commercial calendar equivalent for selected day +(@code{calendar-print-iso-date}). +@findex calendar-print-julian-date +@item p j +Display Julian date for selected day (@code{calendar-print-julian-date}). +@findex calendar-print-astro-day-number +@item p a +Display astronomical (Julian) day number for selected day +(@code{calendar-print-astro-day-number}). +@findex calendar-print-hebrew-date +@item p h +Display Hebrew date for selected day (@code{calendar-print-hebrew-date}). +@findex calendar-print-islamic-date +@item p i +Display Islamic date for selected day (@code{calendar-print-islamic-date}). +@findex calendar-print-french-date +@item p f +Display French Revolutionary date for selected day +(@code{calendar-print-french-date}). +@findex calendar-print-chinese-date +@item p C +Display Chinese date for selected day +(@code{calendar-print-chinese-date}). +@findex calendar-print-coptic-date +@item p k +Display Coptic date for selected day +(@code{calendar-print-coptic-date}). +@findex calendar-print-ethiopic-date +@item p e +Display Ethiopic date for selected day +(@code{calendar-print-ethiopic-date}). +@findex calendar-print-persian-date +@item p p +Display Persian date for selected day +(@code{calendar-print-persian-date}). +@findex calendar-print-mayan-date +@item p m +Display Mayan date for selected day (@code{calendar-print-mayan-date}). +@end table + + If you are using X, the easiest way to translate a date into other +calendars is to click on it with @kbd{Button2}, then choose @kbd{Other +Calendars} from the menu that appears. This displays the equivalent +forms of the date in all the calendars Emacs understands, in the form of +a menu. (Choosing an alternative from this menu doesn't actually do +anything---the menu is used only for display.) + + Put point on the desired date of the Gregorian calendar, then type the +appropriate keys. The @kbd{p} is a mnemonic for ``print'' since Emacs +``prints'' the equivalent date in the echo area. + +@node From Other Calendar, Mayan Calendar, To Other Calendar, Other Calendars +@section Converting From Other Calendars + + You can use the other supported calendars to specify a date to move +to. This section describes the commands for doing this using calendars +other than Mayan; for the Mayan calendar, see the following section. + +@kindex g @var{char} @r{(Calendar mode)} @findex calendar-goto-iso-date -@kindex g j (Calendar mode) @findex calendar-goto-julian-date -@kindex g a (Calendar mode) @findex calendar-goto-astro-day-number -@kindex g h (Calendar mode) @findex calendar-goto-hebrew-date -@kindex g i (Calendar mode) @findex calendar-goto-islamic-date -@kindex g f (Calendar mode) @findex calendar-goto-french-date +@findex calendar-goto-chinese-date +@findex calendar-goto-persian-date +@findex calendar-goto-coptic-date +@findex calendar-goto-ethiopic-date @table @kbd @item g c -Move point to a date specified by the ISO commercial calendar +Move to a date specified in the ISO commercial calendar (@code{calendar-goto-iso-date}). @item g j -Move point to a date specified by the Julian calendar +Move to a date specified in the Julian calendar (@code{calendar-goto-julian-date}). @item g a -Move point to a date specified by astronomical (Julian) day number +Move to a date specified in astronomical (Julian) day number (@code{calendar-goto-astro-day-number}). @item g h -Move point to a date specified by the Hebrew calendar +Move to a date specified in the Hebrew calendar (@code{calendar-goto-hebrew-date}). @item g i -Move point to a date specified by the Islamic calendar +Move to a date specified in the Islamic calendar (@code{calendar-goto-islamic-date}). @item g f -Move point to a date specified by the French Revolutionary calendar +Move to a date specified in the French Revolutionary calendar (@code{calendar-goto-french-date}). +@item g C +Move to a date specified in the Chinese calendar +(@code{calendar-goto-chinese-date}). +@item g p +Move to a date specified in the Persian calendar +(@code{calendar-goto-persian-date}). +@item g k +Move to a date specified in the Coptic calendar +(@code{calendar-goto-coptic-date}). +@item g e +Move to a date specified in the Ethiopic calendar +(@code{calendar-goto-ethiopic-date}). @end table These commands ask you for a date on the other calendar, move point to @@ -655,50 +843,45 @@ this command first asks you for the date of death and the range of years, and then displays the list of yahrzeit dates. - Emacs also has many commands for movement on the Mayan calendars. +@node Mayan Calendar, Diary ,From Other Calendar ,Other Calendars +@subsection Converting from the Mayan Calendar + + Here are the commands to select dates based on the Mayan calendar: @table @kbd @item g m l -Move point to a date specified by the Mayan long count calendar +Move to a date specified by the long count calendar (@code{calendar-goto-mayan-long-count-date}). +@item g m n t +Move to the next occurrence of a place in the +tzolkin calendar (@code{calendar-next-tzolkin-date}). @item g m p t -Move point to the previous occurrence of a date specified by the Mayan +Move to the previous occurrence of a place in the tzolkin calendar (@code{calendar-previous-tzolkin-date}). -@item g m n t -Move point to the next occurrence of a date specified by the Mayan -tzolkin calendar (@code{calendar-next-tzolkin-date}). +@item g m n h +Move to the next occurrence of a place in the +haab calendar (@code{calendar-next-haab-date}). @item g m p h -Move point to the previous occurrence of a date specified by the Mayan +Move to the previous occurrence of a place in the haab calendar (@code{calendar-previous-haab-date}). -@item g m n h -Move point to the next occurrence of a date specified by the Mayan -haab calendar (@code{calendar-next-haab-date}). +@item g m n c +Move to the next occurrence of a place in the +calendar round (@code{calendar-next-calendar-round-date}). @item g m p c -Move point to the previous occurrence of a date specified by the Mayan +Move to the previous occurrence of a place in the calendar round (@code{calendar-previous-calendar-round-date}). -@item g m n c -Move point to the next occurrence of a date specified by the Mayan -calendar round (@code{calendar-next-calendar-round-date}). @end table @cindex Mayan long count To understand these commands, you need to understand the Mayan calendars. -The long count is a counting of days with units +The @dfn{long count} is a counting of days with these units: + +@display +1 kin = 1 day@ @ @ 1 uinal = 20 kin@ @ @ 1 tun = 18 uinal +1 katun = 20 tun@ @ @ 1 baktun = 20 katun +@end display -@table @asis -@item 1 kin -= 1 day -@item 1 uinal -= 20 kin -@item 1 tun -= 18 uinal -@item 1 katun -= 20 tun -@item 1 baktun -= 20 katun -@end table - -@kindex g m l (Calendar mode) +@kindex g m l @r{(Calendar mode)} @findex calendar-goto-mayan-long-count-date @noindent Thus, the long count date 12.16.11.16.6 means 12 baktun, 16 katun, 11 @@ -707,61 +890,58 @@ @kbd{g m l} command, type the Mayan long count date with the baktun, katun, tun, uinal, and kin separated by periods. -@kindex g m p t (Calendar mode) @findex calendar-previous-tzolkin-date -@kindex g m n t (Calendar mode) @findex calendar-next-tzolkin-date @cindex Mayan tzolkin calendar The Mayan tzolkin calendar is a cycle of 260 days formed by a pair of -independent cycles of 13 and 20 days. Like the haab cycle, this cycle -repeats endlessly, and you can go backward and forward to the previous -or next (respectively) point in the cycle. When you type @kbd{g m p t}, -Emacs asks you for a tzolkin date and moves point to the -previous occurrence of that date; type @kbd{g m n t} to go to the next -occurrence. +independent cycles of 13 and 20 days. Since this cycle repeats +endlessly, Emacs provides commands to move backward and forward to the +previous or next point in the cycle. Type @kbd{g m p t} to go to the +previous tzolkin date; Emacs asks you for a tzolkin date and moves point +to the previous occurrence of that date. Similarly, type @kbd{g m n t} +to go to the next occurrence of a tzolkin date. -@kindex g m p h (Calendar mode) @findex calendar-previous-haab-date -@kindex g m n h (Calendar mode) @findex calendar-next-haab-date @cindex Mayan haab calendar The Mayan haab calendar is a cycle of 365 days arranged as 18 months -of 20 days each, followed a 5-day monthless period. Since this cycle -repeats endlessly, Emacs lets you go backward and forward to the -previous or next (respectively) point in the cycle. Type @kbd{g m p h} -to go to the previous haab date; Emacs asks you for a haab date and -moves point to the previous occurrence of that date. Similarly, -type @kbd{g m n h} to go to the next haab date. +of 20 days each, followed a 5-day monthless period. Like the tzolkin +cycle, this cycle repeats endlessly, and there are commands to move +backward and forward to the previous or next point in the cycle. Type +@kbd{g m p h} to go to the previous haab date; Emacs asks you for a haab +date and moves point to the previous occurrence of that date. +Similarly, type @kbd{g m n h} to go to the next occurrence of a haab +date. -@kindex g m p c (Calendar mode) -@findex calendar-previous-calendar-round-date -@kindex g m n c (Calendar mode) +@c This is omitted because it is too long for smallbook format. +@c @findex calendar-previous-calendar-round-date @findex calendar-next-calendar-round-date @cindex Mayan calendar round The Maya also used the combination of the tzolkin date and the haab date. This combination is a cycle of about 52 years called a @emph{calendar round}. If you type @kbd{g m p c}, Emacs asks you for both a haab and a tzolkin date and then moves point to the previous -occurrence of that combination. Use @kbd{g m p c} to move point to the -next occurrence. Emacs signals an error if the haab/tzolkin date you -have typed cannot occur. +occurrence of that combination. Use @kbd{g m n c} to move point to the +next occurrence of a combination. These commands signal an error if the +haab/tzolkin date combination you have typed is impossible. - Emacs uses strict completion (@pxref{Completion}) whenever it asks you -to type a Mayan name, so you don't have to worry about spelling. + Emacs uses strict completion (@pxref{Completion}) whenever it +asks you to type a Mayan name, so you don't have to worry about +spelling. -@node Diary, Calendar Customization, Other Calendars, Calendar/Diary +@node Diary, Calendar Customization, Mayan Calendar, Calendar/Diary @subsection The Diary @cindex diary - Associated with the Emacs calendar is a diary that keeps track of -appointments or other events on a daily basis. To use the diary -feature, you must first create a @dfn{diary file} containing a list of -events and their dates. Then Emacs can automatically pick out and -display the events for today, for the immediate future, or for any -specified date.@refill + The Emacs diary keeps track of appointments or other events on a daily +basis, in conjunction with the calendar. To use the diary feature, you +must first create a @dfn{diary file} containing a list of events and +their dates. Then Emacs can automatically pick out and display the +events for today, for the immediate future, or for any specified +date. - By default, Emacs expects your diary file to be named @file{~/diary}. -It uses the same format as the @code{calendar} utility. A sample + By default, Emacs uses @file{~/diary} as the diary file. This is the +same file that the @code{calendar} utility uses. A sample @file{~/diary} file is: @example @@ -778,6 +958,10 @@ &* 15 time cards due. @end example +@noindent +This example uses extra spaces to align the event descriptions of most +of the entries. Such formatting is purely a matter of taste. + Although you probably will start by creating a diary manually, Emacs provides a number of commands to let you view, add, and change diary entries. You can also share diary entries with other users @@ -786,75 +970,75 @@ @menu * Diary Commands:: Viewing diary entries and associated calendar dates. * Format of Diary File:: Entering events in your diary. +* Date Formats:: Various ways you can specify dates. +* Adding to Diary:: Commands to create diary entries. * Special Diary Entries:: Anniversaries, blocks of dates, cyclic entries, etc. @end menu @node Diary Commands, Format of Diary File, Diary, Diary @subsection Commands Displaying Diary Entries - Once you have created a @file{~/diary} file, you can view it within -Calendar mode. You can also view today's events independently of -Calendar mode. + Once you have created a @file{~/diary} file, you can use the calendar +to view it. You can also view today's events outside of Calendar mode. @table @kbd @item d -Display any diary entries for the selected date +Display all diary entries for the selected date (@code{view-diary-entries}). +@item Button2 Diary +Display all diary entries for the date you click on. @item s -Display entire diary file (@code{show-all-diary-entries}). +Display the entire diary file (@code{show-all-diary-entries}). @item m Mark all visible dates that have diary entries (@code{mark-diary-entries}). @item u -Unmark calendar window (@code{calendar-unmark}). +Unmark the calendar window (@code{calendar-unmark}). @item M-x print-diary-entries -Print a hard copy of the diary display as it appears. +Print hard copy of the diary display as it appears. @item M-x diary -Display any diary entries for today's date. +Display all diary entries for today's date. @end table -@kindex d (Calendar mode) +@kindex d @r{(Calendar mode)} @findex view-diary-entries - Displaying the diary entries with @kbd{d} shows in a separate window the -diary entries for the date indicated by point in the calendar window. The -mode line of the new window shows the date of the diary entries and any -holidays that fall on that date. + Displaying the diary entries with @kbd{d} shows in a separate window +the diary entries for the selected date in the calendar. The mode line +of the new window shows the date of the diary entries and any holidays +that fall on that date. If you specify a numeric argument with @kbd{d}, +it shows all the diary entries for that many successive days. Thus, +@kbd{2 d} displays all the entries for the selected date and for the +following day. - If you specify a numeric argument with @kbd{d}, then all the diary -entries for that many successive days are shown. Thus, @kbd{2 d} -displays all the entries for the selected date and for the following -day. + Another way to display the diary entries for a date is to click +@kbd{Button2} on the date, and then choose @kbd{Diary} from the menu +that appears. -@kindex m (Calendar mode) +@kindex m @r{(Calendar mode)} @findex mark-diary-entries -@kindex u (Calendar mode) +@kindex u @r{(Calendar mode)} @findex calendar-unmark - To get a broader overview of which days are mentioned in the diary, use -the @kbd{m} command to mark those days in the calendar window. The marks -appear next to the dates to which they apply. The @kbd{m} command affects -the dates currently visible and, if you scroll the calendar, newly visible -dates as well. The @kbd{u} command deletes all diary marks (and all -holiday marks too; @pxref{Holidays}), not only in the dates currently -visible, but dates that become visible when you scroll the calendar. + To get a broader view of which days are mentioned in the diary, use +the @kbd{m} command. This displays the dates that have diary entries +in a different face (or places a @samp{+} after these dates, if +display with multiple faces is not available). The command applies both +to the currently visible months and to other months that subsequently +become visible by scrolling. To turn marking off and erase the current +marks, type @kbd{u}, which also turns off holiday marks +(@pxref{Holidays}). -@kindex s (Calendar mode) +@kindex s @r{(Calendar mode)} @findex show-all-diary-entries - For more detailed information, use the @kbd{s} command, which displays -the entire diary file. + To see the full diary file, rather than just some of the entries, use +the @kbd{s} command. - Display of selected diary entries uses the selective display feature, -the same feature that Outline mode uses to show part of an outline -(@pxref{Outline Mode}). This involves hiding the diary entries that are -not relevant, by changing the preceding newline into an ASCII control-m -(code 015). The hidden lines are part of the buffer's text, but they -are invisible; they don't appear on the screen. When you save the diary -file, the control-m characters are saved as newlines; thus, the -invisible lines become ordinary lines in the file. + Display of selected diary entries uses the selective display feature +to hide entries that don't apply. @findex print-diary-entries - Because the diary buffer as you see it is an illusion, simply printing -the contents does not print what you see on your screen. So there is a -special command to print a hard copy of the buffer @emph{as it appears}; + The diary buffer as you see it is an illusion, so simply printing the +buffer does not print what you see on your screen. There is a special +command to print hard copy of the diary buffer @emph{as it appears}; this command is @kbd{M-x print-diary-entries}. It sends the data directly to the printer. You can customize it like @code{lpr-region} (@pxref{Hardcopy}). @@ -865,92 +1049,31 @@ few days as well; the variable @code{number-of-diary-entries} specifies how many days to include (@pxref{Customization}). - If you put in your @file{.emacs} file: - -@example -(diary) -@end example + If you put @code{(diary)} in your @file{.emacs} file, this +automatically displays a window with the day's diary entries, when you +enter Emacs. The mode line of the displayed window shows the date and +any holidays that fall on that date. -@noindent -it automatically displays a window with the day's diary entries, when -you enter Emacs. The mode line of the displayed window shows the date -and any holidays that fall on that date. - -@node Format of Diary File, Special Diary Entries, Diary Commands, Diary +@node Format of Diary File, Date Formats, Diary Commands, Diary @subsection The Diary File @cindex diary file @vindex diary-file Your @dfn{diary file} is a file that records events associated with -particular dates. The name of the diary file is specified by the variable -@code{diary-file}; @file{~/diary} is the default. You can use the same file -for the @code{calendar} utility program, since its formats are a subset of the -ones allowed by the Emacs Calendar. - - Each entry in the file describes one event and consists of one or more -lines. It always begins with a date specification at the left margin. -The rest of the entry is simply text to describe the event. If the -entry has more than one line, then the lines after the first must begin -with whitespace to indicate they continue a previous entry. - - Here are some sample diary entries, illustrating different ways of -formatting a date. The examples all show dates in American order (month, day, -year), but Calendar mode offers (day, month, year) ordering too. - -@example -4/20/93 Switch-over to new tabulation system -apr. 25 Start tabulating annual results -4/30 Results for April are due -*/25 Monthly cycle finishes -Friday Don't leave without backing up files -@end example - - The first entry appears only once, on April 20, 1993. The second and -third appear every year on the specified dates, and the fourth uses a -wildcard (asterisk) for the month, so it appears on the 25th of every -month. The final entry appears every week on Friday. +particular dates. The name of the diary file is specified by the +variable @code{diary-file}; @file{~/diary} is the default. The +@code{calendar} utility program supports a subset of the format allowed +by the Emacs diary facilities, so you can use that utility to view the +diary file, with reasonable results aside from the entries it cannot +understand. - You can also use just numbers to express a date, as in -@samp{@var{month}/@var{day}} or -@samp{@var{month}/@var{day}/@var{year}}. This must be followed by a -nondigit. In the date itself, @var{month} and @var{day} are numbers of -one or two digits. @var{year} is a number and may be abbreviated to the -last two digits; that is, you can use @samp{11/12/1989} or -@samp{11/12/89}. - - A date may be @dfn{generic}, or partially unspecified. Then the entry -applies to all dates that match the specification. If the date does -not contain a year, it is generic and applies to any year. -Alternatively, @var{month}, @var{day}, or @var{year} can be a @samp{*}; -this matches any month, day, or year, respectively. Thus, a diary entry -@samp{3/*/*} matches any day in March of any year.@refill - - Dates can also have the form @samp{@var{monthname} @var{day}} or -@samp{@var{monthname} @var{day}, @var{year}}, where the month's name can -be spelled in full or abbreviated to three characters (with or without a -period). Case is not significant. If the date does not contain a year, -it is generic and applies to any year. Also, @var{monthname}, -@var{day}, or @var{year} can be a @samp{*} which matches any month, day, -or year, respectively.@refill - -@vindex european-calendar-style -@findex european-calendar - If you prefer the European style of writing dates---in which the day -comes before the month---type @kbd{M-x european-calendar} while in the -calendar, or set the variable @code{european-calendar-style} to @code{t} -in your @file{.emacs} file @emph{before} the calendar or diary command. -This mode interprets all dates in the diary in the European manner, and -also uses European style for displaying diary dates. (Note that there -is no comma after the @var{monthname} in the European style.)@refill - -@findex american-calendar - To revert to the (default) American style of writing dates, type @kbd{M-x -american-calendar}. - - You can use the name of a day of the week as a generic date which -applies to any date falling on that day of the week. You can abbreviate -the day of the week to three letters (with or without a period) or spell -it in full; it need not be capitalized. + Each entry in the diary file describes one event and consists of one +or more lines. An entry always begins with a date specification at the +left margin. The rest of the entry is simply text to describe the +event. If the entry has more than one line, then the lines after the +first must begin with whitespace to indicate they continue a previous +entry. Lines that do not begin with valid dates and do not continue a +preceding entry are ignored. You can inhibit the marking of certain diary entries in the calendar window; to do this, insert an ampersand (@samp{&}) at the beginning of @@ -959,13 +1082,10 @@ window. Nonmarking entries are especially useful for generic entries that would otherwise mark many different dates. - Lines that do not begin with valid dates and do not continue a preceding -entry are ignored. - If the first line of a diary entry consists only of the date or day name with no following blanks or punctuation, then the diary window display doesn't include that line; only the continuation lines appear. -For example: +For example, this entry: @example 02/11/1989 @@ -988,16 +1108,78 @@ diary file, with portions of it concealed from view. This means, for instance, that the @kbd{C-f} (@code{forward-char}) command can put point at what appears to be the end of the line, but what is in reality the -middle of some concealed line. @emph{Be careful when editing the diary -entries!} Inserting additional lines or adding/deleting characters in the -middle of a visible line cannot cause problems. Watch out for @kbd{C-e} -(@code{end-of-line}), however; it may put you at the end of a concealed -line far from where point appears to be! Before editing the diary, it -is best to display the entire file with @kbd{s} -(@code{show-all-diary-entries}).@refill +middle of some concealed line. + + @emph{Be careful when editing the diary entries!} Inserting +additional lines or adding/deleting characters in the middle of a +visible line cannot cause problems, but editing at the end of a line may +not do what you expect. Deleting a line may delete other invisible +entries that follow it. Before editing the diary, it is best to display +the entire file with @kbd{s} (@code{show-all-diary-entries}). + +@node Date Formats,Adding to Diary ,Format of Diary File, Diary +@subsection Date Formats + + Here are some sample diary entries, illustrating different ways of +formatting a date. The examples all show dates in American order +(month, day, year), but Calendar mode supports European order (day, +month, year) as an option. + +@example +4/20/93 Switch-over to new tabulation system +apr. 25 Start tabulating annual results +4/30 Results for April are due +*/25 Monthly cycle finishes +Friday Don't leave without backing up files +@end example + + The first entry appears only once, on April 20, 1993. The second and +third appear every year on the specified dates, and the fourth uses a +wildcard (asterisk) for the month, so it appears on the 25th of every +month. The final entry appears every week on Friday. - While in the calendar, there are several commands to help you in making -entries to your diary. + You can use just numbers to express a date, as in +@samp{@var{month}/@var{day}} or @samp{@var{month}/@var{day}/@var{year}}. +This must be followed by a nondigit. In the date itself, @var{month} +and @var{day} are numbers of one or two digits. The optional @var{year} +is also a number, and may be abbreviated to the last two digits; that +is, you can use @samp{11/12/1989} or @samp{11/12/89}. + + Dates can also have the form @samp{@var{monthname} @var{day}} or +@samp{@var{monthname} @var{day}, @var{year}}, where the month's name can +be spelled in full or abbreviated to three characters (with or without a +period). Case is not significant. + + A date may be @dfn{generic}; that is, partially unspecified. Then the +entry applies to all dates that match the specification. If the date +does not contain a year, it is generic and applies to any year. +Alternatively, @var{month}, @var{day}, or @var{year} can be a @samp{*}; +this matches any month, day, or year, respectively. Thus, a diary entry +@samp{3/*/*} matches any day in March of any year; so does @samp{march +*}. + +@vindex european-calendar-style +@findex european-calendar +@findex american-calendar + If you prefer the European style of writing dates---in which the day +comes before the month---type @kbd{M-x european-calendar} while in the +calendar, or set the variable @code{european-calendar-style} to @code{t} +@emph{before} using any calendar or diary command. This mode interprets +all dates in the diary in the European manner, and also uses European +style for displaying diary dates. (Note that there is no comma after +the @var{monthname} in the European style.) To go back to the (default) +American style of writing dates, type @kbd{M-x american-calendar}. + + You can use the name of a day of the week as a generic date which +applies to any date falling on that day of the week. You can abbreviate +the day of the week to three letters (with or without a period) or spell +it in full; case is not significant. + +@node Adding to Diary, Special Diary Entries, Date Formats, Diary +@subsection Commands to Add to the Diary + + While in the calendar, there are several commands to create diary +entries: @table @kbd @item i d @@ -1010,63 +1192,71 @@ Add a diary entry for the selected day of the year (@code{insert-yearly-diary-entry}). @end table -@kindex i d (Calendar mode) +@kindex i d @r{(Calendar mode)} @findex insert-diary-entry - You can make a diary entry for a specific date by moving point to that -date in the calendar window and using the @kbd{i d} command. This -command displays the end of your diary file in another window and -inserts the date; you can then type the rest of the diary entry. + You can make a diary entry for a specific date by selecting that date +in the calendar window and typing the @kbd{i d} command. This command +displays the end of your diary file in another window and inserts the +date; you can then type the rest of the diary entry. -@kindex i w (Calendar mode) +@kindex i w @r{(Calendar mode)} @findex insert-weekly-diary-entry +@kindex i m @r{(Calendar mode)} +@findex insert-monthly-diary-entry +@kindex i y @r{(Calendar mode)} +@findex insert-yearly-diary-entry If you want to make a diary entry that applies to a specific day of -the week, move point to that day of the week (any occurrence will do) -and use the @kbd{i w} command. This displays the end of your diary file -in another window and inserts the day-of-week as a generic date; you can -then type the rest of the diary entry. +the week, select that day of the week (any occurrence will do) and type +@kbd{i w}. This inserts the day-of-week as a generic date; you can then +type the rest of the diary entry. You can make a monthly diary entry in +the same fashion. Select the day of the month, use the @kbd{i m} +command, and type rest of the entry. Similarly, you can insert a yearly +diary entry with the @kbd{i y} command. -@kindex i m (Calendar mode) -@findex insert-monthly-diary-entry -@kindex i y (Calendar mode) -@findex insert-yearly-diary-entry - You make a monthly diary entry in the same fashion. Move point to the -day of the month, use the @kbd{i m} command, and type the diary entry. -Similarly, you make a yearly diary entry with the @kbd{i y} command. - + All of the above commands make marking diary entries by default. To +make a nonmarking diary entry, give a numeric argument to the command. +For example, @kbd{C-u i w} makes a nonmarking weekly diary entry. + All of the above commands make marking diary entries. If you want the diary entry to be nonmarking, give a prefix argument to the command. For example, @kbd{C-u i w} makes a nonmarking, weekly diary entry. - If you modify the diary, be sure to write the file before exiting from the -calendar. - -@node Special Diary Entries,, Format of Diary File, Diary + When you modify the diary file, be sure to save the file before +exiting Emacs. + +@node Special Diary Entries,, Adding to Diary, Diary @subsection Special Diary Entries - In addition to entries based on calendar dates, your diary file can contain -entries for regularly occurring events such as anniversaries. These entries -are based on expressions (sexps) that Emacs evaluates as it scans the diary -file. Such an entry is indicated by @samp{%%} at the beginning (preceded by -@samp{&} for a nonmarking entry), followed by a sexp in parentheses. Calendar -mode offers commands to make it easier to put some of these special entries in -your diary. + In addition to entries based on calendar dates, the diary file can +contain @dfn{sexp entries} for regular events such as anniversaries. +These entries are based on Lisp expressions (sexps) that Emacs evaluates +as it scans the diary file. Instead of a date, a sexp entry contains +@samp{%%} followed by a Lisp expression which must begin and end with +parentheses. The Lisp expression determines which dates the entry +applies to. + + Calendar mode provides commands to insert certain commonly used +sexp entries: @table @kbd @item i a -Add an anniversary diary entry for the selected date (@code{insert-anniversary-diary-entry}). +Add an anniversary diary entry for the selected date +(@code{insert-anniversary-diary-entry}). @item i b -Add a block diary entry for the current region (@code{insert-block-diary-entry}). +Add a block diary entry for the current region +(@code{insert-block-diary-entry}). @item i c -Add a cyclic diary entry starting at the date (@code{insert-cyclic-diary-entry}). +Add a cyclic diary entry starting at the date +(@code{insert-cyclic-diary-entry}). @end table -@kindex i a (Calendar mode) +@kindex i a @r{(Calendar mode)} @findex insert-anniversary-diary-entry If you want to make a diary entry that applies to the anniversary of a specific date, move point to that date and use the @kbd{i a} command. This displays the end of your diary file in another window and inserts the anniversary description; you can then type the rest of the diary -entry. +entry. The entry looks like this: @findex diary-anniversary The effect of @kbd{i a} is to add a @code{diary-anniversary} sexp to your @@ -1077,24 +1267,17 @@ @end example @noindent -This entry applies to October 31 in any year after 1948; @samp{10 31 1948} -specifies the date. (If you are using the European calendar style, the month -and day are interchanged.) The reason this sexp requires a beginning -year is that advanced diary functions can use it to calculate the number of -elapsed years (@pxref{Sexp Diary Entries}).@refill +This entry applies to October 31 in any year after 1948; @samp{10 31 +1948} specifies the date. (If you are using the European calendar +style, the month and day are interchanged.) The reason this expression +requires a beginning year is that advanced diary functions can use it to +calculate the number of elapsed years. -@kindex i b (Calendar mode) -@findex insert-block-diary-entry - You can make a diary entry for a block of dates by setting the mark -at the date at one end of the block, moving point to the date at the other -end of the block, and using the @kbd{i b} command. This command -causes the end of your diary file to be displayed in another window and the -block description to be inserted; you can then type the diary entry. + A @dfn{block} diary entry applies to a specified range of consecutive +dates. Here is a block diary entry that applies to all dates from June +24, 1990 through July 10, 1990: @findex diary-block - Here is such a diary entry that applies to all dates from June 24, 1990 -through July 10, 1990: - @example %%(diary-block 6 24 1990 7 10 1990) Vacation @end example @@ -1104,16 +1287,19 @@ indicates the stopping date. (Again, if you are using the European calendar style, the month and day are interchanged.) -@kindex i c (Calendar mode) +@kindex i b @r{(Calendar mode)} +@findex insert-block-diary-entry + To insert a block entry, place point and the mark on the two +dates that begin and end the range, and type @kbd{i b}. This command +displays the end of your diary file in another window and inserts the +block description; you can then type the diary entry. + +@kindex i c @r{(Calendar mode)} @findex insert-cyclic-diary-entry - You can specify cyclic diary entries that repeat after a fixed -interval of days. Move point to the starting date and use the @kbd{i c} -command. After you specify the length of interval, this command -displays the end of your diary file in another window and inserts the -cyclic event description; you can then type the rest of the diary -entry. - - The sexp corresponding to the @kbd{i c} command looks like: + @dfn{Cyclic} diary entries repeat after a fixed interval of days. To +create one, select the starting date and use the @kbd{i c} command. The +command prompts for the length of interval, then inserts the entry, +which looks like this: @findex diary-cyclic @example @@ -1121,28 +1307,25 @@ @end example @noindent -which applies to March 1, 1990 and every 50th day following; @samp{3 1 1990} -specifies the starting date. (If you are using the European calendar style, -the month and day are interchanged.) +This entry applies to March 1, 1990 and every 50th day following; +@samp{3 1 1990} specifies the starting date. (If you are using the +European calendar style, the month and day are interchanged.) - All three of the these commands make marking diary entries. If you want the -diary entry to be nonmarking, give a numeric argument to the command. For -example, @kbd{C-u i a} makes a nonmarking anniversary diary -entry. + All three of these commands make marking diary entries. To insert a +nonmarking entry, give a numeric argument to the command. For example, +@kbd{C-u i a} makes a nonmarking anniversary diary entry. Marking sexp diary entries in the calendar is @emph{extremely} time-consuming, since every date visible in the calendar window must be individually checked. So it's a good idea to make sexp diary entries -nonmarking with @samp{&}. +nonmarking (with @samp{&}) when possible. - One sophisticated kind of sexp, a floating diary entry, has no corresponding -command. The floating diary entry specifies a regularly-occurring event -by offsets specified in days, weeks, and months. It is comparable to a -crontab entry interpreted by the @code{cron} utility on Unix systems.@refill - - Here is a nonmarking, floating diary entry that applies to the last -Thursday in November: - + Another sophisticated kind of sexp entry, a @dfn{floating} diary entry, +specifies a regularly occurring event by offsets specified in days, +weeks, and months. It is comparable to a crontab entry interpreted by +the @code{cron} utility. Here is a nonmarking, floating diary entry +that applies to the last Thursday in November: + @findex diary-float @example &%%(diary-float 11 4 -1) American Thanksgiving @@ -1186,7 +1369,7 @@ entry does @emph{not} apply to that date. -@node Calendar Customization,, Diary, Calendar/Diary +@node Calendar Customization,,Diary, Calendar/Diary @subsection Customizing the Calendar and Diary There are many customizations that you can use to make the calendar and @@ -1222,68 +1405,84 @@ @end example @noindent -they display both the calendar and diary windows whenever you start Emacs. +this displays both the calendar and diary windows whenever you start Emacs. @vindex view-calendar-holidays-initially Similarly, if you set the variable @code{view-calendar-holidays-initially} to @code{t}, entering the -calendar automatically displays a list of holidays for the current three -month period. The holiday list appears in a separate window.@refill - +calendar automatically displays a list of holidays for the current +three-month period. The holiday list appears in a separate +window. + @vindex mark-diary-entries-in-calendar - You can set the variable @code{mark-diary-entries-in-calendar} to @code{t} -in order to place a plus sign (@samp{+}) beside any dates with diary entries. -Whenever the calendar window is displayed or redisplayed, the diary entries -are automatically marked for holidays. + You can set the variable @code{mark-diary-entries-in-calendar} to +@code{t} in order to mark any dates with diary entries. This takes +effect whenever the calendar window contents are recomputed. There are +two ways of marking these dates: by changing the face (@pxref{Faces}), +if the display supports that, or by placing a plus sign (@samp{+}) +beside the date otherwise. @vindex mark-holidays-in-calendar Similarly, setting the variable @code{mark-holidays-in-calendar} to -@code{t} places an asterisk (@samp{*}) after all holiday dates visible -in the calendar window. +@code{t} marks holiday dates, either with a change of face or with an +asterisk (@samp{*}). + +@vindex calendar-holiday-marker +@vindex diary-entry-marker + The variable @code{calendar-holiday-marker} specifies how to mark a +date as being a holiday. Its value may be a character to insert next to +the date, or a face name to use for displaying the date. Likewise, the +variable @code{diary-entry-marker} specifies how to mark a date that has +diary entries. The calendar creates faces named @code{holiday-face} and +@code{diary-face} for these purposes; those symbols are the default +values of these variables, when Emacs supports multiple faces on your +terminal. @vindex calendar-load-hook - There are many customizations that you can make with the hooks -provided. For example, the variable @code{calendar-load-hook}, whose -default value is @code{nil}, is a normal hook run when the calendar -package is first loaded (before actually starting to display the -calendar). + The variable @code{calendar-load-hook} is a normal hook run when the +calendar package is first loaded (before actually starting to display +the calendar). @vindex initial-calendar-window-hook - The variable @code{initial-calendar-window-hook}, whose default value -is @code{nil}, is a normal hook run the first time the calendar window -is displayed. The function is invoked only when you first enter -Calendar mode, not when you redisplay an existing Calendar window. But -if you leave the calendar with the @kbd{q} command and reenter it, the -hook runs again.@refill + Starting the calendar runs the normal hook +@code{initial-calendar-window-hook}. Recomputation of the calendar +display does not run this hook. But if you leave the calendar with the +@kbd{q} command and reenter it, the hook runs again.@refill @vindex today-visible-calendar-hook - The variable @code{today-visible-calendar-hook}, whose default value -is @code{nil}, is a normal hook run after the calendar buffer has been -prepared with the calendar when the current date is visible in the -window. One use of this hook is to replace today's date with asterisks; -a function @code{calendar-star-date} is included for this purpose. In -your @file{.emacs} file, put:@refill + The variable @code{today-visible-calendar-hook} is a normal hook run +after the calendar buffer has been prepared with the calendar when the +current date is visible in the window. One use of this hook is to +replace today's date with asterisks; to do that, use the hook function +@code{calendar-star-date}. @findex calendar-star-date @example -(setq today-visible-calendar-hook 'calendar-star-date) +(add-hook 'today-visible-calendar-hook 'calendar-star-date) @end example @noindent -Another standard hook function adds asterisks around the current date. -Here's how to use it: +Another standard hook function marks the current date, either by +changing its face or by adding an asterisk. Here's how to use it: @findex calendar-mark-today @example -(setq today-visible-calendar-hook 'calendar-mark-today) +(add-hook 'today-visible-calendar-hook 'calendar-mark-today) @end example +@noindent +@vindex calendar-today-marker +The variable @code{calendar-today-marker} specifies how to mark today's +date. Its value should be a character to insert next to the date or a +face name to use for displaying the date. A face named +@code{calendar-today-face} is provided for this purpose; that symbol is +the default for this variable when Emacs supports multiple faces on your +terminal. + @vindex today-invisible-calendar-hook @noindent - A corresponding variable, @code{today-invisible-calendar-hook}, whose -default value is @code{nil}, is a normal hook run after the calendar -buffer text has been prepared, if the current date is @emph{not} visible -in the window.@refill + A similar normal hook, @code{today-invisible-calendar-hook} is run if +the current date is @emph{not} visible in the window. @node Holiday Customizing @subsubsection Customizing the Holidays @@ -1293,13 +1492,13 @@ @vindex hebrew-holidays @vindex islamic-holidays Emacs knows about holidays defined by entries on one of several lists. -You can customize theses lists of holidays to your own needs, adding -holidays or deleting lists of holidays. The lists of holidays that -Emacs uses are for general holidays (@code{general-holidays}), local -holidays (@code{local-holidays}), Christian holidays -(@code{christian-holidays}), Hebrew (Jewish) holidays -(@code{hebrew-holidays}), Islamic (Moslem) holidays -(@code{islamic-holidays}), and other holidays (@code{other-holidays}). +You can customize these lists of holidays to your own needs, adding or +deleting holidays. The lists of holidays that Emacs uses are for +general holidays (@code{general-holidays}), local holidays +(@code{local-holidays}), Christian holidays (@code{christian-holidays}), +Hebrew (Jewish) holidays (@code{hebrew-holidays}), Islamic (Moslem) +holidays (@code{islamic-holidays}), and other holidays +(@code{other-holidays}). @vindex general-holidays The general holidays are, by default, holidays common throughout the @@ -1314,10 +1513,10 @@ @vindex all-christian-calendar-holidays @vindex all-hebrew-calendar-holidays @vindex all-islamic-calendar-holidays - By default, Emacs does not consider all the holidays of these -religions, only those commonly found in secular calendars. For a more -extensive collection of religious holidays, you can set any (or all) of -the variables @code{all-christian-calendar-holidays}, + By default, Emacs does not include all the holidays of the religions +that it knows, only those commonly found in secular calendars. For a +more extensive collection of religious holidays, you can set any (or +all) of the variables @code{all-christian-calendar-holidays}, @code{all-hebrew-calendar-holidays}, or @code{all-islamic-calendar-holidays} to @code{t}. If you want to eliminate the religious holidays, set any or all of the corresponding @@ -1326,15 +1525,19 @@ @vindex other-holidays You can set the variable @code{other-holidays} to any list of -holidays. This list, normally empty, is intended for your use. +holidays. This list, normally empty, is intended for individual use. @cindex holiday forms Each of the lists (@code{general-holidays}, @code{local-holidays}, @code{christian-holidays}, @code{hebrew-holidays}, @code{islamic-holidays}, and @code{other-holidays}) is a list of @dfn{holiday forms}, each holiday form describing a holiday (or -sometimes a list of holidays). Holiday forms may have the following -formats: +sometimes a list of holidays). + + Here is a table of the possible kinds of holiday form. Day numbers +and month numbers count starting from 1, but ``dayname'' numbers +count Sunday as 0. The element @var{string} is always the +name of the holiday, as a string. @table @code @item (holiday-fixed @var{month} @var{day} @var{string}) @@ -1359,18 +1562,19 @@ numbers, @var{string} is the name of the holiday. @item (holiday-sexp @var{sexp} @var{string}) -@var{sexp} is a Lisp expression that should use the variable @code{year} -to compute the date of a holiday, or @code{nil} if the holiday doesn't -happen this year. The value represents the date as a list of the form +A date calculated by the Lisp expression @var{sexp}. The expression +should use the variable @code{year} to compute and return the date of a +holiday, or @code{nil} if the holiday doesn't happen this year. The +value of @var{sexp} must represent the date as a list of the form @code{(@var{month} @var{day} @var{year})}. @var{string} is the name of the holiday. -@item (if @var{boolean} @var{holiday-form} &optional @var{holiday-form}) -A choice between two holidays based on the value of @var{boolean}. +@item (if @var{condition} @var{holiday-form} &optional @var{holiday-form}) +A holiday that happens only if @var{condition} is true. -@item (@var{function} &optional @var{args}) -Dates requiring special computation; @var{args}, if any, are passed in -a list to the function @code{calendar-holiday-function-@var{function}}. +@item (@var{function} @r{[}@var{args}@r{]}) +A list of dates calculated by the function @var{function}, called with +arguments @var{args}. @end table For example, suppose you want to add Bastille Day, celebrated in @@ -1417,10 +1621,10 @@ Muharram), and Thomas Jefferson's birthday, which is 2 April 1743 on the Julian calendar. - To include a holiday conditionally, use either the @samp{if} or the -@samp{sexp} form. For example, American presidential elections occur on -the first Tuesday after the first Monday in November of years divisible -by 4: + To include a holiday conditionally, use either Emacs Lisp's @code{if} or the +@code{holiday-sexp} form. For example, American presidential elections +occur on the first Tuesday after the first Monday in November of years +divisible by 4: @smallexample (holiday-sexp (if (= 0 (% year 4)) @@ -1447,13 +1651,11 @@ Some holidays just don't fit into any of these forms because special calculations are involved in their determination. In such cases you -must write a Lisp function to do the calculation. To include -eclipses of the sun, for example, add @code{(eclipses)} to -@code{other-holidays} and write an Emacs Lisp function -@code{eclipses} that returns a (possibly -empty) list of the relevant Gregorian dates among the -range visible in the calendar window, with descriptive strings, like -this: +must write a Lisp function to do the calculation. To include eclipses, +for example, add @code{(eclipses)} to @code{other-holidays} +and write an Emacs Lisp function @code{eclipses} that returns a +(possibly empty) list of the relevant Gregorian dates among the range +visible in the calendar window, with descriptive strings, like this: @smallexample (((6 27 1991) "Lunar Eclipse") ((7 11 1991) "Solar Eclipse") ... ) @@ -1463,13 +1665,13 @@ @subsubsection Date Display Format @vindex calendar-date-display-form - You can customize the manner of displaying dates in the diary, -in mode lines, and in messages by setting -@code{calendar-date-display-form}. This variable is a list of -expressions that can involve the variables @code{month}, @code{day}, and -@code{year}, all numbers in string form, and @code{monthname} and -@code{dayname}, both alphabetic strings. In the American style, the -default value of this list is as follows: + You can customize the manner of displaying dates in the diary, in mode +lines, and in messages by setting @code{calendar-date-display-form}. +This variable holds a list of expressions that can involve the variables +@code{month}, @code{day}, and @code{year}, which are all numbers in +string form, and @code{monthname} and @code{dayname}, which are both +alphabetic strings. In the American style, the default value of this +list is as follows: @smallexample ((if dayname (concat dayname ", ")) monthname " " day ", " year) @@ -1482,6 +1684,7 @@ ((if dayname (concat dayname ", ")) day " " monthname " " year) @end smallexample ++@noindent The ISO standard date representation is this: @smallexample @@ -1499,23 +1702,24 @@ @subsubsection Time Display Format @vindex calendar-time-display-form - In the calendar, diary, and related buffers, Emacs displays times of -day in the conventional American style with the hours from 1 through 12, -minutes, and either @samp{am} or @samp{pm}. If you prefer the -``military'' (European) style of writing times---in which the hours go -from 00 to 23---you can alter the variable -@code{calendar-time-display-form}. This variable is a list of -expressions that can involve the variables @code{12-hours}, -@code{24-hours}, and @code{minutes}, all numbers in string form, and -@code{am-pm} and @code{time-zone}, both alphabetic strings. The default -definition of @code{calendar-time-display-form} is as follows: + The calendar and diary by default display times of day in the +conventional American style with the hours from 1 through 12, minutes, +and either @samp{am} or @samp{pm}. If you prefer the European style, +also known in the US as military, in which the hours go from 00 to 23, +you can alter the variable @code{calendar-time-display-form}. This +variable is a list of expressions that can involve the variables +@code{12-hours}, @code{24-hours}, and @code{minutes}, which are all +numbers in string form, and @code{am-pm} and @code{time-zone}, which are +both alphabetic strings. The default value of +@code{calendar-time-display-form} is as follows: @smallexample (12-hours ":" minutes am-pm (if time-zone " (") time-zone (if time-zone ")")) @end smallexample - Setting @code{calendar-time-display-form} to +@noindent +Here is a value that provides European style times: @smallexample (24-hours ":" minutes @@ -1541,13 +1745,14 @@ where you are; on these systems, Emacs gets the information it needs from the system automatically. If some or all of this information is missing, Emacs fills in the gaps with the rules currently used in -Cambridge, Massachusetts. If the default choice of rules is not -appropriate for your location, you can tell Emacs the rules to use by -setting certain variables. +Cambridge, Massachusetts. If the resulting rules are not what you want, +you can tell Emacs the rules to use by setting certain variables. @vindex calendar-daylight-savings-starts @vindex calendar-daylight-savings-ends - These variables are @code{calendar-daylight-savings-starts} and + If the default choice of rules is not appropriate for your location, +you can tell Emacs the rules to use by setting the variables +@code{calendar-daylight-savings-starts} and @code{calendar-daylight-savings-ends}. Their values should be Lisp expressions that refer to the variable @code{year}, and evaluate to the Gregorian date on which daylight savings time starts or (respectively) @@ -1555,10 +1760,10 @@ The values should be @code{nil} if your area does not use daylight savings time. - Emacs uses these expressions to determine the starting date of -daylight savings time for the holiday list and for correcting times of -day in the solar and lunar calculations. - + Emacs uses these expressions to determine the start and end dates of +daylight savings time as holidays and for correcting times of day in the +solar and lunar calculations. + The values for Cambridge, Massachusetts are as follows: @example @@ -1569,7 +1774,7 @@ @end example @noindent -i.e. the first 0th day (Sunday) of the fourth month (April) in +i.e., the first 0th day (Sunday) of the fourth month (April) in the year specified by @code{year}, and the last Sunday of the tenth month (October) of that year. If daylight savings time were changed to start on October 1, you would set @@ -1580,8 +1785,8 @@ @end example For a more complex example, suppose daylight savings time begins on -the first of Nisan on the Hebrew calendar. You would set -@code{calendar-daylight-savings-starts} as follows: +the first of Nisan on the Hebrew calendar. You should set +@code{calendar-daylight-savings-starts} to this value: @example (calendar-gregorian-from-absolute @@ -1598,15 +1803,18 @@ and @code{calendar-daylight-savings-ends} to @code{nil}. @vindex calendar-daylight-time-offset - This variable specifies the difference between daylight savings time and -standard time, measured in minutes. The value for Cambridge is 60. + The variable @code{calendar-daylight-time-offset} specifies the +difference between daylight savings time and standard time, measured in +minutes. The value for Cambridge, Massachusetts is 60. -@vindex calendar-daylight-savings-starts-time +@c @vindex calendar-daylight-savings-starts-time too long! @vindex calendar-daylight-savings-ends-time - These variables specify is the number of minutes after midnight local time -when the transition to and from daylight savings time should occur. For -Cambridge, both variables' values are 120. - + The variable @code{calendar-daylight-savings-starts-time} and the +variable @code{calendar-daylight-savings-ends-time} specify the number +of minutes after midnight local time when the transition to and from +daylight savings time should occur. For Cambridge, both variables' +values are 120. + @node Diary Customizing @subsubsection Customizing the Diary @@ -1626,11 +1834,11 @@ well as the command @kbd{M-x diary}. For example, the default value is 1, which says to display only the current day's diary entries. If the value is 2, both the current day's and the next day's entries are -displayed. The value can also be a vector of seven elements: if the -value is @code{[0 2 2 2 2 4 1]} then no diary entries appear on Sunday, -the current date's and the next day's diary entries appear Monday -through Thursday, Friday through Monday's entries appear on Friday, -while on Saturday only that day's entries appear. +displayed. The value can also be a vector of seven elements: for +example, if the value is @code{[0 2 2 2 2 4 1]} then no diary entries +appear on Sunday, the current date's and the next day's diary entries +appear Monday through Thursday, Friday through Monday's entries appear +on Friday, while on Saturday only that day's entries appear. @vindex print-diary-entries-hook @findex print-diary-entries @@ -1647,18 +1855,29 @@ @vindex diary-date-forms You can customize the form of dates in your diary file, if neither the standard American nor European styles suits your needs, by setting the -variable @code{diary-date-forms}. This variable is a list of forms of -dates recognized in the diary file. Each form is a list of regular -expressions (@pxref{Regexps}) and the variables @code{month}, -@code{day}, @code{year}, @code{monthname}, and @code{dayname}. The -variable @code{monthname} matches the name of the month, capitalized or -not, or its three-letter abbreviation, followed by a period or not; it -matches @samp{*}. Similarly, @code{dayname} matches the name of the -day, capitalized or not, or its three-letter abbreviation, followed by a -period or not. The variables @code{month}, @code{day}, and @code{year} -match those numerical values, preceded by arbitrarily many zeros; they -also match @samp{*}. The default value of @code{diary-date-forms} in -the American style is +variable @code{diary-date-forms}. This variable is a list of patterns +for recognizing a date. Each date pattern is a list whose elements may +be regular expressions (@pxref{Regexps}) or the symbols +@code{month}, @code{day}, @code{year}, @code{monthname}, and +@code{dayname}. All these elements serve as patterns that match certain +kinds of text in the diary file. In order for the date pattern, as a +whole, to match, all of its elements must match consecutively. + + A regular expression in a date pattern matches in its usual fashion, +using the standard syntax table altered so that @samp{*} is a word +constituent. + + The symbols @code{month}, @code{day}, @code{year}, @code{monthname}, +and @code{dayname} match the month number, day number, year number, +month name, and day name of the date being considered. The symbols that +match numbers allow leading zeros; those that match names allow +three-letter abbreviations and capitalization. All the symbols can +match @samp{*}; since @samp{*} in a diary entry means ``any day'', ``any +month'', and so on, it should match regardless of the date being +considered. + + The default value of @code{diary-date-forms} in the American style is +this: @example ((month "/" day "[^/0-9]") @@ -1674,14 +1893,16 @@ (@pxref{Syntax Tables,,,lispref,XEmacs Lisp Reference Manual}), but with the @samp{*} changed so that it is a word constituent.@refill - The forms on the list must be @emph{mutually exclusive} and must not -match any portion of the diary entry itself, just the date. If, to be -mutually exclusive, the pattern must match a portion of the diary entry -itself, the first element of the form @emph{must} be @code{backup}. -This causes the date recognizer to back up to the beginning of the -current word of the diary entry. Even if you use @code{backup}, the -form must absolutely not match more than a portion of the first word of -the diary entry. The default value of @code{diary-date-forms} in the + The date patterns in the list must be @emph{mutually exclusive} and +must not match any portion of the diary entry itself, just the date and +one character of whitespace. If, to be mutually exclusive, the pattern +must match a portion of the diary entry text---beyond the whitespace +that ends the date---then the first element of the date pattern +@emph{must} be @code{backup}. This causes the date recognizer to back +up to the beginning of the current word of the diary entry, after +finishing the match. Even if you use @code{backup}, the date pattern +must absolutely not match more than a portion of the first word of the +diary entry. The default value of @code{diary-date-forms} in the European style is this list: @example @@ -1693,56 +1914,45 @@ @end example @noindent -Notice the use of @code{backup} in the middle form because part of the -diary entry must be matched to distinguish this form from the following one. - +Notice the use of @code{backup} in the third pattern, because it needs +to match part of a word beyond the date itself to distinguish it from +the fourth pattern. + @node Hebrew/Islamic Entries @subsubsection Hebrew- and Islamic-Date Diary Entries Your diary file can have entries based on Hebrew or Islamic dates, as -well as entries based on our usual Gregorian calendar. However, because -the processing of such entries is time-consuming and most people don't -need them, you must customize the processing of your diary file to -specify that you want such entries recognized. If you want Hebrew-date -diary entries, for example, you must include these lines in your -@file{.emacs} file: - +well as entries based on the world-standard Gregorian calendar. +However, because recognition of such entries is time-consuming and most +people don't use them, you must explicitly enable their use. If you +want the diary to recognize Hebrew-date diary entries, for example, +you must do this: + @vindex nongregorian-diary-listing-hook @vindex nongregorian-diary-marking-hook @findex list-hebrew-diary-entries @findex mark-hebrew-diary-entries @smallexample -(setq nongregorian-diary-listing-hook 'list-hebrew-diary-entries) -(setq nongregorian-diary-marking-hook 'mark-hebrew-diary-entries) +(add-hook 'nongregorian-diary-listing-hook 'list-hebrew-diary-entries) +(add-hook 'nongregorian-diary-marking-hook 'mark-hebrew-diary-entries) @end smallexample @noindent -If you want Islamic-date entries, include these lines in your -@file{.emacs} file: +If you want Islamic-date entries, do this: @findex list-islamic-diary-entries @findex mark-islamic-diary-entries @smallexample -(setq nongregorian-diary-listing-hook 'list-islamic-diary-entries) -(setq nongregorian-diary-marking-hook 'mark-islamic-diary-entries) -@end smallexample - -@noindent -If you want both Hebrew- and Islamic-date entries, include these lines: - -@smallexample -(setq nongregorian-diary-listing-hook - '(list-hebrew-diary-entries list-islamic-diary-entries)) -(setq nongregorian-diary-marking-hook - '(mark-hebrew-diary-entries mark-islamic-diary-entries)) +(add-hook 'nongregorian-diary-listing-hook 'list-islamic-diary-entries) +(add-hook 'nongregorian-diary-marking-hook 'mark-islamic-diary-entries) @end smallexample Hebrew- and Islamic-date diary entries have the same formats as -Gregorian-date diary entries, except that the date must be preceded with -an @samp{H} for Hebrew dates and an @samp{I} for Islamic dates. -Moreover, because the Hebrew and Islamic month names are not uniquely -specified by the first three letters, you may not abbreviate them. For -example, a diary entry for the Hebrew date Heshvan 25 could look like +Gregorian-date diary entries, except that @samp{H} precedes a Hebrew +date and @samp{I} precedes an Islamic date. Moreover, because the +Hebrew and Islamic month names are not uniquely specified by the first +three letters, you may not abbreviate them. For example, a diary entry +for the Hebrew date Heshvan 25 could look like this: @smallexample HHeshvan 25 Happy Hebrew birthday! @@ -1750,7 +1960,8 @@ @noindent and would appear in the diary for any date that corresponds to Heshvan 25 -on the Hebrew calendar. Similarly, an Islamic-date diary entry might be +on the Hebrew calendar. And here is Islamic-date diary entry that matches +Dhu al-Qada 25: @smallexample IDhu al-Qada 25 Happy Islamic birthday! @@ -1763,19 +1974,24 @@ As with Gregorian-date diary entries, Hebrew- and Islamic-date entries are nonmarking if they are preceded with an ampersand (@samp{&}). - There are commands to help you in making Hebrew- and Islamic-date -entries to your diary: - + Here is a table of commands used in the calendar to create diary entries +that match the selected date and other dates that are similar in the Hebrew +or Islamic calendar: + @table @kbd @item i h d Add a diary entry for the Hebrew date corresponding to the selected date (@code{insert-hebrew-diary-entry}). @item i h m Add a diary entry for the day of the Hebrew month corresponding to the -selected date (@code{insert-monthly-hebrew-diary-entry}). +selected date (@code{insert-monthly-hebrew-diary-entry}). This diary +entry matches any date that has the same Hebrew day-within-month as the +selected date. @item i h y Add a diary entry for the day of the Hebrew year corresponding to the -selected date (@code{insert-yearly-hebrew-diary-entry}). +selected date (@code{insert-yearly-hebrew-diary-entry}). This diary +entry matches any date which has the same Hebrew month and day-within-month +as the selected date. @item i i d Add a diary entry for the Islamic date corresponding to the selected date (@code{insert-islamic-diary-entry}). @@ -1793,24 +2009,22 @@ @findex insert-islamic-diary-entry @findex insert-monthly-islamic-diary-entry @findex insert-yearly-islamic-diary-entry - These commands work exactly like the corresponding commands for ordinary -diary entries: Move point to a date in the calendar window and the above -commands insert the Hebrew or Islamic date (corresponding to the date -indicated by point) at the end of your diary file and you can then type the -diary entry. If you want the diary entry to be nonmarking, give a numeric -argument to the command. - + These commands work much like the corresponding commands for ordinary +diary entries: they apply to the date that point is on in the calendar +window, and what they do is insert just the date portion of a diary entry +at the end of your diary file. You must then insert the rest of the +diary entry. + @node Fancy Diary Display @subsubsection Fancy Diary Display @vindex diary-display-hook @findex simple-diary-display Diary display works by preparing the diary buffer and then running the -hook @code{diary-display-hook}. The default value of this hook hides -the irrelevant diary entries and then displays the buffer -(@code{simple-diary-display}). However, if you specify the hook as -follows, - +hook @code{diary-display-hook}. The default value of this hook +(@code{simple-diary-display}) hides the irrelevant diary entries and +then displays the buffer. However, if you specify the hook as follows, + @cindex diary buffer @findex fancy-diary-display @example @@ -1818,10 +2032,11 @@ @end example @noindent -then fancy mode displays diary entries and holidays by copying them into -a special buffer that exists only for display. Copying provides an -opportunity to change the displayed text to make it prettier---for -example, to sort the entries by the dates they apply to. +this enables fancy diary display. It displays diary entries and +holidays by copying them into a special buffer that exists only for the +sake of display. Copying to a separate buffer provides an opportunity +to change the displayed text to make it prettier---for example, to sort +the entries by the dates they apply to. As with simple diary display, you can print a hard copy of the buffer with @code{print-diary-entries}. To print a hard copy of a day-by-day @@ -1844,7 +2059,7 @@ @findex sort-diary-entries @example -(add-hook 'list-diary-entries-hook 'sort-diary-entries) +(add-hook 'list-diary-entries-hook 'sort-diary-entries t) @end example @noindent @@ -1855,24 +2070,20 @@ @node Included Diary Files @subsubsection Included Diary Files - If you use the fancy diary display, you can have diary entries from other -files included with your own by an ``include'' mechanism. This facility makes -possible the sharing of common diary files among groups of users. Lines in -the diary file of this form: - + Fancy diary display also has the ability to process included diary +files. This permits a group of people to share a diary file for events +that apply to all of them. Lines in the diary file of this form: + @smallexample #include "@var{filename}" @end smallexample @noindent includes the diary entries from the file @var{filename} in the fancy -diary buffer (because the ordinary diary buffer is just the buffer -associated with your diary file, you cannot use the include mechanism -unless you use the fancy diary buffer). The include mechanism is -recursive, by the way, so that included files can include other files, -and so on; you must be careful not to have a cycle of inclusions, of -course. To enable the include facility, add lines as follows to your -@file{.emacs} file: +diary buffer. The include mechanism is recursive, so that included files +can include other files, and so on; you must be careful not to have a +cycle of inclusions, of course. Here is how to enable the include +facility: @vindex list-diary-entries-hook @vindex mark-diary-entries-hook @@ -1883,6 +2094,9 @@ (add-hook 'mark-diary-entries-hook 'mark-included-diary-files) @end smallexample +The include mechanism works only with the fancy diary display, because +ordinary diary display shows the entries directly from your diary file. + @node Sexp Diary Entries @subsubsection Sexp Entries and the Fancy Diary Display @cindex sexp diary entries @@ -1940,9 +2154,16 @@ in the fancy diary display on September 8, 1990. The generality of sexp diary entries lets you specify any diary entry -that you can describe algorithmically. Suppose you get paid on the 21st -of the month if it is a weekday, and to the Friday before if the 21st is -on a weekend. The diary entry +that you can describe algorithmically. A sexp diary entry contains an +expression that computes whether the entry applies to any given date. +If its value is non-@code{nil}, the entry applies to that date; +otherwise, it does not. The expression can use the variable @code{date} +to find the date being considered; its value is a list (@var{month} +@var{day} @var{year}) that refers to the Gregorian calendar. + + Suppose you get paid on the 21st of the month if it is a weekday, and +on the Friday before if the 21st is on a weekend. Here is how to write +a sexp diary entry that matches those dates: @smallexample &%%(let ((dayname (calendar-day-of-week date)) @@ -1961,7 +2182,7 @@ @code{nil}, the entry does @emph{not} apply to that date. The following sexp diary entries take advantage of the ability (in the fancy -diary display) to concoct diary entries based on the date: +diary display) to concoct diary entries whose text varies based on the date: @findex diary-sunrise-sunset @findex diary-phases-of-moon @@ -2011,9 +2232,9 @@ diary display, the line @samp{&%%(diary-hebrew-date)} appears in the diary for any date, but does nothing particularly useful.) - There are a number of other available sexp diary entries that are important -to those who follow the Hebrew calendar: - + These functions can be used to construct sexp diary entries based on +the Hebrew calendar in certain standard ways: + @cindex rosh hodesh @findex diary-rosh-hodesh @cindex parasha, weekly @@ -2046,9 +2267,8 @@ @node Appt Customizing @subsubsection Customizing Appointment Reminders - You can specify exactly how Emacs reminds you of an appointment and -how far in advance it begins doing so. Here are the variables that you -can set: + You can specify exactly how Emacs reminds you of an appointment, and +how far in advance it begins doing so, by setting these variables: @vindex appt-message-warning-time @vindex appt-audible diff -r deca3c1083ac -r 70ad99077275 nt/ChangeLog --- a/nt/ChangeLog Mon Aug 13 10:38:47 2007 +0200 +++ b/nt/ChangeLog Mon Aug 13 10:39:40 2007 +0200 @@ -1,3 +1,34 @@ +1998-07-09 SL Baur + + * XEmacs 21.0-pre4 is released. + +1998-07-04 Jonathan Harris + + * README: Documented the changed PACKAGEPATH option and the new + INSTALL_DIR option, install target and runemacs executable. + Added more debugging documentation. + + * config.h: Don't undef EMACS_CONFIGURATION because it's now + set in the makefile. + + * xemacs.mak: Added an INSTALL_DIR option and install target. + Renamed the default package location option to PACKAGEPATH + and made it cope with paths with spaces in them. + Made non-debug build the default; DEBUG_XEMACS defaults to 0. + System configuration (EMACS_CONFIGURATION) now correctly + determined at build-time by this makefile. + Compiles the runemacs executable as part of the all target. + +1998-06-29 SL Baur + + * config.h: + * xemacs.mak: NT native sound fixes + From Fabrice POPINEAU via Adrian Aichner + +1998-06-21 Martin Buchholz + + * xemacs.mak: It's XEmacs, not Xemacs! + 1998-06-19 Jonathan Harris * file.ico, lisp.ico: diff -r deca3c1083ac -r 70ad99077275 nt/README --- a/nt/README Mon Aug 13 10:38:47 2007 +0200 +++ b/nt/README Mon Aug 13 10:39:40 2007 +0200 @@ -4,8 +4,6 @@ Marc Paquette Jonathan Harris -Currently XEmacs for Win32 is in an early stage of development. - The port was made much easier by the groundbreaking work of Geoff Voelker and others who worked on the GNU Emacs port to NT. Their version is available from http://www.cs.washington.edu/homes/voelker/ntemacs.html @@ -17,48 +15,80 @@ Note that Visual C++ assumes a couple of environment variables INCLUDE and LIB to be set which specify the location of the includes and libraries. At this point you can select X or Win32 native support. -2. Grab the latest XEmacs beta from ftp.xemacs.org if necessary. All Win32 - support is in the nt/ subdirectory. You'll also need the xemacs-base - package from the binary-packages subdirectory and you'll probably alsi + +2. Grab the latest XEmacs source from ftp.xemacs.org if necessary. All Win32 + support is in the nt\ subdirectory. You'll also need the xemacs-base + package from the binary-packages subdirectory and you'll probably also want at least the edit-utils, text-utils, cc-mode and prog-utils packages. - Unpack the packages into, say, c:\src\xemacs\packages. + Unpack the packages into, say, "c:\Program Files\XEmacs\packages". + If you want to build for native GUI: 1. If you want XPM and toolbar support grab the latest version of the xpm - sources (xpm-3.4k.tar.gz at time of writing) and unpack it. - Copy nt/xpm.mak from the xemacs distribution to the lib subdirectory of - the xpm distribution, cd to that directory and build xpm with - `nmake -f xpm.mak`. + sources (xpm-3.4k.tar.gz at time of writing) and unpack them somewhere. + Copy nt\xpm.mak from the xemacs sources to the lib subdirectory of the + xpm sources, cd to that directory and build xpm with `nmake -f xpm.mak`. + 2. cd to the nt subdirectory of the xemacs distribution and build xemacs: - `nmake -f xemacs.mak HAVE_MSW=1 PATH_PACKAGEPATH="c:/src/xemacs/packages"`, - replacing "c:/src/xemacs/packages" with the location of your packages. Note - the double quotes and *forward* slashes in that path. - If you're building with XPM support, add this to the nmake command line: - `HAVE_XPM=1 XPM_DIR=x:\location\of\your\xpm\source\tree`. - Nmake will build temacs, the DOC file, update the elc's and dump xemacs. -3. The build process creates debugging and "Source Browser" information for - use with MS DevStudio. To use this create a new "console" project and - under Project/Settings set: + `nmake install -f xemacs.mak`, but read on before hitting Enter. + +3. If you're building with XPM support, add this to the nmake command line: + HAVE_XPM=1 XPM_DIR="x:\location\of\your\xpm\source\tree" + +4. By default, XEmacs will look for packages in + "c:\Program Files\XEmacs\packages". If you want it to look elsewhere, + add this to the nmake command line: + PACKAGEPATH="x:\\location\\of\\your\\packages" + Note the doubled-up backslashes in that path. If you want to change the + package path after you've already built XEmacs, delete the file + .\obj\emacs.obj and rebuild with the new value of PACKAGEPATH. + +5. By default, XEmacs will be installed in directories under the directory + "c:\Program Files\XEmacs\XEmacs-21.0". If you want to install it + elsewhere, add this to the nmake command line: + INSTALL_DIR="x:\your\installation\directory" + +6. Now you can press Enter. nmake will build temacs, the DOC file, update the + elc's, dump xemacs and install the relevant files in the directories under + the installation directory. Unless you set INSTALL_DIR in step 5 above, the + file that you should run to start XEmacs will be installed as + "c:\Program Files\XEmacs\XEmacs-21.0\i386-pc-win32\runemacs.exe". You may + want to create a shortcut to that file from your Desktop or Start Menu. + +7. The build process always creates debugging and "Source Browser" information + in the source tree for use with MS DevStudio. If you actually want to debug + XEmacs you should run XEmacs from the source directory instead of from the + installation directory. You should probably also build a debug version of + XEmacs; to do this start with a clean source tree and add DEBUG_XEMACS=1 to + the nmake command line. You probably don't want to install your debug build + so you should tell nmake to build the 'all' target instead of the 'install' + target. + + To make use of the debugging and "Source Browser" information, create a new + "console" project in MS DevStudio and, under Project/Settings, set: Debug: executable name = full path of src\xemacs.exe Link: output file name = full path of src\temacs.exe Browse Info: browse info file name = full path of src\temacs.bsc Remember to close the Source Browser file in DevStudio before rebuilding. + If you want support for X you will need: 1. An X server. MI/X is available on the Internet for free; It is available from: http://www.microimages.com/www/html/freestuf/mixdlfrm.htm + 2. The MIT X11R6.3 libraries available from: ftp.x.org + 3. You'll need to compile the MIT libraries without multi-thread support. To do this, there is an example Win32.cf and site.def provided which set the relevant flags. You will also need to apply the patch in nt/X11.patch in the xc/lib/X11 directory which will fix the DLL definition file. Once compiled and installed, you will need to apply the following patch to Xmd.h. This is messy and better solutions would be appreciated. -4. Goto 2 under 'native GUI' above and also supply: - `HAVE_X=1 X11_DIR=x:\root\directory\of\your\X11\installation' - to the nmake command line. + +4. Goto 2 under 'native GUI' above and add this to the nmake command line: + HAVE_X=1 X11_DIR=x:\root\directory\of\your\X11\installation --- Xmd.h~ Thu Jun 08 23:20:40 1995 +++ Xmd.h Sun Mar 16 13:09:10 1997 diff -r deca3c1083ac -r 70ad99077275 nt/config.h --- a/nt/config.h Mon Aug 13 10:38:47 2007 +0200 +++ b/nt/config.h Mon Aug 13 10:39:40 2007 +0200 @@ -31,7 +31,7 @@ /* Use this to add code in a structured way to FSF-maintained source files so as to make it obvious where XEmacs changes are. */ -#define XEMACS +#define XEMACS 1 /* Allow s&m files to differentiate OS versions without having multiple files to maintain. */ @@ -39,7 +39,7 @@ /* The configuration name. This is used as the install directory name for the lib-src programs. */ -#undef EMACS_CONFIGURATION +/* #undef EMACS_CONFIGURATION -- defined in xemacs.mak */ /* The configuration options. This is exported to Lisp. */ #undef EMACS_CONFIG_OPTIONS @@ -486,7 +486,7 @@ and Solaris systems; on Solaris, you may need to install the "SUNWaudmo" package.) */ -#undef HAVE_NATIVE_SOUND +/* #undef HAVE_NATIVE_SOUND */ /* If you wish to compile with support for the Network Audio System system define HAVE_NAS_SOUND. diff -r deca3c1083ac -r 70ad99077275 nt/xemacs.mak --- a/nt/xemacs.mak Mon Aug 13 10:38:47 2007 +0200 +++ b/nt/xemacs.mak Mon Aug 13 10:39:40 2007 +0200 @@ -27,11 +27,47 @@ XEMACS=.. LISP=$(XEMACS)\lisp +# Program name and version + +!include "..\version.sh" + +!if !defined(INFODOCK) +INFODOCK=0 +!endif + +!if $(INFODOCK) +INFODOCK_VERSION_STRING=$(infodock_major_version).$(infodock_minor_version).$(infodock_build_version) +PROGRAM_DEFINES=-DINFODOCK \ + -DPATH_VERSION=\"$(INFODOCK_VERSION_STRING)\" \ + -DPATH_PROGNAME=\"infodock\" \ + -DINFODOCK_MAJOR_VERSION=$(infodock_major_version) \ + -DINFODOCK_MINOR_VERSION=$(infodock_minor_version) \ + -DINFODOCK_BUILD_VERSION=$(infodock_build_version) +!else +!if "$(emacs_beta_version)" != "" +XEMACS_VERSION_STRING=$(emacs_major_version).$(emacs_minor_version)-b$(emacs_beta_version) +!else +XEMACS_VERSION_STRING=$(emacs_major_version).$(emacs_minor_version) +!endif +PROGRAM_DEFINES= \ + -DPATH_VERSION=\"$(XEMACS_VERSION_STRING)\" \ + -DPATH_PROGNAME=\"xemacs\" +!endif + # # Command line options defaults # -!if !defined(PATH_PACKAGEPATH) -PATH_PACKAGEPATH="~/.xemacs" +!if !defined(INSTALL_DIR) +! if $(INFODOCK) +INSTALL_DIR=c:\Program Files\Infodock\Infodock-$(INFODOCK_VERSION_STRING) +! else +INSTALL_DIR=c:\Program Files\XEmacs\XEmacs-$(XEMACS_VERSION_STRING) +! endif +!endif +!if !defined(PACKAGEPATH) +PATH_PACKAGEPATH="c:\\Program Files\\XEmacs\\packages" +!else +PATH_PACKAGEPATH="$(PACKAGEPATH)" !endif !if !defined(HAVE_MSW) HAVE_MSW=1 @@ -54,8 +90,11 @@ !if !defined(HAVE_MSW_C_DIRED) HAVE_MSW_C_DIRED=1 !endif +!if !defined(HAVE_NATIVE_SOUND) +HAVE_NATIVE_SOUND=1 +!endif !if !defined(DEBUG_XEMACS) -DEBUG_XEMACS=1 +DEBUG_XEMACS=0 !endif !if !defined(USE_UNION_TYPE) USE_UNION_TYPE=0 @@ -66,8 +105,22 @@ !if !defined(USE_INDEXED_LRECORD_IMPLEMENTATION) USE_INDEXED_LRECORD_IMPLEMENTATION=0 !endif -!if !defined(INFODOCK) -INFODOCK=0 + +# +# System configuration +# +!if !defined(PROCESSOR_ARCHITECTURE) && "$(OS)" != "Windows_NT" +EMACS_CONFIGURATION=i386-pc-win32 +!else if "$(PROCESSOR_ARCHITECTURE)" == "x86" +EMACS_CONFIGURATION=i386-pc-win32 +!else if "$(PROCESSOR_ARCHITECTURE)" == "MIPS" +EMACS_CONFIGURATION=mips-pc-win32 +!else if "$(PROCESSOR_ARCHITECTURE)" == "ALPHA" +EMACS_CONFIGURATION=alpha-pc-win32 +!else if "$(PROCESSOR_ARCHITECTURE)" == "PPC" +EMACS_CONFIGURATION=ppc-pc-win32 +!else +! error Unknown processor architecture type $(PROCESSOR_ARCHITECTURE) !endif # @@ -121,6 +174,11 @@ !if [set CONF_REPORT_ALREADY_PRINTED=1] !endif !message ------------------------------------------------ +!message Configured for "$(EMACS_CONFIGURATION)". +!message +!message Installation directory is "$(INSTALL_DIR)". +!message Package path is $(PATH_PACKAGEPATH). +!message !if $(INFODOCK) !message Building InfoDock. !endif @@ -142,8 +200,11 @@ !if $(HAVE_DIALOGS) !message Compiling in support for dialogs. !endif +!if $(HAVE_NATIVE_SOUND) +!message Compiling in support for native sounds. +!endif !if $(HAVE_MSW_C_DIRED) -# Define HAVE_MSW_C_DIRED to be non-zero if you want Xemacs to use C +# Define HAVE_MSW_C_DIRED to be non-zero if you want XEmacs to use C # primitives to significantly speed up dired, at the expense of an # additional ~4KB of code. !message Compiling in fast dired implementation. @@ -215,6 +276,9 @@ MSW_DIALOG_SRC=$(XEMACS)\src\dialog.c $(XEMACS)\src\dialog-msw.c MSW_DIALOG_OBJ=$(OUTDIR)\dialog.obj $(OUTDIR)\dialog-msw.obj !endif +!if $(HAVE_NATIVE_SOUND) +MSW_DEFINES=$(MSW_DEFINES) -DHAVE_NATIVE_SOUND +!endif !endif !if $(HAVE_MULE) @@ -236,8 +300,6 @@ UNION_DEFINES=-DUSE_UNION_TYPE !endif -!include "..\version.sh" - # Hard-coded paths !if $(INFODOCK) @@ -248,27 +310,6 @@ PATH_DEFINES=-DPATH_PREFIX=\"$(PATH_PREFIX)\" -# Program name and version - -!if $(INFODOCK) -INFODOCK_VERSION_STRING=$(infodock_major_version).$(infodock_minor_version).$(infodock_build_version) -PROGRAM_DEFINES=-DINFODOCK \ - -DPATH_VERSION=\"$(INFODOCK_VERSION_STRING)\" \ - -DPATH_PROGNAME=\"infodock\" \ - -DINFODOCK_MAJOR_VERSION=$(infodock_major_version) \ - -DINFODOCK_MINOR_VERSION=$(infodock_minor_version) \ - -DINFODOCK_BUILD_VERSION=$(infodock_build_version) -!else -!if "$(emacs_beta_version)" != "" -XEMACS_VERSION_STRING=$(emacs_major_version).$(emacs_minor_version)-b$(emacs_beta_version) -!else -XEMACS_VERSION_STRING=$(emacs_major_version).$(emacs_minor_version) -!endif -PROGRAM_DEFINES= \ - -DPATH_VERSION=\"$(XEMACS_VERSION_STRING)\" \ - -DPATH_PROGNAME=\"xemacs\" -!endif - # Generic variables INCLUDES=$(X_INCLUDES) $(MSW_INCLUDES) -I$(XEMACS)\nt\inc -I$(XEMACS)\src -I$(XEMACS)\lwlib @@ -332,10 +373,20 @@ $(LIB_SRC)/wakeup.exe \ $(LIB_SRC)/etags.exe -# LASTFILE Library +#------------------------------------------------------------------------------ + +# runemacs proglet + +NT = $(XEMACS)\nt +RUNEMACS = $(XEMACS)\src\runemacs.exe + +$(RUNEMACS): $(NT)\runemacs.c $(NT)\xemacs.res + $(CCV) -I. -I$(XEMACS)/src -I$(XEMACS)/nt/inc -O2 -W3 -Fe$@ $** kernel32.lib user32.lib #------------------------------------------------------------------------------ +# LASTFILE Library + LASTFILE=$(OUTDIR)\lastfile.lib LASTFILE_SRC=$(XEMACS)\src LASTFILE_FLAGS=$(WARN_CPP_FLAGS) $(OPT) $(INCLUDES) -Fo$@ -c @@ -461,6 +512,7 @@ $(XEMACS)\src\minibuf.c \ $(XEMACS)\src\nt.c \ $(XEMACS)\src\ntheap.c \ + $(XEMACS)\src\ntplay.c \ $(XEMACS)\src\ntproc.c \ $(XEMACS)\src\objects.c \ $(XEMACS)\src\opaque.c \ @@ -574,6 +626,7 @@ -DEMACS_MINOR_VERSION=$(emacs_minor_version) \ $(EMACS_BETA_VERSION) \ -DXEMACS_CODENAME=\"$(xemacs_codename)\" \ + -DEMACS_CONFIGURATION=\"$(EMACS_CONFIGURATION)\" \ -DPATH_PACKAGEPATH=\"$(PATH_PACKAGEPATH)\" TEMACS_FLAGS=-ML $(WARN_CPP_FALGS) $(OPT) -c $(TEMACS_CPP_FLAGS) @@ -701,6 +754,7 @@ $(OUTDIR)\minibuf.obj \ $(OUTDIR)\nt.obj \ $(OUTDIR)\ntheap.obj \ + $(OUTDIR)\ntplay.obj \ $(OUTDIR)\ntproc.obj \ $(OUTDIR)\objects.obj \ $(OUTDIR)\opaque.obj \ @@ -807,14 +861,26 @@ #------------------------------------------------------------------------------ # use this rule to build the complete system -all: $(OUTDIR)\nul $(LASTFILE) $(LWLIB) $(LIB_SRC_TOOLS) \ +all: $(OUTDIR)\nul $(LASTFILE) $(LWLIB) $(LIB_SRC_TOOLS) $(RUNEMACS) \ $(TEMACS) $(TEMACS_BROWSE) update-elc $(DOC) dump-xemacs temacs: $(TEMACS) # use this rule to install the system -install: - echo Not yet implemented. +install: all "$(INSTALL_DIR)\nul" "$(INSTALL_DIR)\lock\nul" + @xcopy /q $(LIB_SRC)\*.exe "$(INSTALL_DIR)\$(EMACS_CONFIGURATION)\" + @copy $(LIB_SRC)\DOC "$(INSTALL_DIR)\$(EMACS_CONFIGURATION)\" + @copy $(XEMACS)\src\xemacs.exe "$(INSTALL_DIR)\$(EMACS_CONFIGURATION)\" + @copy $(RUNEMACS) "$(INSTALL_DIR)\$(EMACS_CONFIGURATION)\" + @xcopy /e /q $(XEMACS)\etc "$(INSTALL_DIR)\etc\" + @xcopy /e /q $(XEMACS)\info "$(INSTALL_DIR)\info\" + @xcopy /e /q $(XEMACS)\lisp "$(INSTALL_DIR)\lisp\" + +"$(INSTALL_DIR)\nul": + -@mkdir "$(INSTALL_DIR)" + +"$(INSTALL_DIR)\lock\nul": "$(INSTALL_DIR)\nul" + -@mkdir "$(INSTALL_DIR)\lock" distclean: del *.bak diff -r deca3c1083ac -r 70ad99077275 src/ChangeLog --- a/src/ChangeLog Mon Aug 13 10:38:47 2007 +0200 +++ b/src/ChangeLog Mon Aug 13 10:39:40 2007 +0200 @@ -1,3 +1,196 @@ +1998-07-09 SL Baur + + * XEmacs 21.0-pre4 is released. + +1998-07-01 James N. Potts + + * fileio.c: (expand_file_name): under win32: Don't treat names + as UNC names if a drive letter has been specified. If a drive + has been specified, strip out extra directory-seperators that + reportedly cause problems under Win95. + +1998-07-09 Jonathan Harris + + * windowsnt.h: Define DUMP_SEPARATE_SECTION when building with + MSVC >= 5.0. Put emacs init and zero-init data in a special + section of the executable when this is defined. + + * unexnt.c, ntheap.h: + Removed unused find_section() and get_section_size(). + + * unexnt.c: + Fix up the executable's checksum after dumping otherwise the + profiler complains. + When DUMP_SEPARATE_SECTION is defined, don't need to dump + zero-init data separately from init data. Dump emacs data + into a special section of the executable. + When DUMP_SEPARATE_SECTION not defined, dump .bss up to + my_ebss instead of up to the end of bss. + +1998-07-09 Jonathan Harris + + * filelock.c: Removed Vconfigure_lock_directory - already + defined in emacs.c. + + * frame-msw.c: Removed Qinitially_unmapped and Qpopup - already + defined in frame.c and general.c respectively. + + * glyphs-msw.c: Removed Qresource - already defined in + general.c. + +1998-07-05 Oscar Figueiredo + + * eldap.c (Fldap_search_internal): Docstring fixes + +1998-07-04 Jonathan Harris + + * nt.c (init_environment): Removed unused PRELOAD_WINSOCK, + EMACSDOC and TERM variables. Added EMACSDEBUGPATHS, + EMACSPACKAGEPATH and INFOPATH variables. + Removed unused get_emacs_configuration function. + + * s/windowsnt.h: Don't define EMACS_CONFIGURATION here because + it is now defined at build-time by the makefile. + +1998-07-01 James N. Potts + + * fileio.c: (expand_file_name): under win32: Don't treat names as + UNC names if a drive letter has been specified. If a drive has + been specified, strip out extra directory-seperators that + reportedly cause problems under Win95. + +1998-07-05 Andy Piper + + * faces.c (complex_vars_of_faces): for the gui-element face don't + fallback to the default face, instead provide reasonable default + fallbacks that were previously hardcoded elsewhere. + +1998-07-06 Olivier Galibert + + * glyphs-x.c (convert_EImage_to_XImage): Fix pixel writing problem + when the X server endianness is different than the client's one. + +1998-06-29 Kyle Jones + + * eval.c (run_hook_with_args_in_buffer): Check + default (non-buffer-local) value of hook for + nil before treating it as a function. Don't initialize + the `globals' variable twice. + +1998-06-24 Jonathan Harris + + * fileio.c: Don't do directory seperator canonicalisation in + substitute-in-file-name because we don't know that the + filename refers to a local file. + +1998-06-24 Adrian Aichner + + * process-nt.c (nt_create_process): Try appending the standard + executable file extensions to the filename if none supplied. + +1998-06-29 SL Baur + + * fileio.c (Fsubstitute_in_file_name): Enable double slash notation + for cygwin32. + From Keisuke Mori + +1998-06-24 Andy Piper + + * toolbar-msw.c (mswindows_output_toolbar): only enable masked + images if we have masks. This handles the xbm case (have masks) + and avoids overuse of resources in the xpm case (generally no masks). + Don't output small toolbars. + +1998-06-29 Kyle Jones + + * eval.c (run_hook_with_args_in_buffer): Don't treat + the default value of a buffer local hook as a list of + hooks unless it is both a cons and the car of that cons + is not Qlambda. + +1998-06-29 SL Baur + + * extents.c: Email address for Ben Wing is ben@xemacs.org. + * process-unix.c: Ditto. + * mule-coding.h: Ditto. + * mule-coding.c: Ditto. + * mule-charset.c: Ditto. + * mule-charset.h: Ditto. + * file-coding.c: Ditto. + * file-coding.h: Ditto. + +1998-06-22 Jonathan Harris + + * event-msw.c: Guard against recursion when freeing + FRAME_MSWINDOWS_TARGET_RECT struture in WM_SIZE processing. + + * frame-msw.c: Don't set WS_VISIBLE attribute on first frame. + Call ShowWindow twice in init_frame_3 to get round runemacs + weirdness. + +1998-06-27 Hrvoje Niksic + + * scrollbar.c (vertical_scrollbar_changed_in_window): Ditto. + + * winslots.h: Rename. + + * window.c (specifier_vars_of_window): Renamed + vertical-divider-draggable-p to vertical-divider-always-visible-p, + as suggested by Ben Wing. + (specifier_vars_of_window): Fix docstrings. + +1998-06-22 Michael Sperber [Mr. Preprocessor] + + * unexaix.c: Line number information works correctly again. + +1998-06-22 Olivier Galibert + + * emacs.c (__sti__iflPNGFile_c___): Added. See comment. Cry. + +1998-06-21 Martin Buchholz + + * editfns.c (get_home_directory): ANSIfy. + XEmacs is compilable under C *and* C++. + It's XEmacs, not Xemacs! + +1998-06-19 Jonathan Harris + + * console-msw.h: added a list of fonts to device data. + + * device-msw.c: enumerate list of available fonts in + mswindows_init_device. Free list in mswindows_delete_device. + + * objects-msw.c: Added helper function match_font used by + mswindows_initialize_font_instance and mswindows_list_fonts. + Allow a charset to be specified in a font string, even if + previous fields havn't been specified. + +1998-06-23 Greg Klanderman + + * indent.c (column_at_point): column cache bugfix. + Set last_known_column_point to the buffer position for + which the column was requested, not buffer's point. + + * redisplay.c (decode_mode_spec): for current-column, show + window's point's column, not buffer's point's column. + +1998-06-23 Andy Piper + + * menubar-msw.c (mswindows_handle_wm_command): use + enqueue_misc_user event rather than + mswindows_enqueue_msic_user_event to fix customize problems. Add some + checks that X does. + + * console-msw.h: declare mswindows_enqueue_magic_event. + + * event-msw.c (mswindows_enqueue_magic_event): make global. + +1998-06-24 Hrvoje Niksic + + * line-number.c (LINE_NUMBER_FAR): Reverted to 16384. + (buffer_line_number): Use EMACS_INT_MAX instead of random LOTS. + (add_position_to_cache): Use EMACS_INT instead of int. + 1998-06-21 Olivier Galibert * lisp-disunion.h (XMARKBIT): Have XMARKBIT return something diff -r deca3c1083ac -r 70ad99077275 src/console-msw.h --- a/src/console-msw.h Mon Aug 13 10:38:47 2007 +0200 +++ b/src/console-msw.h Mon Aug 13 10:39:40 2007 +0200 @@ -223,6 +223,7 @@ void mswindows_redraw_exposed_area (struct frame *f, int x, int y, int width, int height); void mswindows_size_frame_internal (struct frame* f, XEMACS_RECT_WH* dest); +void mswindows_enqueue_magic_event (HWND hwnd, UINT message); /* win32 DDE management library */ #define MSWINDOWS_DDE_ITEM_OPEN "Open" diff -r deca3c1083ac -r 70ad99077275 src/editfns.c --- a/src/editfns.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/editfns.c Mon Aug 13 10:39:40 2007 +0200 @@ -660,12 +660,11 @@ character string representation of the user_login_name is needed but a Lisp Object is not. The UID is passed by reference. If UID == NULL, then the USER name - for the user running Xemacs will be returned. This + for the user running XEmacs will be returned. This corresponds to a nil argument to Fuser_login_name. */ char* -user_login_name (uid) - int *uid; +user_login_name (int *uid) { struct passwd *pw = NULL; @@ -880,7 +879,7 @@ if (initialized && output_home_warning) { warn_when_safe(Quser_files_and_directories, Qwarning, "\n" -" Xemacs was unable to determine a good value for the user's $HOME\n" +" XEmacs was unable to determine a good value for the user's $HOME\n" " directory, and will be using the value:\n" " %s\n" " This is probably incorrect.", diff -r deca3c1083ac -r 70ad99077275 src/eldap.c --- a/src/eldap.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/eldap.c Mon Aug 13 10:39:40 2007 +0200 @@ -375,15 +375,14 @@ DEFUN ("ldap-search-internal", Fldap_search_internal, 2, 6, 0, /* Perform a search on an open LDAP connection. LDAP is an LDAP connection object created with `ldap-open'. -FILTER is a filter string for the search as described in RFC 1558 -BASE is the distinguished name at which to start the search -SCOPE is an integer or a symbol indicating the scope of the search - Possible values are `ldap-scope-base', `ldap-scope-onelevel' or - `ldap-scope-subtree' +FILTER is a filter string for the search as described in RFC 1558. +BASE is the distinguished name at which to start the search. +SCOPE is one of the symbols `base', `onelevel' or `subtree' indicating +the scope of the search. ATTRS is a list of strings indicating which attributes to retrieve for each matching entry. If nil return all available attributes. If ATTRSONLY is non-nil then only the attributes are retrieved, not -the associated values +the associated values. The function returns a list of matching entries. Each entry is itself an alist of attribute/values. */ diff -r deca3c1083ac -r 70ad99077275 src/emacs.c --- a/src/emacs.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/emacs.c Mon Aug 13 10:39:40 2007 +0200 @@ -3040,3 +3040,16 @@ Vconfigure_info_path = Qnil; #endif } + +#ifdef __sgi +/* This is so tremendously ugly I'd puke. But then, it works. + * The target is to override the static constructor from the + * libiflPNG.so library which is maskerading as libz, and + * cores on us when re-started from the dumped executable. + * This will have to go for 21.1 -- OG. + */ +void __sti__iflPNGFile_c___() +{ +} + +#endif diff -r deca3c1083ac -r 70ad99077275 src/eval.c --- a/src/eval.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/eval.c Mon Aug 13 10:39:40 2007 +0200 @@ -3726,20 +3726,29 @@ { /* t indicates this hook has a local binding; it means to run the global binding too. */ - Lisp_Object globals; - - for (globals = Fdefault_value (sym); - CONSP (globals) && ((cond == RUN_HOOKS_TO_COMPLETION) - || (cond == RUN_HOOKS_UNTIL_SUCCESS - ? NILP (ret) - : !NILP (ret))); - globals = XCDR (globals)) + Lisp_Object globals = Fdefault_value (sym); + + if ((! CONSP (globals) || EQ (XCAR (globals), Qlambda)) && + ! NILP (globals)) + { + args[0] = globals; + ret = Ffuncall (nargs, args); + } + else { - args[0] = XCAR (globals); - /* In a global value, t should not occur. If it does, we - must ignore it to avoid an endless loop. */ - if (!EQ (args[0], Qt)) - ret = Ffuncall (nargs, args); + for (; + CONSP (globals) && ((cond == RUN_HOOKS_TO_COMPLETION) + || (cond == RUN_HOOKS_UNTIL_SUCCESS + ? NILP (ret) + : !NILP (ret))); + globals = XCDR (globals)) + { + args[0] = XCAR (globals); + /* In a global value, t should not occur. If it does, we + must ignore it to avoid an endless loop. */ + if (!EQ (args[0], Qt)) + ret = Ffuncall (nargs, args); + } } } else diff -r deca3c1083ac -r 70ad99077275 src/event-msw.c --- a/src/event-msw.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/event-msw.c Mon Aug 13 10:39:40 2007 +0200 @@ -881,7 +881,7 @@ mswindows_enqueue_dispatch_event (event); } -static void +void mswindows_enqueue_magic_event (HWND hwnd, UINT message) { Lisp_Object emacs_event = Fmake_event (Qnil, Qnil); @@ -1917,9 +1917,13 @@ mswindows_size_frame_internal ( frame, FRAME_MSWINDOWS_TARGET_RECT (frame)); - /* Reset to we do not get here again */ - xfree (FRAME_MSWINDOWS_TARGET_RECT (frame)); - FRAME_MSWINDOWS_TARGET_RECT (frame) = 0; + /* Reset so we do not get here again. The SetWindowPos call in + * mswindows_size_frame_internal can cause recursion here. */ + if (FRAME_MSWINDOWS_TARGET_RECT (frame)) + { + xfree (FRAME_MSWINDOWS_TARGET_RECT (frame)); + FRAME_MSWINDOWS_TARGET_RECT (frame) = 0; + } } else { diff -r deca3c1083ac -r 70ad99077275 src/extents.c --- a/src/extents.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/extents.c Mon Aug 13 10:39:40 2007 +0200 @@ -23,7 +23,7 @@ /* This file has been Mule-ized. */ -/* Written by Ben Wing . +/* Written by Ben Wing . [Originally written by some people at Lucid. Hacked on by jwz. diff -r deca3c1083ac -r 70ad99077275 src/faces.c --- a/src/faces.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/faces.c Mon Aug 13 10:39:40 2007 +0200 @@ -1944,6 +1944,27 @@ build_string ("gui element face"), Qnil); + /* Provide some last-resort fallbacks for gui-element face which + mustn't default to default. */ + { + Lisp_Object fg_fb = Qnil, bg_fb = Qnil; + +#ifdef HAVE_X_WINDOWS + fg_fb = acons (list1 (Qx), build_string ("black"), fg_fb); + bg_fb = acons (list1 (Qx), build_string ("Gray80"), bg_fb); +#endif +#ifdef HAVE_TTY + fg_fb = acons (list1 (Qtty), Fvector (0, 0), fg_fb); + bg_fb = acons (list1 (Qtty), Fvector (0, 0), bg_fb); +#endif +#ifdef HAVE_MS_WINDOWS + fg_fb = acons (list1 (Qmswindows), build_string ("black"), fg_fb); + bg_fb = acons (list1 (Qmswindows), build_string ("Gray75"), bg_fb); +#endif + set_specifier_fallback (Fget (Vgui_element_face, Qforeground, Qnil), fg_fb); + set_specifier_fallback (Fget (Vgui_element_face, Qbackground, Qnil), bg_fb); + } + /* Now create the other faces that redisplay needs to refer to directly. We could create them in Lisp but it's simpler this way since we need to get them anyway. */ diff -r deca3c1083ac -r 70ad99077275 src/file-coding.c --- a/src/file-coding.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/file-coding.c Mon Aug 13 10:39:40 2007 +0200 @@ -21,7 +21,7 @@ /* Synched up with: Mule 2.3. Not in FSF. */ -/* Rewritten by Ben Wing . */ +/* Rewritten by Ben Wing . */ #include #include "lisp.h" diff -r deca3c1083ac -r 70ad99077275 src/file-coding.h --- a/src/file-coding.h Mon Aug 13 10:38:47 2007 +0200 +++ b/src/file-coding.h Mon Aug 13 10:39:40 2007 +0200 @@ -22,7 +22,7 @@ /* Synched up with: Mule 2.3. Not in FSF. */ /* 91.10.09 written by K.Handa */ -/* Rewritten by Ben Wing . */ +/* Rewritten by Ben Wing . */ #ifndef _XEMACS_MULE_CODING_H_ #define _XEMACS_MULE_CODING_H_ diff -r deca3c1083ac -r 70ad99077275 src/fileio.c --- a/src/fileio.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/fileio.c Mon Aug 13 10:39:40 2007 +0200 @@ -898,12 +898,6 @@ "//somedir". */ if (drive && IS_DIRECTORY_SEP (nm[0]) && IS_DIRECTORY_SEP (nm[1])) nm++; - - /* Discard any previous drive specifier if nm is now in UNC format. */ - if (IS_DIRECTORY_SEP (nm[0]) && IS_DIRECTORY_SEP (nm[1])) - { - drive = 0; - } #endif /* WINDOWSNT */ /* If nm is absolute, look for /./ or /../ sequences; if none are @@ -1104,6 +1098,8 @@ && IS_DEVICE_SEP (newdir[1]) && IS_DIRECTORY_SEP (newdir[2])) /* Detect Windows file names in UNC format. */ && ! (IS_DIRECTORY_SEP (newdir[0]) && IS_DIRECTORY_SEP (newdir[1])) + /* Detect drive spec by itself */ + && ! (IS_DEVICE_SEP (newdir[1]) && newdir[2] == 0) ) { /* Effectively, let newdir be (expand-file-name newdir cwd). @@ -1239,6 +1235,13 @@ ++o; p += 3; } +#ifdef WINDOWSNT + /* if drive is set, we're not dealing with an UNC, so + multiple dir-seps are redundant (and reportedly cause trouble + under win95) */ + else if (drive && IS_DIRECTORY_SEP (p[0]) && IS_DIRECTORY_SEP (p[1])) + ++p; +#endif else { *o++ = *p++; @@ -1247,13 +1250,17 @@ #ifdef WINDOWSNT /* At last, set drive name, except for network file name. */ - if (!(IS_DIRECTORY_SEP (target[0]) && IS_DIRECTORY_SEP (target[1]))) + if (drive) { - if (!drive) abort (); target -= 2; target[0] = DRIVE_LETTER (drive); target[1] = ':'; } + else + { + if (!(IS_DIRECTORY_SEP (target[0]) && IS_DIRECTORY_SEP (target[1]))) + abort (); + } CORRECT_DIR_SEPS (target); #endif /* WINDOWSNT */ @@ -1414,11 +1421,6 @@ string); nm = XSTRING_DATA (string); -#ifdef WINDOWSNT - nm = strcpy (alloca (strlen (nm) + 1), nm); - CORRECT_DIR_SEPS (nm); - substituted = (strcmp (nm, XSTRING_DATA (string)) != 0); -#endif endp = nm + XSTRING_LENGTH (string); /* If /~ or // appears, discard everything through first slash. */ @@ -1426,13 +1428,13 @@ for (p = nm; p != endp; p++) { if ((p[0] == '~' -#if defined (APOLLO) || defined (WINDOWSNT) +#if defined (APOLLO) || defined (WINDOWSNT) || defined (__CYGWIN32__) /* // at start of file name is meaningful in Apollo and WindowsNT systems */ || (IS_DIRECTORY_SEP (p[0]) && p - 1 != nm) -#else /* not (APOLLO || WINDOWSNT) */ +#else /* not (APOLLO || WINDOWSNT || __CYGWIN32__) */ || IS_DIRECTORY_SEP (p[0]) -#endif /* not (APOLLO || WINDOWSNT) */ +#endif /* not (APOLLO || WINDOWSNT || __CYGWIN32__) */ ) && p != nm && (IS_DIRECTORY_SEP (p[-1]))) diff -r deca3c1083ac -r 70ad99077275 src/filelock.c --- a/src/filelock.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/filelock.c Mon Aug 13 10:39:40 2007 +0200 @@ -40,7 +40,7 @@ /* The name of the directory in which we keep lock files, with a '/' appended. */ -Lisp_Object Vlock_directory, Vconfigure_lock_directory; +Lisp_Object Vlock_directory; #if 0 /* FSFmacs */ /* Look in startup.el */ @@ -533,16 +533,6 @@ void complex_vars_of_filelock (void) { - DEFVAR_LISP ("configure-lock-directory", &Vconfigure_lock_directory /* -For internal use by the build procedure only. -configure's idea of what LOCK-DIRECTORY will be. -*/ ); -#ifdef PATH_LOCK - Vconfigure_lock_directory = - Ffile_name_as_directory (build_string (PATH_LOCK)); -#else - Vconfigure_lock_directory = Qnil; -#endif DEFVAR_LISP ("configure-superlock-file", &Vconfigure_superlock_file /* For internal use by the build procedure only. configure's idea of what SUPERLOCK-FILE will be. diff -r deca3c1083ac -r 70ad99077275 src/frame-msw.c --- a/src/frame-msw.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/frame-msw.c Mon Aug 13 10:39:40 2007 +0200 @@ -69,9 +69,6 @@ Lisp_Object Vdefault_mswindows_frame_plist; Lisp_Object Vmswindows_use_system_frame_size_defaults; -/* Lisp_Object Qname, Qheight, Qwidth, Qinitially_unmapped, Qpopup, Qtop, Qleft; */ -Lisp_Object Qinitially_unmapped, Qpopup; - /* This does not need to be GC protected, as it holds a frame Lisp_Object already protected by Fmake_frame */ Lisp_Object Vmswindows_frame_being_created; @@ -86,7 +83,6 @@ XEMACS_RECT_WH rect_default; DWORD style, exstyle; HWND hwnd, hwnd_parent; - static BOOL first_frame = 1; /* Pick up relevant properties */ initially_unmapped = Fplist_get (props, Qinitially_unmapped, Qnil); @@ -148,12 +144,6 @@ exstyle = MSWINDOWS_FRAME_EXSTYLE; hwnd_parent = NULL; - if (first_frame) - { - style |= WS_VISIBLE; - first_frame = 0; - } - rect_default.left = rect_default.top = CW_USEDEFAULT; rect_default.width = rect_default.height = CW_USEDEFAULT; } @@ -224,7 +214,12 @@ static void mswindows_init_frame_3 (struct frame *f) { - /* Don't do this earlier or we get a WM_PAINT before the frame is ready */ + /* Don't do this earlier or we get a WM_PAINT before the frame is ready. + * The SW_x parameter in the first call that an app makes to ShowWindow is + * ignored, and the parameter specified in the caller's STARTUPINFO is + * substituted instead. That parameter is SW_HIDE if we were started by + * runemacs, so call this twice. #### runemacs is evil */ + ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_SHOWNORMAL); ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_SHOWNORMAL); SetForegroundWindow (FRAME_MSWINDOWS_HANDLE(f)); DragAcceptFiles (FRAME_MSWINDOWS_HANDLE(f), TRUE); diff -r deca3c1083ac -r 70ad99077275 src/glyphs-msw.c --- a/src/glyphs-msw.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/glyphs-msw.c Mon Aug 13 10:39:40 2007 +0200 @@ -53,7 +53,6 @@ static COLORREF transparent_color = RGB (1,1,1); DEFINE_IMAGE_INSTANTIATOR_FORMAT (resource); -Lisp_Object Qresource; Lisp_Object Q_resource_type, Q_resource_id; static void diff -r deca3c1083ac -r 70ad99077275 src/glyphs-x.c --- a/src/glyphs-x.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/glyphs-x.c Mon Aug 13 10:39:40 2007 +0200 @@ -198,11 +198,10 @@ gr = *ip++; bl = *ip++; conv.val = pixarray[QUANT_GET_COLOR(qtable,rd,gr,bl)]; -#ifdef WORDS_BIGENDIAN - for (q = 4-byte_cnt; q < 4; q++) *dp++ = conv.cp[q]; -#else - for (q = 0; q < byte_cnt; q++) *dp++ = conv.cp[q]; -#endif + if (outimg->byte_order == MSBFirst) + for (q = 4-byte_cnt; q < 4; q++) *dp++ = conv.cp[q]; + else + for (q = 0; q < byte_cnt; q++) *dp++ = conv.cp[q]; } } xfree(qtable); @@ -267,11 +266,10 @@ bl = *ip++ >> (8 - bbits); conv.val = (rd << rshift) | (gr << gshift) | (bl << bshift); -#ifdef WORDS_BIGENDIAN - for (q = 4-byte_cnt; q < 4; q++) *dp++ = conv.cp[q]; -#else - for (q = 0; q < byte_cnt; q++) *dp++ = conv.cp[q]; -#endif + if (outimg->byte_order == MSBFirst) + for (q = 4-byte_cnt; q < 4; q++) *dp++ = conv.cp[q]; + else + for (q = 0; q < byte_cnt; q++) *dp++ = conv.cp[q]; } } } diff -r deca3c1083ac -r 70ad99077275 src/indent.c --- a/src/indent.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/indent.c Mon Aug 13 10:39:40 2007 +0200 @@ -185,7 +185,7 @@ { last_known_column_buffer = buf; last_known_column = col; - last_known_column_point = BUF_PT (buf); + last_known_column_point = init_pos; last_known_column_modified = BUF_MODIFF (buf); } diff -r deca3c1083ac -r 70ad99077275 src/line-number.c --- a/src/line-number.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/line-number.c Mon Aug 13 10:39:40 2007 +0200 @@ -67,7 +67,7 @@ /* How much traversal has to be exceeded for two points to be considered "far" from each other. When two points are far, cache will be used. */ -#define LINE_NUMBER_FAR 32768 +#define LINE_NUMBER_FAR 16384 /* How large a string has to be to give up searching it for newlines, before change. */ @@ -195,7 +195,6 @@ invalidate_line_number_cache (b, from); } } - /* Get the nearest known position we know the line number of (i.e. BUF_BEGV, and cached positions). The return position will be @@ -234,7 +233,7 @@ /* Add a (POS . LINE) pair to the ring, and rotate it. */ static void -add_position_to_cache (struct buffer *b, Bufpos pos, int line) +add_position_to_cache (struct buffer *b, Bufpos pos, EMACS_INT line) { Lisp_Object *ring = XVECTOR_DATA (LINE_NUMBER_RING (b)); int i = LINE_NUMBER_RING_SIZE - 1; @@ -295,12 +294,10 @@ get_nearest_line_number (b, &beg, pos, &cached_lines); } - /* An EMACS_MAXINT would be cool to have. */ -#define LOTS 999999999 + scan_buffer (b, '\n', beg, pos, pos > beg ? EMACS_INT_MAX : -EMACS_INT_MAX, + &shortage, 0); - scan_buffer (b, '\n', beg, pos, pos > beg ? LOTS : -LOTS, &shortage, 0); - - line = LOTS - shortage; + line = EMACS_INT_MAX - shortage; if (beg > pos) line = -line; line += cached_lines; diff -r deca3c1083ac -r 70ad99077275 src/menubar-msw.c --- a/src/menubar-msw.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/menubar-msw.c Mon Aug 13 10:39:40 2007 +0200 @@ -633,7 +633,12 @@ /* Ok, this is our one. Enqueue it. */ get_gui_callback (data, &fn, &arg); XSETFRAME (frame, f); - mswindows_enqueue_misc_user_event (frame, fn, arg); + /* this used to call mswindows_enqueue_misc_user_event but that + breaks customize because the misc_event gets eval'ed in some + cicumstances. Don't change it back unless you can fix the + customize problem also.*/ + enqueue_misc_user_event (frame, fn, arg); + mswindows_enqueue_magic_event (NULL, XM_BUMPQUEUE); UNGCPRO; /* data */ return Qt; @@ -736,6 +741,8 @@ if (SYMBOLP (menu_desc)) menu_desc = Fsymbol_value (menu_desc); + CHECK_CONS (menu_desc); + CHECK_STRING (XCAR (menu_desc)); current_menudesc = menu_desc; current_hashtable = Fmake_hashtable (make_int(10), Qequal); @@ -743,6 +750,10 @@ Fputhash (hmenu_to_lisp_object (menu), Qnil, current_hashtable); top_level_menu = menu; + /* see comments in menubar-x.c */ + if (zmacs_regions) + zmacs_region_stays = 1; + ok = TrackPopupMenu (menu, TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON, pt.x, pt.y, 0, diff -r deca3c1083ac -r 70ad99077275 src/mule-charset.c --- a/src/mule-charset.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/mule-charset.c Mon Aug 13 10:39:40 2007 +0200 @@ -21,7 +21,7 @@ /* Synched up with: Mule 2.3. Not in FSF. */ -/* Rewritten by Ben Wing . */ +/* Rewritten by Ben Wing . */ #include #include "lisp.h" diff -r deca3c1083ac -r 70ad99077275 src/mule-charset.h --- a/src/mule-charset.h Mon Aug 13 10:38:47 2007 +0200 +++ b/src/mule-charset.h Mon Aug 13 10:39:40 2007 +0200 @@ -21,7 +21,7 @@ /* Synched up with: Mule 2.3. Not in FSF. */ -/* Rewritten by Ben Wing . */ +/* Rewritten by Ben Wing . */ #ifndef _XEMACS_MULE_CHARSET_H #define _XEMACS_MULE_CHARSET_H diff -r deca3c1083ac -r 70ad99077275 src/mule-coding.c --- a/src/mule-coding.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/mule-coding.c Mon Aug 13 10:39:40 2007 +0200 @@ -21,7 +21,7 @@ /* Synched up with: Mule 2.3. Not in FSF. */ -/* Rewritten by Ben Wing . */ +/* Rewritten by Ben Wing . */ #if 0 /* while file-coding not split up */ diff -r deca3c1083ac -r 70ad99077275 src/mule-coding.h --- a/src/mule-coding.h Mon Aug 13 10:38:47 2007 +0200 +++ b/src/mule-coding.h Mon Aug 13 10:39:40 2007 +0200 @@ -22,7 +22,7 @@ /* Synched up with: Mule 2.3. Not in FSF. */ /* 91.10.09 written by K.Handa */ -/* Rewritten by Ben Wing . */ +/* Rewritten by Ben Wing . */ #ifndef _XEMACS_MULE_CODING_H_ #define _XEMACS_MULE_CODING_H_ diff -r deca3c1083ac -r 70ad99077275 src/nt.c --- a/src/nt.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/nt.c Mon Aug 13 10:39:40 2007 +0200 @@ -585,19 +585,16 @@ static char * env_vars[] = { "HOME", - "PRELOAD_WINSOCK", "emacs_dir", "EMACSLOADPATH", + "EMACSDEBUGPATHS", "SHELL", "CMDPROXY", "EMACSDATA", "EMACSPATH", + "EMACSPACKAGEPATH", "EMACSLOCKDIR", - /* We no longer set INFOPATH because Info-default-directory-list - is then ignored. We use a hook in winnt.el instead. */ - /* "INFOPATH", */ - "EMACSDOC", - "TERM", + "INFOPATH" }; for (i = 0; i < countof (env_vars); i++) @@ -668,65 +665,6 @@ init_user_info (); } -/* We don't have scripts to automatically determine the system configuration - for Emacs before it's compiled, and we don't want to have to make the - user enter it, so we define EMACS_CONFIGURATION to invoke this runtime - routine. */ - -static char configuration_buffer[32]; - -const char * -get_emacs_configuration (void) -{ - char *arch, *oem, *os; - - /* Determine the processor type. */ - switch (get_processor_type ()) - { - -#ifdef PROCESSOR_INTEL_386 - case PROCESSOR_INTEL_386: - case PROCESSOR_INTEL_486: - case PROCESSOR_INTEL_PENTIUM: - arch = "i386"; - break; -#endif - -#ifdef PROCESSOR_INTEL_860 - case PROCESSOR_INTEL_860: - arch = "i860"; - break; -#endif - -#ifdef PROCESSOR_MIPS_R2000 - case PROCESSOR_MIPS_R2000: - case PROCESSOR_MIPS_R3000: - case PROCESSOR_MIPS_R4000: - arch = "mips"; - break; -#endif - -#ifdef PROCESSOR_ALPHA_21064 - case PROCESSOR_ALPHA_21064: - arch = "alpha"; - break; -#endif - - default: - arch = "unknown"; - break; - } - - /* Let oem be "*" until we figure out how to decode the OEM field. */ - oem = "*"; - - os = (GetVersion () & 0x80000000) ? "win95" : "nt"; - - sprintf (configuration_buffer, "%s-%s-%s%d.%d", arch, oem, os, - get_nt_major_version (), get_nt_minor_version ()); - return configuration_buffer; -} - #ifndef HAVE_X_WINDOWS /* X11R6 on NT provides the single parameter version of this command. */ diff -r deca3c1083ac -r 70ad99077275 src/ntheap.h --- a/src/ntheap.h Mon Aug 13 10:38:47 2007 +0200 +++ b/src/ntheap.h Mon Aug 13 10:39:40 2007 +0200 @@ -107,11 +107,6 @@ int open_output_file (file_data *p_file, char *name, unsigned long size); void close_file_data (file_data *p_file); -unsigned long get_section_size (PIMAGE_SECTION_HEADER p_section); - -/* Return pointer to section header for named section. */ -IMAGE_SECTION_HEADER * find_section (char * name, IMAGE_NT_HEADERS * nt_header); - /* Return pointer to section header for section containing the given relative virtual address. */ IMAGE_SECTION_HEADER * rva_to_section (DWORD rva, IMAGE_NT_HEADERS * nt_header); diff -r deca3c1083ac -r 70ad99077275 src/process-nt.c --- a/src/process-nt.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/process-nt.c Mon Aug 13 10:39:40 2007 +0200 @@ -438,8 +438,23 @@ { /* SHGetFileInfo tends to return ERROR_FILE_NOT_FOUND on most errors. This leads to bogus error message. */ - DWORD image_type = SHGetFileInfo ((char *)XSTRING_DATA (program), 0,NULL, - 0, SHGFI_EXETYPE); + DWORD image_type; + char *p = strrchr ((char *)XSTRING_DATA (program), '.'); + if (p != NULL && + (stricmp (p, ".exe") == 0 || + stricmp (p, ".com") == 0 || + stricmp (p, ".bat") == 0 || + stricmp (p, ".cmd") == 0)) + { + image_type = SHGetFileInfo ((char *)XSTRING_DATA (program), 0,NULL, + 0, SHGFI_EXETYPE); + } + else + { + char progname[MAX_PATH]; + sprintf (progname, "%s.exe", (char *)XSTRING_DATA (program)); + image_type = SHGetFileInfo (progname, 0, NULL, 0, SHGFI_EXETYPE); + } if (image_type == 0) signal_cannot_launch (program, (GetLastError () == ERROR_FILE_NOT_FOUND ? ERROR_BAD_FORMAT : GetLastError ())); diff -r deca3c1083ac -r 70ad99077275 src/process-unix.c --- a/src/process-unix.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/process-unix.c Mon Aug 13 10:39:40 2007 +0200 @@ -718,7 +718,7 @@ Lisp_Object *argv, int nargv, Lisp_Object program, Lisp_Object cur_dir) { - /* This function rewritten by wing@666.com. */ + /* This function rewritten by ben@xemacs.org. */ int pid, inchannel, outchannel; /* Use volatile to protect variables from being clobbered by longjmp. */ diff -r deca3c1083ac -r 70ad99077275 src/redisplay.c --- a/src/redisplay.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/redisplay.c Mon Aug 13 10:39:40 2007 +0200 @@ -5756,7 +5756,10 @@ /* print the current column */ case 'c': { - int col = current_column (b) + !!column_number_start_at_one; + Bufpos pt = (w == XWINDOW (Fselected_window (Qnil))) + ? BUF_PT (b) + : marker_position (w->pointm[type]); + int col = column_at_point (b, pt, 1) + !!column_number_start_at_one; char buf[32]; long_to_string (buf, col); diff -r deca3c1083ac -r 70ad99077275 src/s/windowsnt.h --- a/src/s/windowsnt.h Mon Aug 13 10:38:47 2007 +0200 +++ b/src/s/windowsnt.h Mon Aug 13 10:39:40 2007 +0200 @@ -328,10 +328,6 @@ #define getdisk() (_getdrive () - 1) #define getdefdir(_drv, _buf) _getdcwd (_drv, _buf, MAXPATHLEN) -#define EMACS_CONFIGURATION get_emacs_configuration () -const char *get_emacs_configuration (void); -#define EMACS_CONFIG_OPTIONS "NT" /* Not very meaningful yet. */ - #if 0 /* they do. -kkm */ /* Define this so that winsock.h definitions don't get included when windows.h is... I don't know if they do the right thing for emacs. For this to @@ -365,3 +361,12 @@ #define SYSTEM_PURESIZE_EXTRA 15000 /* ============================================================ */ + +/* See unexnt.c */ +#if (_MSC_VER >= 1100) +#define DUMP_SEPARATE_SECTION +#endif +#ifdef DUMP_SEPARATE_SECTION +#pragma data_seg("xdata") +#pragma bss_seg("xdata") +#endif diff -r deca3c1083ac -r 70ad99077275 src/scrollbar.c --- a/src/scrollbar.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/scrollbar.c Mon Aug 13 10:39:40 2007 +0200 @@ -603,7 +603,7 @@ completely at either window edge, we do this always, as users usually do not reposition scrollbars 200 times a second or so. Do you? */ - if (NILP (w->vertical_divider_draggable_p)) + if (NILP (w->vertical_divider_always_visible_p)) MARK_FRAME_WINDOWS_STRUCTURE_CHANGED (XFRAME (WINDOW_FRAME (w))); else MARK_WINDOWS_CHANGED (w); diff -r deca3c1083ac -r 70ad99077275 src/toolbar-msw.c --- a/src/toolbar-msw.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/toolbar-msw.c Mon Aug 13 10:39:40 2007 +0200 @@ -57,6 +57,7 @@ #endif #define MSWINDOWS_BUTTON_SHADOW_THICKNESS 2 #define MSWINDOWS_BLANK_SIZE 5 +#define MSWINDOWS_MINIMUM_TOOLBAR_SIZE 8 #define SET_TOOLBAR_WAS_VISIBLE_FLAG(frame, pos, flag) \ do { \ @@ -153,6 +154,16 @@ get_toolbar_coords (f, pos, &x, &y, &bar_width, &bar_height, &vert, 0); + /* ediff bogusly sets the height to 2 for some obscure X-specific + reason. This ensures that we only try and output a toolbar for + sensible sizes */ + if (bar_width < MSWINDOWS_MINIMUM_TOOLBAR_SIZE + || + bar_height < MSWINDOWS_MINIMUM_TOOLBAR_SIZE) + { + return; + } + if (x==1) x=0; @@ -300,7 +311,8 @@ /* need to build an image list for the bitmaps */ if (!ilist && !(ilist = ImageList_Create ( bmwidth, bmheight, - ILC_MASK | ILC_COLOR24, + (IMAGE_INSTANCE_MSWINDOWS_MASK (p) + ? ILC_MASK : 0) | ILC_COLOR24, nbuttons, nbuttons * 2 ))) { xfree (button_tbl); diff -r deca3c1083ac -r 70ad99077275 src/unexaix.c --- a/src/unexaix.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/unexaix.c Mon Aug 13 10:39:40 2007 +0200 @@ -558,7 +558,7 @@ write (new, &symentry, SYMESZ); } - for (naux = symentry.n_numaux; naux != 0; --naux) + for (naux = symentry.n_numaux; naux-- != 0; ) { read (new, &auxentry, AUXESZ); nsyms++; diff -r deca3c1083ac -r 70ad99077275 src/unexnt.c --- a/src/unexnt.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/unexnt.c Mon Aug 13 10:39:40 2007 +0200 @@ -22,11 +22,51 @@ /* Adapted for XEmacs by David Hobley */ +/* The linkers that come with MSVC >= 4.0 merge .bss into .data and reorder + * uninitialised data so that the .data section looks like: + * + * crt0 initialised data + * emacs initialised data + * + * library initialised data + * + * emacs static uninitialised data + * library static uninitialised data + * emacs global uninitialised data + * + * library global uninitialised data + * + * This means that we can't use the normal my_ebss in lastfile.c trick to + * differentiate between unitialised data that belongs to emacs and + * uninitialised data that belongs to system libraries. This is bad because + * we do want to initialise the emacs data, but we don't want to initialise + * the system library data. + * + * To solve this problem using MSVC >= 5.0 we use a pragma directive to tell + * the compiler to put emacs's data (both initialised and uninitialised) in + * a separate section in the executable, and we only dump that section. This + * means that all files that define initialized data must include config.h + * to pick up the pragma. We don't try to make any part of that section + * read-only. + * + * This pragma directive isn't supported by the MSVC 4.x compiler. Instead, + * we dump crt0 initialised data and library static uninitialised data in + * addition to the emacs data. This is wrong, but we appear to be able to + * get away with it. A proper fix might involve the introduction of a static + * version of my_ebss in lastfile.c and a new firstfile.c file. jhar */ + +#include #include /* _fmode */ #include #include #include +/* From IMAGEHLP.H which is not installed by default by MSVC < 5 */ +/* The IMAGEHLP.DLL library is not distributed by default with Windows95 */ +PIMAGE_NT_HEADERS +(__stdcall * pfnCheckSumMappedFile) (LPVOID BaseAddress, DWORD FileLength, + LPDWORD HeaderSum, LPDWORD CheckSum); + #if 0 extern BOOL ctrl_c_handler (unsigned long type); #endif @@ -57,8 +97,10 @@ DWORD data_size = UNINIT_LONG; /* Cached info about the .bss section in the executable. */ -PUCHAR bss_start = UNINIT_PTR; -DWORD bss_size = UNINIT_LONG; +#ifndef DUMP_SEPARATE_SECTION +PUCHAR bss_start = 0; +DWORD bss_size = 0; +#endif #ifdef HAVE_NTGUI HINSTANCE hinst = NULL; @@ -74,6 +116,7 @@ void _start (void) { + char * p; extern void mainCRTStartup (void); /* Cache system info, e.g., the NT page size. */ @@ -92,6 +135,12 @@ { exit (1); } + + /* To allow profiling, make sure executable_path names the .exe + file, not the file created by the profiler */ + p = strrchr (executable_path, '\\'); + strcpy (p+1, PATH_PROGNAME ".exe"); + recreate_heap (executable_path); heap_state = HEAP_LOADED; } @@ -126,6 +175,7 @@ char out_filename[MAX_PATH], in_filename[MAX_PATH]; unsigned long size; char *ptr; + HANDLE hImagehelp; /* Make sure that the input and output filenames have the ".exe" extension...patch them up if they don't. */ @@ -174,6 +224,36 @@ copy_executable_and_dump_data_section (&in_file, &out_file); dump_bss_and_heap (&in_file, &out_file); + /* Patch up header fields; profiler is picky about this. */ + hImagehelp = LoadLibrary ("imagehlp.dll"); + if (hImagehelp) + { + PIMAGE_DOS_HEADER dos_header; + PIMAGE_NT_HEADERS nt_header; + DWORD headersum; + DWORD checksum; + + dos_header = (PIMAGE_DOS_HEADER) out_file.file_base; + nt_header = (PIMAGE_NT_HEADERS) ((char *) dos_header + dos_header->e_lfanew); + + nt_header->OptionalHeader.CheckSum = 0; +// nt_header->FileHeader.TimeDateStamp = time (NULL); +// dos_header->e_cp = size / 512; +// nt_header->OptionalHeader.SizeOfImage = size; + + pfnCheckSumMappedFile = (void *) GetProcAddress (hImagehelp, "CheckSumMappedFile"); + if (pfnCheckSumMappedFile) + { +// nt_header->FileHeader.TimeDateStamp = time (NULL); + pfnCheckSumMappedFile (out_file.file_base, + out_file.size, + &headersum, + &checksum); + nt_header->OptionalHeader.CheckSum = checksum; + } + FreeLibrary (hImagehelp); + } + close_file_data (&in_file); close_file_data (&out_file); } @@ -225,7 +305,7 @@ CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); if (file == INVALID_HANDLE_VALUE) return FALSE; - + file_mapping = CreateFileMapping (file, NULL, PAGE_READWRITE, 0, size, NULL); if (!file_mapping) @@ -256,6 +336,7 @@ /* Routines to manipulate NT executable file sections. */ +#ifndef DUMP_SEPARATE_SECTION static void get_bss_info_from_map_file (file_data *p_infile, PUCHAR *p_bss_start, DWORD *p_bss_size) @@ -294,24 +375,7 @@ *p_bss_start = (PUCHAR) start; *p_bss_size = (DWORD) len; } - -/* Return pointer to section header for named section. */ -IMAGE_SECTION_HEADER * -find_section (char * name, IMAGE_NT_HEADERS * nt_header) -{ - PIMAGE_SECTION_HEADER section; - int i; - - section = IMAGE_FIRST_SECTION (nt_header); - - for (i = 0; i < nt_header->FileHeader.NumberOfSections; i++) - { - if (strcmp (section->Name, name) == 0) - return section; - section++; - } - return NULL; -} +#endif /* Return pointer to section header for section containing the given relative virtual address. */ @@ -325,26 +389,14 @@ for (i = 0; i < nt_header->FileHeader.NumberOfSections; i++) { - if (rva >= section->VirtualAddress && - rva < section->VirtualAddress + section->SizeOfRawData) + if (rva >= section->VirtualAddress + && rva < section->VirtualAddress + section->SizeOfRawData) return section; section++; } return NULL; } -static unsigned long -get_section_size (PIMAGE_SECTION_HEADER p_section) -{ - /* The section size is in different locations in the different versions. */ - switch (get_nt_minor_version ()) - { - case 10: - return p_section->SizeOfRawData; - default: - return p_section->Misc.VirtualSize; - } -} /* Flip through the executable and cache the info necessary for dumping. */ static void @@ -382,18 +434,23 @@ section = (PIMAGE_SECTION_HEADER) IMAGE_FIRST_SECTION (nt_header); for (i = 0; i < nt_header->FileHeader.NumberOfSections; i++) { +#ifndef DUMP_SEPARATE_SECTION if (!strcmp (section->Name, ".bss")) { - /* The .bss section. */ + extern int my_ebss; /* From lastfile.c */ + ptr = (char *) nt_header->OptionalHeader.ImageBase + section->VirtualAddress; bss_start = ptr; - bss_size = get_section_size (section); + bss_size = (char*)&my_ebss - (char*)bss_start; } + if (!strcmp (section->Name, ".data")) +#else + if (!strcmp (section->Name, "xdata")) +#endif { - /* From lastfile.c */ - extern char my_edata[]; + extern char my_edata[]; /* From lastfile.c */ /* The .data section. */ data_section = section; @@ -402,16 +459,27 @@ data_start_va = ptr; data_start_file = section->PointerToRawData; - /* We want to only write Emacs data back to the executable, - not any of the library data (if library data is included, - then a dumped Emacs won't run on system versions other - than the one Emacs was dumped on). */ +#ifndef DUMP_SEPARATE_SECTION + /* Write only the part of the section that contains emacs data. */ data_size = my_edata - data_start_va; +#else + /* Write back the full section. */ + data_size = section->SizeOfRawData; + + /* This code doesn't know how to grow the raw size of a section. */ + if (section->SizeOfRawData < section->Misc.VirtualSize) + { + printf ("The emacs data section is smaller than expected" + "...bailing.\n"); + exit (1); + } +#endif } section++; } - if (bss_start == UNINIT_PTR && bss_size == UNINIT_LONG) +#ifndef DUMP_SEPARATE_SECTION + if (!bss_start) { /* Starting with MSVC 4.0, the .bss section has been eliminated and appended virtually to the end of the .data section. Our @@ -421,10 +489,14 @@ is a rounded number and is typically rounded just beyond the start of the .bss section. To find the start and size of the .bss section exactly, we have to peek into the map file. */ + extern int my_ebss; + get_bss_info_from_map_file (p_infile, &ptr, &bss_size); bss_start = ptr + nt_header->OptionalHeader.ImageBase + data_section->VirtualAddress; + bss_size = (char*)&my_ebss - (char*)bss_start; } +#endif } @@ -457,7 +529,7 @@ memcpy (p_outfile->file_base, p_infile->file_base, size); size = data_size; - DUMP_MSG (("Dumping .data section...\n")); + DUMP_MSG (("Dumping data section...\n")); DUMP_MSG (("\t0x%08x Address in process.\n", data_va)); DUMP_MSG (("\t0x%08x Offset in output file.\n", data_file - p_outfile->file_base)); @@ -480,7 +552,7 @@ unsigned char *heap_data, *bss_data; unsigned long size, index; - DUMP_MSG (("Dumping heap into executable...\n")); + DUMP_MSG (("Dumping heap onto end of executable...\n")); index = heap_index_in_executable; size = get_committed_heap_size (); @@ -492,7 +564,8 @@ memcpy ((PUCHAR) p_outfile->file_base + index, heap_data, size); - DUMP_MSG (("Dumping .bss into executable...\n")); +#ifndef DUMP_SEPARATE_SECTION + printf ("Dumping bss onto end of executable...\n"); index += size; size = bss_size; @@ -502,6 +575,7 @@ DUMP_MSG (("\t0x%08x BSS offset in executable.\n", index)); DUMP_MSG (("\t0x%08x BSS size in bytes.\n", size)); memcpy ((char *) p_outfile->file_base + index, bss_data, size); +#endif } #undef DUMP_MSG @@ -510,9 +584,11 @@ /* Load the dumped .bss section into the .bss area of our address space. */ +/* Already done if the .bss was part of a separate emacs data section */ void read_in_bss (char *filename) { +#ifndef DUMP_SEPARATE_SECTION HANDLE file; unsigned long index, n_read; @@ -532,6 +608,7 @@ abort (); CloseHandle (file); +#endif } /* Map the heap dumped into the executable file into our address space. */ diff -r deca3c1083ac -r 70ad99077275 src/window.c --- a/src/window.c Mon Aug 13 10:38:47 2007 +0200 +++ b/src/window.c Mon Aug 13 10:39:40 2007 +0200 @@ -69,7 +69,7 @@ Lisp_Object Vmodeline_shadow_thickness; /* Whether vertical dividers are draggable and displayed */ -Lisp_Object Vvertical_divider_draggable_p; +Lisp_Object Vvertical_divider_always_visible_p; /* Whether a modeline should be displayed. */ Lisp_Object Vhas_modeline_p; @@ -742,7 +742,7 @@ return 0; /* Always if draggable */ - if (!NILP (w->vertical_divider_draggable_p)) + if (!NILP (w->vertical_divider_always_visible_p)) return 1; #ifdef HAVE_SCROLLBARS @@ -5618,24 +5618,27 @@ some_window_value_changed, 0, 0); - DEFVAR_SPECIFIER ("vertical-divider-draggable-p", &Vvertical_divider_draggable_p /* -*Should XEmacs allow resizing windows by dragging vertical dividers. -When t, vertical dividers are always shown, and are draggable. -When nil, vertical dividers are shown only when there are no scrollbars -in between windows, and not draggable. + DEFVAR_SPECIFIER ("vertical-divider-always-visible-p", + &Vvertical_divider_always_visible_p /* +*Should XEmacs always display vertical dividers between windows. + +When this is non-nil, vertical dividers are always shown, and are +draggable. When it is nil, vertical dividers are shown only when +there are no scrollbars in between windows, and are not draggable. + This is a specifier; use `set-specifier' to change it. */ ); - Vvertical_divider_draggable_p = Fmake_specifier (Qboolean); - set_specifier_fallback (Vvertical_divider_draggable_p, + Vvertical_divider_always_visible_p = Fmake_specifier (Qboolean); + set_specifier_fallback (Vvertical_divider_always_visible_p, list1 (Fcons (Qnil, Qt))); - set_specifier_caching (Vvertical_divider_draggable_p, + set_specifier_caching (Vvertical_divider_always_visible_p, slot_offset (struct window, - vertical_divider_draggable_p), + vertical_divider_always_visible_p), vertical_divider_changed_in_window, 0, 0); DEFVAR_SPECIFIER ("vertical-divider-shadow-thickness", &Vvertical_divider_shadow_thickness /* -*How thick to draw shadows around the vertical dividers. +*How thick to draw 3D shadows around vertical dividers. This is a specifier; use `set-specifier' to change it. */ ); Vvertical_divider_shadow_thickness = Fmake_specifier (Qinteger); @@ -5651,9 +5654,9 @@ DEFVAR_SPECIFIER ("vertical-divider-line-width", &Vvertical_divider_line_width /* *The width of the vertical dividers, not including shadows. -For TTY windows, divider line is always one character wide. When +For TTY windows, divider line is always one character wide. When instance of this specifier is zero in a TTY window, no divider is -drawn at all between windows. When non-zero, one character wide +drawn at all between windows. When non-zero, a one character wide divider is displayed. This is a specifier; use `set-specifier' to change it. diff -r deca3c1083ac -r 70ad99077275 src/winslots.h --- a/src/winslots.h Mon Aug 13 10:38:47 2007 +0200 +++ b/src/winslots.h Mon Aug 13 10:39:40 2007 +0200 @@ -59,8 +59,8 @@ WINDOW_SLOT (vertical_divider_line_width, EQ); /* Spacing between outer egde of divider border and window edge */ WINDOW_SLOT (vertical_divider_spacing, EQ); - /* Whether vertical dividers are draggable and displayed */ - WINDOW_SLOT (vertical_divider_draggable_p, EQ); + /* Whether vertical dividers are always displayed */ + WINDOW_SLOT (vertical_divider_always_visible_p, EQ); #ifdef HAVE_SCROLLBARS /* Width of vertical scrollbars. */ diff -r deca3c1083ac -r 70ad99077275 version.sh --- a/version.sh Mon Aug 13 10:38:47 2007 +0200 +++ b/version.sh Mon Aug 13 10:39:40 2007 +0200 @@ -2,7 +2,7 @@ emacs_major_version=21 emacs_minor_version=0 emacs_beta_version= -xemacs_codename="Toggenburg" -infodock_major_version=3 -infodock_minor_version=90 -infodock_build_version=10 +xemacs_codename="Uzbek Black" +infodock_major_version=4 +infodock_minor_version=0 +infodock_build_version=1