From 475a1234b72851704d6d217aa9041060ffdf3e2e Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Mon, 29 Dec 2003 06:53:28 +0000 Subject: [PATCH 01/82] (face_font_available_p): Extern it. --- src/dispextern.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/dispextern.h b/src/dispextern.h index 25c8227d773..d26215e5113 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -2582,6 +2582,7 @@ void clear_face_cache P_ ((int)); unsigned long load_color P_ ((struct frame *, struct face *, Lisp_Object, enum lface_attribute_index)); void unload_color P_ ((struct frame *, unsigned long)); +int face_font_available_p P_ ((struct frame *, Lisp_Object)); int ascii_face_of_lisp_face P_ ((struct frame *, int)); void prepare_face_for_display P_ ((struct frame *, struct face *)); int xstricmp P_ ((const unsigned char *, const unsigned char *)); From 2f65c7b5ef9afed29c365ed08c7b149e0b8ac69c Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Mon, 29 Dec 2003 06:53:50 +0000 Subject: [PATCH 02/82] (Voverriding_fontspec_alist): New variable. (lookup_overriding_fontspec): New function. (fontset_ref_via_base): Call lookup_overriding_fontspec if necessary. (fontset_font_pattern): Likewise. (regulalize_fontname): New function. (Fset_fontset_font): Call regulalize_fontname. (Fset_overriding_fontspec_internal): New function. (syms_of_fontset): Initialize and staticprop Voverriding_fontspec_alist. (syms_of_fontset): Defsubr Sset_overriding_fontspec_internal. --- src/fontset.c | 170 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 145 insertions(+), 25 deletions(-) diff --git a/src/fontset.c b/src/fontset.c index e462387beae..b199f53df17 100644 --- a/src/fontset.c +++ b/src/fontset.c @@ -140,6 +140,10 @@ static int next_fontset_id; font for each characters. */ static Lisp_Object Vdefault_fontset; +/* Alist of font specifications. It override the font specification + in the default fontset. */ +static Lisp_Object Voverriding_fontspec_alist; + Lisp_Object Vfont_encoding_alist; Lisp_Object Vuse_default_ascent; Lisp_Object Vignore_relative_composition; @@ -184,11 +188,13 @@ void (*check_window_system_func) P_ ((void)); /* Prototype declarations for static functions. */ static Lisp_Object fontset_ref P_ ((Lisp_Object, int)); +static Lisp_Object lookup_overriding_fontspec P_ ((Lisp_Object, int)); static void fontset_set P_ ((Lisp_Object, int, Lisp_Object)); static Lisp_Object make_fontset P_ ((Lisp_Object, Lisp_Object, Lisp_Object)); static int fontset_id_valid_p P_ ((int)); static Lisp_Object fontset_pattern_regexp P_ ((Lisp_Object)); static Lisp_Object font_family_registry P_ ((Lisp_Object, int)); +static Lisp_Object regulalize_fontname P_ ((Lisp_Object)); /********** MACROS AND FUNCTIONS TO HANDLE FONTSET **********/ @@ -241,6 +247,46 @@ fontset_ref (fontset, c) } +static Lisp_Object +lookup_overriding_fontspec (frame, c) + Lisp_Object frame; + int c; +{ + Lisp_Object tail; + + for (tail = Voverriding_fontspec_alist; CONSP (tail); tail = XCDR (tail)) + { + Lisp_Object val, target, elt; + + val = XCAR (tail); + target = XCAR (val); + val = XCDR (val); + /* Now VAL is (NO-FRAME-LIST OK-FRAME-LIST CHAR FONTNAME). */ + if (NILP (Fmemq (frame, XCAR (val))) + && (CHAR_TABLE_P (target) + ? ! NILP (CHAR_TABLE_REF (target, c)) + : XINT (target) == CHAR_CHARSET (c))) + { + val = XCDR (val); + elt = XCDR (val); + if (NILP (Fmemq (frame, XCAR (val)))) + { + if (! face_font_available_p (XFRAME (frame), XCDR (elt))) + { + val = XCDR (XCAR (tail)); + XSETCAR (val, Fcons (frame, XCAR (val))); + continue; + } + XSETCAR (val, Fcons (frame, XCAR (val))); + } + if (NILP (XCAR (elt))) + XSETCAR (elt, make_number (c)); + return elt; + } + } + return Qnil; +} + #define FONTSET_REF_VIA_BASE(fontset, c) fontset_ref_via_base (fontset, &c) static Lisp_Object @@ -254,8 +300,12 @@ fontset_ref_via_base (fontset, c) if (SINGLE_BYTE_CHAR_P (*c)) return FONTSET_ASCII (fontset); - elt = FONTSET_REF (FONTSET_BASE (fontset), *c); - if (NILP (elt) && ! EQ (fontset, Vdefault_fontset)) + elt = Qnil; + if (! EQ (FONTSET_BASE (fontset), Vdefault_fontset)) + elt = FONTSET_REF (FONTSET_BASE (fontset), *c); + if (NILP (elt)) + elt = lookup_overriding_fontspec (FONTSET_FRAME (fontset), *c); + if (NILP (elt) && ! EQ (FONTSET_BASE (fontset), Vdefault_fontset)) elt = FONTSET_REF (Vdefault_fontset, *c); if (NILP (elt)) return Qnil; @@ -550,6 +600,13 @@ fontset_font_pattern (f, id, c) fontset = FONTSET_BASE (fontset); elt = FONTSET_REF (fontset, c); } + if (NILP (elt)) + { + Lisp_Object frame; + + XSETFRAME (frame, f); + elt = lookup_overriding_fontspec (frame, c); + } if (NILP (elt)) elt = FONTSET_REF (Vdefault_fontset, c); @@ -980,6 +1037,33 @@ check_fontset_name (name) return FONTSET_FROM_ID (id); } +/* Downcase FONTNAME or car and cdr of FONTNAME. If FONTNAME is a + string, maybe change FONTNAME to (FAMILY . REGISTRY). */ + +static Lisp_Object +regulalize_fontname (Lisp_Object fontname) +{ + Lisp_Object family, registry; + + if (STRINGP (fontname)) + return font_family_registry (Fdowncase (fontname), 0); + + CHECK_CONS (fontname); + family = XCAR (fontname); + registry = XCDR (fontname); + if (!NILP (family)) + { + CHECK_STRING (family); + family = Fdowncase (family); + } + if (!NILP (registry)) + { + CHECK_STRING (registry); + registry = Fdowncase (registry); + } + return Fcons (family, registry); +} + DEFUN ("set-fontset-font", Fset_fontset_font, Sset_fontset_font, 3, 4, 0, doc: /* Modify fontset NAME to use FONTNAME for CHARACTER. @@ -1043,34 +1127,12 @@ name of a font, REGISTRY is a registry name of a font. */) error ("Can't change font for a single byte character"); } - if (STRINGP (fontname)) - { - fontname = Fdowncase (fontname); - elt = Fcons (make_number (from), font_family_registry (fontname, 0)); - } - else - { - CHECK_CONS (fontname); - family = XCAR (fontname); - registry = XCDR (fontname); - if (!NILP (family)) - { - CHECK_STRING (family); - family = Fdowncase (family); - } - if (!NILP (registry)) - { - CHECK_STRING (registry); - registry = Fdowncase (registry); - } - elt = Fcons (make_number (from), Fcons (family, registry)); - } - /* The arg FRAME is kept for backward compatibility. We only check the validity. */ if (!NILP (frame)) CHECK_LIVE_FRAME (frame); + elt = Fcons (make_number (from), regulalize_fontname (fontname)); for (; from <= to; from++) FONTSET_SET (fontset, from, elt); Foptimize_char_table (fontset); @@ -1445,6 +1507,60 @@ DEFUN ("fontset-list", Ffontset_list, Sfontset_list, 0, 0, 0, return list; } +DEFUN ("set-overriding-fontspec-internal", Fset_overriding_fontspec_internal, + Sset_overriding_fontspec_internal, 1, 1, 0, + doc: /* Internal use only. + +FONTLIST is an alist of TARGET vs FONTNAME, where TARGET is a charset +or a char-table, FONTNAME have the same meanings as in +`set-fontset-font'. + +It overrides the font specifications for each TARGET in the default +fontset by the corresponding FONTNAME. + +If TARGET is a charset, targets are all characters in the charset. If +TARGET is a char-table, targets are characters whose value is non-nil +in the table. + +It is intended that this function is called only from +`set-language-environment'. */) + (fontlist) + Lisp_Object fontlist; +{ + Lisp_Object tail; + + fontlist = Fcopy_sequence (fontlist); + /* Now FONTLIST is ((TARGET . FONTNAME) ...). Reform it to ((TARGET + nil nil nil FONTSPEC) ...), where TARGET is a charset-id or a + char-table. */ + for (tail = fontlist; CONSP (tail); tail = XCDR (tail)) + { + Lisp_Object elt, target; + + elt = XCAR (tail); + target = Fcar (elt); + elt = Fcons (Qnil, regulalize_fontname (Fcdr (elt))); + if (! CHAR_TABLE_P (target)) + { + int charset, c; + + CHECK_SYMBOL (target); + charset = get_charset_id (target); + if (charset < 0) + error ("Invalid charset %s", SDATA (SYMBOL_NAME (target))); + target = make_number (charset); + c = MAKE_CHAR (charset, 0, 0); + XSETCAR (elt, make_number (c)); + } + elt = Fcons (target, Fcons (Qnil, Fcons (Qnil, elt))); + XSETCAR (tail, elt); + } + Voverriding_fontspec_alist = fontlist; + clear_face_cache (0); + ++windows_or_buffers_changed; + return Qnil; +} + void syms_of_fontset () { @@ -1483,6 +1599,9 @@ syms_of_fontset () AREF (Vfontset_table, 0) = Vdefault_fontset; next_fontset_id = 1; + Voverriding_fontspec_alist = Qnil; + staticpro (&Voverriding_fontspec_alist); + DEFVAR_LISP ("font-encoding-alist", &Vfont_encoding_alist, doc: /* Alist of fontname patterns vs corresponding encoding info. Each element looks like (REGEXP . ENCODING-INFO), @@ -1548,6 +1667,7 @@ at the vertical center of lines. */); defsubr (&Sfontset_info); defsubr (&Sfontset_font); defsubr (&Sfontset_list); + defsubr (&Sset_overriding_fontspec_internal); } /* arch-tag: ea861585-2f5f-4e5b-9849-d04a9c3a3537 From b64c9a0407fd9dca20476063af98e604bdd2701f Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Mon, 29 Dec 2003 06:54:55 +0000 Subject: [PATCH 03/82] (face_font_available_p): New function. --- src/xfaces.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/src/xfaces.c b/src/xfaces.c index 55455abdbd7..bb95b1494fe 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -2562,6 +2562,69 @@ x_face_list_fonts (f, pattern, pfonts, nfonts, try_alternatives_p) } +/* Check if a font matching pattern_offset_t on frame F is available + or not. PATTERN may be a cons (FAMILY . REGISTRY), in which case, + a font name pattern is generated from FAMILY and REGISTRY. */ + +int +face_font_available_p (f, pattern) + struct frame *f; + Lisp_Object pattern; +{ + Lisp_Object fonts; + + if (! STRINGP (pattern)) + { + Lisp_Object family, registry; + char *family_str, *registry_str, *pattern_str; + + CHECK_CONS (pattern); + family = XCAR (pattern); + if (NILP (family)) + family_str = "*"; + else + { + CHECK_STRING (family); + family_str = (char *) SDATA (family); + } + registry = XCDR (pattern); + if (NILP (registry)) + registry_str = "*"; + else + { + CHECK_STRING (registry); + registry_str = (char *) SDATA (registry); + } + + pattern_str = (char *) alloca (strlen (family_str) + + strlen (registry_str) + + 10); + strcpy (pattern_str, index (family_str, '-') ? "-" : "-*-"); + strcat (pattern_str, family_str); + strcat (pattern_str, "-*-"); + strcat (pattern_str, registry_str); + if (!index (registry_str, '-')) + { + if (registry_str[strlen (registry_str) - 1] == '*') + strcat (pattern_str, "-*"); + else + strcat (pattern_str, "*-*"); + } + pattern = build_string (pattern_str); + } + + /* Get the list of fonts matching PATTERN. */ +#ifdef WINDOWSNT + BLOCK_INPUT; + fonts = w32_list_fonts (f, pattern, 0, 1); + UNBLOCK_INPUT; +#else + fonts = x_list_fonts (f, pattern, -1, 1); +#endif + return XINT (Flength (fonts)); +} + + /* Determine fonts matching PATTERN on frame F. Sort resulting fonts using comparison function CMPFN. Value is the number of fonts found. If value is non-zero, *FONTS is set to a vector of From 0077e394d5eb006788f648ea27da8139ad89d539 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Mon, 29 Dec 2003 07:10:09 +0000 Subject: [PATCH 04/82] (reset-language-environment): Call set-overriding-fontspec-internal with nil. (set-language-environment): Call set-overriding-fontspec-internal if the language environment specify `overriding-fontspec'. (language-info-alist): Doc added. --- lisp/international/mule-cmds.el | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el index 5e957d6b8ab..18ddf566c7b 100644 --- a/lisp/international/mule-cmds.el +++ b/lisp/international/mule-cmds.el @@ -1006,6 +1006,12 @@ Meaningful values for KEY include environment. features value is a list of features requested in this language environment. + ctext-non-standard-encodings + value is a list of non-standard encoding + names used in extended segments of CTEXT. + See the variable + `ctext-non-standard-encodings' for more + detail. The following keys take effect only when multibyte characters are globally disabled, i.e. the value of `default-enable-multibyte-characters' @@ -1685,7 +1691,9 @@ The default status is as follows: ;; (set-keyboard-coding-system-internal nil) (setq nonascii-translation-table nil - nonascii-insert-offset 0)) + nonascii-insert-offset 0) + + (set-overriding-fontspec-internal nil)) (reset-language-environment) @@ -1791,6 +1799,12 @@ specifies the character set for the major languages of Western Europe." (while required-features (require (car required-features)) (setq required-features (cdr required-features)))) + + (let ((overriding-fontspec (get-language-info language-name + 'overriding-fontspec))) + (if overriding-fontspec + (set-overriding-fontspec-internal overriding-fontspec))) + (let ((func (get-language-info language-name 'setup-function))) (if (functionp func) (funcall func))) From fd1627248f348adf60b3473999d540ef5d4fbafe Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Mon, 29 Dec 2003 07:10:51 +0000 Subject: [PATCH 05/82] (ccl-encode-koi8-font): Make it work for characters of mule-unicode-0100-24ff. (ccl-encode-windows-1251-font): New CCL program. ("Bulgarian"): Specify overriding-fontspec. ("Belarusian"): Likewise. --- lisp/language/cyrillic.el | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/lisp/language/cyrillic.el b/lisp/language/cyrillic.el index 19ff671834b..60ebf52fe35 100644 --- a/lisp/language/cyrillic.el +++ b/lisp/language/cyrillic.el @@ -204,6 +204,9 @@ This works whether or not the table is Unicode-based or ;; The table is set up later to encode both Unicode and 8859-5. (define-ccl-program ccl-encode-koi8-font `(0 + (if (r2 >= 0) + ((r1 <<= 7) + (r1 += r2))) (translate-character cyrillic-koi8-r-encode-table r0 r1)) "CCL program to encode Cyrillic chars to KOI font.") @@ -472,10 +475,25 @@ Support for Russian using koi8-r and the russian-computer input method.") (setcdr slot (cdr elt)) (push elt ctext-non-standard-encodings-alist))) +(define-ccl-program ccl-encode-windows-1251-font + '(0 + ((r1 <<= 7) + (r1 += r2) + (translate-character encode-windows-1251 r0 r1) + ))) + +(add-to-list 'font-ccl-encoder-alist + '("microsoft-cp1251" . ccl-encode-windows-1251-font)) + (set-language-info-alist "Bulgarian" `((coding-system windows-1251) (coding-priority windows-1251) (ctext-non-standard-encodings "microsoft-cp1251") + (overriding-fontspec + (,(get 'encode-windows-1251 'translation-table) + . (nil . "microsoft-cp1251")) + (,(get 'cyrillic-koi8-r-encode-table 'translation-table) + . (nil . "koi8-r"))) (nonascii-translation . ,(get 'decode-windows-1251 'translation-table)) (input-method . "bulgarian-bds") @@ -488,6 +506,11 @@ Support for Russian using koi8-r and the russian-computer input method.") "Belarusian" `((coding-system windows-1251) (coding-priority windows-1251) (ctext-non-standard-encodings "microsoft-cp1251") + (overriding-fontspec + (,(get 'encode-windows-1251 'translation-table) + . (nil . "microsoft-cp1251")) + (,(get 'cyrillic-koi8-r-encode-table 'translation-table) + . (nil . "koi8-r"))) (nonascii-translation . ,(get 'decode-windows-1251 'translation-table)) (input-method . "belarusian") From 3e7cfcdc3d6f06c38c8b89c5e44a5cc42e904432 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Mon, 29 Dec 2003 07:11:58 +0000 Subject: [PATCH 06/82] *** empty log message *** --- lisp/ChangeLog | 14 ++++++++++++++ src/ChangeLog | 18 ++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 56587ae22ed..091971209e5 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,17 @@ +2003-12-29 Kenichi Handa + + * international/mule-cmds.el (reset-language-environment): Call + set-overriding-fontspec-internal with nil. + (set-language-environment): Call set-overriding-fontspec-internal + if the language environment specify `overriding-fontspec'. + (language-info-alist): Doc added. + + * language/cyrillic.el (ccl-encode-koi8-font): Make it work for + characters of mule-unicode-0100-24ff. + (ccl-encode-windows-1251-font): New CCL program. + ("Bulgarian"): Specify overriding-fontspec. + ("Belarusian"): Likewise. + 2003-12-28 Sam Steingold * net/ange-ftp.el (ange-ftp-file-attributes): Add new optional diff --git a/src/ChangeLog b/src/ChangeLog index f471cc99230..119a849ba8d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,21 @@ +2003-12-29 Kenichi Handa + + * dispextern.h (face_font_available_p): Extern it. + + * fontset.c (Voverriding_fontspec_alist): New variable. + (lookup_overriding_fontspec): New function. + (fontset_ref_via_base): Call lookup_overriding_fontspec if + necessary. + (fontset_font_pattern): Likewise. + (regulalize_fontname): New function. + (Fset_fontset_font): Call regulalize_fontname. + (Fset_overriding_fontspec_internal): New function. + (syms_of_fontset): Initialize and staticprop + Voverriding_fontspec_alist. Defsubr + Sset_overriding_fontspec_internal. + + * xfaces.c (face_font_available_p): New function. + 2003-12-28 Luc Teirlinck * coding.c (Fcheck_coding_system): Doc fix. From 5d26489ff531cd72a832d3906827f136ad039f23 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Dec 2003 10:59:41 +0000 Subject: [PATCH 07/82] (reset-language-environment, set-language-environment): Don't invoke fontset-related functions if fontset-list is not fboundp. --- lisp/ChangeLog | 6 ++++++ lisp/international/mule-cmds.el | 16 +++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 091971209e5..fa941f80ea3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2003-12-29 Eli Zaretskii + + * international/mule-cmds.el (reset-language-environment) + (set-language-environment): Don't invoke fontset-related functions + if fontset-list is not fboundp. + 2003-12-29 Kenichi Handa * international/mule-cmds.el (reset-language-environment): Call diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el index 18ddf566c7b..dca8b80744e 100644 --- a/lisp/international/mule-cmds.el +++ b/lisp/international/mule-cmds.el @@ -1693,7 +1693,10 @@ The default status is as follows: (setq nonascii-translation-table nil nonascii-insert-offset 0) - (set-overriding-fontspec-internal nil)) + ;; Don't invoke fontset-related functions if fontsets aren't + ;; supported in this build of Emacs. + (and (fboundp 'fontset-list) + (set-overriding-fontspec-internal nil))) (reset-language-environment) @@ -1800,10 +1803,13 @@ specifies the character set for the major languages of Western Europe." (require (car required-features)) (setq required-features (cdr required-features)))) - (let ((overriding-fontspec (get-language-info language-name - 'overriding-fontspec))) - (if overriding-fontspec - (set-overriding-fontspec-internal overriding-fontspec))) + ;; Don't invoke fontset-related functions if fontsets aren't + ;; supported in this build of Emacs. + (when (fboundp 'fontset-list) + (let ((overriding-fontspec (get-language-info language-name + 'overriding-fontspec))) + (if overriding-fontspec + (set-overriding-fontspec-internal overriding-fontspec)))) (let ((func (get-language-info language-name 'setup-function))) (if (functionp func) From fbb48945d4f9d74d58f6219c1ac7bc06a9de33cc Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Dec 2003 11:22:19 +0000 Subject: [PATCH 08/82] (etc-modules-conf-generic-mode): A more complete set of keywords. --- lisp/ChangeLog | 5 +++++ lisp/generic-x.el | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index fa941f80ea3..b0241e0d9c4 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2003-12-29 Jesper Harder (tiny change) + + * generic-x.el (etc-modules-conf-generic-mode): A more complete + set of keywords. + 2003-12-29 Eli Zaretskii * international/mule-cmds.el (reset-language-environment) diff --git a/lisp/generic-x.el b/lisp/generic-x.el index fcc84a4a1d6..88703af799f 100644 --- a/lisp/generic-x.el +++ b/lisp/generic-x.el @@ -1868,7 +1868,38 @@ you must reload generic-x to enable the specified modes." ;;List of comment characters (list ?#) ;;List of keywords - (list "alias" "pre-install" "post-install" "options" "probeall") + (list + "above" + "alias" + "below" + "define" + "depfile" + "else" + "elseif" + "endif" + "if" + "include" + "insmod_opt" + "install" + "keep" + "options" + "path" + "generic_stringfile" + "pcimapfile" + "isapnpmapfile" + "usbmapfile" + "parportmapfile" + "ieee1394mapfile" + "pnpbiosmapfile" + "probe" + "probeall" + "prune" + "post-install" + "post-remove" + "pre-install" + "pre-remove" + "remove" + "persistdir") ;;List of additional font-lock-expressions nil ;;List of additional automode-alist expressions From 6c2ef893427b86cbbcadcb271bf9b45e68e4b72e Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 11:22:31 +0000 Subject: [PATCH 09/82] Comment change. --- src/buffer.h | 22 ++++++++++++++++++++-- src/eval.c | 2 ++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/buffer.h b/src/buffer.h index 14d3aa6d5ee..930424b0b49 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -906,8 +906,26 @@ extern int last_per_buffer_idx; (B)->local_flags[IDX] = (VAL); \ } while (0) -/* Return the index of the per-buffer variable at offset OFFSET in the - buffer structure. */ +/* Return the index value of the per-buffer variable at offset OFFSET + in the buffer structure. + + If the slot OFFSET has a corresponding default value in + buffer_defaults, the index value is positive and has only one + nonzero bit. When a buffer has its own local value for a slot, the + bit for that slot (found in the same slot in this structure) is + turned on in the buffer's local_flags array. + + If the index value is -1, even though there may be a + DEFVAR_PER_BUFFER for the slot, there is no default value for it; + and the corresponding slot in buffer_defaults is not used. + + If the index value is -2, then there is no DEFVAR_PER_BUFFER for + the slot, but there is a default value which is copied into each + new buffer. + + If a slot in this structure corresponding to a DEFVAR_PER_BUFFER is + zero, that is a bug */ + #define PER_BUFFER_IDX(OFFSET) \ XINT (*(Lisp_Object *)((OFFSET) + (char *) &buffer_local_flags)) diff --git a/src/eval.c b/src/eval.c index e5dba1b888f..8a6d0d3ff54 100644 --- a/src/eval.c +++ b/src/eval.c @@ -2641,6 +2641,8 @@ call6 (fn, arg1, arg2, arg3, arg4, arg5, arg6) #endif /* not NO_ARG_ARRAY */ } +/* The caller should GCPRO all the elements of ARGS. */ + DEFUN ("funcall", Ffuncall, Sfuncall, 1, MANY, 0, doc: /* Call first argument as a function, passing remaining arguments to it. Return the value that function returns. From dc2628c1136068e34a39f6ddb13415cfdef26528 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 11:24:14 +0000 Subject: [PATCH 10/82] (choose_write_coding_system): Ignore auto_saving if using the visited file for auto saves. (Fwrite_region): Don't update SAVE_MODIFF if auto-saving in visited file. --- src/fileio.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/fileio.c b/src/fileio.c index e586407cecc..a2b207169cf 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -4685,7 +4685,9 @@ choose_write_coding_system (start, end, filename, { Lisp_Object val; - if (auto_saving) + if (auto_saving + && NILP (Fstring_equal (current_buffer->filename, + current_buffer->auto_save_file_name))) { /* We use emacs-mule for auto saving... */ setup_coding_system (Qemacs_mule, coding); @@ -5221,7 +5223,14 @@ This does code conversion according to the value of update_mode_lines++; } else if (quietly) - return Qnil; + { + if (auto_saving + && ! NILP (Fstring_equal (current_buffer->filename, + current_buffer->auto_save_file_name))) + SAVE_MODIFF = MODIFF; + + return Qnil; + } if (!auto_saving) message_with_string ((INTEGERP (append) @@ -5776,11 +5785,14 @@ A non-nil CURRENT-ONLY argument means save only current buffer. */) minibuffer_auto_raise = 0; auto_saving = 1; - /* First, save all files which don't have handlers. If Emacs is - crashing, the handlers may tweak what is causing Emacs to crash - in the first place, and it would be a shame if Emacs failed to - autosave perfectly ordinary files because it couldn't handle some - ange-ftp'd file. */ + /* On first pass, save all files that don't have handlers. + On second pass, save all files that do have handlers. + + If Emacs is crashing, the handlers may tweak what is causing + Emacs to crash in the first place, and it would be a shame if + Emacs failed to autosave perfectly ordinary files because it + couldn't handle some ange-ftp'd file. */ + for (do_handled_files = 0; do_handled_files < 2; do_handled_files++) for (tail = Vbuffer_alist; GC_CONSP (tail); tail = XCDR (tail)) { From dea7e2ba8497d12ccbaf648253a10573220516b6 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 11:25:21 +0000 Subject: [PATCH 11/82] (Fset_minibuffer_window): Doc fix. --- src/minibuf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/minibuf.c b/src/minibuf.c index baeb0cef7b5..9a05a4d1ce0 100644 --- a/src/minibuf.c +++ b/src/minibuf.c @@ -189,7 +189,7 @@ choose_minibuf_frame_1 (ignore) DEFUN ("set-minibuffer-window", Fset_minibuffer_window, Sset_minibuffer_window, 1, 1, 0, doc: /* Specify which minibuffer window to use for the minibuffer. -This effects where the minibuffer is displayed if you put text in it +This affects where the minibuffer is displayed if you put text in it without invoking the usual minibuffer commands. */) (window) Lisp_Object window; From 7abd90ea9841ef2a09c1226dd3163b15e617d6b3 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 11:29:18 +0000 Subject: [PATCH 12/82] (store_symval_forwarding): Handle setting default-fill-column, etc., by changing buffers that use the default. --- src/ChangeLog | 21 +++++++++++++++++++++ src/data.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index 119a849ba8d..17135ca34c7 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,16 @@ +2003-12-29 Richard M. Stallman + + * data.c (store_symval_forwarding): Handle setting + default-fill-column, etc., by changing the value in + buffers that use the default. + + * minibuf.c (Fset_minibuffer_window): Doc fix. + + * fileio.c (choose_write_coding_system): Ignore auto_saving + if using the visited file for auto saves. + (Fwrite_region): Don't update SAVE_MODIFF + if auto-saving in visited file. + 2003-12-29 Kenichi Handa * dispextern.h (face_font_available_p): Extern it. @@ -16,6 +29,14 @@ * xfaces.c (face_font_available_p): New function. +2003-12-28 Richard M. Stallman + + * buffer.c (Fother_buffer): Don't crash if BUF is nil + or if its name is nil. + + * buffer.c (Fkill_buffer): Don't delete auto-save file + if it's the same as the visited file. + 2003-12-28 Luc Teirlinck * coding.c (Fcheck_coding_system): Doc fix. diff --git a/src/data.c b/src/data.c index a246271c1f6..c4e3937f3fa 100644 --- a/src/data.c +++ b/src/data.c @@ -873,6 +873,8 @@ store_symval_forwarding (symbol, valcontents, newval, buf) register Lisp_Object valcontents, newval; struct buffer *buf; { + int offset; + switch (SWITCH_ENUM_CAST (XTYPE (valcontents))) { case Lisp_Misc: @@ -892,6 +894,36 @@ store_symval_forwarding (symbol, valcontents, newval, buf) case Lisp_Misc_Objfwd: *XOBJFWD (valcontents)->objvar = newval; + + /* If this variable is a default for something stored + in the buffer itself, such as default-fill-column, + find the buffers that don't have local values for it + and update them. */ + if (XOBJFWD (valcontents)->objvar > (Lisp_Object *) &buffer_defaults + && XOBJFWD (valcontents)->objvar < (Lisp_Object *) (&buffer_defaults + 1)) + { + int offset = ((char *) XOBJFWD (valcontents)->objvar + - (char *) &buffer_defaults); + int idx = PER_BUFFER_IDX (offset); + + Lisp_Object tail, buf; + + if (idx <= 0) + break; + + for (tail = Vbuffer_alist; CONSP (tail); tail = XCDR (tail)) + { + Lisp_Object buf; + struct buffer *b; + + buf = Fcdr (XCAR (tail)); + if (!BUFFERP (buf)) continue; + b = XBUFFER (buf); + + if (! PER_BUFFER_VALUE_P (b, idx)) + PER_BUFFER_VALUE (b, offset) = newval; + } + } break; case Lisp_Misc_Buffer_Objfwd: From d6db910183079cbdb7777041841182e1b6a1a9c6 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Dec 2003 11:29:31 +0000 Subject: [PATCH 13/82] (table-yank-handler): New defcustom. (table--put-cell-indicator-property): Put yank-handler property that indicates the yank handler for the table cell. --- lisp/textmodes/table.el | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lisp/textmodes/table.el b/lisp/textmodes/table.el index 44e82efc5b7..93ea3cc0c14 100644 --- a/lisp/textmodes/table.el +++ b/lisp/textmodes/table.el @@ -5,7 +5,7 @@ ;; Keywords: wp, convenience ;; Author: Takaaki Ota ;; Created: Sat Jul 08 2000 13:28:45 (PST) -;; Revised: jue jun 05 2003 22:00:02 (Hora de verano romance) +;; Revised: Tue Dec 09 2003 14:36:50 (PST) ;; This file is part of GNU Emacs. @@ -837,6 +837,9 @@ simply by any key input." :type 'hook :group 'table-hooks) +(defcustom table-yank-handler '(nil nil t nil) + "*yank-handler for table.") + (setplist 'table-disable-incompatibility-warning nil) (defvar table-disable-menu (null (and (locate-library "easymenu") @@ -5228,7 +5231,8 @@ and the right cell border character." (defun table--put-cell-indicator-property (beg end &optional object) "Put cell property which indicates that the location is within a table cell." - (put-text-property beg end 'table-cell t object)) + (put-text-property beg end 'table-cell t object) + (put-text-property beg end 'yank-handler table-yank-handler object)) (defun table--put-cell-face-property (beg end &optional object) "Put cell face property." From 529c94091fdfe481911dcc45f8d3ad84c3e406b3 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Dec 2003 11:40:49 +0000 Subject: [PATCH 14/82] (insert-for-yank): Call insert-for-yank-1 repetitively for each yank-handler segment. (insert-for-yank-1): New function, with the body of the previous insert-for-yank. --- lisp/ChangeLog | 11 +++++++++++ lisp/subr.el | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b0241e0d9c4..aa15eff2d71 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,14 @@ +2003-12-29 Takaaki Ota + + * subr.el (insert-for-yank): Call insert-for-yank-1 repetitively + for each yank-handler segment. + (insert-for-yank-1): New function, with the body of the previous + insert-for-yank. + + * textmodes/table.el (table-yank-handler): New defcustom. + (table--put-cell-indicator-property): Put yank-handler property + that indicates the yank handler for the table cell. + 2003-12-29 Jesper Harder (tiny change) * generic-x.el (etc-modules-conf-generic-mode): A more complete diff --git a/lisp/subr.el b/lisp/subr.el index 2996f2903e0..e760936572b 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -1563,7 +1563,18 @@ Replaces `category' properties with their defined properties." (defvar yank-undo-function) (defun insert-for-yank (string) + "Calls `insert-for-yank-1' repetitively for each `yank-handler' segment. + +See `insert-for-yank-1' for more details." + (let (to) + (while (setq to (next-single-property-change 0 'yank-handler string)) + (insert-for-yank-1 (substring string 0 to)) + (setq string (substring string to)))) + (insert-for-yank-1 string)) + +(defun insert-for-yank-1 (string) "Insert STRING at point, stripping some text properties. + Strip text properties from the inserted text according to `yank-excluded-properties'. Otherwise just like (insert STRING). From 53092de4a71c7f3c57366ae92f6ac4070a582510 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Dec 2003 11:46:03 +0000 Subject: [PATCH 15/82] Document the change in insert-for-yank. --- etc/NEWS | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/etc/NEWS b/etc/NEWS index 13a8b93dc0f..a4ca184e250 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1734,6 +1734,11 @@ configuration files. * Lisp Changes in Emacs 21.4 +** The function `insert-for-yank' now supports strings where the +`yank-handler' property does not span the first character of the +string. The old behavior is available if you call +`insert-for-yank-1' instead. + ** New function `get-char-property-and-overlay' accepts the same arguments as `get-char-property' and returns a cons whose car is the return value of `get-char-property' called with those arguments and From 7f9b63222e50f3998e69e2cf4bb4ed3c7533c5a8 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Dec 2003 11:54:03 +0000 Subject: [PATCH 16/82] (custom-declare-theme): Use `value' when putting properties on `theme'. --- lisp/ChangeLog | 5 +++++ lisp/custom.el | 12 ++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index aa15eff2d71..59a77562367 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2003-12-29 Alex Schroeder (tiny change) + + * custom.el (custom-declare-theme): Use `value' when putting + properties on `theme'. + 2003-12-29 Takaaki Ota * subr.el (insert-for-yank): Call insert-for-yank-1 repetitively diff --git a/lisp/custom.el b/lisp/custom.el index aa4d0d8353f..ea0567d3109 100644 --- a/lisp/custom.el +++ b/lisp/custom.el @@ -558,17 +558,17 @@ from THEME by `custom-make-theme-feature'." (error "Keyword %s is missing an argument" keyword)) (setq args (cdr args)) (cond ((eq keyword :short-description) - (put theme 'theme-short-description short-description)) + (put theme 'theme-short-description value)) ((eq keyword :immediate) - (put theme 'theme-immediate immediate)) + (put theme 'theme-immediate value)) ((eq keyword :variable-set-string) - (put theme 'theme-variable-set-string variable-set-string)) + (put theme 'theme-variable-set-string value)) ((eq keyword :variable-reset-string) - (put theme 'theme-variable-reset-string variable-reset-string)) + (put theme 'theme-variable-reset-string value)) ((eq keyword :face-set-string) - (put theme 'theme-face-set-string face-set-string)) + (put theme 'theme-face-set-string value)) ((eq keyword :face-reset-string) - (put theme 'theme-face-reset-string face-reset-string))))))) + (put theme 'theme-face-reset-string value))))))) (defmacro deftheme (theme &optional doc &rest args) "Declare custom theme THEME. From dffafab0865acfdfaed232b9c91166b501d079f6 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Dec 2003 12:05:15 +0000 Subject: [PATCH 17/82] (easy-menu-define): Doc fix. --- lisp/ChangeLog | 4 ++++ lisp/emacs-lisp/easymenu.el | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 59a77562367..336a1b8e7b8 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2003-12-29 Eli Zaretskii + + * emacs-lisp/easymenu.el (easy-menu-define): Doc fix. + 2003-12-29 Alex Schroeder (tiny change) * custom.el (custom-declare-theme): Use `value' when putting diff --git a/lisp/emacs-lisp/easymenu.el b/lisp/emacs-lisp/easymenu.el index a5b35a7d018..5a2a33575e7 100644 --- a/lisp/emacs-lisp/easymenu.el +++ b/lisp/emacs-lisp/easymenu.el @@ -59,8 +59,8 @@ It may be followed by the following keyword argument pairs :filter FUNCTION -FUNCTION is a function with one argument, the menu. It returns the actual -menu displayed. +FUNCTION is a function with one argument, the rest of menu items. +It returns the remaining items of the displayed menu. :visible INCLUDE From 9bcd6a7e9486d68f612fe179073868bfa2ed6563 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Dec 2003 12:13:27 +0000 Subject: [PATCH 18/82] (xml-get-attribute-or-nil): New function, like xml-get-attribute, but returns nil if the attribute was not found. (xml-get-attribute): Converted to defsubst, uses xml-get-attribute-or-nil. --- lisp/ChangeLog | 7 +++++++ lisp/xml.el | 17 +++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 336a1b8e7b8..df852fc5b13 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2003-12-29 Mark A. Hershberger + + * xml.el (xml-get-attribute-or-nil): New function, like + xml-get-attribute, but returns nil if the attribute was not found. + (xml-get-attribute): Converted to defsubst, uses + xml-get-attribute-or-nil. + 2003-12-29 Eli Zaretskii * emacs-lisp/easymenu.el (easy-menu-define): Doc fix. diff --git a/lisp/xml.el b/lisp/xml.el index a6159554b3f..b025a546a48 100644 --- a/lisp/xml.el +++ b/lisp/xml.el @@ -104,15 +104,24 @@ CHILD-NAME should be a lower case symbol." (push child match)))) (nreverse match))) -(defun xml-get-attribute (node attribute) +(defun xml-get-attribute-or-nil (node attribute) "Get from NODE the value of ATTRIBUTE. -An empty string is returned if the attribute was not found." +nil is returned if the attribute was not found. + +See also `xml-get-attribute'." (if (xml-node-attributes node) (let ((value (assoc attribute (xml-node-attributes node)))) (if value (cdr value) - "")) - "")) + nil)) + nil)) + +(defsubst xml-get-attribute (node attribute) + "Get from NODE the value of ATTRIBUTE. +An empty string is returned if the attribute was not found. + +See also `xml-get-attribute-or-nil'." + (or (xml-get-attribute-or-nil node attribute) "")) ;;******************************************************************* ;;** From 5ebe0443931ba9bf4e006056a5b48283a3eb88d6 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Dec 2003 12:35:35 +0000 Subject: [PATCH 19/82] Fix previous change. Remove redundant trailing whitespace. --- lisp/xml.el | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/lisp/xml.el b/lisp/xml.el index b025a546a48..72ffa43dcc9 100644 --- a/lisp/xml.el +++ b/lisp/xml.el @@ -109,12 +109,10 @@ CHILD-NAME should be a lower case symbol." nil is returned if the attribute was not found. See also `xml-get-attribute'." - (if (xml-node-attributes node) - (let ((value (assoc attribute (xml-node-attributes node)))) - (if value - (cdr value) - nil)) - nil)) + (when (xml-node-attributes node) + (let ((value (assoc attribute (xml-node-attributes node)))) + (when value + (cdr value))))) (defsubst xml-get-attribute (node attribute) "Get from NODE the value of ATTRIBUTE. @@ -295,7 +293,6 @@ If PARSE-NS is non-nil, then QNAMES are expanded." attr-list) attr-list) - (defun xml-intern-attrlist (attr-list) "Convert attribute names to symbols for backward compatibility." (mapcar (lambda (attr) @@ -358,12 +355,12 @@ Returns one of: (let* ((node-name (match-string 1)) (attr-list (xml-parse-attlist)) (children (if (consp xml-ns) ;; take care of namespace parsing - (progn + (progn (setq xml-ns (xml-ns-parse-ns-attrs attr-list xml-ns)) - (list (xml-ns-expand-attr + (list (xml-ns-expand-attr attr-list xml-ns) - (xml-ns-expand-el + (xml-ns-expand-el node-name xml-ns))) (list (xml-intern-attrlist attr-list) (intern node-name)))) From 841c4dde958a8a312fc19b065db72a44bef31a93 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Dec 2003 12:36:58 +0000 Subject: [PATCH 20/82] Fix Mark Hershberg's entries for xml.el. --- lisp/ChangeLog | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index df852fc5b13..6ed13e06292 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -594,10 +594,18 @@ 2003-11-01 Mark A. Hershberger - * xml.el: Allow comments following the top-level element. - Separate out namespace parsing into special functions. - Change namespace parsing to return ('ns-uri . "local-name") - instead of '{ns-uri}local-name. + * xml.el (xml-parse-region): Allow comments to appear after the + topmost element has closed. + (xml-ns-parse-ns-attrs, xml-ns-expand-el) + (xml-ns-expand-attr): New functions to do namespace handling. + (xml-intern-attrlist): Back-compatible handling of attribute + names. + (xml-parse-tag): Move namespace handling to seperate functions. + Now produces elements in the form ((:ns . "element") (attr-list) + children) instead of ('ns:element (attr-list) children). + (xml-parse-attlist): Fix attribute parsing. + (xml-parse-dtd): Change parsing so that it produces strings + instead of interned symbols. 2003-11-01 era@iki.fi (tiny change) From ad6600754d0c1cb06ea28d6d7f183d2f725f1c37 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Dec 2003 12:41:49 +0000 Subject: [PATCH 21/82] (auto-revert-interval): Doc fix. --- lisp/ChangeLog | 4 ++++ lisp/autorevert.el | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 6ed13e06292..008fa30367a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2003-12-29 Eric Hanchrow (tiny change) + + * autorevert.el (auto-revert-interval): Doc fix. + 2003-12-29 Mark A. Hershberger * xml.el (xml-get-attribute-or-nil): New function, like diff --git a/lisp/autorevert.el b/lisp/autorevert.el index f366d5c7547..fac91332a5e 100644 --- a/lisp/autorevert.el +++ b/lisp/autorevert.el @@ -97,7 +97,10 @@ Never set this variable directly, use the command `auto-revert-mode' instead.") (put 'auto-revert-mode 'permanent-local t) (defcustom auto-revert-interval 5 - "Time, in seconds, between Auto-Revert Mode file checks." + "Time, in seconds, between Auto-Revert Mode file checks. +Setting this variable has no effect on buffers that are already in +auto-revert-mode; it only affects buffers that are put into +auto-revert-mode afterwards." :group 'auto-revert :type 'integer) From 9928d4fe9882536a5da421b7ff9884556432458c Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Dec 2003 12:49:21 +0000 Subject: [PATCH 22/82] Use windows-1251 encoding. Fix punctuation errors. --- etc/TUTORIAL.bg | 1802 ++++++++++++++++++++++++----------------------- 1 file changed, 902 insertions(+), 900 deletions(-) diff --git a/etc/TUTORIAL.bg b/etc/TUTORIAL.bg index 447ba5b5041..8bd4b2a19ad 100644 --- a/etc/TUTORIAL.bg +++ b/etc/TUTORIAL.bg @@ -1,1169 +1,1171 @@ -чЙЕ ЗМЕДБФЕ ЧЯЧЕДЕОЙЕФП ОБ еНБЛУ. хУМПЧЙСФБ ЪБ ЛПРЙТБОЕ УБ Ч ЛТБС ОБ ФЕЛУФБ. -Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. +Вие гледате въведението на Емакс. Условията за копиране са в края на текста. +Copyright (c) 1985, 1996, 1998, 2001, 2002, 2003 Free Software Foundation. -лПНБОДЙФЕ ОБ еНБЛУ ОБК-ЮЕУФП ЧЛМАЮЧБФ ЛМБЧЙЫЙФЕ CONTROL (РПОСЛПЗБ -ПФВЕМСЪЧБО У CTRL ЙМЙ CTL) Й META (РПОСЛПЗБ ПФВЕМСЪЧБО У EDIT ЙМЙ -ALT). чНЕУФП ДБ УЕ ЙЪРЙУЧБФ У РЯМОП ЙНЕ ЧУЕЛЙ РЯФ, ОЙЕ ЭЕ ЙЪРПМЪЧБНЕ -УМЕДОЙФЕ УЯЛТБЭЕОЙС: +Командите на Емакс най-често включват клавишите CONTROL (понякога +отбелязван с CTRL или CTL) и META (понякога отбелязван с EDIT или +ALT). Вместо да се изписват с пълно име всеки път, ние ще използваме +следните съкращения: - C-<ЪОБЛ> ПЪОБЮБЧБ ЪБДЯТЦБОЕ ОБ ЛМБЧЙЫБ CONTROL ДПЛБФП УЕ - ОБФЙУЛБ ЪОБЛБ <ЪОБЛ>. фБЛБ C-f ЭЕ ПЪОБЮБЧБ: ДПЛБФП - УЕ ЪБДЯТЦБ ОБФЙУОБФ ЛМБЧЙЫБ CONTROL УЕ ОБФЙУЛБ f. - M-<ЪОБЛ> ПЪОБЮБЧБ ЪБДЯТЦБОЕ ОБФЙУОБФ ОБ ЛМБЧЙЫБ META (ЙМЙ EDIT - ЙМЙ ALT) ДПЛБФП УЕ ОБФЙУЛБ <ЪОБЛ>. бЛП ОСНБ ЛМБЧЙЫ - META, EDIT ЙМЙ ALT, ЧНЕУФП ОЕЗП ОБФЙУОЕФЕ Й ПФРХУОЕФЕ - ЛМБЧЙЫБ ESC Й УМЕД ФПЧБ ЧЯЧЕДЕФЕ <ЪОБЛ>. оЙЕ - ЪБРЙУЧБНЕ ЪБ ДБ ПФВЕМЕЦЙН ЛМБЧЙЫБ ESC. + C-<знак> означава задържане на клавиша CONTROL, докато се + натиска знака <знак>. Така C-f ще означава: докато + се задържа натиснат клавиша CONTROL, се натиска f. + M-<знак> означава задържане натиснат на клавиша META (или EDIT, + или ALT), докато се натиска <знак>. Ако няма клавиш + META, EDIT или ALT, вместо него натиснете и отпуснете + клавиша ESC и след това въведете <знак>. Ние + записваме , за да отбележим клавиша ESC. -чБЦОБ ВЕМЕЦЛБ: Ч ЛТБС ОБ еНБЛУ УЕУЙСФБ ЧЯЧЕДЕФЕ ДЧБФБ ЪОБЛБ C-x C-c. -ъОБГЙФЕ ">>" ПФМСЧП ЧЙ ДБЧБФ ХЛБЪБОЙЕ ДБ ЙЪРЯМОЙФЕ ЛПНБОДБ. оБРТЙНЕТ: +Важна бележка: в края на Емакс сесията въведете двата знака C-x C-c. +Знаците ">>" отляво ви дават указание да изпълните команда. Например: <> ->> уЕЗБ ЧЯЧЕДЕФЕ C-v (рПЛБЦЙ УМЕДЧБЭЙС ЕЛТБО) ЪБ ДБ УЕ РТЙДЧЙЦЙФЕ ЛЯН -УМЕДЧБЭЙС ЕЛТБО. - (оБРТБЧЕФЕ ЗП УЕЗБ, ЪБДТЯЦФЕ CONTROL ДПЛБФП ОБФЙУЛБФЕ v). - пФУЕЗБ ОБФБФЯЛ ЧЙЕ ЭЕ РТБЧЙФЕ ФПЧБ ЧЙОБЗЙ ЛПЗБФП РТПЮЕФЕФЕ - ЕЛТБОБ. +>> Сега въведете C-v (Покажи следващия екран), за да се придвижите към +следващия екран. + (Направете го сега, задръжте CONTROL, докато натискате v). + Отсега нататък вие ще правите това винаги, когато прочетете + екрана. -ъБВЕМЕЦЕФЕ, ЮЕ ЙНБ РТЙРПЛТЙЧБОЕ ОБ ДЧБ ТЕДБ, ЛПЗБФП УЕ РТЙДЧЙЦЧБФЕ ПФ -ЕЛТБО Ч ЕЛТБО; ФПЧБ ПУЙЗХТСЧБ ОСЛБЛЧБ РТЙЕНУФЧЕОПУФ, ФБЛБ ЮЕ ДБ НПЦЕФЕ -РП-МЕУОП ДБ РТПДЯМЦЙФЕ У ЮЕФЕОЕФП ОБ ФЕЛУФБ. +Забележете, че има припокриване на два реда, когато се придвижвате от +екран в екран; това осигурява някаква приемственост, така че да можете +по-лесно да продължите с четенето на текста. -рЯТЧПФП ОЕЭП, ЛПЕФП ФТСВЧБ ДБ ЪОБЕФЕ, Е ЛБЛ ДБ УЕ РТЙДЧЙЦЧБФЕ ПФ ЕДОП -НСУФП ОБ ФЕЛУФБ ЛЯН ДТХЗП. чЙЕ ЧЕЮЕ ЪОБЕФЕ ЛБЛ ДБ УЕ РТЙДЧЙЦЧБФЕ -ЕЛТБО ОБРТЕД, У C-v. ъБ ДБ УЕ РТЙДЧЙЦЙФЕ ЕЛТБО ОБЪБД, ЧЯЧЕДЕФЕ M-v -(ЪБДТЯЦФЕ ЛМБЧЙЫБ META Й ОБФЙУОЕФЕ v, ЙМЙ ЧЯЧЕДЕФЕ v БЛП ОСНБФЕ -ЛМБЧЙЫ META, EDIT ЙМЙ ALT). +Първото нещо, което трябва да знаете, е как да се придвижвате от едно +място на текста към друго. Вие вече знаете как да се придвижвате +екран напред, с C-v. За да се придвижите екран назад, въведете M-v +(задръжте клавиша META и натиснете v, или въведете v, ако нямате +клавиш META, EDIT или ALT). ->> пРЙФБКФЕ УЕ ДБ ЧЯЧЕДЕФЕ M-v Й УМЕД ФПЧБ C-v ОСЛПМЛП РЯФЙ. +>> Опитайте се да въведете M-v и след това C-v няколко пъти. -* пвпвэеойе +* ОБОБЩЕНИЕ ----------- -уМЕДЧБЭЙФЕ ЛПНБОДЙ УБ РПМЕЪОЙ РТЙ РЯМОПЕЛТБООП ТБЪЗМЕЦДБОЕ: +Следващите команди са полезни при пълноекранно разглеждане: - C-v рТЙДЧЙЦЧБОЕ ОБРТЕД У ЕДЙО ЕЛТБО - M-v рТЙДЧЙЦЧБОЕ ОБЪБД У ЕДЙО ЕЛТБО - C-l йЪЮЙУФЧБОЕ ОБ ЕЛТБОБ Й РТЕЮЕТФБЧБОЕ ОБ ГЕМЙС ФЕЛУФ, - РТЕНЕУФЧБКЛЙ ФЕЛУФБ ПЛПМП ЛХТУПТБ - Ч УТЕДБФБ ОБ ЕЛТБОБ. - (фПЧБ Е CONTROL-L, ОЕ CONTROL-1.) + C-v Придвижване напред с един екран + M-v Придвижване назад с един екран + C-l Изчистване на екрана и пречертаване на целия текст, + премествайки текста около курсора в средата на екрана. + (Това е CONTROL-L, не CONTROL-1.) ->> оБНЕТЕФЕ ЛХТУПТБ Й УЙ ЪБРПНОЕФЕ ЛБЛЯЧ Е ФЕЛУФЯФ ПЛПМП ОЕЗП. - уМЕД ФПЧБ ЧЯЧЕДЕФЕ C-l. - оБНЕТЕФЕ РБЛ ЛХТУПТБ Й ЧЙЦФЕ, ЮЕ УЯЭЙСФ ФЕЛУФ Е РБЛ ПЛПМП ЛХТУПТБ. +>> Намерете курсора и си запомнете какъв е текстът около него. + След това въведете C-l. + Намерете пак курсора и вижте, че същият текст е пак около курсора. -нПЦЕ УЯЭП ДБ ЙЪРПМЪЧБФЕ ЛМБЧЙЫЙФЕ PageUp Й PageDn ЪБ РТЙДЧЙЦЧБОЕ РП -ЕЛТБОЙ БЛП ЧБЫЙСФ ФЕТНЙОБМ ЗЙ РТЙФЕЦБЧБ, ОП ЧЙЕ НПЦЕФЕ ДБ ТЕДБЛФЙТБФЕ -РП-ЕЖЕЛФЙЧОП БЛП ЙЪРПМЪЧБФЕ C-v Й M-v. +Може също да използвате клавишите PageUp и PageDown за придвижване по +екрани, ако вашият терминал ги притежава, но вие можете да редактирате +по-ефективно, ако използвате C-v и M-v. -* пуопчй об хртбчмеойефп об лхтуптб +* ОСНОВИ НА УПРАВЛЕНИЕТО НА КУРСОРА ----------------------------------- -рТЙДЧЙЦЧБОЕФП ПФ ЕЛТБО ОБ ЕЛТБО Е РПМЕЪОП, ОП ЛБЛ ДБ УЕ РТЙДЧЙЦЙФЕ ДП -ПРТЕДЕМЕОП НСУФП ЧЯФТЕ Ч ФЕЛУФБ ОБ ЕЛТБОБ? +Придвижването от екран на екран е полезно, но как да се придвижите до +определено място вътре в текста на екрана? -йНБ ОСЛПМЛП ОБЮЙОБ ДБ ЗП ОБРТБЧЙФЕ. нПЦЕ ДБ ЙЪРПМЪЧБФЕ ЛМБЧЙЫЙФЕ -УФТЕМЛЙ, ОП Е РП-ЕЖЕЛФЙЧОП ДБ ДЯТЦЙФЕ ТЯГЕФЕ УЙ Ч УФБОДБТФОП РПМПЦЕОЙЕ -Й ДБ ЙЪРПМЪЧБФЕ ЛПНБОДЙФЕ C-p, C-b, C-f Й C-n. фЕЪЙ ЪОБГЙ УБ -ЕЛЧЙЧБМЕОФОЙ ОБ ЮЕФЙТЙФЕ ЛМБЧЙЫЙ УФТЕМЛЙ, ЕФП ФБЛБ: +Има няколко начина да го направите. Може да използвате клавишите +стрелки, но е по-ефективно да държите ръцете си в стандартно положение +и да използвате командите C-p, C-b, C-f и C-n. Тези знаци са +еквивалентни на четирите клавиши стрелки, ето така: - рТЕДЙЫЕО ТЕД (Previous), C-p + Предишен ред (Previous), C-p : : - оБЪБД, C-b .... фЕЛХЭБ РПЪЙГЙС ОБ ЛХТУПТБ .... оБРТЕД, C-f + Назад, C-b .... Текуща позиция на курсора .... Напред, C-f (Backward) : (Forward) : - уМЕДЧБЭ ТЕД (Next), C-n + Следващ ред (Next), C-n ->> рТЙДЧЙЦЕФЕ ЛХТУПТБ ДП ТЕДБ Ч УТЕДБФБ ОБ ФБЪЙ ДЙБЗТБНБ ЙЪРПМЪЧБКЛЙ - C-n Й C-p. уМЕД ФПЧБ ОБФЙУОЕФЕ C-l ЪБ ДБ ЧЙДЙФЕ ГСМБФБ ДЙБЗТБНБ - ГЕОФТЙТБОБ ОБ ЕЛТБОБ. +>> Придвижете курсора до реда в средата на тази диаграма, използвайки + C-n и C-p. След това натиснете C-l, за да видите цялата диаграма, + центрирана на екрана. -эЕ ОБНЕТЙФЕ, ЮЕ ЪБРПНОСОЕФП ОБ ФЕЪЙ ВХЛЧЙ РП ДХНЙФЕ ОБ БОЗМЙКУЛЙ ОБ -ДЕКУФЧЙСФБ, ЛПЙФП ЙЪЧЯТЫЧБФ, Е МЕУОП: P ЪБ Previous (РТЕДЙЫЕО), N ЪБ -Next (УМЕДЧБЭ), B ЪБ Backward (ОБЪБД) Й F ЪБ Forward (ОБРТЕД). чЙЕ ЭЕ -ЙЪРПМЪЧБФЕ ФЕЪЙ ПУОПЧОЙ ЛПНБОДЙ ЪБ РТЙДЧЙЦЧБОЕ ОБ ЛХТУПТБ РТЕЪ ГСМПФП -ЧТЕНЕ. +Ще намерите, че запомнянето на тези букви по думите на английски на +действията, които извършват, е лесно: P за Previous (предишен), N за +Next (следващ), B за Backward (назад) и F за Forward (напред). Вие ще +използвате тези основни команди за придвижване на курсора през цялото +време. ->> оБРТБЧЕФЕ ОСЛПМЛП C-n ЪБ ДБ ДПЧЕДЕФЕ ЛХТУПТБ ДП ФПЪЙ ТЕД. +>> Въведете няколко C-n, за да доведете курсора до този ред. ->> рТЙДЧЙЦЕФЕ УЕ Ч ТЕДБ У ОСЛПМЛП C-f Й УМЕД ФПЧБ У ОСЛПМЛП C-p. - чЙЦФЕ ЛБЛЧП РТБЧЙ C-p, ЛПЗБФП ЛХТУПТЯФ Е Ч УТЕДБФБ ОБ ТЕДБ. +>> Придвижете се в реда с няколко C-f и след това с няколко C-p. + Вижте какво прави C-p, когато курсорът е в средата на реда. -чУЕЛЙ ТЕД ПФ ФЕЛУФ ЪБЧЯТЫЧБ УЯУ ЪОБЛ ЪБ ОПЧ ТЕД, ЛПКФП УМХЦЙ ЪБ -ПФДЕМСОЕФП ОБ ТЕДБ ПФ УМЕДЧБЭЙС ТЕД. рПУМЕДОЙСФ ТЕД ЧЯЧ ЧБЫЙС ЖБКМ -ФТСВЧБ ДБ ЙНБ ЪОБЛ ЪБ ОПЧ ТЕД Ч ЛТБС (ОП еНБЛУ ОЕ ЙЪЙУЛЧБ ФБЛЯЧ, -ЛПЗБФП РТПЮЙФБ ЖБКМБ). +Всеки ред от текст завършва със знак за нов ред, който служи за +отделянето на реда от следващия ред. Последният ред във вашия файл +трябва да има знак за нов ред в края (но Емакс не изисква такъв, +когато прочита файла). ->> пРЙФБКФЕ C-b Ч ОБЮБМПФП ОБ ТЕД. фПЧБ ФТСВЧБ ДБ ЧЙ РТЙДЧЙЦЙ Ч ЛТБС - ОБ РТЕДЙЫОЙС ТЕД. фПЧБ Е ФБЛБ, ЪБЭПФП ЛХТУПТЯФ УЕ РТЙДЧЙЦЧБ ЛЯН - ЪОБЛБ ЪБ ОПЧ ТЕД ОБ РТЕДЙЫОЙС ТЕД. +>> Опитайте C-b в началото на ред. Това трябва да ви придвижи в края + на предишния ред. Това е така, защото курсорът се придвижва към + знака за нов ред на предишния ред. -C-f НПЦЕ ДБ РТЙДЧЙЦЧБ РТЕЪ ЪОБЛ ЪБ ОПЧ ТЕД ФПЮОП ЛБЛФП C-b. +C-f може да придвижва през знак за нов ред точно както C-b. ->> оБРТБЧЕФЕ ОСЛПМЛП C-b РТЙДЧЙЦЧБОЙС, ФБЛБ ЮЕ ДБ ДПВЙЕФЕ ХУЕЭБОЕ ЛЯДЕ - УЕ ОБНЙТБ ЛХТУПТБ. уМЕД ФПЧБ ОСЛПМЛП C-f ЪБ ДБ УЕ ЧЯТОЕФЕ Ч ЛТБС - ОБ ТЕДБ. уМЕД ФПЧБ ПЭЕ ОСЛПМЛП C-f ЪБ ДБ УЕ РТЙДЧЙЦЙФЕ ДП - УМЕДЧБЭЙС ТЕД. +>> Направете няколко C-b придвижвания, така че да добиете усещане къде + се намира курсорът. След това няколко C-f, за да се върнете в края + на реда. След това още няколко C-f, за да се придвижите до + следващия ред. -лПЗБФП УЕ РТЙДЧЙЦЧБФЕ УМЕД ЗПТОЙС ЙМЙ ДПМОЙС ЛТБК ОБ ЕЛТБОБ, ФЕЛУФЯФ -ПФЧЯД ЛТБС УЕ ЙЪНЕУФЧБ ЛЯН ЕЛТБОБ. фПЧБ УЕ ОБТЙЮБ "УЛТПМЙТБОЕ". фП -РПЪЧПМСЧБ ОБ еНБЛУ ДБ РТЙДЧЙЦЧБ ЛХТУПТБ ЛЯН ЪБДБДЕОПФП НСУФП Ч ФЕЛУФБ -ВЕЪ ДБ ЗП ЙЪЛБТЧБ ЙЪЧЯО ЕЛТБОБ. +Когато се придвижвате след горния или долния край на екрана, текстът +отвъд края се измества към екрана. Това се нарича "скролиране". То +позволява на Емакс да придвижва курсора към зададеното място в текста, +без да го изкарва извън екрана. ->> пРЙФБКФЕ УЕ ДБ РТЙДЧЙЦЙФЕ ЛХТУПТБ УМЕД ДПМОЙС ЛТБК ОБ ЕЛТБОБ У C-n - Й ЧЙЦФЕ ЛБЛЧП УЕ УМХЮЧБ. +>> Опитайте се да придвижите курсора след долния край на екрана с C-n + и вижте какво се случва. -бЛП РТЙДЧЙЦЧБОЕФП РП ЪОБГЙ Е ФЧЯТДЕ ВБЧОП, НПЦЕ ДБ РТПВЧБФЕ -РТЙДЧЙЦЧБОЕ РП ДХНЙ. M-f (META-f) РТЙДЧЙЦЧБ ЛХТУПТБ ДХНБ ОБРТЕД, Б -M-b РТЙДЧЙЦЧБ ДХНБ ОБЪБД. +Ако придвижването по знаци е твърде бавно, може да пробвате +придвижване по думи. M-f (META-f) придвижва курсора дума напред, а +M-b придвижва дума назад. ->> чЯЧЕДЕФЕ ОСЛПМЛП M-f Й M-b. +>> Въведете няколко M-f и M-b. -лПЗБФП УФЕ Ч УТЕДБФБ ОБ ДХНБ, M-f РТЙДЧЙЦЧБ Ч ЛТБС ОБ ДХНБФБ. лПЗБФП -УФЕ Ч РТБЪОП НСУФП НЕЦДХ ДХНЙ, M-f РТЙДЧЙЦЧБ Ч ЛТБС ОБ УМЕДЧБЭБФБ -ДХНБ. M-b ТБВПФЙ РП РПДПВЕО ОБЮЙО Ч РТПФЙЧПРПМПЦОБФБ РПУПЛБ. +Когато сте в средата на дума, M-f придвижва в края на думата. Когато +сте в празно място между думи, M-f придвижва в края на следващата +дума. M-b работи по подобен начин в противоположната посока. ->> чЯЧЕДЕФЕ M-f Й M-b ОСЛПМЛП РЯФЙ, ТБЪНЕУЕОЙ У C-f Й C-b, ФБЛБ ЮЕ ДБ - НПЦЕФЕ ДБ ОБВМАДБЧБФЕ ДЕКУФЧЙЕФП ОБ M-f Й M-b Ч ТБЪМЙЮОЙ НЕУФБ - ЧЯФТЕ Й НЕЦДХ ДХНЙФЕ. +>> Въведете M-f и M-b няколко пъти, размесени с C-f и C-b, така че да + можете да наблюдавате действието на M-f и M-b в различни места + вътре и между думите. -ъБВЕМЕЦЕФЕ РТЙМЙЛБФБ НЕЦДХ C-f Й C-b ПФ ЕДОБ УФТБОБ, Й M-f Й M-b ПФ -ДТХЗБ. нОПЗП ЮЕУФП Meta-ЪОБГЙФЕ УБ ЙЪРПМЪЧБОЙ ЪБ ДЕКУФЧЙС ЧЯТИХ -ЕДЙОЙГЙ ДЕЖЙОЙТБОЙ ПФ ЕЪЙЛБ (ДХНЙ, ЙЪТЕЮЕОЙС, БВЪБГЙ), ДПЛБФП -Control-ЪОБГЙФЕ ДЕКУФЧБФ ЧЯТИХ ПУОПЧОЙ ЕДЙОЙГЙ, ЛПЙФП УБ ОЕЪБЧЙУЙНЙ ПФ -ФПЧБ ЛБЛЧП ТЕДБЛФЙТБФЕ (ЪОБГЙ, ТЕДПЧЕ Й ДТХЗЙ). +Забележете приликата между C-f и C-b, от една страна, и M-f и M-b, от +друга. Много често Meta-знаците са използвани за действия върху +единици, дефинирани от езика (думи, изречения, абзаци), докато +Control-знаците действат върху основни единици, които са независими от +това, какво редактирате (знаци, редове и други). -фБЪЙ РТЙМЙЛБ УЕ РТЙМБЗБ ЧЯТИХ ТЕДПЧЕ Й ЙЪТЕЮЕОЙС: C-a Й C-e РТЙДЧЙЦЧБФ -ДП ОБЮБМПФП ЙМЙ ЛТБС ОБ ТЕД, Б M-a Й M-e РТЙДЧЙЦЧБФ ДП ОБЮБМПФП Й ЛТБС -ОБ ЙЪТЕЮЕОЙЕ. +Тази прилика се прилага върху редове и изречения: C-a и C-e придвижват +до началото или края на ред, а M-a и M-e придвижват до началото и края +на изречение. ->> пРЙФБКФЕ ОСЛПМЛП C-a, Б УМЕД ФПЧБ ОСЛПМЛП C-e. - пРЙФБКФЕ ОСЛПМЛП M-a, Б УМЕД ФПЧБ ОСЛПМЛП M-e. +>> Опитайте няколко C-a, а след това няколко C-e. + Опитайте няколко M-a, а след това няколко M-e. -чЙЦФЕ ЛБЛ РПЧФБТСОЕФП ОБ C-a ОЕ РТБЧЙ ОЙЭП, ДПЛБФП РПЧФБТСОЕФП ОБ M-a -РТПДЯМЦБЧБ РТЙДЧЙЦЧБОЕФП У ПЭЕ ЕДОП ЙЪТЕЮЕОЙЕ. чЯРТЕЛЙ ЮЕ ФЕЪЙ -ЛМБЧЙЫОЙ ЛПНВЙОБГЙЙ ОЕ УБ ФПЮОП БОБМПЗЙЮОЙ, ЧУСЛБ ЕДОБ ПФ ФСИ ЙЪЗМЕЦДБ -ЕУФЕУФЧЕОБ. +Вижте как повтарянето на C-a не прави нищо, докато повтарянето на M-a +продължава придвижването с още едно изречение. Въпреки че тези +клавишни комбинации не са точно аналогични, всяка една от тях изглежда +естествена. -рПМПЦЕОЙЕФП ОБ ЛХТУПТБ Ч ФЕЛУФБ УЕ ОБТЙЮБ УЯЭП "ФПЮЛБ". -рЕТЕЖТБЪЙТБОП, ЛХТУПТЯФ РПЛБЪЧБ ОБ ЕЛТБОБ ЛЯДЕ Е ТБЪРПМПЦЕОБ ФПЮЛБФБ Ч -ФЕЛУФБ. +Положението на курсора в текста се нарича също "точка". +Перефразирано, курсорът показва на екрана къде е разположена точката в +текста. -еФП ПВПВЭЕОЙЕ ОБ РТПУФЙФЕ ДЕКУФЧЙС ДЧЙЦЕЭЙ ЛХТУПТБ, ЧЛМАЮЙФЕМОП -РТЙДЧЙЦЧБЭЙФЕ РП ДХНБ Й ЙЪТЕЮЕОЙЕ: +Ето обобщение на простите действия, движещи курсора, включително +придвижващите по дума и изречение: - C-f рТЙДЧЙЦЧБ ОБРТЕД У ЕДЙО ЪОБЛ - C-b рТЙДЧЙЦЧБ ОБЪБД У ЕДЙО ЪОБЛ + C-f Придвижва напред с един знак + C-b Придвижва назад с един знак - M-f рТЙДЧЙЦЧБ ОБРТЕД У ЕДОБ ДХНБ - M-b РТЙДЧЙЦЧБ ОБЪБД У ЕДОБ ДХНБ + M-f Придвижва напред с една дума + M-b придвижва назад с една дума - C-n рТЙДЧЙЦЧБ ДП УМЕДЧБЭЙС ТЕД - C-p рТЙДЧЙЦЧБ ДП РТЕДЙЫОЙС ТЕД + C-n Придвижва до следващия ред + C-p Придвижва до предишния ред - C-a рТЙДЧЙЦЧБ ДП ОБЮБМПФП ОБ ТЕД - C-e рТЙДЧЙЦЧБ ДП ЛТБС ОБ ТЕД + C-a Придвижва до началото на ред + C-e Придвижва до края на ред - M-a рТЙДЧЙЦЧБ ДП ОБЮБМПФП ОБ ЙЪТЕЮЕОЙЕ - M-e рТЙДЧЙЦЧБ ДП ЛТБС ОБ ЙЪТЕЮЕОЙЕ + M-a Придвижва до началото на изречение + M-e Придвижва до края на изречение ->> уЕЗБ ПРЙФБКФЕ ЧУЙЮЛЙ ФЕЪЙ ЛПНБОДЙ ОСЛПМЛП РЯФЙ ЪБ РТБЛФЙЛБ. фЕЪЙ - УБ ОБК-ЮЕУФП ЙЪРПМЪЧБОЙФЕ ЛПНБОДЙ. +>> Сега опитайте всички тези команди няколко пъти за практика. Тези + са най-често използваните команди. -дЧЕ ДТХЗЙ ЧБЦОЙ ЛПНБОДЙ ЪБ ДЧЙЦЕОЙЕ ОБ ЛХТУПТБ УБ M-< (Meta РП-НБМЛП), -ЛПСФП РТЙДЧЙЦЧБ ДП ОБЮБМПФП ОБ ГЕМЙС ФЕЛУФ, Й M-> (Meta РП-ЗПМСНП), -ЛПСФП РТЕНЕУФЧБ ДП ЛТБС ОБ ГЕМЙС ФЕЛУФ. +Две други важни команди за движение на курсора са M-< (Meta по-малко), +която придвижва до началото на целия текст, и M-> (Meta по-голямо), +която премества до края на целия текст. -рТЙ РПЧЕЮЕФП ФЕТНЙОБМЙ, ЪОБЛЯФ "<" Е ПФВЕМСЪБО ОБД ЪБРЕФБСФБ, ФБЛБ ЮЕ -ФТСВЧБ ДБ ЙЪРПМЪЧБФЕ ЛМБЧЙЫБ Shift ЪБ ДБ ЗП ОБРЙЫЕФЕ. оБ ФЕЪЙ -ФЕТНЙОБМЙ ФТСВЧБ ДБ ЙЪРПМЪЧБФЕ Shift ЪБ ДБ ЧЯЧЕДЕФЕ Й M-<; ВЕЪ ЛМБЧЙЫБ -Shift ВЙИФЕ ЧЯЧЕМЙ M-ЪБРЕФБС. +При повечето терминали знакът "<" е отбелязан над запетаята, така че +трябва да използвате клавиша Shift, за да го напишете. На тези +терминали трябва да използвате Shift, за да въведете и M-<; без клавиша +Shift бихте въвели M-запетая. ->> пРЙФБКФЕ M-< УЕЗБ, ЪБ ДБ УЕ РТЙДЧЙЦЙФЕ ДП ОБЮБМПФП ОБ ЧЯЧЕДЕОЙЕФП. - уМЕД ФПЧБ ЙЪРПМЪЧБКФЕ C-v ЛПМЛПФП Е ОХЦОП РЯФЙ, ЪБ ДБ УЕ РТЙДЧЙЦЙФЕ - ДП ФХЛ. +>> Опитайте M-< сега, за да се придвижите до началото на въведението. + След това използвайте C-v колкото е нужно пъти, за да се придвижите + до тук. ->> пРЙФБКФЕ M-> УЕЗБ, ЪБ ДБ УЕ РТЙДЧЙЦЙФЕ ДП ЛТБС ОБ ЧЯЧЕДЕОЙЕФП. - уМЕД ФПЧБ ЙЪРПМЪЧБКФЕ M-v ЛПМЛПФП Е ОХЦОП РЯФЙ, ЪБ ДБ УЕ РТЙДЧЙЦЙФЕ - ДП ФХЛ. +>> Опитайте M-> сега, за да се придвижите до края на въведението. + След това използвайте M-v колкото е нужно пъти, за да се придвижите + до тук. -чЙЕ НПЦЕФЕ УЯЭП ДБ УЕ РТЙДЧЙЦЧБФЕ У ЛМБЧЙЫЙФЕ-УФТЕМЛЙ, БЛП ЧБЫЙСФ -ФЕТНЙОБМ ЙНБ ФБЛЙЧБ. оЙЕ РТЕРПТЯЮЧБНЕ ДБ ОБХЮЙФЕ C-b, C-f, C-n Й C-p -РП ФТЙ РТЙЮЙОЙ. рЯТЧП, ФЕ ТБВПФСФ ОБ ЧУЙЮЛЙ ЧЙДПЧЕ ФЕТНЙОБМЙ. чФПТП, -ЧЕДОЯЦ УМЕД ЛБФП ДПВЙЕФЕ РТБЛФЙЛБ Ч ЙЪРПМЪЧБОЕФП ОБ еНБЛУ, ЭЕ -ПФЛТЙЕФЕ, ЮЕ ЧЯЧЕЦДБОЕФП ОБ ФЕЪЙ Control-ЪОБГЙ Е РП-ВЯТЪП ПФ -ЧЯЧЕЦДБОЕФП ОБ ЛМБЧЙЫЙФЕ УФТЕМЛЙ, ЪБЭПФП ОЕ ФТСВЧБ ДБ РТЕНЕУФЧБФЕ -ТЯЛБФБ УЙ ДБМЕЮ ПФ ПВМБУФФБ ОБ ЛМБЧЙЫЙФЕ У ВХЛЧЙ. фТЕФП, ЧЕДОЯЦ УМЕД -ЛБФП УЙ ПЖПТНЙФЕ ОБЧЙЛ ДБ ЙЪРПМЪЧБФЕ ФЕЪЙ ЛПНБОДЙ У Control ЪОБГЙ, ЧЙЕ -НПЦЕФЕ УЯЭП ФБЛБ МЕУОП ДБ ОБХЮЙФЕ РП-ОБРТЕДОБМЙФЕ ЛПНБОДЙ ЪБ ДЧЙЦЕОЙЕ -ОБ ЛХТУПТБ. +Вие можете също да се придвижвате с клавишите-стрелки, ако вашият +терминал има такива. Ние препоръчваме да научите C-b, C-f, C-n и C-p +по три причини. Първо, те работят на всички видове терминали. Второ, +веднъж след като добиете практика в използването на Емакс, ще +откриете, че въвеждането на тези Control-знаци е по-бързо от +въвеждането на клавишите стрелки, защото не трябва да премествате +ръката си далеч от областта на клавишите с букви. Трето, веднъж след +като си оформите навик да използвате тези команди с Control знаци, вие +можете също така лесно да научите по-напредналите команди за движение +на курсора. -рПЧЕЮЕФП еНБЛУ ЛПНБОДЙ РТЙЕНБФ ЮЙУМПЧ БТЗХНЕОФ; ЪБ РПЧЕЮЕФП ПФ ФСИ ФПК -УМХЦЙ ЛБФП ВТПСЮ ОБ РПЧФПТЕОЙС. оБЮЙОЯФ, РП ЛПКФП ДБЧБФЕ ЮЙУМПЧ -ВТПСЮ, Е У ЧЯЧЕЦДБОЕ ОБ C-u, РПУМЕДЧБОП ПФ ЧЯЧЕЦДБОЕ ОБ ГЙЖТЙФЕ, Й -ЧУЙЮЛП ФПЧБ РТЕДЙ ЧЯЧЕЦДБОЕ ОБ УБНБФБ ЛПНБОДБ. бЛП ЙНБФЕ ЛМБЧЙЫ META -(ЙМЙ EDIT ЙМЙ ALT), ЙНБ ДТХЗ, БМФЕТОБФЙЧЕО ОБЮЙО ДБ ЧЯЧЕДЕФЕ ЮЙУМПЧ -БТЗХНЕОФ: ЧЯЧЕДЕФЕ ГЙЖТЙФЕ ДПЛБФП ЪБДЯТЦБФЕ ЛМБЧЙЫБ META. оЙЕ -РТЕРПТЯЮЧБНЕ ДБ ОБХЮЙФЕ ОБЮЙОБ У C-u, ЪБЭПФП ФПК ТБВПФЙ ОБ ЛПКФП Й ДБ -Е ФЕТНЙОБМ. юЙУМПЧЙСФ БТЗХНЕОФ УЕ ОБТЙЮБ УЯЭП "РТЕЖЙЛУЕО БТЗХНЕОФ", -ЪБЭПФП ЗП ЧЯЧЕЦДБФЕ РТЕДЙ ЛПНБОДБФБ, ЪБ ЛПСФП Е РТЕДОБЪОБЮЕО. +Повечето Емакс команди приемат числов аргумент; за повечето от тях той +служи като брояч на повторения. Начинът, по който давате числов +брояч, е с въвеждане на C-u, последвано от въвеждане на цифрите, и +всичко това преди въвеждане на самата команда. Ако имате клавиш META +(или EDIT или ALT), има друг, алтернативен начин да въведете числов +аргумент: въведете цифрите, докато задържате клавиша META. Ние +препоръчваме да научите начина с C-u, защото той работи на който и да +е терминал. Числовият аргумент се нарича също "префиксен аргумент", +защото го въвеждате преди командата, за която е предназначен. -оБРТЙНЕТ, C-u 8 C-f РТЙДЧЙЦЧБ ПУЕН ЪОБЛБ ОБРТЕД. +Например, C-u 8 C-f придвижва осем знака напред. ->> пРЙФБКФЕ ЙЪРПМЪЧБОЕФП ОБ C-n ЙМЙ C-p У ЮЙУМПЧ БТЗХНЕОФ, ЪБ ДБ - РТЙДЧЙЦЙФЕ ЛХТУПТБ ДП ТЕД ВМЙЪЯЛ ДП ФПЪЙ УБНП У ЕДОБ ЛПНБОДБ. +>> Опитайте използването на C-n или C-p с числов аргумент, за да + придвижите курсора до ред, близък до този, само с една команда. -рПЧЕЮЕФП ЛПНБОДЙ ЙЪРПМЪЧБФ ЮЙУМПЧЙС БТЗХНЕОФ ЛБФП ВТПСЮ ОБ -РПЧФПТЕОЙСФБ, ОП ОСЛПЙ ЗП ЙЪРПМЪЧБФ ЪБ ДТХЗЙ ГЕМЙ. оСЛПМЛП ЛПНБОДЙ -(ОП ОЙЛПС ПФ ФЕЪЙ, ЛПЙФП УФЕ ОБХЮЙМЙ ДПУЕЗБ) ЗП ЙЪРПМЪЧБФ ЛБФП ЖМБЗ -- -РТЙУЯУФЧЙЕФП ОБ ЮЙУМПЧ БТЗХНЕОФ, ОЕЪБЧЙУЙНП ПФ УФПКОПУФБ НХ, ЛБТБ -ЛПНБОДБФБ ДБ ЧЯТЫЙ ОЕЭП ТБЪМЙЮОП. +Повечето команди използват числовия аргумент като брояч на +повторенията, но някои го използват за други цели. Няколко команди +(но никоя от тези, които сте научили досега) го използват като флаг -- +присъствието на числов аргумент, независимо от стойноста му, кара +командата да върши нещо различно. -C-v Й M-v УБ ДТХЗ ЧЙД ЙЪЛМАЮЕОЙЕ. лПЗБФП ЙН Е ДБДЕО БТЗХНЕОФ, ФЕ -УЛТПМЙТБФ ЕЛТБОБ ОБЗПТЕ ЙМЙ ОБДПМХ УЯУ ЪБДБДЕОЙС ВТПК ТЕДБ, ЧНЕУФП У -ЕЛТБОЙ. оБРТЙНЕТ, C-u 8 C-v УЛТПМЙТБ ЕЛТБОБ У 8 ТЕДБ. +C-v и M-v са друг вид изключение. Когато им е даден аргумент, те +скролират екрана нагоре или надолу със зададения брой редове, вместо с +екрани. Например, C-u 8 C-v скролира екрана с 8 реда. ->> уЕЗБ ПРЙФБКФЕ C-u 8 C-v. +>> Сега опитайте C-u 8 C-v. -фПЧБ ВЙ ФТСВЧБМП ДБ УЛТПМЙТБ ЕЛТБОБ У 8 ТЕДБ. бЛП ЙУЛБФЕ ДБ -УЛТПМЙТБФЕ ПФОПЧП ОБДПМХ, НПЦЕ ДБ ДБДЕФЕ БТЗХНЕОФ ОБ M-v. +Това би трябвало да скролира екрана с 8 реда. Ако искате да +скролирате отново надолу, може да дадете аргумент на M-v. -бЛП ЙЪРПМЪЧБФЕ ЗТБЖЙЮЕО ЙОФЕТЖЕКУ, ЛБФП X11 ЙМЙ MS-Windows, ВЙ -ФТСВЧБМП ДБ ЙНБ ФЯОЛБ РТБЧПЯЗЯМОБ ПВМБУФ ОБТЕЮЕОБ РМЯЪЗБЮ (scroll bar) -Ч МСЧБФБ УФТБОБ ОБ РТПЪПТЕГБ ОБ еНБЛУ. чЙЕ НПЦЕФЕ ДБ УЛТПМЙТБФЕ -ФЕЛУФБ ЭТБЛБКЛЙ У НЙЫЛБФБ Ч РМЯЪЗБЮБ. +Ако използвате графичен интерфейс, като X11 или MS-Windows, би +трябвало да има тънка правоъгълна област, наречена плъзгач (scroll +bar), в лявата страна на прозореца на Емакс. Вие можете да скролирате +текста, щракайки с мишката в плъзгача. ->> пРЙФБКФЕ ДБ ОБФЙУОЕФЕ УТЕДОЙС ВХФПО ОБ ЧЯТИБ ОБ ПУЧЕФЕОБФБ ПВМБУФ - ЧЯФТЕ Ч РМЯЪЗБЮБ. фПЧБ ВЙ ФТСВЧБМП ДБ УЛТПМЙТБ ФЕЛУФБ ЛЯН - РПМПЦЕОЙЕ, ПРТЕДЕМЕОП ПФ ФПЧБ ЛПМЛП ЧЙУПЛП ЙМЙ ОЙУЛП УФЕ ЭТБЛОБМЙ. +>> Опитайте да натиснете средния бутон на върха на осветената област + вътре в плъзгача. Това би трябвало да скролира текста към + положение, определено от това колко високо или ниско сте щракнали. ->> пРЙФБКФЕ УЕ ДБ ДЧЙЦЙФЕ НЙЫЛБФБ ОБЗПТЕ Й ОБДПМХ, ДПЛБФП УФЕ - ЪБДЯТЦБМЙ ДЕУОЙС ВХФПО ОБФЙУОБФ. эЕ ЧЙДЙФЕ, ЮЕ ФЕЛУФЯФ УЕ УЛТПМЙТБ - ОБЗПТЕ Й ОБДПМХ ЛБФП ДЧЙЦЙФЕ НЙЫЛБФБ. +>> Опитайте се да движите мишката нагоре и надолу, докато сте + задържали десния бутон натиснат. Ще видите, че текстът се скролира + нагоре и надолу, като движите мишката. -* лпзбфп енблу е вмплйтбм +* КОГАТО ЕМАКС Е БЛОКИРАЛ ------------------------- -бЛП еНБЛУ УРТЕ ДБ ПФЗПЧБТС ОБ ЧБЫЙФЕ ЛПНБОДЙ, ЧЙЕ НПЦЕФЕ ДБ ЗП УРТЕФЕ -ВЕЪПРБУОП ЛБФП ЧЯЧЕДЕФЕ C-g. нПЦЕ ДБ ЙЪРПМЪЧБФЕ C-g ЪБ ДБ УРТЕФЕ -ЛПНБОДБ, ЛПСФП УЕ ЙЪРЯМОСЧБ ФЧЯТДЕ ДЯМЗП. +Ако Емакс спре да отговаря на вашите команди, вие можете да го спрете +безопасно, като въведете C-g. Може да използвате C-g, за да спрете +команда, която се изпълнява твърде дълго. -уЯЭП НПЦЕФЕ ДБ ЙЪРПМЪЧБФЕ C-g ЪБ ДБ ПФНЕОЙФЕ ЮЙУМПЧ БТЗХНЕОФ ЙМЙ -ОБЮБМПФП ОБ ЛПНБОДБ, ЛПСФП ОЕ ЙУЛБФЕ ДБ ЪБЧЯТЫЙФЕ. +Също можете да използвате C-g, за да отмените числов аргумент или +началото на команда, която не искате да завършите. ->> чЯЧЕДЕФЕ C-u 100 ЪБ ДБ ОБРТБЧЙФЕ ЮЙУМПЧ БТЗХНЕОФ 100, Й ЧЯЧЕДЕФЕ - C-g. уЕЗБ ЧЯЧЕДЕФЕ C-f. фТСВЧБ ДБ УЕ РТЙДЧЙЦЙФЕ У ФПЮОП ЕДЙО - ЪОБЛ, ЪБЭПФП ЧЙЕ РТЕЛТБФЙИФЕ БТЗХНЕОФЯФ У C-g. +>> Въведете C-u 100, за да направите числов аргумент 100, и въведете + C-g. Сега въведете C-f. Трябва да се придвижите с точно един + знак, защото вие прекратихте аргументът с C-g. -бЛП УФЕ ЧЯЧЕМЙ РП РПЗТЕЫЛБ, НПЦЕФЕ ДБ УЕ ЙЪНЯЛОЕФЕ У C-g. +Ако сте въвели по погрешка, можете да се измъкнете с C-g. -* ъбвтбоеой лпнбодй +* ЗАБРАНЕНИ КОМАНДИ ------------------- -оСЛПЙ ЛПНБОДЙ ОБ еНБЛУ УБ "ЪБВТБОЕОЙ", ФБЛБ ЮЕ ОБЮЙОБЕЭЙФЕ РПФТЕВЙФЕМЙ -ДБ ОЕ НПЗБФ ДБ ЗЙ ХРПФТЕВСФ РП РПЗТЕЫЛБ. +Някои команди на Емакс са "забранени", така че начинаещите потребители +да не могат да ги употребят по погрешка. -бЛП ЧЯЧЕДЕФЕ ОСЛПС ПФ ЪБВТБОЕОЙФЕ ЛПНБОДЙ, еНБЛУ ЙЪЧЕЦДБ УЯПВЭЕОЙЕ, -ЛБЪЧБКЛЙ ЛБЛЧБ Е ВЙМБ ЛПНБОДБФБ Й РЙФБКЛЙ ЧЙ ДБМЙ ЙУЛБФЕ ДБ РТПДЯМЦЙФЕ -ОБРТЕД Й ДБ ЙЪРЯМОЙФЕ ЛПНБОДБФБ. +Ако въведете някоя от забранените команди, Емакс извежда съобщение, +казвайки каква е била командата и питайки ви дали искате да продължите +напред и да изпълните командата. -бЛП ОБЙУФЙОБ ЙУЛБФЕ ДБ ЙЪРТПВЧБФЕ ЛПНБОДБФБ, ЧЯЧЕДЕФЕ ЛМБЧЙЫБ ЙОФЕТЧБМ -Ч ПФЗПЧПТ ОБ ЧЯРТПУБ. пВЙЛОПЧЕОП БЛП ОЕ ЙУЛБФЕ ДБ ЙЪРЯМОЙФЕ -ЪБВТБОЕОБФБ ЛПНБОДБ, ПФЗПЧБТСФЕ ОБ ЧЯРТПУБ У "n". +Ако наистина искате да изпробвате командата, въведете клавиша интервал +в отговор на въпроса. Обикновено ако не искате да изпълните +забранената команда, отговаряте на въпроса с "n". ->> чЯЧЕДЕФЕ C-x C-l (ЛПСФП Е ЪБВТБОЕОБ ЛПНБОДБ), Й УМЕД ФПЧБ ЧЯЧЕДЕФЕ - "n" Ч ПФЗПЧПТ ОБ ЧЯРТПУБ. +>> Въведете C-x C-l (която е забранена команда), и след това въведете + "n" в отговор на въпроса. -* ртпъптгй +* ПРОЗОРЦИ ---------- -еНБЛУ НПЦЕ ДБ ХРТБЧМСЧБ ОСЛПМЛП РТПЪПТЕГБ, ЧУЕЛЙ ЙЪЧЕЦДБКЛЙ УЧПК -УПВУФЧЕО ФЕЛУФ. оЙЕ ЭЕ ПВСУОЙН РП-ЛЯУОП ЛБЛ ДБ ЙЪРПМЪЧБФЕ ОСЛПМЛП -РТПЪПТЕГБ. фПЮОП УЕЗБ ОЙЕ ЙУЛБНЕ ДБ ПВСУОЙН ЛБЛ ДБ УЕ ПФЯТЧЕФЕ ПФ -ДПРЯМОЙФЕМОЙ РТПЪПТГЙ Й ДБ УЕ ЧЯТОЕФЕ ЛЯН ПУОПЧОПФП ТЕДБЛФЙТБОЕ У ЕДЙО -РТПЪПТЕГ. рТПУФП Е: +Емакс може да управлява няколко прозореца, всеки извеждайки свой +собствен текст. Ние ще обясним по-късно как да използвате няколко +прозореца. Точно сега ние искаме да обясним как да се отървете от +допълнителни прозорци и да се върнете към основното редактиране с един +прозорец. Просто е: - C-x 1 еДЙО РТПЪПТЕГ (Ф.Е. РТЕНБИОЙ ЧУЙЮЛЙ ДТХЗЙ РТПЪПТГЙ). + C-x 1 Един прозорец (т.е. премахни всички други прозорци). -фПЧБ Е CONTROL-x РПУМЕДЧБОП ПФ ГЙЖТБФБ 1. C-x 1 ТБЪЫЙТСЧБ РТПЪПТЕГБ -УЯДЯТЦБЭ ЛХТУПТБ, ЪБ ДБ НПЦЕ ДБ ЪБРЯМОЙ ГЕМЙС ЕЛТБО. фС РТЕНБИЧБ -ЧУЙЮЛЙ ДТХЗЙ РТПЪПТГЙ. +Това е CONTROL-x, последван от цифрата 1. C-x 1 разширява прозореца, +съдържащ курсора, за да може да запълни целия екран. Тя премахва +всички други прозорци. ->> рТЙДЧЙЦЕФЕ ЛХТУПТБ ДП ФПЪЙ ТЕД Й ЧЯЧЕДЕФЕ C-u 0 C-l. ->> чЯЧЕДЕФЕ C-h k C-f. - чЙЦФЕ ЛБЛ ФПЪЙ РТПЪПТЕГ УЕ УЧЙЧБ, ДПЛБФП ДТХЗ УЕ РПСЧСЧБ ЪБ ДБ - ЙЪЧЕДЕ ДПЛХНЕОФБГЙС ОБ ЛПНБОДБФБ C-f. +>> Придвижете курсора до този ред и въведете C-u 0 C-l. +>> Въведете C-h k C-f. + Вижте как този прозорец се свива, докато друг се появява, за да + изведе документацията на командата C-f. ->> чЯЧЕДЕФЕ C-x 1 Й ЧЙЦФЕ ЛБЛ РТПЪПТЕГБ У ДПЛХНЕОФБГЙСФБ ЙЪЮЕЪЧБ. +>> Въведете C-x 1 и вижте как прозорецът с документацията изчезва. -фБЪЙ ЛПНБОДБ ОЕ Е ЛБФП ДТХЗЙФЕ ЛПНБОДЙ, ЛПЙФП УФЕ ОБХЮЙМЙ, Ч ФПЧБ -ПФОПЫЕОЙЕ, ЮЕ УЕ УЯУФПЙ ПФ ДЧБ ЪОБЛБ. ъБРПЮЧБ УЯУ ЪОБЛБ C-x. йНБ -ГСМБ ТЕДЙГБ ПФ ЛПНБОДЙ, ЛПЙФП ЪБРПЮЧБФ У C-x; НОПЗП ПФ ФСИ ЙНБФ ОЕЭП -ПВЭП У РТПЪПТГЙ, ЖБКМПЧЕ, ВХЖЕТЙ Й УЧЯТЪБОЙФЕ У ФСИ ОЕЭБ. фЕЪЙ -ЛПНБОДЙ УБ ПФ ДЧБ, ФТЙ ЙМЙ ЮЕФЙТЙ ЪОБЛБ. +Тази команда не е като другите команди, които сте научили, в това +отношение, че се състои от два знака. Започва със знака C-x. Има +цяла редица от команди, които започват с C-x; много от тях имат нещо +общо с прозорци, файлове, буфери и свързаните с тях неща. Тези +команди са от два, три или четири знака. -* чнялчбое й йъфтйчбое +* ВМЪКВАНЕ И ИЗТРИВАНЕ ---------------------- -бЛП ЙУЛБФЕ ДБ ЧНЯЛОЕФЕ ФЕЛУФ, РТПУФП ЗП ЧЯЧЕДЕФЕ. ъОБГЙФЕ, ЛПЙФП -НПЗБФ ДБ УЕ ЧЙЦДБФ, ЛБФП б, 7, * Й Ф.О., УЕ ЧЯЪРТЙЕНБФ ПФ еНБЛУ ЛБФП -ФЕЛУФ Й УЕ ЧНЯЛЧБФ ЧЕДОБЗБ. чЯЧЕДЕФЕ (ЛМБЧЙЫЯФ ЪБ ЧТЯЭБОЕ Ч -ОБЮБМПФП ОБ ТЕДБ) ЪБ ДБ ЧНЯЛОЕФЕ ЪОБЛ ЪБ ОПЧ ТЕД. +Ако искате да вмъкнете текст, просто го въведете. Знаците, които +могат да се виждат, като А, 7, * и т.н., се възприемат от Емакс като +текст и се вмъкват веднага. Въведете (клавишът за връщане в +началото на реда), за да вмъкнете знак за нов ред. -нПЦЕ ДБ ЙЪФТЙЕФЕ РПУМЕДОЙС ЪОБЛ, ЛПКФП УФЕ ЧЯЧЕМЙ, У ЧЯЧЕЦДБОЕ ОБ -. Е ЛМБЧЙЫ ПФ ЛМБЧЙБФХТБФБ -- УЯЭЙСФ, ЛПКФП -ПВЙЛОПЧЕОП ЙЪРПМЪЧБФЕ ЙЪЧЯО еНБЛУ ЪБ ДБ ЙЪФТЙЕФЕ РПУМЕДОЙС ЧЯЧЕДЕО ПФ -ЧБУ ЪОБЛ. пВЙЛОПЧЕОП Е ЗПМСН ЛМБЧЙЫ ОБ ОСЛПМЛП ТЕДБ ТБЪУФПСОЙЕ ПФ -ЛМБЧЙЫБ , Й ПВЙЛОПЧЕОП Е ПФВЕМСЪБО У "Delete", "Del" ЙМЙ +Може да изтриете последния знак, който сте въвели, с въвеждане на +. е клавиш от клавиатурата -- същият, който +обикновено използвате извън Емакс, за да изтриете последния въведен от +вас знак. Обикновено е голям клавиш, на няколко реда разстояние от +клавиша , и обикновено е отбелязан с "Delete", "Del" или "Backspace". -бЛП ЗПМЕНЙСФ ЛМБЧЙЫ ФБН Е У ЕФЙЛЕФ "Backspace", ФПЗБЧБ ФПК Е ФПЪЙ, -ЛПКФП ЭЕ ЙЪРПМЪЧБФЕ ЪБ . нПЦЕ ДБ ЙНБ ПЭЕ ЕДЙО ЛМБЧЙЫ У -ЕФЙЛЕФ "Delete" ОСЛЯДЕ ДТХЗБДЕ, ОП ФПК ОЕ Е . +Ако големият клавиш там е с етикет "Backspace", тогава той е този, +който ще използвате за . Може да има още един клавиш с +етикет "Delete" някъде другаде, но той не е . -рП-ПВЭП ЛБЪБОП, ЙЪФТЙЧБ ЪОБЛБ ФПЮОП РТЕДЙ ФЕЛХЭПФП НСУФП ОБ -ЛХТУПТБ. +По-общо казано, изтрива знака точно преди текущото място на +курсора. ->> оБРТБЧЕФЕ ФПЧБ УЕЗБ -- ОБРЙЫЕФЕ ОСЛПМЛП ЪОБЛБ, РПУМЕ ЗЙ ЙЪФТЙКФЕ У - ЧЯЧЕЦДБОЕ ОБ ОСЛПМЛП РЯФЙ. оЕ УЕ ВЕЪРПЛПКФЕ, ЮЕ ФПЪЙ - ЖБКМ ЭЕ ВЯДЕ РТПНЕОЕО; ЧЙЕ ОСНБ ДБ РТПНЕОЙФЕ РЯТЧПОБЮБМОПФП - ЧЯЧЕДЕОЙЕ. фПЧБ Е ЧБЫЕ МЙЮОП ЛПРЙЕ. +>> Направете това сега -- напишете няколко знака, после ги изтрийте с + въвеждане на няколко пъти. Не се безпокойте, че този + файл ще бъде променен; вие няма да промените първоначалното + въведение. Това е ваше лично копие. -лПЗБФП ТЕД ПФ ФЕЛУФБ УФБОЕ ФЧЯТДЕ ДЯМЯЗ ЪБ ДБ УЕ УЯВЕТЕ Ч ТЕД ПФ -ЕЛТБОБ, ТЕДЯФ ПФ ФЕЛУФБ УЕ "РТПДЯМЦБЧБ" ОБ УМЕДЧБЭЙС ТЕД. пВТБФОБ -ОБЛМПОЕОБ ЮЕТФБ ("\") (ЙМЙ, БЛП ЙЪРПМЪЧБФЕ ЗТБЖЙЮЕО ЙОФЕТЖЕКУ, НБМЛБ -ЙЪЛТЙЧЕОБ УФТЕМЛБ) Ч ДСУОБФБ ЗТБОЙГБ ПФВЕМСЪЧБ ТЕД, ЛПКФП Е ВЙМ -РТПДЯМЦЕО. +Когато ред от текста стане твърде дълъг, за да се събере в ред от +екрана, редът от текста се "продължава" на следващия ред. Обратна +наклонена черта ("\") (или, ако използвате графичен интерфейс, малка +изкривена стрелка) в дясната граница отбелязва ред, който е бил +продължен. ->> чЯЧЕДЕФЕ ФЕЛУФ ДПЛБФП УФЙЗОЕФЕ ДСУОБФБ ЗТБОЙГБ, Й РТПДЯМЦЕФЕ У - ЧНЯЛЧБОЕФП. эЕ ЧЙДЙФЕ РТПДЯМЦЕОЙЕФП ДБ ТЕДБ ДБ УЕ РПЛБЪЧБ. +>> Въведете текст, докато стигнете дясната граница, и продължете с + вмъкването. Ще видите продължението на реда да се показва. ->> йЪРПМЪЧБКФЕ ОСЛПМЛП ЪБ ДБ ЙЪФТЙЕФЕ ФЕЛУФБ ДПЛБФП ТЕДЯФ УЕ - ЧНЕУФЙ Ч ЕДЙО ЕЛТБОЕО ТЕД. рТПДЯМЦЕОЙЕФП ОБ ТЕДБ ЙЪЮЕЪЧБ. +>> Използвайте няколко , за да изтриете текста, докато редът + се вмести в един екранен ред. Продължението на реда изчезва. -нПЦЕ ДБ ЙЪФТЙЕФЕ ЪОБЛБ ЪБ ОПЧ ТЕД ФПЮОП ЛБЛФП ЧУЕЛЙ ДТХЗ ЪОБЛ. -йЪФТЙЧБОЕФП ОБ ЪОБЛБ ЪБ ОПЧ ТЕД НЕЦДХ ДЧБ ТЕДБ ЗЙ УМЙЧБ Ч ЕДЙО ТЕД. -бЛП РПМХЮЕОЙСФ ЛПНВЙОЙТБО ТЕД Е ФЧЯТДЕ ДЯМЯЗ, ЪБ ДБ УЕ ЧНЕУФЙ Ч -ЫЙТЙОБФБ ОБ ЕЛТБОБ, ФПК ЭЕ ВЯДЕ РПЛБЪБО ЛБФП РТПДЯМЦЕО ТЕД. +Може да изтриете знака за нов ред точно както всеки друг знак. +Изтриването на знака за нов ред между два реда ги слива в един ред. +Ако полученият комбиниран ред е твърде дълъг, за да се вмести в +ширината на екрана, той ще бъде показан като продължен ред. ->> рТЙДЧЙЦЕФЕ ЛХТУПТБ Ч ОБЮБМПФП ОБ ТЕД Й ЧЯЧЕДЕФЕ . фПЧБ ЭЕ - УМЕЕ ФПЪЙ ТЕД У РТЕДЙЫОЙС. +>> Придвижете курсора в началото на ред и въведете . Това ще + слее този ред с предишния. ->> чЯЧЕДЕФЕ ЪБ ДБ ЧНЯЛОЕФЕ ОБОПЧП ЪОБЛБ ЪБ ОПЧ ТЕД, ЛПКФП - ЙЪФТЙИФЕ. +>> Въведете , за да вмъкнете наново знака за нов ред, който + изтрихте. -ъБРПНОЕФЕ, ЮЕ ОБ РПЧЕЮЕФП ЛПНБОДЙ ОБ еНБЛУ НПЦЕ ДБ ВЯДЕ ЪБДБДЕО ВТПСЮ -ОБ РПЧФПТЕОЙСФБ; ФПЧБ ЧЛМАЮЧБ ЧНЯЛЧБОЕФП ОБ ФЕЛУФПЧЙ ЪОБГЙ. -рПЧФБТСОЕФП ОБ ФЕЛУФПЧ ЪОБЛ ЗП ЧНЯЛЧБ ОСЛПМЛП РЯФЙ. +Запомнете, че на повечето команди на Емакс може да бъде зададен брояч +на повторенията; това включва вмъкването на текстови знаци. +Повтарянето на текстов знак го вмъква няколко пъти. ->> пРЙФБКФЕ ФПЧБ УЕЗБ -- ЧЯЧЕДЕФЕ C-u 8 * ЪБ ДБ ЧНЯЛОЕФЕ ********. +>> Опитайте това сега -- въведете C-u 8 *, за да вмъкнете ********. -уЕЗБ ЧЙЕ УФЕ ОБХЮЙМЙ ОБК-ПУОПЧОЙФЕ ОБЮЙОЙ ЪБ ЧЯЧЕЦДБОЕ ОБ ОЕЭП Ч еНБЛУ -Й РПРТБЧСОЕФП ОБ ЗТЕЫЛЙ. нПЦЕФЕ УЯЭП ФБЛБ ДБ ЙЪФТЙЧБФЕ ДХНЙ ЙМЙ -ТЕДПЧЕ. еФП ПВПВЭЕОЙЕ ОБ ЙЪФТЙЧБЭЙФЕ ДЕКУФЧЙС: +Сега вие сте научили най-основните начини за въвеждане на нещо в Емакс +и поправяне на грешки. Можете също така да изтривате думи или редове. +Ето обобщение на изтриващите действия: - ЙЪФТЙЧБОЕ ОБ ЪОБЛБ ФПЮОП РТЕДЙ ЛХТУПТБ - C-d ЙЪФТЙЧБОЕ ОБ ЪОБЛБ ФПЮОП УМЕД ЛХТУПТБ + изтриване на знака точно преди курсора + C-d изтриване на знака точно след курсора - M- ЙЪФТЙЧБОЕ ОБ ДХНБФБ ОЕРПУТЕДУФЧЕОП РТЕДЙ ЛХТУПТБ - M-d ЙЪФТЙЧБОЕ ОБ ДХНБФБ УМЕД ЛХТУПТБ + M- изтриване на думата непосредствено преди курсора + M-d изтриване на думата след курсора - C-k ЙЪФТЙЧБОЕ ПФ НСУФПФП ОБ ЛХТУПТБ ДП ЛТБС ОБ ТЕДБ - M-k ЙЪФТЙЧБОЕ ДП ЛТБС ОБ ФЕЛХЭПФП ЙЪТЕЮЕОЙЕ + C-k изтриване от мястото на курсора до края на реда + M-k изтриване до края на текущото изречение -ъБВЕМЕЦЕФЕ, ЮЕ Й C-d УТБЧОЕОЙ У M- Й M-d ТБЪЫЙТСЧБФ -РПДПВЙЕФП ЪБРПЮОБФП ПФ C-f Й M-f (ДПВТЕ, ОЕ Е ОБЙУФЙОБ -ЛПОФТПМЙТБЭ ЪОБЛ, ОП ОЕЛБ ОЕ УЕ ВЕЪРПЛПЙН ЪБ ФПЧБ). C-k Й M-k УБ -РПДПВОЙ ОБ C-e Й M-e Ч УНЙУЯМ, ЮЕ ЕДОЙФЕ УБ ЪБ ТЕДПЧЕ, Б ДТХЗЙФЕ ЪБ -ЙЪТЕЮЕОЙС. +Забележете, че и C-d, сравнени с M- и M-d, +разширяват подобието, започнато от C-f и M-f (добре, не е +наистина контролиращ знак, но нека не се безпокоим за това). C-k и +M-k са подобни на C-e и M-e в смисъл, че едните са за редове, а +другите -- за изречения. -нПЦЕФЕ УЯЭП ДБ РТЕНБИОЕФЕ ЧУСЛБ ЮБУФ ПФ ВХЖЕТБ У ЕДЙО ХОЙЧЕТУБМЕО -ОБЮЙО. рТЙДЧЙЦЕФЕ УЕ ДП ЕДЙОЙС ЛТБК ОБ ЮБУФФБ Й ЧЯЧЕДЕФЕ C-@ ЙМЙ -C-ЙОФЕТЧБМ (ЛПЕФП Й ДБ Е ПФ ДЧЕФЕ). рТЙДЧЙЦЕФЕ УЕ ДП ДТХЗЙС ЛТБК ОБ -ЮБУФФБ Й ЧЯЧЕДЕФЕ C-w. фПЧБ ЭЕ РТЕНБИОЕ ГЕМЙС ФЕЛУФ НЕЦДХ ФЕЪЙ ДЧБ -ЛТБС. +Можете също да премахнете всяка част от буфера с един универсален +начин. Придвижете се до единия край на частта и въведете C-@ или +C-интервал (което и да е от двете). Придвижете се до другия край на +частта и въведете C-w. Това ще изреже целия текст между тези два +края. ->> рТЙДЧЙЦЕФЕ ЛХТУПТБ ДП ЪОБЛБ н Ч ОБЮБМПФП ОБ РТЕДЙЫОЙС БВЪБГ. ->> чЯЧЕДЕФЕ C-ЙОФЕТЧБМ. еНБЛУ ФТСВЧБ ДБ ЙЪЧЕДЕ УЯПВЭЕОЙЕ "Mark set" Ч - ДПМОЙС ЛТБК ОБ ЕЛТБОБ. ->> рТЙДЧЙЦЕФЕ ЛХТУПТБ ДП ВХЛЧБФБ Т Ч "ЛТБК", ОБ ЧФПТЙС ТЕД ПФ БВЪБГБ. ->> чЯЧЕДЕФЕ C-w. фПЧБ ЭЕ РТЕНБИОЕ ФЕЛУФБ ЪБРПЮЧБЭ ПФ н Й ЪБЧЯТЫЧБЭ - ФПЮОП РТЕДЙ Т. +>> Придвижете курсора до знака "М" в началото на предишния абзац. +>> Въведете C-интервал. Емакс трябва да изведе съобщение "Mark set" в + долния край на екрана. +>> Придвижете курсора до буквата "р" в "край" на втория ред от абзаца. +>> Въведете C-w. Това ще изреже текста, започващ от "М" и завършващ + точно преди "р". -тБЪМЙЛБФБ НЕЦДХ "РТЕНБИЧБОЕ" (killing) Й "ЙЪФТЙЧБОЕ" (deleting) Е, ЮЕ -"РТЕНБИОБФЙСФ" ФЕЛУФ НПЦЕ ДБ ЧНЯЛОБФ ОБОПЧП, ДПЛБФП "ЙЪФТЙФЙФЕ" ОЕЭБ -ОЕ НПЗБФ ДБ УЕ ЧНЯЛОБФ ОБОПЧП. чНЯЛЧБОЕФП ОБОПЧП ОБ РТЕНБИОБФ ФЕЛУФ -УЕ ОБТЙЮБ "ЙЪЧБЦДБОЕ" (yanking). пВЭП ЛБЪБОП, ЛПНБОДЙФЕ, ЛПЙФП -ПФУФТБОСЧБФ НОПЗП ФЕЛУФ, ЗП РТЕНБИЧБФ (ФБЛБ ЮЕ ФПК ДБ НПЦЕ ДБ ВЯДЕ -ЙЪЧБДЕО), ДПЛБФП ЛПНБОДЙФЕ, ЛПЙФП ПФУФТБОСЧБФ УБНП ЕДЙО ЪОБЛ ЙМЙ -ЙЪФТЙЧБФ УБНП РТБЪОЙ ТЕДПЧЕ Й ЪОБГЙ, ЙЪЧЯТЫЧБФ ЙЪФТЙЧБОЕ (ФБЛБ ЮЕ ОЕ -НПЦЕФЕ ДБ ЙЪЧБДЙФЕ ФПЪЙ ФЕЛУФ). +Разликата между "изрязване" (kill, cut) и "изтриване" (delete) е, че +"изрязаният" текст може да бъде вмъкнат наново, докато "изтритите" +неща не могат да се вмъкнат наново. Поставянето наново на изрязан +текст се нарича "вмъкване" (yank, paste). Общо казано, командите, +които отстраняват много текст, го изрязват (така че той да може да +бъде вмъкнат), докато командите, които отстраняват само един знак или +изтриват само празни редове и знаци, извършват изтриване (така че не +можете да вмъкнете наново този текст). ->> рТЙДЧЙЦЕФЕ ЛХТУПТБ ДП ОБЮБМПФП ОБ ТЕД, ЛПКФП ОЕ Е РТБЪЕО. фПЗБЧБ - ЧЯЧЕДЕФЕ C-k ЪБ ДБ РТЕНБИОЕФЕ ФЕЛУФБ ОБ ФПЪЙ ТЕД. ->> чЯЧЕДЕФЕ C-k ЧФПТЙ РЯФ. эЕ ЧЙДЙФЕ, ЮЕ ФПЧБ РТЕНБИЧБ ЪОБЛБ ЪБ ОПЧ - ТЕД, ЛПКФП УМЕДЧБ ТЕДБ. +>> Придвижете курсора до началото на ред, който не е празен. Тогава + въведете C-k, за да изрежете текста на този ред. +>> Въведете C-k втори път. Ще видите, че това изрязва знака за нов + ред, който следва реда. -ъБВЕМЕЦЕФЕ, ЮЕ ЕДЙОЙЮОП C-k РТЕНБИЧБ УЯДЯТЦБОЙЕФП ОБ ТЕДБ, Б -УМЕДЧБЭПФП C-k РТЕНБИЧБ ГЕМЙС ТЕД, Й РТБЧЙ ДТХЗЙФЕ ТЕДПЧЕ ДБ УЕ -РТЙДЧЙЦБФ ОБЗПТЕ. C-k ПВТБВПФЧБ ЮЙУМПЧЙФЕ БТЗХНЕОФЙ РП УРЕГЙБМЕО -ОБЮЙО: РТЕНБИЧБФ УЕ ФПМЛПЧБ ОБ ВТПК ТЕДПЧЕ й ФСИОПФП УЯДЯТЦБОЙЕ. фПЧБ -ОЕ Е РТПУФП РПЧФПТЕОЙЕ. C-u 2 C-k РТЕНБИЧБ ДЧБ ТЕДБ Й ФЕИОЙФЕ ЪОБГЙ -ЪБ ОПЧ ТЕД; ЧЯЧЕЦДБОЕФП ОБ C-k ДЧБ РЯФЙ ОЕ РТБЧЙ ФПЧБ. +Забележете, че единично C-k изрязва съдържанието на реда, а следващото +C-k изрязва целия ред и прави другите редове да се придвижат нагоре. +C-k обработва числовите аргументи по специален начин: премахват се +толкова на брой редове И тяхното съдържание. Това не е просто +повторение. C-u 2 C-k изрязва два реда и техните знаци за нов ред; +въвеждането на C-k два пъти не прави това. -чТЯЭБОЕФП ПВТБФОП ОБ ФЕЛУФ УЕ ОБТЙЮБ "ЙЪЧБЦДБОЕ". (нЙУМЕФЕ ЪБ ОЕЗП -ЛБФП ЪБ ЙЪЧБЦДБОЕ ПВТБФОП, ЙМЙ ДТЯРЧБОЕ ПВТБФОП, ОБ ФЕЛУФ, ЛПКФП Е ВЙМ -РТЕНБИОБФ.) нПЦЕФЕ ДБ ЙЪЧБЦДБФЕ РТЕНБИОБФЙС ФЕЛУФ ЙМЙ ОБ УЯЭПФП -НСУФП, ПФЛЯДЕФП Е ВЙМ РТЕНБИОБФ, ЙМЙ ОБ ДТХЗП НСУФП Ч ВХЖЕТБ, ДБЦЕ Й Ч -ТБЪМЙЮЕО ЖБКМ. нПЦЕФЕ ДБ ЙЪЧБЦДБФЕ ЕДЙО Й УЯЭ ФЕЛУФ ОСЛПМЛП РЯФЙ; -ФПЧБ РТБЧЙ ОСЛПМЛП ЛПРЙС ПФ ОЕЗП. +Връщането обратно на текст се нарича "вмъкване". (Мислете за него +като за изваждане обратно, или дръпване обратно, на текст, който е бил +изрязан.) Можете да вмъквате изрязания текст или на същото място, +откъдето е бил премахнат, или на друго място в буфера, даже и в +различен файл. Можете да вмъквате един и същ текст няколко пъти; това +прави няколко копия от него. -лПНБОДБФБ ЪБ ЙЪЧБЦДБОЕ Е C-y. фС ЧНЯЛЧБ ОБОПЧП РПУМЕДОЙС РТЕНБИОБФ -ФЕЛУФ Ч ФЕЛХЭПФП НСУФП ОБ ЛХТУПТБ. +Командата за вмъкване е C-y. Тя вмъква наново последния изрязан текст +в текущото място на курсора. ->> пРЙФБКФЕ ЗП: ЧЯЧЕДЕФЕ C-y ЪБ ДБ ЙЪЧЕДЕФЕ ФЕЛУФБ ПВТБФОП. +>> Опитайте го: въведете C-y, за да изведете текста обратно. -бЛП ОБРТБЧЙФЕ ОСЛПМЛП C-k Ч ТЕД, ЧУЙЮЛП ПФ РТЕНБИОБФЙС ФЕЛУФ УЕ -ЪБРБЪЧБ ЪБЕДОП, ФБЛБ ЮЕ ЕДОП C-y ЭЕ ЙЪЧБДЙ ЧУЙЮЛЙ ТЕДПЧЕ ОБЧЕДОЯЦ. +Ако направите няколко C-k в ред, всичко от изрязания текст се запазва +заедно, така че едно C-y ще извади всички редове наведнъж. ->> оБРТБЧЕФЕ ФПЧБ УЕЗБ, ЧЯЧЕДЕФЕ C-k ОСЛПМЛП РЯФЙ. +>> Направете това сега, въведете C-k няколко пъти. -уЕЗБ ЪБ ДБ ЙЪЛБТБФЕ РТЕНБИОБФЙС ФЕЛУФ: +Сега, за да изкарате изрязания текст: ->> чЯЧЕДЕФЕ C-y. уМЕД ФПЧБ РТЙДЧЙЦЕФЕ ЛХТУПТБ ОБДПМХ ОСЛПМЛП ТЕДБ Й - ЧЯЧЕДЕФЕ C-y ПФОПЧП. уЕЗБ ЧЙЦДБФЕ ЛБЛ ДБ ЛПРЙТБФЕ ОСЛБЛЯЧ ФЕЛУФ. +>> Въведете C-y. След това придвижете курсора надолу няколко реда и + въведете C-y отново. Сега виждате как да копирате някакъв текст. -лБЛЧП ДБ РТБЧЙФЕ БЛП ЙНБФЕ ОСЛБЛЯЧ ФЕЛУФ, ЛПКФП ЙУЛБФЕ ДБ ЙЪЧБДЙФЕ -ПВТБФОП, Й УМЕД ФПЧБ РТЕНБИОЕФЕ ОЕЭП ДТХЗП? C-y ЭЕ ЙЪЧБДЙ РПУМЕДОПФП -РТЕНБИЧБОЕ. оП РТЕДЙЫОЙСФ ФЕЛУФ ОЕ Е ЪБЗХВЕО. нПЦЕФЕ ДБ ЗП ЧЯТОЕФЕ -ПВТБФОП ЙЪРПМЪЧБКЛЙ ЛПНБОДБФБ M-y. уМЕД ЛБФП ЙЪРЯМОЙФЕ C-y ЪБ ДБ -ЧЪЕНЕФЕ РПУМЕДОПФП РТЕНБИЧБОЕ, ЧЯЧЕЦДБОЕФП ОБ M-y ЪБНЕОС ФПЪЙ ЙЪЧБДЕО -ФЕЛУФ У РТЕДЙЫОПФП РТЕНБИЧБОЕ. чЯЧЕЦДБОЕФП ОБ M-y ПФОПЧП Й ПФОПЧП -ЧТЯЭБ РП-ТБООЙ Й РП-ТБООЙ РТЕНБИЧБОЙС. лПЗБФП УФЙЗОЕФЕ ФЕЛУФБ, ЛПКФП -ФЯТУЙФЕ, ОЕ Е ОХЦОП ДБ РТБЧЙФЕ ОЙЭП РПЧЕЮЕ, ЪБ ДБ ЗП ЪБДЯТЦЙФЕ. -рТПУФП РТПДЯМЦЕФЕ У ТЕДБЛФЙТБОЕФП, ПУФБЧСКЛЙ ЙЪЧБДЕОЙС ФЕЛУФ ЛЯДЕФП УЙ -Е. +Какво да правите, ако имате някакъв текст, който искате да вмъкнете +обратно, и след това изрежете нещо друго? C-y ще извади последното +изрязване. Но предишният текст не е загубен. Можете да го върнете +обратно, използвайки командата M-y. След като изпълните C-y, за да +вземете последното изрязване, въвеждането на M-y заменя този изваден +текст с предишното изрязване. Въвеждането на M-y отново и отново +връща по-ранни и по-ранни изрязвания. Когато стигнете текста, който +търсите, не е нужно да правите нищо повече, за да го задържите. +Просто продължете с редактирането, оставяйки извадения текст, където +си е. -бЛП ЧЯЧЕДЕФЕ M-y ДПУФБФЯЮЕО ВТПК РЯФЙ ЭЕ УЕ ЧЯТОЕФЕ Ч ОБЮБМОПФП -РПМПЦЕОЙЕ (РПУМЕДОПФП РТЕНБИЧБОЕ). +Ако въведете M-y достатъчен брой пъти, ще се върнете в началното +положение (последното изрязване). ->> рТЕНБИОЕФЕ ТЕД, РТЙДЧЙЦЕФЕ УЕ ОСЛЯДЕ, РТЕНБИОЕФЕ ДТХЗ ТЕД. - йЪРЯМОЕФЕ C-y ЪБ ДБ ЧЯТОЕФЕ ПВТБФОП ЧФПТЙС РТЕНБИОБФ ТЕД. - йЪРЯМОЕФЕ M-y Й ФПЪЙ ЧЯТОБФ ФЕЛУФ ЭЕ ВЯДЕ ЪБНЕОЕО У РЯТЧЙС - РТЕНБИОБФ ТЕД. - йЪРЯМОЕФЕ ОСЛПМЛП M-y Й ЧЙЦФЕ ЛБЛЧП УЕ РПМХЮБЧБ. йЪРЯМОСЧБКФЕ ФПЧБ - ДПЛБФП ЧФПТЙСФ РТЕНБИОБФ ТЕД УЕ ЧЯТОЕ, Й УМЕД ФПЧБ ПЭЕ ОСЛПМЛП - РЯФЙ. - бЛП ЙУЛБФЕ, НПЦЕ ДБ РТПВЧБФЕ ДБ ДБДЕФЕ ОБ M-y РПМПЦЙФЕМОЙ Й - ПФТЙГБФЕМОЙ ЮЙУМПЧЙ БТЗХНЕОФЙ. +>> Изрежете ред, придвижете се някъде, изрежете друг ред. + Изпълнете C-y, за да върнете обратно втория изрязан ред. + Изпълнете M-y и този върнат текст ще бъде заменен с първия + изрязан ред. + Изпълнете няколко M-y и вижте какво се получава. Изпълнявайте това, + докато вторият изрязан ред се върне, и след това още няколко пъти. + Ако искате, може да пробвате да дадете на M-y положителни и + отрицателни числови аргументи. -* пфнсоб +* ОТМЯНА -------- -бЛП ОБРТБЧЙФЕ РТПНСОБ Ч ФЕЛУФБ Й УМЕД ФПЧБ ТЕЫЙФЕ, ЮЕ ФПЧБ Е ВЙМП -ЗТЕЫЛБ, ЧЙЕ НПЦЕФЕ ДБ ПФНЕОЙФЕ РТПНСОБФБ У ЛПНБОДБФБ ЪБ ПФНЕОСОЕ, C-x +Ако направите промяна в текста и след това решите, че това е било +грешка, вие можете да отмените промяната с командата за отменяне, C-x u. -пВЙЛОПЧЕОП, C-x u ПФНЕОС РТПНЕОЙФЕ ОБРТБЧЕОЙ ПФ ЕДОБ ЛПНБОДБ; БЛП -РПЧФБТСФЕ C-x u ОСЛПМЛП РЯФЙ РПУМЕДПЧБФЕМОП, ЧУСЛП РПЧФПТЕОЙЕ ПФНЕОС -ПЭЕ ЕДОБ ЛПНБОДБ. +Обикновено C-x u отменя промените, направени от една команда; ако +повтаряте C-x u няколко пъти последователно, всяко повторение отменя +още една команда. -оП ЙНБ ДЧЕ ЙЪЛМАЮЕОЙС: ЛПНБОДЙФЕ, ЛПЙФП ОЕ РТПНЕОСФ ФЕЛУФБ ОЕ УЕ ВТПСФ -(ФПЧБ ЧЛМАЮЧБ РТЙДЧЙЦЧБОЕФП ОБ ЛХТУПТБ Й УЛТПМЙТБЭЙФЕ ЛПНБОДЙ), Й -УБНПЧНЯЛЧБЭЙФЕ УЕ ЪОБГЙ ПВЙЛОПЧЕОП УЕ ПВТБВПФЧБФ ОБ ЗТХРЙ, ЧУСЛБ ДП 20 -ЪОБЛБ. (фПЧБ ОБНБМСЧБ ВТПС ОБ C-x u, ЛПЙФП ФТСВЧБ ДБ ЧЯЧЕДЕФЕ ЪБ ДБ -ПФНЕОЙФЕ ЧЯЧЕДЕО ФЕЛУФ.) +Но има две изключения: командите, които не променят текста, не се +броят (това включва придвижването на курсора и скролиращите команди), +и самовмъкващите се знаци обикновено се обработват на групи, всяка до +20 знака. (Това намалява броя на C-x u, които трябва да въведете, за +да отмените въведен текст.) ->> рТЕНБИОЕФЕ ФПЪЙ ТЕД У C-k, УМЕД ФПЧБ ЧЯЧЕДЕФЕ C-x u Й ФПК ФТСВЧБ ДБ - УЕ РПСЧЙ ПФОПЧП. +>> Изрежете този ред с C-k, след това въведете C-x u и той трябва да + се появи отново. -C-_ Е БМФЕТОБФЙЧОБ ПФНЕОСЭБ ЛПНБОДБ; ФС ТБВПФЙ ФПЮОП ЛБФП C-x u, ОП Е -РП-МЕУОБ ЪБ ЧЯЧЕЦДБОЕ ОСЛПМЛП РЯФЙ РПУМЕДПЧБФЕМОП. оЕДПУФБФЯЛЯФ ОБ -C_- Е, ЮЕ ОБ ОСЛПЙ ЛМБЧЙБФХТЙ ОЕ Е ПЮЕЧЙДОП ЛБЛ ФТСВЧБ ДБ УЕ ЧЯЧЕДЕ. -ъБФПЧБ ПУЙЗХТСЧБНЕ Й C-x u. оБ ОСЛПЙ ФЕТНЙОБМЙ НПЦЕ ДБ ЧЯЧЕДЕФЕ C-_ У -ЧЯЧЕЦДБОЕ ОБ / ДПЛБФП УФЕ ЪБДЯТЦБМЙ CONTROL. +C-_ е алтернативна отменяща команда; тя работи точно като C-x u, но е +по-лесна за въвеждане няколко пъти последователно. Недостатъкът на +C_- е, че на някои клавиатури не е очевидно как трябва да се въведе. +Затова осигуряваме и C-x u. На някои терминали може да въведете C-_ с +въвеждане на /, докато задържате CONTROL. -юЙУМПЧ БТЗХНЕОФ ЛЯН C-_ ЙМЙ C-x u ДЕКУФЧБ ЛБФП ВТПСЮ ОБ РПЧФПТЕОЙСФБ. +Числов аргумент към C-_ или C-x u действа като брояч на повторенията. -нПЦЕ ДБ ПФНЕОСФБ ЙЪФТЙЧБОЕ ОБ ФЕЛУФ ФПЮОП ЛБЛФП ПФНЕОСФЕ РТЕНБИЧБОЕ ОБ -ФЕЛУФ. тБЪМЙЮЙЕФП НЕЦДХ РТЕНБИЧБОЕФП ОБ ОЕЭП Й ЙЪФТЙЧБОЕФП НХ -ЧЯЪДЕКУФЧБ ДБМЙ ЭЕ НПЦЕ ДБ ЗП ЙЪЧБДЙФЕ У C-y; ЪБ ПФНЕОСОЕФП ОСНБ -ТБЪМЙЛБ НЕЦДХ ДЧБФБ ЧЙДБ. +Може да отменята изтриване на текст точно както отменяте изрязване на +текст. Различието между изрязването на нещо и изтриването му +въздейства дали ще може да го извадите с C-y; за отменянето няма +разлика между двата вида. -* жбкмпче +* ФАЙЛОВЕ --------- -ъБ ДБ ОБРТБЧЙФЕ ФЕЛУФБ, ЛПКФП ТЕДБЛФЙТБФЕ, РПУФПСОЕО, ФТСВЧБ ДБ ЗП -УМПЦЙФЕ ЧЯЧ ЖБКМ. ч РТПФЙЧЕО УМХЮБК ФПК ЭЕ ЙЪЮЕЪОЕ, ЛПЗБФП еНБЛУ -РТЙЛМАЮЙ. ъБ ДБ УМПЦЙФЕ ЧБЫЙС ФЕЛУФ ЧЯЧ ЖБКМ, ФТСВЧБ ДБ "ОБНЕТЙФЕ" -ЖБКМБ РТЕДЙ ДБ ЧЯЧЕЦДБФЕ ФЕЛУФБ. (фПЧБ УЯЭП УЕ ОБТЙЮБ "РПУЕЭБЧБОЕ" ОБ -ЖБКМБ.) +За да направите текста, който редактирате, постоянен, трябва да го +сложите във файл. В противен случай той ще изчезне, когато Емакс +приключи. За да сложите вашия текст във файл, трябва да "намерите" +файла преди да въвеждате текст. (Това също се нарича "посещаване" на +файла.) -оБНЙТБОЕ ОБ ЖБКМ ПЪОБЮБЧБ, ЮЕ ЧЙЦДБФЕ УЯДЯТЦБОЙЕФП НХ Ч еНБЛУ. ч -НОПЗП УМХЮБЙ ФПЧБ Е ЛБФП ДБ ТЕДБЛФЙТБФЕ УБНЙС ЖБКМ. пВБЮЕ, РТПНЕОЙФЕ, -ЛПЙФП РТБЧЙФЕ ЙЪРПМЪЧБКЛЙ еНБЛУ, ОЕ ПУФБЧБФ РПУФПСООЙ ДПЛБФП ОЕ -"ЪБРЙЫЕФЕ" ЖБКМБ. фПЧБ Е ФБЛБ ЪБ ДБ УЕ РТЕДПФЧТБФЙ ПУФБЧСОЕФП ОБ -РПМХРТПНЕОЕО ЖБКМ Ч УЙУФЕНБФБ, ЛПЗБФП ОЕ ЙУЛБФЕ ФПЧБ. дПТЙ ЛПЗБФП -ЪБРЙУЧБФЕ, еНБЛУ ПУФБЧС ОБЮБМОЙС ЖБКМ РПД РТПНЕОЕОП ЙНЕ Ч УМХЮБК, ЮЕ -РП-ЛЯУОП ТЕЫЙФЕ, ЮЕ ЧБЫЙФЕ РТПНЕОЙ УБ ВЙМЙ ЗТЕЫЛБ. +Намиране на файл означава, че виждате съдържанието му в Емакс. В +много случаи това е като да редактирате самия файл. Обаче промените, +които правите, използвайки Емакс, не остават постоянни, докато не +"запишете" файла. Това е така, за да се предотврати оставянето на +полупроменен файл в системата, когато не искате това. Дори когато +записвате, Емакс оставя началния файл под променено име, в случай, че +по-късно решите, че вашите промени са били грешка. -бЛП РПЗМЕДОЕФЕ Ч ДЯОПФП ОБ ЕЛТБОБ ЭЕ ЧЙДЙФЕ ТЕД, ЛПКФП ЪБРПЮЧБ Й -ЪБЧЯТЫЧБ У ФЙТЕФБ Й ЪБРПЮЧБ У "--:-- TUTORIAL" ЙМЙ ОЕЭП РПДПВОП. фБЪЙ -ЮБУФ ПФ ЕЛТБОБ РПЛБЪЧБ ЙНЕФП ОБ ЖБКМБ, ЛПКФП УФЕ РПУЕФЙМЙ. фПЮОП УЕЗБ -ЧЙЕ УФЕ РПУЕФЙМЙ ЖБКМ ОБТЕЮЕО "TUTORIAL", ЛПКФП Е ЧБЫЕФП МЙЮОП -ЛПРЙЕ-ЮЕТОПЧБ ОБ еНБЛУ ЧЯЧЕДЕОЙЕФП. лПЗБФП ОБНЕТЙФЕ ЖБКМ Ч еНБЛУ, -ЙНЕФП ОБ ФПЪЙ ЖБКМ ЭЕ УЕ РПСЧЙ ОБ УЯЭПФП НСУФП. +Ако погледнете в дъното на екрана, ще видите ред, който започва и +завършва с тирета и започва с "-R:-- TUTORIAL.bg" или нещо подобно. +Тази част от екрана показва името на файла, който сте посетили. Точно +сега вие сте посетили файл, наречен "TUTORIAL.bg", който е вашето +лично копие-чернова на Емакс въведението. Когато намерите файл в +Емакс, името на този файл ще се появи на същото място. -пУПВЕОПУФ ЛПНБОДБФБ ЪБ ОБНЙТБОЕ ОБ ЖБКМ Е, ЮЕ ФТСВЧБ ДБ ЛБЦЕФЕ ЙНЕФП -ОБ ЖБКМБ, ЛПКФП ЙУЛБФЕ. оЙЕ ЗП ОБТЙЮБНЕ "ЮЕФЕОЕ ОБ БТЗХНЕОФ ПФ -ФЕТНЙОБМБ" (Ч ФПЪЙ УМХЮБК БТЗХНЕОФЯФ Е ЙНЕФП ОБ ЖБКМБ). уМЕД ЛБФП -ЧЯЧЕДЕФЕ ЛПНБОДБФБ +Особеност на командата за намиране на файл е, че трябва да кажете +името на файла, който искате. Ние го наричаме "четене на аргумент от +терминала" (в този случай аргументът е името на файла). След като +въведете командата - C-x C-f оБНЙТБОЕ ОБ ЖБКМ + C-x C-f Намиране на файл -еНБЛУ ЧЙ РПДЛБОС ДБ ЧЯЧЕДЕФЕ ЙНЕФП ОБ ЖБКМБ. йНЕФП ОБ ЖБКМБ, ЛПЕФП -ОБРЙЫЕФЕ, УЕ РПСЧСЧБ Ч ДЯОПФП ОБ ЕЛТБОБ. тЕДЯФ Ч ДЯОПФП ОБ ЕЛТБОБ УЕ -ОБТЙЮБ НЙОЙВХЖЕТ, ЛПЗБФП УЕ ЙЪРПМЪЧБ ЪБ ФПЪЙ ЧЙД ЧИПД. нПЦЕФЕ ДБ -ЙЪРПМЪЧБФЕ ПВЙЛОПЧЕОЙФЕ ЛПНБОДЙ ЪБ ТЕДБЛФЙТБОЕ ОБ еНБЛУ ЪБ ДБ -ТЕДБЛФЙТБФЕ ЙНЕФП ОБ ЖБКМБ. +Емакс ви подканя да въведете името на файла. Името на файла, което +напишете, се появява в дъното на екрана. Редът в дъното на екрана се +нарича минибуфер, когато се използва за този вид вход. Можете да +използвате обикновените команди за редактиране на Емакс, за да +редактирате името на файла. -лПЗБФП ЧЯЧЕЦДБФЕ ЙНЕФП ОБ ЖБКМБ (ЙМЙ ЛБЛЯЧФП Й ДБ Е ЧИПД Ч -НЙОЙВХЖЕТБ), НПЦЕФЕ ДБ РТЕЛТБФЙФЕ ЛПНБОДБФБ У C-g. +Когато въвеждате името на файла (или какъвто и да е вход в +минибуфера), можете да прекратите командата с C-g. ->> чЯЧЕДЕФЕ C-x C-f Й УМЕД ФПЧБ C-g. фПЧБ РТЕЛТБФСЧБ НЙОЙВХЖЕТБ, Б - УЯЭП Й ЛПНБОДБФБ C-x C-f, ЛПСФП УЕ ЙЪРЯМОСЧБЫЕ Ч НЙОЙВХЖЕТБ. фБЛБ - ЮЕ ОЕ ОБНЙТБФЕ ЖБКМ. +>> Въведете C-x C-f и след това C-g. Това прекратява минибуфера, а + също и командата C-x C-f, която се е изпълнявала в минибуфера. + Така че не намирате файл. -лПЗБФП РТЙЛМАЮЙФЕ У ЧЯЧЕЦДБОЕФП ОБ ЙНЕФП ОБ ЖБКМБ, ЧЯЧЕДЕФЕ -ЪБ ДБ РПЛБЦЕФЕ ФПЧБ. фПЗБЧБ C-x C-f ФТЯЗЧБ ДБ ТБВПФЙ Й ОБНЙТБ ЖБКМБ, -ЛПКФП УФЕ ЙЪВТБМЙ. нЙОЙВХЖЕТЯФ ЙЪЮЕЪЧБ, ЛПЗБФП ЛПНБОДБФБ C-x C-f -УЧЯТЫЙ. +Когато приключите с въвеждането на името на файла, въведете , +за да покажете това. Тогава C-x C-f тръгва да работи и намира файла, +който сте избрали. Минибуферът изчезва, когато командата C-x C-f +свърши. -уМЕД НБМЛП УЯДЯТЦБОЙЕФП ОБ ЖБКМБ УЕ РПСЧСЧБ ОБ ЕЛТБОБ Й ЧЙЕ НПЦЕФЕ ДБ -ТЕДБЛФЙТБФЕ УЯДЯТЦБОЙЕФП НХ. лПЗБФП РПЦЕМБЕФЕ ДБ ЪБРБЪЙФЕ ЧБЫЙФЕ -РТПНЕОЙ ЪБ РПУФПСООП, ЧЯЧЕДЕФЕ ЛПНБОДБФБ +След малко съдържанието на файла се появява на екрана и вие можете да +редактирате съдържанието му. Когато пожелаете да запазите вашите +промени за постоянно, въведете командата - C-x C-s ъБРБЪЧБОЕ ОБ ЖБКМБ + C-x C-s Запазване на файла -фПЧБ ЛПРЙТБ ФЕЛУФБ ПФ еНБЛУ ЧЯЧ ЖБКМБ. рЯТЧЙСФ РЯФ, ЛПЗБФП ФПЧБ УЕ -ОБРТБЧЙ, еНБЛУ РТЕЙНЕОХЧБ ОБЮБМОЙС ЖБКМ У ОПЧП ЙНЕ, ФБЛБ ЮЕ ФПК ДБ ОЕ -УЕ ЙЪЗХВЙ. оПЧПФП ЙНЕ УЕ РПУФТПСЧБ У ДПВБЧСОЕ ОБ "~" Ч ЛТБС ОБ ЙНЕФП -ОБ ОБЮБМОЙС ЖБКМ. +Това копира текста от Емакс във файла. Първия път, когато това се +направи, Емакс преименува началния файл с ново име, така че той да не +се изгуби. Новото име се построява с добавяне на "~" в края на името +на началния файл. -лПЗБФП ЪБРБЪЧБОЕФП Е УЧЯТЫЙМП, еНБЛУ ЙЪЧЕЦДБ ЙНЕФП ОБ ЖБКМБ, ЛПКФП Е -ВЙМ ЪБРЙУБО. фТСВЧБ ДБ ЪБРЙУЧБФЕ ДПУФБФЯЮОП ЮЕУФП, ФБЛБ ЮЕ ДБ ОЕ -ЙЪЗХВЙФЕ НОПЗП ТБВПФБ БЛП УЙУФЕНБФБ УЕ УТЙОЕ. +Когато запазването е свършило, Емакс извежда името на файла, който е +бил записан. Трябва да записвате достатъчно често, така че да не +изгубите много работа, ако системата се срине по някаква причина. ->> чЯЧЕДЕФЕ C-x C-s, ЪБРБЪЧБКЛЙ ЧБЫЕФП ЛПРЙЕ ПФ ЧЯЧЕДЕОЙЕФП. - фПЧБ ФТСВЧБ ДБ ЙЪЧЕДЕ "Wrote ...TUTORIAL" Ч ДЯОПФП ОБ ЕЛТБОБ. +>> Въведете C-x C-s, запазвайки вашето копие от въведението. + Това трябва да изведе "Wrote ...TUTORIAL.bg" в дъното на екрана. -ъбвемецлб: оБ ОСЛПЙ УЙУФЕНЙ ЧЯЧЕЦДБОЕФП ОБ C-x C-s ЭЕ ЪБНТЯЪЙ ЕЛТБОБ Й -ЧЙЕ ОСНБ ДБ ЧЙЦДБФЕ РПЧЕЮЕ ЙЪИПД ПФ еНБЛУ. фПЧБ РПЛБЪЧБ, ЮЕ ЕДОБ -"УРПУПВОПУФ" ОБ ПРЕТБГЙПООБФБ УЙУФЕНБ ОБТЙЮБОБ "ХРТБЧМЕОЙЕ ОБ РПФПЛБ" -(flow control) Е РТЙИЧБОБМБ C-s Й ОЕ ЗП РТПРХУЛБ ЛЯН еНБЛУ. ъБ ДБ -ТБЪНТБЪЙФЕ ЕЛТБОБ, ЧЯЧЕДЕФЕ C-q. фПЗБЧБ ЧЙЦФЕ УЕЛГЙСФБ "уРПОФБООП -ЧЛМАЮЧБОЕ ОБ РПУФЯРЛПЧП ФЯТУЕОЕ" (Spontaneous Entry to Incremental -Search) Ч ТЯЛПЧПДУФЧПФП ОБ еНБЛУ ЪБ УЯЧЕФ ЛБЛ ДБ УЕ УРТБЧЙФЕ У ФБЪЙ -"УРПУПВОПУФ". +ЗАБЕЛЕЖКА: На някои системи въвеждането на C-x C-s ще замръзи екрана и +вие няма да виждате повече изход от Емакс. Това показва, че една +"способност" на операционната система, наричана "управление на потока" +(flow control), е прихванала C-s и не го пропуска към Емакс. За да +размразите екрана, въведете C-q. Тогава вижте секцията "Спонтанно +включване на постъпково търсене" (Spontaneous Entry to Incremental +Search) в ръководството на Емакс за съвет как да се справите с тази +"способност". -нПЦЕ ДБ ОБНЕТЙФЕ УЯЭЕУФЧХЧБЭ ЖБКМ, ДБ ЗП ТБЪЗМЕДБФЕ Й ДБ ЗП -ТЕДБЛФЙТБФЕ. нПЦЕФЕ УЯЭП ДБ ОБНЕТЙФЕ ЖБКМ, ЛПКФП ОЕ УЯЭЕУФЧХЧБ. фПЧБ -Е ОБЮЙОЯФ ЪБ УЯЪДБЧБОЕ ОБ ОПЧЙ ЖБКМПЧЕ Ч еНБЛУ: ОБНЙТБФЕ ЖБКМБ, ЛПКФП -ЭЕ ВЯДЕ Ч ОБЮБМПФП РТБЪЕО, Й ФПЗБЧБ ЪБРПЮЧБФЕ ЧНЯЛЧБОЕФП ОБ ФЕЛУФБ ЪБ -ЖБКМБ. лПЗБФП ЗПЧПТЙФЕ ЪБ "ЪБРЙУЧБОЕ" ОБ ЖБКМБ, еНБЛУ ЧУЯЭОПУФ ЭЕ -УЯЪДБДЕ ЖБКМБ У ФЕЛУФБ, ЛПКФП УФЕ ЧЯЧЕМЙ. пФ ФБН ОБФБФЯЛ НПЦЕ ДБ -УЮЙФБФЕ, ЮЕ ТЕДБЛФЙТБФЕ ЧЕЮЕ УЯЭЕУФЧХЧБЭ ЖБКМ. +Може да намерите съществуващ файл, да го разгледате и да го +редактирате. Можете също да намерите файл, който не съществува. Това +е начинът за създаване на нови файлове в Емакс: намирате файла, който +ще бъде в началото празен, и тогава започвате вмъкването на текста за +файла. Когато говорите за "записване" на файл, Емакс всъщност ще +създаде файла с текста, който сте въвели. Оттам нататък може да +считате, че редактирате вече съществуващ файл. -* вхжетй +* БУФЕРИ -------- -бЛП ОБНЕТЙФЕ ЧФПТЙ ЖБКМ У C-x C-f, РЯТЧЙСФ ЖБКМ ПУФБЧБ Ч еНБЛУ. -нПЦЕФЕ ДБ РТЕЧЛМАЮЙФЕ ПВТБФОП ЛЯН ОЕЗП ЛБФП ЗП ОБНЕТЙФЕ РБЛ У C-x -C-f. рП ФПЪЙ ОБЮЙО НПЦЕ ДБ РПМХЮЙФЕ ДПУФБ ОБ ВТПК ЖБКМПЧЕ Ч еНБЛУ. +Ако намерите втори файл с C-x C-f, първият файл остава в Емакс. +Можете да превключите обратно към него, като го намерите пак с C-x +C-f. По този начин може да получите доста на брой файлове в Емакс. ->> уЯЪДБКФЕ ЖБКМ У ЙНЕ "foo" ЧЯЧЕЦДБКЛЙ C-x C-f foo . - чНЯЛОЕФЕ НБМЛП ФЕЛУФ, ТЕДБЛФЙТБКФЕ ЗП Й ЗП ЪБРБЪЕФЕ "foo" У - ЧЯЧЕЦДБОЕ ОБ C-x C-s. - оБЛТБС ЧЯЧЕДЕФЕ C-x C-f TUTORIAL ЪБ ДБ УЕ ЧЯТОЕФЕ ПВТБФОП - ЧЯЧ ЧЯЧЕДЕОЙЕФП. +>> Създайте файл с име "foo", въвеждайки C-x C-f foo . + Вмъкнете малко текст, редактирайте го и запазете "foo" с въвеждане + на C-x C-s. + Накрая въведете C-x C-f TUTORIAL.bg , за да се върнете + обратно във въведението. -еНБЛУ ЪБРБЪЧБ ФЕЛУФБ ОБ ЧУЕЛЙ ЖБКМ Ч ПВЕЛФ ОБТЙЮБО "ВХЖЕТ". -оБНЙТБОЕФП ОБ ЖБКМ РТБЧЙ ОПЧ ВХЖЕТ Ч еНБЛУ. ъБ ДБ ЧЙДЙФЕ УРЙУЯЛ ОБ -ВХЖЕТЙФЕ, ЛПЙФП Ч НПНЕОФБ УЯЭЕУФЧХЧБФ ЧЯЧ ЧБЫЙС еНБЛУ, ЧЯЧЕДЕФЕ +Емакс запазва текста на всеки файл в обект, наричан "буфер". +Намирането на файл прави нов буфер в Емакс. За да видите списък на +буферите, които в момента съществуват във вашия Емакс, въведете - C-x C-b рПЛБЪЧБОЕ ОБ ВХЖЕТЙФЕ + C-x C-b Показване на буферите ->> пРЙФБКФЕ C-x C-b УЕЗБ. +>> Опитайте C-x C-b сега. -чЙЦФЕ ЛБЛ ЧУЕЛЙ ВХЖЕТ ЙНБ ЙНЕ, Б РПОСЛПЗБ Й ЙНЕ ОБ ЖБКМ ЪБ ЖБКМБ, -ЮЙЕФП УЯДЯТЦБОЙЕ ДЯТЦЙ. чуелй ФЕЛУФ, ЛПКФП ЧЙЦДБФЕ Ч еНБЛУ РТПЪПТЕГ, -Е ЧЙОБЗЙ ЮБУФ ПФ ОСЛБЛЯЧ ВХЖЕТ. +Вижте как всеки буфер има име, а понякога и име на файл за файла, +чието съдържание държи. ВСЕКИ текст, който виждате в Емакс прозорец, +е винаги част от някакъв буфер. ->> чЯЧЕДЕФЕ C-x 1 ЪБ ДБ НБИОЕФЕ УРЙУЯЛБ У ВХЖЕТЙФЕ. +>> Въведете C-x 1, за да махнете списъка с буферите. -лПЗБФП ЙНБФЕ ОСЛПМЛП ВХЖЕТБ, УБНП ЕДЙО ПФ ФСИ Е "ФЕЛХЭ" Ч ДБДЕО НПНЕОФ -ПФ ЧТЕНЕ. фПЧБ Е ВХЖЕТЯФ, ЛПКФП ТЕДБЛФЙТБФЕ. бЛП ЙУЛБФЕ ДБ -ТЕДБЛФЙТБФЕ ДТХЗ ВХЖЕТ УЕ ОХЦДБЕФЕ ПФ "РТЕЧЛМАЮЧБОЕ" ЛЯН ОЕЗП. бЛП -ЙУЛБФЕ ДБ УЕ РТЕЧЛМАЮЙФЕ ЛЯН ВХЖЕТ, ЛПКФП УЯПФЧЕФУФЧБ ОБ ЖБКМ, НПЦЕФЕ -ДБ ЗП ОБРТБЧЙФЕ ЛБФП РТПУФП РПУЕФЙФЕ ЖБКМБ ПФОПЧП У C-x C-f. оП ЙНБ Й -РП-МЕУЕО ОБЮЙО: ЙЪРПМЪЧБОЕФП ОБ ЛПНБОДБФБ C-x b. ч ФБЪЙ ЛПНБОДБ -ФТСВЧБ ДБ ЧЯЧЕДЕФЕ ЙНЕФП ОБ ВХЖЕТБ. +Когато имате няколко буфера, само един от тях е "текущ" в даден момент +от време. Това е буферът, който редактирате. Ако искате да +редактирате друг буфер, се нуждаете от "превключване" към него. Ако +искате да се превключите към буфер, който съответства на файл, можете +да го направите, като просто посетите файла отново с C-x C-f. Но има +и по-лесен начин: използването на командата C-x b. В тази команда +трябва да въведете името на буфера. ->> чЯЧЕДЕФЕ C-x b foo ЪБ ДБ УЕ ЧЯТОЕФЕ ЛЯН ВХЖЕТБ "foo", - ЛПКФП ДЯТЦЙ ФЕЛУФБ ОБ ЖБКМБ "foo". фПЗБЧБ ЧЯЧЕДЕФЕ C-x b TUTORIAL - ЪБ ДБ УЕ ЧЯТОЕФЕ Ч ФПЧБ ЧЯЧЕДЕОЙЕ. +>> Въведете C-x b foo , за да се върнете към буфера "foo", + който държи текста на файла "foo". Тогава въведете C-x b TUTORIAL + , за да се върнете в това въведение. -ч РПЧЕЮЕФП УМХЮБЙ ЙНЕФП ОБ ВХЖЕТБ Е УЯЭПФП ЛБФП ЙНЕФП ОБ ЖБКМБ (ВЕЪ -ЮБУФФБ Ч ЛПС ДЙТЕЛФПТЙС УЕ ОБНЙТБ). пВБЮЕ ФПЧБ ОЕ ЧЙОБЗЙ Е ЧСТОП. -уРЙУЯЛЯФ У ВХЖЕТЙФЕ, ЛПКФП РТБЧЙФЕ У C-x C-b, ЧЙОБЗЙ ЧЙ РПЛБЪЧБ ЙНЕФП -ОБ ЧУЕЛЙ ВХЖЕТ. +В повечето случаи името на буфера е същото като името на файла (без +частта в коя директория се намира). Обаче това не винаги е вярно. +Списъкът с буферите, който правите с C-x C-b, винаги ви показва името +на всеки буфер. -чуелй ФЕЛУФ, ЛПКФП ЧЙЦДБФЕ Ч еНБЛУ РТПЪПТЕГ, Е ЧЙОБЗЙ ЮБУФ ПФ ОСЛБЛЯЧ -ВХЖЕТ. оСЛПЙ ВХЖЕТЙ ОЕ УЯПФЧЕФУФЧБФ ОБ ЖБКМПЧЕ. оБРТЙНЕТ, ВХЖЕТЯФ -ЙНЕОХЧБО "*Buffer List*" ОЕ УЯПФЧЕФУФЧБ ОБ ЖБКМ. фПЧБ Е ВХЖЕТЯФ, -ЛПКФП УЯДЯТЦБ УРЙУЯЛБ У ВХЖЕТЙФЕ, ЛПЙФП УФЕ ОБРТБЧЙМЙ У C-x C-b. -вХЖЕТЯФ ЙНЕОХЧБО "*Messages*" УЯЭП ОЕ УЯПФЧЕФУФЧБ ОБ ЖБКМ; ФПК УЯДЯТЦБ -УЯПВЭЕОЙСФБ, ЛПЙФП УЕ РПСЧБЧБФ Ч ДЯОПФП ОБ ЕЛТБОБ РП ЧТЕНЕ ОБ еНБЛУ -УЕУЙСФБ. +ВСЕКИ текст, който виждате в Емакс прозорец, е винаги част от някакъв +буфер. Някои буфери не съответстват на файлове. Например буферът, +именуван "*Buffer List*", не съответства на файл. Това е буферът, +който съдържа списъка с буферите, които сте направили с C-x C-b. +Буферът, именуван "*Messages*", също не съответства на файл; той +съдържа съобщенията, които се появяват в дъното на екрана по време на +Емакс сесията. ->> чЯЧЕДЕФЕ C-x b *Messages* ЪБ ДБ ЧЙДЙФЕ ВХЖЕТБ УЯУ - УЯПВЭЕОЙСФБ. уМЕД ФПЧБ ЧЯЧЕДЕФЕ C-x C-b TUTORIAL ЪБ ДБ УЕ - ЧЯТОЕФЕ ЛЯН ФПЧБ ЧЯЧЕДЕОЙЕ. +>> Въведете C-x b *Messages* , за да видите буфера със + съобщенията. След това въведете C-x C-b TUTORIAL , за да + се върнете към това въведение. -бЛП ОБРТБЧЙФЕ РТПНЕОЙ Ч ФЕЛУФБ ОБ ЕДЙО ЖБКМ, Й ФПЗБЧБ ОБНЕТЙФЕ ДТХЗ -ЖБКМ, ФПЧБ ОСНБ ДБ ЪБРЙЫЕ РЯТЧЙС ЖБКМ. оЕЗПЧЙФЕ РТПНЕОЙ ПУФБЧБФ ЧЯФТЕ -Ч еНБЛУ, Ч ВХЖЕТБ ОБ ЖБКМБ. уЯЪДБЧБОЕФП ЙМЙ ТЕДБЛФЙТБОЕФП ОБ ВХЖЕТБ -ОБ ЧФПТЙС ЖБКМ ОСНБ ЕЖЕЛФ ЧЯТИХ ВХЖЕТБ ОБ РЯТЧЙС ЖБКМ. фПЧБ Е НОПЗП -РПМЕЪОП, ОП УЯЭП ПЪОБЮБЧБ, ЮЕ УЕ ОХЦДБЕФЕ ПФ ХДПВЕО ОБЮЙО ДБ ЪБРБЪЙФЕ -ВХЖЕТБ ОБ РЯТЧЙС ЖБКМ. эЕ Е ОЕХДПВОП ДБ РТЕЧЛМАЮЙФЕ ПВТБФОП У C-x C-f -ЪБ ДБ ЗП ЪБРБЪЙФЕ У C-x C-s. фБЛБ ЮЕ ЙНБНЕ +Ако направите промени в текста на един файл и тогава намерите друг +файл, това няма да запише първия файл. Неговите промени остават вътре +в Емакс, в буфера на файла. Създаването или редактирането на буфера +на втория файл няма ефект върху буфера на първия файл. Това е много +полезно, но също означава, че се нуждаете от удобен начин да запазите +буфера на първия файл. Ще е неудобно да превключите обратно с C-x +C-f, за да го запазите с C-x C-s. Така че имаме - C-x s ъБРБЪЧБ ОСЛПЙ ВХЖЕТЙ + C-x s Запазва някои буфери -C-x s РЙФБ ЪБ ЧУЕЛЙ ВХЖЕТ, ЛПКФП УЯДЯТЦБ РТПНЕОЙ, ЛПЙФП ОЕ УФЕ -ЪБРБЪЙМЙ. чЯРТПУЯФ ЪБ ЧУЕЛЙ ФБЛЯЧ ВХЖЕТ Е ДБМЙ ДБ ВЯДЕ ЪБРБЪЕО. +C-x s пита за всеки буфер, който съдържа промени, които не сте +запазили. Въпросът за всеки такъв буфер е дали да бъде запазен. ->> чНЯЛОЕФЕ ТЕД Ч ФЕЛУФБ, УМЕД ФПЧБ ЧЯЧЕДЕФЕ C-x s. - фТСВЧБ ДБ ВЯДЕФЕ РПРЙФБО ДБМЙ ДБ ЪБРБЪЙФЕ ВХЖЕТБ ЙНЕОХЧБО TUTORIAL. - пФЗПЧПТЕФЕ У ДБ ОБ ЧЯРТПУБ ЛБФП ЧЯЧЕДЕФЕ "y". +>> Вмъкнете ред в текста, след това въведете C-x s. + Трябва да бъдете попитан дали да запазите буфера, именуван "TUTORIAL". + Отговорете с "да" на въпроса, като въведете "y". -* тбъыйтсчбое об обвптб лпнбодй +* РАЗШИРЯВАНЕ НА НАБОРА КОМАНДИ ------------------------------- -йНБ НОПЗП, НОПЗП РПЧЕЮЕ ЛПНБОДЙ ОБ еНБЛУ, ПФЛПМЛПФП НПЗБФ ДБ УЕ УМПЦБФ -НБ ЧУЙЮЛЙ ЛПОФТПМОЙ Й НЕФБ ЪОБГЙ. еНБЛУ ЪБПВЙЛБМС ФПЧБ У X (eXtended) -ЛПНБОДБФБ. фПЧБ УФБЧБ РП ДЧБ ОБЮЙОБ: +Има много, много повече команди на Емакс, отколкото могат да се сложат +на всички контролни и мета знаци. Емакс заобикаля това с X (eXtended) +командата. Това става по два начина: - C-x ъОБЛПЧП ТБЪЫЙТСЧБОЕ. рПУМЕДЧБОП ПФ ЕДЙО ЪОБЛ. - M-x тБЪЫЙТСЧБОЕ У ЙНЕОХЧБОБ ЛПНБОДБ. рПУМЕДЧБОП ПФ ДЯМЗП - ЙНЕ. + C-x Знаково разширяване. Последвано от един знак. + M-x Разширяване с именувана команда. Последвано от дълго + име. -фЕЪЙ ЛПНБОДЙ УБ ПВЭП ЧЪЕФП РПМЕЪОЙ, ОП РП-НБМЛП ПФЛПМЛПФП ЛПНБОДЙФЕ, -ЛПЙФП ДПУЕЗБ УФЕ ОБХЮЙМЙ. чЕЮЕ ЧЙДСИФЕ ДЧЕ ПФ ФСИ: ЛПНБОДЙФЕ ЧЯТИХ -ЖБКМПЧЕ C-x C-f ЪБ ОБНЙТБОЕ (Find) Й C-x C-s ЪБ ЪБРБЪЧБОЕ (Save). -дТХЗ РТЙНЕТ Е ЛПНБОДБФБ ЪБ ЛТБК ОБ еНБЛУ УЕУЙСФБ -- ФПЧБ Е ЛПНБОДБФБ -C-x C-c. (оЕ УЕ ВЕЪРПЛПКФЕ, ЮЕ НПЦЕ ДБ ЙЪЗХВЙФЕ ЧУЙЮЛЙ РТПНЕОЙ, ЛПЙФП -УФЕ ОБРТБЧЙМЙ; C-x C-c РТЕДМБЗБ ДБ ЪБРБЪЙ ЧУЕЛЙ РТПНЕОЕО ЖБКМ РТЕДЙ ДБ -РТЕНБИОЕ еНБЛУ.) +Тези команди са общо взето полезни, но по-малко, отколкото командите, +които досега сте научили. Вече видяхте две от тях: командите върху +файлове C-x C-f за намиране (Find) и C-x C-s за запазване (Save). +Друг пример е командата за край на Емакс сесията -- това е командата +C-x C-c. (Не се безпокойте, че може да изгубите всички промени, които +сте направили; C-x C-c предлага да запази всеки променен файл, преди +да премахне Емакс.) -C-z Е ЛПНБОДБФБ ЪБ ЙЪМЙЪБОЕ ПФ еНБЛУ *ЧТЕНЕООП* -- ФБЛБ ЮЕ ДБ НПЦЕФЕ -ДБ УЕ ЧЯТОЕФЕ ЛЯН УЯЭБФБ еНБЛУ УЕУЙС РП-ЛЯУОП. +C-z е командата за излизане от Емакс *временно* -- така че да можете +да се върнете към същата Емакс сесия по-късно. -оБ УЙУФЕНЙ, ЛПЙФП РПЪЧПМСЧБФ ФПЧБ, C-z "ЙЪПУФБЧС" (suspend) еНБЛУ, -Ф.Е. ЧТЯЭБ ЛЯН ПВЧЙЧЛБФБ, ОП ОЕ ТБЪТХЫБЧБ еНБЛУ. ч РПЧЕЮЕФП ПВЧЙЧЛЙ -НПЦЕФЕ ДБ РТПДЯМЦЙФЕ еНБЛУ УЕУЙСФБ У ЛПНБОДБФБ `fg' ЙМЙ У `%emacs'. +На системи, които позволяват това, C-z "изоставя" (suspend) Емакс, +т.е. връща към обвивката, но не разрушава Емакс. В повечето обвивки +можете да продължите Емакс сесията с командата "fg" или с "%emacs". -оБ УЙУФЕНЙ, ЛПЙФП ОЕ РПЪЧПМСЧБФ ЙЪПУФБЧСОЕ, C-z УЯЪДБЧБ ОПЧБ -РПДПВЧЙЧЛБ, ЛПСФП ЧЯТЧЙ РПД еНБЛУ, ЪБ ДБ ЧЙ ДБДЕ ЫБОУ ДБ УФБТФЙТБФЕ -ДТХЗЙ РТПЗТБНЙ Й ДБ УЕ ЧЯТОЕФЕ ЛЯН еНБЛУ УМЕД ФПЧБ; ФПЧБ ОЕ Е ЙУФЙОУЛП -"ЙЪМЙЪБОЕ" ПФ еНБЛУ. ч ФПЪЙ УМХЮБК ЛПНБОДБФБ ОБ ПВЧЙЧЛБФБ `exit' Е -ПВЙЛОПЧЕОЙСФ ОБЮЙО ДБ УЕ ЧЯТОЕФЕ ПВТБФОП ЛЯН еНБЛУ ПФ РПДПВЧЙЧЛБФБ. +На системи, които не позволяват изоставяне, C-z създава нова +подобвивка, която върви под Емакс, за да ви даде шанс да стартирате +други програми и да се върнете към Емакс след това; това не е истинско +"излизане" от Емакс. В този случай командата на обвивката "exit" е +обикновеният начин да се върнете обратно към Емакс от подобвивката. -нПНЕОФЯФ ДБ ЙЪРПМЪЧБФЕ C-x C-c Е, ЛПЗБФП ЙУЛБФЕ ДБ ЙЪМЕЪЕФЕ ПФ -УЙУФЕНБФБ. фПЧБ Е Й РТБЧЙМОБФБ ЛПНБОДБ ЪБ ЙЪМЙЪБОЕ, ЛПЗБФП еНБЛУ Е -ЙЪЧЙЛБО ПФ РПЭЕОУЛБ РТПЗТБНБ ЙМЙ ДТХЗЙ УФТБОЙЮОЙ РТПЗТБНЙ, ФЯК ЛБФП ФЕ -НПЦЕ Й ДБ ОЕ ЪОБСФ ЛБЛ ДБ УЕ УРТБЧСФ У ЙЪПУФБЧСОЕФП ОБ еНБЛУ. рТЙ -ПВЙЛОПЧЕОЙ ПВУФПСФЕМУФЧБ, ПВБЮЕ, БЛП ОЕ УФЕ ФТЯЗОБМЙ ДБ ЙЪМЙЪБФЕ ПФ -УЙУФЕНБФБ, РП-ДПВТЕ Е ДБ ЙЪПУФБЧЙФЕ еНБЛУ У C-z ЧНЕУФП ДБ ЙЪМЙЪБФЕ ПФ -еНБЛУ. +Моментът да използвате C-x C-c е, когато искате да излезете от +системата. Това е и правилната команда за излизане, когато Емакс е +извикан от пощенска програма или други странични програми, тъй като те +може и да не знаят как да се справят с изоставянето на Емакс. При +обикновени обстоятелства, обаче, ако не сте тръгнали да излизате от +системата, по-добре е да изоставите Емакс с C-z, вместо да излизате от +Емакс. -йНБ НОПЗП ЛПНБОДЙ C-x. еФП УРЙУЯЛ ОБ ФЕЪЙ, ЛПЙФП УФЕ ОБХЮЙМЙ: +Има много команди C-x. Ето списък на тези, които сте научили: - C-x C-f оБНЙТБОЕ ОБ ЖБКМ. - C-x C-s ъБРБЪЧБОЕ ОБ ЖБКМ. - C-x C-b уРЙУЯЛ ОБ ВХЖЕТЙФЕ. - C-x C-c йЪМЙЪБОЕ ПФ еНБЛУ. - C-x 1 йЪФТЙЧБОЕ ОБ ЧУЙЮЛЙ РТПЪПТГЙ ПУЧЕО ЕДЙО. - C-x u пФНСОБ. + C-x C-f Намиране на файл. + C-x C-s Запазване на файл. + C-x C-b Списък на буферите. + C-x C-c Излизане от Емакс. + C-x 1 Изтриване на всички прозорци освен един. + C-x u Отмяна. -йНЕОХЧБОЙФЕ ТБЪЫЙТЕОЙ ЛПНБОДЙ УБ ЛПНБОДЙ, ЛПЙФП УЕ ЙЪРПМЪЧБФ ДБЦЕ ПЭЕ -РП-ТСДЛП, ЙМЙ ЛПНБОДЙ, ЛПЙФП УЕ ЙЪРПМЪЧБФ УБНП Ч ПРТЕДЕМЕОЙ ТЕЦЙНЙ. -рТЙНЕТ Е ЛПНБОДБФБ replace-string, ЛПСФП ЪБНЕОС ЗМПВБМОП ЕДЙО ОЙЪ У -ДТХЗ. лПЗБФП ЧЯЧЕДЕФЕ M-x, еНБЛУ ЧЙ РПДУЛБЪЧБ Ч ДЯОПФП ОБ ЕЛТБОБ У -M-x Й ЧЙЕ ФТСВЧБ ДБ ЧЯЧЕДЕФЕ ЙНЕФП ОБ ЛПНБОДБФБ, Ч ФПЪЙ УМХЮБК -"replace-string". рТПУФП ЧЯЧЕДЕФЕ "repl s" Й еНБЛУ ЭЕ ЪБЧЯТЫЙ -ЙНЕФП. ( Е ЛМБЧЙЫЯФ Tab, ПВЙЛОПЧЕОП ОБНЙТБЭ УЕ ОБД ЛМБЧЙЫБ -CapsLock ЙМЙ ЛМБЧЙЫБ Shift ВМЙЪП ДП МЕЧЙС ЛТБК ОБ ЛМБЧЙБФХТБФБ.) -ъБЧЯТЫЕФЕ ЙНЕФП ОБ ЛПНБОДБФБ У . +Именуваните разширени команди са команди, които се използват даже още +по-рядко, или команди, които се използват само в определени режими. +Пример е командата replace-string, която заменя глобално един низ с +друг. Когато въведете M-x, Емакс ви подсказва в дъното на екрана с +M-x и вие трябва да въведете името на командата, в този случай +"replace-string". Просто въведете "repl s" и Емакс ще завърши +името. ( е клавишът Tab, обикновено намиращ се над клавиша +CapsLock или клавиша Shift близо до левия край на клавиатурата.) +Завършете името на командата с . -лПНБОДБФБ replace-string ЙЪЙУЛЧБ ДЧБ БТЗХНЕОФБ -- ОЙЪЯФ, ЛПКФП ЭЕ ВЯДЕ -ЪБНЕОСО, Й ОЙЪЯФ, ЛПКФП ЭЕ ЗП ЪБНЕОЙ. фТСВЧБ ДБ ЪБЧЯТЫЙФЕ ЧЯЧЕЦДБОЕФП -ОБ ЧУЕЛЙ БТЗХНЕОФ У . +Командата replace-string изисква два аргумента -- низът, който ще бъде +заменян, и низът, който ще го замени. Трябва да завършите въвеждането +на всеки аргумент с . ->> рТЙДЧЙЦЕФЕ ЛХТУПТБ ДП РТБЪОЙС ТЕД ДЧБ ТЕДБ ОБДПМХ РПД ФПЪЙ. - фПЗБЧБ ЧЯЧЕДЕФЕ M-x repl sРТПНЕОС +>> Придвижете курсора до празния ред, два реда надолу под този. + Тогава въведете M-x repl sпроменяизменя - ъБВЕМЕЦЕФЕ ЛБЛ ФПЪЙ ТЕД УЕ РТПНЕОС: ЧЙЕ ЪБНЕОЙИФЕ ДХНБФБ - Р-Т-П-Н-Е-О-С У "ЙЪНЕОС", ЛЯДЕФП Й ДБ УЕ ОБНЙТБ УМЕД ОБЮБМОПФП - НСУФП ОБ ЛХТУПТБ. + Забележете как този ред се променя: вие заменихте думата + п-р-о-м-е-н-я с "изменя", където и да се намира след началното + място на курсора. -ъбвемецлб: рТЕЧЛМАЮЧБОЕФП ЛЯН ЧЯЧЕЦДБОЕ ОБ ЛЙТЙМУЛЙ ВХЛЧБ УФБЧБ У C-\. +ЗАБЕЛЕЖКА: Превключването към въвеждане на кирилски буква става с C-\. -* бчфпнбфйюоп ъбрбъчбое +* АВТОМАТИЧНО ЗАПАЗВАНЕ ----------------------- -лПЗБФП УФЕ ОБРТБЧЙМЙ РТПНЕОЙ ЧЯЧ ЖБКМ, ОП ПЭЕ ОЕ УФП ЗП ЪБРБЪЙМЙ, ФЕ -НПЗБФ ДБ ВЯДБФ ЪБЗХВЕОЙ БЛП ЛПНРАФЯТЯФ ЧОЕЪБРОП УЕ ЙЪЛМАЮЙ. ъБ ДБ УЕ -ЪБРБЪЙФЕ ПФ ФБЛЙЧБ УЙФХБГЙЙ, еНБЛУ РЕТЙПДЙЮОП ЪБРБЪЧБ "БЧФПНБФЙЮОП -ЪБРБЪЧБО" ЖБКМ ЪБ ЧУЕЛЙ ЖБКМ, ЛПКФП ТЕДБЛФЙТБФЕ. йНЕФП ОБ БЧФПНБФЙЮОП -ЪБРБЪЧБОЙС ЖБКМ ЙНБ # Ч ОБЮБМПФП Й Ч ЛТБС; ОБРТЙНЕТ, БЛП ЧБЫЙСФ ЖБКМ Е -У ЙНЕ "hello.c", ЙНЕФП ОБ ОЕЗПЧЙС БЧФПНБФЙЮОП ЪБРБЪЧБО ЖБКМ ЭЕ ВЯДЕ -"#hello.c#". лПЗБФП ЪБРБЪЧБФЕ ЖБКМ РП ПВЙЛОПЧЕОЙС ОБЮЙО, еНБЛУ -ЙЪФТЙЧБ ОЕЗПЧЙС БЧФПНБФЙЮОП ЪБРЙУЧБО ЖБКМ. +Когато сте направили промени във файл, но още не сте го запазили, те +могат да бъдат загубени, ако компютърът внезапно се изключи. За да ви +предпази от такива ситуации, Емакс периодично запазва "автоматично +запазван" файл за всеки файл, който редактирате. Името на автоматично +запазвания файл има # в началото и в края; например, ако вашият файл е +с име "hello.c", името на неговия автоматично запазван файл ще бъде +"#hello.c#". Когато запазвате файл по обикновения начин, Емакс +изтрива неговия автоматично записван файл. -бЛП ЛПНРАФЯТЯФ ЪБЧЙУОЕ, НПЦЕ ДБ ЧЯЪУФБОПЧЙФЕ ЧБЫБФБ БЧФПНБФЙЮОП -ЪБРБЪЧБОБ ТЕДБЛГЙС ЛБФП ОБНЕТЙФЕ ЖБКМБ ЛБЛФП ПВЙЛОПЧЕОП (ЖБКМЯФ, ЛПКФП -УФЕ ТЕДБЛФЙТБМЙ, ОЕ БЧФПНБФЙЮОП ЪБРБЪЧБОЙС) Й УМЕД ФПЧБ ЧЯЧЕДЕФЕ M-x -recover file. лПЗБФП ЛПНБОДБФБ ЙЪЙУЛБ РПФЧЯТЦДЕОЙЕ, ЧЯЧЕДЕФЕ -yes ЪБ ДБ РТПДЯМЦЙФЕ Й ДБ ЧЯЪУФБОПЧЙФЕ БЧФПНБФЙЮОП ЪБРБЪЧБОЙФЕ -ДБООЙ. +Ако компютърът зависне, може да възстановите вашата автоматично +запазвана редакция, като намерите файла както обикновено (файлът, +който сте редактирали, не автоматично запазвания) и след това въведете +M-x recover file. Когато командата изиска потвърждение, +въведете yes, за да продължите и да възстановите автоматично +запазваните данни. -* еип пвмбуффб +* ЕХО ОБЛАСТТА -------------- -бЛП еНБЛУ ЧЙДЙ, ЮЕ ЧЯЧЕЦДБФЕ НОПЗПЪОБЛПЧЙ ЛПНБОДЙ ВБЧОП, ЭЕ ЧЙ ЗЙ -РПЛБЦЕ Ч ДЯОПФП ОБ ЕЛТБОБ Ч ПВМБУФ ОБТЙЮБОБ "ЕИП ПВМБУФ". еИП -ПВМБУФФБ ПВИЧБЭБ РПУМЕДОЙС ТЕД ПФ ЕЛТБОБ. +Ако Емакс види, че въвеждате многознакови команди бавно, ще ви ги +покаже в дъното на екрана, в област, наричана "ехо област". Ехо +областта обхваща последния ред от екрана. -* тед об тецйнб ---------------- - -тЕДЯФ ФПЮОП ОБД ЕИП ПВМБУФФБ УЕ ОБТЙЮБ "ТЕД ОБ ТЕЦЙНБ" (mode line). -фПК РПЛБЪЧБ ОЕЭП ЛБФП: - ---:** TUTORIAL (Fundamental)--L670--58%---------------- - -фПЪЙ ТЕД ДБЧБ РПМЕЪОБ ЙОЖПТНБГЙС ЪБ УЯУФПСОЙЕФП ОБ еНБЛУ Й ФЕЛУФБ, -ЛПКФП ТЕДБЛФЙТБФЕ. - -чЕЮЕ ЪОБЕФЕ ЛБЛЧП ПЪОБЮБЧБ ЙНЕФП ОБ ЖБКМБ -- ФПЧБ Е ЖБКМЯФ, ЛПКФП УФЕ -ОБНЕТЙМЙ. -NN%-- РПЛБЪЧБ ЧБЫБФБ ФЕЛХЭБ РПЪЙГЙС Ч ФЕЛУФБ; ФПЧБ -ПЪОБЮБЧБ, ЮЕ NN РТПГЕОФБ ПФ ФЕЛУФБ Е ОБД ЧЯТИБ ОБ ЕЛТБОБ. бЛП -ОБЮБМПФП ОБ ЖБКМБ Е ОБ ЕЛТБОБ, ЭЕ УЕ РПЛБЪЧБ --Top-- (ЧТЯИ) ЧНЕУФП ---00%--. бЛП ЛТБС ОБ ЖБКМБ Е ОБ ЕЛТБОБ, ЭЕ УЕ РПЛБЪЧБ --Bot-- (ДЯОП). -бЛП ЗМЕДБФЕ ФЕЛУФ, ЛПКФП Е ФПМЛПЧБ НБМЯЛ, ЮЕ УЕ РПЛБЪЧБ ЙЪГСМП ОБ -ЕЛТБОБ, ТЕДЯФ ОБ ТЕЦЙНБ ЭЕ ЙЪЧЕДЕ --All--. - -ъОБЛЯФ L Й ГЙЖТЙФЕ РПЛБЪЧБФ НСУФПФП РП ДТХЗ ОБЮЙО: ФПЧБ Е ОПНЕТЯФ ОБ -ФЕЛХЭЙС ТЕД ОБ ФПЮЛБФБ. - -ъЧЕЪДЙФЕ ВМЙЪП ДП ОБЮБМПФП ПЪОБЮБЧБФ, ЮЕ УФЕ ОБРТБЧЙМЙ РТПНЕОЙ Ч -ФЕЛУФБ. чЕДОБЗБ УМЕД ЛБФП РПУЕФЙФЕ ЙМЙ ЪБРБЪЙФЕ ЖБКМ ФБЪЙ ЮБУФ ПФ -ТЕДБ ОБ ТЕЦЙНБ ЧЕЮЕ ОЕ РПЛБЪЧБ ЪЧЕЪДЙ, Б УБНП ФЙТЕФБ. - -юБУФФБ ПФ ТЕДБ ОБ ТЕЦЙНБ ЧЯФТЕ Ч УЛПВЙФЕ Е ЪБ ДБ ЧЙ РПЛБЦЕ Ч ЛБЛЯЧ -ТЕЦЙН ОБ ТЕДБЛФЙТБОЕ УЕ ОБНЙТБФЕ. рПДТБЪВЙТБЭЙСФ УЕ ТЕЦЙН Е -Fundamental (пУОПЧЕО), ЛПКФП ЙЪРПМЪЧБФЕ Ч НПНЕОФБ. фПЧБ Е РТЙНЕТ ЪБ -"ЗМБЧЕО ТЕЦЙН" (major mode). - -еНБЛУ ЙНБ НОПЗП ЗМБЧОЙ ТЕЦЙНЙ. оСЛПЙ ПФ ФСИ УБ РТЕДЧЙДЕОЙ ЪБ -ТЕДБЛФЙТБОЕ ОБ ТБЪМЙЮОЙ ЕЪЙГЙ Й/ЙМЙ ЧЙДПЧЕ ФЕЛУФ, ЛБФП ОБРТЙНЕТ ТЕЦЙН -мЙУР, ТЕЦЙН фЕЛУФ Й ДТХЗЙ. чЯЧ ЧУЕЛЙ ЕДЙО НПНЕОФ ПФ ЧТЕНЕ ФПЮОП ЕДЙО -ЗМБЧЕО ТЕЦЙН Е БЛФЙЧЕО Й ОЕЗПЧПФП ЙНЕ НПЦЕ ЧЙОБЗЙ ДБ ВЯДЕ ОБНЕТЕОП Ч -ТЕДБ ОБ ТЕЦЙНБ ФПЮОП ЛБЛФП "Fundamental" УЕЗБ. - -чУЕЛЙ ЗМБЧЕО ТЕЦЙН РТБЧЙ ОСЛПЙ ЛПНБОДЙ ДБ УЕ ДЯТЦБФ РП ТБЪМЙЮЕО -ОБЮЙО. оБРТЙНЕТ, ЙНБ ЛПНБОДЙ ЪБ ТЕДБЛФЙТБОЕ ОБ ЛПНЕОФБТЙ Ч РТПЗТБНЙ, -Й ФЯК ЛБФП ЧУЕЛЙ РТПЗТБНЕО ЕЪЙЛ ЙНБ ТБЪМЙЮОБ ЙДЕС ЪБ ФПЧБ ЛБЛ ФТСВЧБ -ДБ ЙЪЗМЕЦДБФ ЛПНЕОФБТЙФЕ, ЧУЕЛЙ ЗМБЧЕО ТЕЦЙН ФТСВЧБ ДБ ЧНЯЛЧБ -ЛПНЕОФБТЙ РП ТБЪМЙЮЕО ОБЮЙО. чУЕЛЙ ЗМБЧЕО ТЕЦЙН Е ЙНЕ ОБ ТБЪЫЙТЕОБ -ЛПНБОДБ, У ЛПСФП РТЕЧЛМАЮЧБФЕ ЛЯН ФПЪЙ ТЕЦЙН. оБРТЙНЕТ, M-x -fundamental-mode Е ЛПНБОДБ ЪБ РТЕЧЛМАЮЧБОЕ ЛЯН ТЕЦЙН Fundamental. - -лПЗБФП ТЕДБЛФЙТБФЕ ФЕЛУФ ОБ ЕУФЕУФЧЕО ЕЪЙЛ, ЛБФП ФПЪЙ ЖБКМ, -ОБК-ЧЕТПСФОП ФТСВЧБ ДБ ЙЪРПМЪЧБФЕ ТЕЦЙН фЕЛУФ. - ->> чЯЧЕДЕФЕ M-x text mode. - -оЕ УЕ ВЕЪРПЛПКФЕ, ОЙЛПС ПФ еНБЛУ ЛПНБОДЙФЕ, ЛПЙФП УФЕ ОБХЮЙМЙ, ОСНБ ДБ -УЕ РТПНЕОЙ РП ОСЛБЛЯЧ УЯЭЕУФЧЕО ОБЮЙО. оП НПЦЕ ДБ ЪБВЕМЕЦЙФЕ, ЮЕ M-f -Й M-b УЕЗБ ЧЯЪРТЙЕНБФ БРПУФТПЖЙФЕ (') ЛБФП ЮБУФ ПФ ДХНЙФЕ. рТЕДЙ -ФПЧБ, Ч ПУОПЧОЙС ТЕЦЙН (Fundamental) M-f Й M-b УЕ ЧЯЪРТЙЕНБИБ ЛБФП -ТБЪДЕМЙФЕМЙ ОБ ДХНЙ. - -зМБЧОЙФЕ ТЕЦЙНЙ ПВЙЛОПЧЕОП РТБЧСФ НБМЛЙ РТПНЕОЙ ЛБФП ФБЪЙ: РПЧЕЮЕФП -ЛПНБОДЙ ЧЯТЫБФ "УЯЭБФБ ТБВПФБ" ЧЯЧ ЧУЕЛЙ ЗМБЧЕО ТЕЦЙН, ОП ТБВПФСФ РП -НБМЛП РП-ТБЪМЙЮЕО ОБЮЙО. - -ъБ ДБ ЧЙДЙФЕ ДПЛХНЕОФБГЙСФБ ОБ ЧБЫЙС ФЕЛХЭ ЗМБЧЕО ТЕЦЙН, ЧЯЧЕДЕФЕ C-h -m. - ->> хРПФТЕВЕФЕ C-u C-v ЧЕДОЯЦ ЙМЙ РПЧЕЮЕ РЯФЙ ЪБ ДБ ДПЛБТБФЕ ФПЪЙ ТЕД - ВМЙЪП ДП ЧЯТИБ ОБ ЕЛТБОБ. ->> чЯЧЕДЕФЕ C-h m, ЪБ ДБ ЧЙДЙФЕ ЛБЛ ФЕЛУФПЧЙСФ ТЕЦЙН УЕ ТБЪМЙЮБЧБ ПФ - ПУОПЧОЙС ТЕЦЙН. ->> чЯЧЕДЕФЕ C-x 1 ЪБ ДБ РТЕНБИОЕФЕ ДПЛХНЕОФБГЙСФБ ПФ ЕЛТБОБ. - -зМБЧОЙФЕ ТЕЦЙНЙ УЕ ОБТЙЮБФ ЗМБЧОЙ, ЪБЭПФП ЙНБ Й НБМЛЙ ТЕЦЙНЙ (minor -modes). нБМЛЙФЕ ТЕЦЙНЙ ОЕ УБ БМФЕТОБФЙЧЙ ОБ ЗМБЧОЙФЕ, Б РТПУФП НБМЛЙ -РТПНЕОЙ ЛЯН ФСИ. чУЕЛЙ НБМЯЛ ТЕЦЙН НПЦЕ ДБ ВЯДЕ ЧЛМАЮЕО ЙМЙ ЙЪЛМАЮЕО -УБН ЪБ УЕВЕ УЙ, ОЕЪБЧЙУЙНП ПФ ЧУЙЮЛЙ ДТХЗЙ НБМЛЙ ТЕЦЙНЙ, Й ОЕЪБЧЙУЙНП -ПФ ЧБЫЙС ЗМБЧЕО ТЕЦЙН. фБЛБ ЮЕ НПЦЕ ДБ ОЕ ЙЪРПМЪЧБФЕ НБМЛЙ ТЕЦЙНЙ, ДБ -ЙЪРПМЪЧБФЕ ЕДЙО НБМЯЛ ТЕЦЙН, ЙМЙ ДБ ЙЪРПМЪЧБФЕ ОСЛБЛЧБ ЛПНВЙОБГЙС ПФ -ОСЛПМЛП НБМЛЙ ТЕЦЙНБ. - -еДЙО ЗМБЧЕО ТЕЦЙН, ЛПКФП Е НОПЗП РПМЕЪЕО, ПУПВЕОП ЪБ ТЕДБЛФЙТБОЕ ОБ -ФЕЛУФ ОБ ЕУФЕУФЧЕО ЕЪЙЛ, Е ТЕЦЙНЯФ ОБ БЧФПНБФЙЮОП ЪБРЯМЧБОЕ (Auto Fill -mode). лПЗБФП ФПЪЙ ТЕЦЙН Е ЧЛМАЮЕО, еНБЛУ БЧФПНБФЙЮОП ТБЪДЕМС ТЕДБ -РТЙ НСУФПФП НЕЦДХ ДХНЙФЕ, ЛПЗБФП ЧНЯЛЧБФЕ ФЕЛУФ Й ОБРТБЧЙФЕ ТЕД, ЛПКФП -Е ФЧЯТДЕ ДЯМЯЗ. - -нПЦЕ ДБ ЧЛМАЮЙФЕ ТЕЦЙНБ ОБ БЧФПНБФЙЮОП ЪБРЯМЧБОЕ ЛБФП ЙЪРЯМОЙФЕ M-x -auto fill mode. лПЗБФП ТЕЦЙНЯФ Е ЧЛМАЮЕО, НПЦЕ ДБ ЗП -ЙЪЛМАЮЙФЕ У M-x auto fill mode. бЛП ТЕЦЙНЯФ Е ЙЪЛМАЮЕО, ФБЪЙ -ЛПНБОДБ ЗП ЧЛМАЮЧБ, Б БЛП Е ЧЛМАЮЕО, ЗП ЙЪЛМАЮЧБ. лБЪЧБНЕ, ЮЕ -ЛПНБОДБФБ "ПВТЯЭБ ТЕЦЙНБ". - ->> чЯЧЕДЕФЕ M-x auto fill mode УЕЗБ. уМЕД ФПЧБ ЧНЯЛОЕФЕ ТЕД - ПФ "asdf " ПФОПЧП Й ПФОПЧП ДПЛБФП ОЕ ЧЙДЙФЕ, ЮЕ ФЕЛУФБ УЕ ТБЪДЕМС - ОБ ДЧБ ТЕДБ. фТСВЧБ ДБ УМБЗБФЕ ЙОФЕТЧБМЙ НЕЦДХ ДХНЙФЕ, ЪБЭПФП - БЧФПНБФЙЮОПФП ЪБРЯМЧБОЕ ТБЪДЕМС ТЕДПЧЕФЕ УБНП РТЙ ЙОФЕТЧБМЙФЕ. - -зТБОЙГБФБ ПВЙЛОПЧЕОП Е ЪБДБДЕОБ ОБ 70 ЪОБЛБ, ОП НПЦЕФЕ ДБ С РТПНЕОЙФЕ -У ЛПНБОДБФБ C-x f. фТСВЧБ ДБ ЪБДБЧБФЕ ФБЪЙ ЗТБОЙГБ ЛБФП ЮЙУМПЧ -БТЗХНЕОФ ОБ ЛПНБОДБФБ. - ->> чЯЧЕДЕФЕ C-x f У БТЗХНЕОФ 20. (C-u 2 0 C-x f). - уЕЗБ ЧЯЧЕДЕФЕ ОСЛБЛЯЧ ФЕЛУФ Й ЧЙЦФЕ ЛБЛ еНБЛУ ЪБРЯМЧБ ТЕДПЧЕФЕ У РП - ОЕ РПЧЕЮЕ ПФ 20 ЪОБЛБ. рПУМЕ ЧЯТОЕФЕ ПВТБФОП ЗТБОЙГБФБ ОБ 70 - ЙЪРПМЪЧБКЛЙ C-x f ПФОПЧП. - -бЛП ОБРТБЧЙФЕ РТПНЕОЙ Ч УТЕДБФБ ОБ БВЪБГ, ТЕЦЙНЯФ ОБ БЧФПНБФЙЮОП -ЪБРЯМЧБОЕ ОСНБ ДБ ЗП ЪБРЯМОЙ ОБОПЧП ЪБ ЧБУ. -ъБ ДБ ЪБРЯМОЙФЕ ОБОПЧП БВЪБГ ЧЯЧЕЦДБКФЕ M-q (META-q) ДПЛБФП ЛХТУПТЯФ Е -ЧЯФТЕ Ч БВЪБГБ. - ->> рТЙДЧЙЦЕФЕ ЛХТУПТБ ЧЯФТЕ Ч РТЕДЙЫОЙС БВЪБГ Й ЧЯЧЕДЕФЕ M-q. - - -* фятуеое ---------- - -еНБЛУ НПЦЕ ДБ ЙЪЧЯТЫЧБ ФЯТУЕОЙС ОБ ОЙЪПЧЕ (ФПЧБ УБ РПУМЕДПЧБФЕМОПУФЙ -ПФ ЪОБГЙ ЙМЙ ДХНЙ) ЙМЙ ОБРТЕД Ч ФЕЛУФБ ЙМЙ ОБЪБД Ч ОЕЗП. фЯТУЕОЕФП ОБ -ОЙЪ Е РТЙДЧЙЦЧБЭБ ЛХТУПТБ ЛПНБОДБ; ФС РТЕНЕУФЧБ ЛХТУПТБ ОБ УМЕДЧБЭПФП -НСУФП, ЛЯДЕФП УЕ УТЕЭБ ОЙЪЯФ. - -лПНБОДБФБ ЪБ ФЯТУЕОЕ ОБ еНБЛУ УЕ ТБЪМЙЮБЧБ ПФ ЛПНБОДБФБ ЪБ ФЯТУЕОЕ ОБ -РПЧЕЮЕФП ТЕДБЛФПТЙ РП ФПЧБ, ЮЕ ФС Е "РПУФЯРЛПЧБ". фПЧБ ПЪОБЮБЧБ, ЮЕ -ФЯТУЕОЕФП УЕ ЙЪЧЯТЫЧБ ПЭЕ ДПЛБФП ЧЯЧЕЦДБФЕ ФЕЛУФБ, ЛПКФП ФЯТУЙФЕ. - -лПНБОДБФБ ЪБ ЪБРПЮЧБОЕ ОБ ФЯТУЕОЕ Е C-s ЪБ ФЯТУЕОЕ ОБРТЕД, Й C-r ЪБ -ФЯТУЕОЕ ОБЪБД. оп рпюблбкфе! оЕ ЗЙ РТПВЧБКФЕ УЕЗБ. - -лПЗБФП ЧЯЧЕДЕФЕ C-s ЭЕ ЪБВЕМЕЦЙФЕ, ЮЕ ОЙЪЯФ "I-search" УЕ РПСЧСЧБ ЛБФП -РПДУЛБЪЛБ Ч ЕИП ПВМБУФФБ. фПЧБ ЧЙ ЛБЪЧБ, ЮЕ еНБЛУ Е Ч ФПЧБ, ЛПЕФП УЕ -ОБТЙЮБ РПУФЯРЛПЧП ФЯТУЕОЕ, ЮБЛБКЛЙ ЧЙ ДБ ЧЯЧЕЦДБФЕ ФЕЛУФБ, ЛПКФП -ЙУЛБФЕ ДБ ФЯТУЙФЕ. РТЙЛМАЮЧБ ФЯТУЕОЕФП. - ->> уЕЗБ ЧЯЧЕДЕФЕ C-s ЪБ ДБ ЪБРПЮОЕФЕ ФЯТУЕОЕФП. вбчоп, ВХЛЧБ РП - ВХЛЧБ, ЧЯЧЕДЕФЕ ДХНБФБ "ФЯТУЕОЕ", ЙЪЮБЛЧБКЛЙ УМЕД ЧЯЧЕЦДБОЕФП ОБ - ЧУЕЛЙ ЪОБЛ, ЪБ ДБ НПЦЕ ДБ ЪБВЕМЕЦЙФЕ ЛБЛЧП УФБЧБ У ЛХТУПТБ. уЕЗБ - ЙЪЧЯТЫЙИФЕ ФЯТУЕОЕ ОБ "ФЯТУЕОЕ" ЧЕДОЯЦ. ->> чЯЧЕДЕФЕ ПФОПЧП C-s, ЪБ ДБ ФЯТУЙФЕ ДТХЗП УЯЧРБДЕОЙЕ У "ФЯТУЕОЕ". ->> уЕЗБ ЧЯЧЕДЕФЕ ФТЙ РЯФЙ Й ЧЙЦФЕ ЛБЛ УЕ РТЙДЧЙЦЧБ ЛХТУПТБ. ->> чЯЧЕДЕФЕ ЪБ ДБ РТЕЛТБФЙФЕ ФЯТУЕОЕФП. - -ъБВЕМСЪБИФЕ МЙ ЛБЛЧП УФБОБ? еНБЛУ, ЛПЗБФП ФЯТУЙ РПУФЯРЛПЧП, УЕ ПРЙФЧБ -ДБ ОБНЕТЙ УМЕДЧБЭПФП УЯЧРБДЕОЙЕ ОБ ОЙЪБ, ЛПКФП УЕ ЧЯЧЕЦДБ. ъБ ДБ -ПФЙДЕФЕ ОБ УМЕДЧБЭПФП УЯЧРБДЕОЙЕ ОБ "ФЯТУОЕ" РТПУФП ПФОПЧП ЧЯЧЕДЕФЕ -C-s. бЛП ОСНБ ФБЛПЧБ УЯЧРБДЕОЙЕ, еНБЛУ ВЙВЙРЧБ Й ЧЙ ЛБЪЧБ, ЮЕ -ФЯТУЕОЕФП Е "РТПЧБМЕОП" (failing). C-g УЯЭП РТЕЛТБФСЧБ ФЯТУЕОЕФП. - -ъбвемецлб: оБ ОСЛПЙ УЙУФЕНЙ ЧЯЧЕЦДБОЕФП ОБ C-s ЭЕ ЪБНТБЪЙ ЕЛТБОБ Й ЧЙЕ -ОСНБ ДБ НПЦЕ ДБ ЧЙДЙФЕ РПЧЕЮЕ ТЕБЛГЙС ПФ еНБЛУ. фПЧБ РПЛБЪЧБ, ЮЕ -"УРПУПВОПУФ" ОБ ПРЕТБГЙПООБФБ УЙУФЕНБ ОБТЕЮЕОБ "ХРТБЧМЕОЙЕ ОБ РПФПЛБ" -Е РТЙИЧБОБМБ C-s Й ОЕ ЗП РХУЛБ ДП еНБЛУ. ъБ ДБ ТБЪНТБЪЙФЕ ЕЛТБОБ -ЧЯЧЕДЕФЕ C-q. фПЗБЧБ ЧЙЦФЕ УЕЛГЙСФБ "уРПОФБООП ЧЛМАЮЧБОЕ ОБ -РПУФЯРЛПЧПФП ФЯТУЕОЕ" (Spontaneous Entry to Incremental Search) Ч -ТЯЛПЧПДУФЧПФП ОБ еНБЛУ ЪБ УЯЧЕФ ЛБЛ ДБ УЕ УРТБЧЙФЕ У ФБЪЙ -"УРПУПВОПУФ". - -бЛП УФЕ Ч УТЕДБФБ ОБ РПУФЯРЛПЧП ФЯТУЕОЕ Й ЧЯЧЕДЕФЕ ЭЕ -ЪБВЕМЕЦЙФЕ, ЮЕ РПУМЕДОЙСФ ЪОБЛ Ч ФЯТУЕОЙС ОЙЪ УЕ ЙЪФТЙЧБ Й ФЯТУЕОЕФП -УЕ ЧТЯЭБ ЛЯН РПУМЕДОПФП НСУФП ОБ ФЯТУЕОЕ. оБРТЙНЕТ, РТЕДРПМПЦЕФЕ, ЮЕ -УФЕ ЧЯЧЕМЙ "Ф", ЪБ ДБ ОБНЕТЙФЕ РЯТЧПФП УЯЧРБДЕОЙЕ У "Ф". уЕЗБ БЛП -ЧЯЧЕДЕФЕ "Я" ЛХТУПТЯФ ЭЕ УЕ РТЙДЧЙЦЙ ЛЯН РЯТЧПФП УЯЧРБДЕОЙЕ ОБ "ФЯ". -уЕЗБ ЧЯЧЕДЕФЕ . фПЧБ ЙЪФТЙЧБ ЪОБЛБ "Я" ПФ ОЙЪБ ЪБ ФЯТУЕОЕ, Й -ЛХТУПТЯФ УЕ РТЕНЕУФЧБ ОБЪБД ДП РЯТЧПФП УЯЧРБДЕОЙЕ У "Ф". - -бЛП УФЕ Ч УТЕДБФБ ОБ ФЯТУЕОЕ Й ЧЯЧЕДЕФЕ ЛПОФТПМЕО ЙМЙ НЕФБ ЪОБЛ (У -ОСЛПМЛП ЙЪЛМАЮЕОЙС -- ЪОБГЙФЕ, ЛПЙФП УБ УРЕГЙБМОЙ РП ЧТЕНЕ ОБ ФЯТУЕОЕ, -ЛБФП C-s Й C-r), ФЯТУЕОЕФП УЕ РТЕЛТБФСЧБ. - -C-s ЪБРПЮЧБ ФЯТУЕОЕ, ЛПЕФП ЗМЕДБ ЪБ УЯЧРБДЕОЙЕ У ОЙЪБ ДБДЕО ЪБ ФЯТУЕОЕ -умед ФЕЛХЭПФП НСУФП ОБ ЛХТУПТБ. бЛП ЙУЛБФЕ ДБ ФЯТУЙФЕ ОЕЭП РП-ТБООП -ПФ ФЕЛУФБ, ЧНЕУФП ФПЧБ ЧЯЧЕДЕФЕ C-r. чУЙЮЛП, ЛПЕФП ЛБЪБИНЕ ЪБ C-s, -ЧБЦЙ Й ЪБ C-r, ПУЧЕО ЮЕ РПУПЛБФБ ОБ ФЯТУЕОЕ Е ПВЯТОБФБ. - - -* нопцеуфчп ртпъптгй +* РЕД НА РЕЖИМА ---------------- -еДОБ ПФ РТЙЧМЕЛБФЕМОЙФЕ УРПУПВОПУФЙ ОБ еНБЛУ Е ФБЪЙ, ЮЕ НПЦЕ ДБ -ЗМЕДБФЕ РПЧЕЮЕ ПФ ЕДЙО РТПЪПТЕГ ОБ ЕЛТБОБ Ч ДБДЕО НПНЕОФ ПФ ЧТЕНЕ. +Редът точно над ехо областта се нарича "ред на режима" (mode line). +Той показва нещо като: ->> рТЙДЧЙЦЕФЕ ЛХТУПТБ ДП ФПЪЙ ТЕД Й ЧЯЧЕДЕФЕ C-u 0 C-l (ФПЧБ Е - CONTROL-L, ОЕ CONTROL-1). +-R:** TUTORIAL.bg (Fundamental)--L670--58%---------------- ->> уЕЗБ ЧЯЧЕДЕФЕ C-x 2, ЛПЕФП ЭЕ ТБЪДЕМЙ ЕЛТБОБ ОБ ДЧБ ПФДЕМОЙ - РТПЪПТЕГБ. дЧБФБ РТПЪПТЕГБ РПЛБЪЧБФ ФПЧБ ЧЯЧЕДЕОЙЕ. лХТУПТЯФ - ПУФБЧБ ОБ РП-ЗПТОЙС РТПЪПТЕГ. +Този ред дава полезна информация за състоянието на Емакс и текста, +който редактирате. ->> чЯЧЕДЕФЕ C-M-v ЪБ ДБ УЛТПМЙТБФЕ ДПМОЙС РТПЪПТЕГ. (бЛП ОСНБФЕ - ЙУФЙОУЛЙ ЛМБЧЙЫ META, ЧЯЧЕДЕФЕ ESC C-v.) +Вече знаете какво означава името на файла -- това е файлът, който сте +намерили. -NN%-- показва вашата текуща позиция в текста; това +означава, че NN процента от текста е над върха на екрана. Ако +началото на файла е на екрана, ще се показва --Top-- (връх) вместо +--00%--. Ако края на файла е на екрана, ще се показва --Bot-- (дъно). +Ако гледате текст, който е толкова малък, че се показва изцяло на +екрана, редът на режима ще изведе --All--. ->> чЯЧЕДЕФЕ C-x o ("o" ПФ "other" -- "ДТХЗ") ЪБ ДБ РТЙДЧЙЦЙФЕ ЛХТУПТБ - Ч ДПМОЙС РТПЪПТЕГ. ->> йЪРПМЪЧБКФЕ C-v Й M-v Ч ДПМОЙС РТПЪПТЕГ ЪБ ДБ ЗП УЛТПМЙТБФЕ. - рТПДЯМЦЕФЕ ЮЕФЕОЕФП ОБ ФЕЪЙ ОБУПЛЙ ПФ ЧЯЧЕДЕОЙФЕП Ч ЗПТОЙС - РТПЪПТЕГ. +Знакът L и цифрите показват мястото по друг начин: това е номерът на +текущия ред на точката. ->> чЯЧЕДЕФЕ C-x o ПФОПЧП ЪБ ДБ РТЙДЧЙЦЙФЕ ЛХТУПТБ ПФОПЧП Ч ЗПТОЙС - РТПЪПТЕГ. лХТУПТЯФ Ч ЗПТОЙС РТПЪПТЕГ Е ФПЮОП ФБН, ЛЯДЕФП Е ВЙМ - РТЕДЙ. +Звездите близо до началото означават, че сте направили промени в +текста. Веднага след като посетите или запазите файл, тази част от +реда на режима вече не показва звезди, а само тирета. -нПЦЕ ДБ РТПДЯМЦЙФЕ ДБ ЙЪРПМЪЧБФЕ C-x o ЪБ ДБ РТЕЧЛМАЮЧБФЕ НЕЦДХ -РТПЪПТГЙФЕ. чУЕЛЙ РТПЪПТЕГ ЙНБ УПВУФЧЕОП НСУФП ОБ ЛХТУПТБ, ОП УБНП -ЕДЙО РТПЪПТЕГ РПЛБЪЧБ ЛХТУПТ. чУЙЮЛЙ ПВЙЛОПЧЕОЙ ЛПНБОДЙ ЪБ -ТЕДБЛФЙТБОЕ УЕ РТЙМБЗБФ Ч РТПЪПТЕГБ, Ч ЛПКФП Е ЛХТУПТЯФ. оЙЕ ОБТЙЮБНЕ -ФПЪЙ РТПЪПТЕГ "ФЕЛХЭ РТПЪПТЕГ". +Частта от реда на режима вътре в скобите е, за да ви покаже в какъв +режим на редактиране се намирате. Подразбиращият се режим е +Fundamental (Основен), който използвате в момента. Това е пример за +"главен режим" (major mode). -лПНБОДБФБ C-M-v Е НОПЗП РПМЕЪОБ, ЛПЗБФП ТЕДБЛФЙТБФЕ ФЕЛУФ Ч ЕДЙО -РТПЪПТЕГ Й ЙЪРПМЪЧБФЕ ДТХЗЙС РТПЪПТЕГ РТПУФП ЪБ УРТБЧЛБ. нПЦЕ ДБ -ДЯТЦЙФЕ ЛХТУПТБ ЧЙОБЗЙ Ч РТПЪПТЕГБ, ЛЯДЕФП ТЕДБЛФЙТБФЕ, Й ДБ -ОБРТЕДЧБФЕ РПУМЕДПЧБФЕМОП Ч ДТХЗЙС РТПЪПТЕГ ЮТЕЪ C-M-v. +Емакс има много главни режими. Някои от тях са предвидени за +редактиране на различни езици и/или видове текст, като например режим +Лисп, режим Текст и други. Във всеки един момент от време точно един +главен режим е активен и неговото име може винаги да бъде намерено в +реда на режима, точно както "Fundamental" сега. -C-M-v Е РТЙНЕТ ЪБ ЪОБЛ CONTROL-META. бЛП ЙНБФЕ ЙУФЙОУЛЙ ЛМБЧЙЫ META, -НПЦЕ ДБ ЧЯЧЕЦДБФЕ C-M-v ЪБДЯТЦБКЛЙ ЕДОПЧТЕНЕООП CONTROL Й META ДПЛБФП -ЧЯЧЕЦДБФЕ v. оСНБ ЪОБЮЕОЙЕ ДБМЙ CONTROL ЙМЙ META "Е ОБФЙУОБФ РЯТЧЙ", -ЪБЭПФП Й ДЧБФБ ЛМБЧЙЫБ ДЕКУФЧБФ НПДЙЖЙГЙТБКЛЙ ЪОБЛБ, ЛПКФП УФЕ ЧЯЧЕМЙ. +Всеки главен режим прави някои команди да се държат по различен начин. +Например, има команди за редактиране на коментари в програми, и тъй +като всеки програмен език има различна идея за това как трябва да +изглеждат коментарите, всеки главен режим трябва да вмъква коментари +по различен начин. Всеки главен режим е име на разширена команда, с +която превключвате към този режим. Например, M-x fundamental-mode е +команда за превключване към режим Fundamental. -бЛП ОСНБФЕ ЙУФЙОУЛЙ ЛМБЧЙЫ META, Й ЙЪРПМЪЧБФЕ ESC ЧНЕУФП ФПЧБ, ТЕДЯФ -ЙНБ ЪОБЮЕОЙЕ: ФТСВЧБ ДБ ЧЯЧЕЦДБФЕ ESC РПУМЕДЧБО ПФ CONTROL-v, ЪБЭПФП -CONTROL-ESC v ОСНБ ДБ ТБВПФЙ. фПЧБ Е ФБЛБ, ЪБЭПФП ESC Е УПВУФЧЕО -ЪОБЛ, Б ОЕ НПДЙЖЙЛБФПТ. +Когато редактирате текст на естествен език, като този файл, +най-вероятно трябва да използвате режим Текст (text). ->> чЯЧЕДЕФЕ C-x 1 (Ч ЗПТОЙС РТПЪПТЕГ) ЪБ ДБ НБИОЕФЕ ДПМОЙС РТПЪПТЕГ. +>> Въведете M-x text mode. -(бЛП УФЕ ЧЯЧЕМЙ C-x 1 Ч ДПМОЙС РТПЪПТЕГ, ФПЧБ ЭЕ НБИОЕ ЗПТОЙС. -нЙУМЕФЕ ЪБ ФБЪЙ ЛПНБОДБ ЛБФП "ъБДТЯЦ ФПЮОП ЕДЙО РТПЪПТЕГ -- ФПЪЙ, Ч -ЛПКФП УЯН УЕЗБ".) +Не се безпокойте, никоя от Емакс командите, които сте научили, няма да +се промени по някакъв съществен начин. Но може да забележите, че M-f +и M-b сега възприемат апострофите (') като част от думите. Преди +това, в основния режим (Fundamental), M-f и M-b се възприемаха като +разделители на думи. -оСНБ ОХЦДБ ДБ ЙЪЧЕЦДБФЕ ЕДЙО Й УЯЭЙ ВХЖЕТ Ч ДЧБФБ РТПЪПТЕГБ. бЛП -ЙЪРПМЪЧБФЕ C-x C-f ЪБ ДБ ОБНЕТЙФЕ ЖБКМ Ч ЕДЙОЙС РТПЪПТЕГ, ДТХЗЙСФ -РТПЪПТЕГ ОЕ УЕ РТПНЕОС. нПЦЕ ДБ ОБНЙТБФЕ ЖБКМ ПФДЕМОП ЧЯЧ ЧУЕЛЙ ЖБКМ. +Главните режими обикновено правят малки промени като тази: повечето +команди вършат "същата работа" във всеки главен режим, но работят по +малко по-различен начин. -еФП ПЭЕ ЕДЙО ОБЮЙО ДБ ЙЪРПМЪЧБФЕ ДЧБ РТПЪПТЕГБ ЪБ ДБ РПЛБЦЕФЕ ДЧЕ -ТБЪМЙЮОЙ ОЕЭБ: +За да видите документацията на вашия текущ главен режим, въведете C-h +m. ->> чЯЧЕДЕФЕ C-x 4 C-f РПУМЕДЧБОП ПФ ЙНЕФП ОБ ЕДЙО ПФ ЧБЫЙФЕ ЖБКМПЧЕ. - ъБЧЯТЫЕФЕ У . чЙЦФЕ ЛБЛ ФПЪЙ ЖБКМ УЕ РПСЧСЧБ Ч ДПМОЙС - РТПЪПТЕГ. лХТУПТЯФ УЯЭП ПФЙЧБ ФБН. +>> Употребете C-u C-v веднъж или повече пъти, за да докарате този ред + близо до върха на екрана. +>> Въведете C-h m, за да видите как текстовият режим се различава от + основния режим. +>> Въведете C-x 1, за да премахнете документацията от екрана. ->> чЯЧЕДЕФЕ C-x o, ЪБ ДБ УЕ ЧЯТОЕФЕ Ч ЗПТОЙС РТПЪПТЕГ, Й C-x 1 ЪБ ДБ - ЙЪФТЙЕФЕ ДПМОЙС. +Главните режими се наричат главни, защото има и малки (второстепенни) +режими (minor modes). Малките режими не са алтернативи на главните, а +просто малки промени към тях. Всеки малък режим може да бъде включен +или изключен сам за себе си, независимо от всички други малки режими +и независимо от вашия главен режим. Така че може да не използвате +малки режими, да използвате един малък режим, или да използвате +някаква комбинация от няколко малки режима. + +Един главен режим, който е много полезен, особено за редактиране на +текст на естествен език, е режимът на автоматично запълване (Auto Fill +mode). Когато този режим е включен, Емакс автоматично разделя реда +при мястото между думите, когато вмъквате текст и направите ред, който +е твърде дълъг. + +Може да включите режима на автоматично запълване, като изпълните M-x +auto fill mode. Когато режимът е включен, може да го +изключите с M-x auto fill mode. Ако режимът е изключен, тази +команда го включва, а ако е включен, го изключва. Казваме, че +командата "обръща режима". + +>> Въведете M-x auto fill mode сега. След това вмъкнете ред + от "asdf " отново и отново, докато не видите, че текстът се разделя + на два реда. Трябва да слагате интервали между думите, защото + автоматичното запълване разделя редовете само при интервалите. + +Границата обикновено е зададена на 70 знака, но можете да я промените +с командата C-x f. Трябва да задавате тази граница като числов +аргумент на командата. + +>> Въведете C-x f с аргумент 20. (C-u 2 0 C-x f). + Сега въведете някакъв текст и вижте как Емакс запълва редовете с по + не повече от 20 знака. После върнете обратно границата на 70, + използвайки C-x f отново. + +Ако направите промени в средата на абзац, режимът на автоматично +запълване няма да го запълни наново за вас. +За да запълните наново абзац, въвеждайте M-q (META-q), докато курсорът +е вътре в абзаца. + +>> Придвижете курсора вътре в предишния абзац и въведете M-q. -* чмпцеой ойчб об тедблфйтбое --------------------------------- +* ТЪРСЕНЕ +--------- -рПОСЛПЗБ ЭЕ УЕ ПЪПЧЕФЕ Ч ФПЧБ, ЛПЕФП УЕ ОБТЙЮБ "ЧМПЦЕОП ОЙЧП ОБ -ТЕДБЛФЙТБОЕ" (recursive editing level). фПЧБ УЕ ПФВЕМСЪЧБ ПФ -ЛЧБДТБФОЙ УЛПВЙ Ч ТЕДБ ОБ ТЕЦЙНБ, ЛПЙФП ПЗТБЦДБФ УЛПВЙФЕ ПЛПМП ЙНЕФП -ОБ ЗМБЧОЙС ТЕЦЙН. оБРТЙНЕТ, НПЦЕ ДБ ЧЙДЙФЕ [(Fundamental)] ЧНЕУФП +Емакс може да извършва търсения на низове (това са последователности +от знаци или думи) или напред в текста, или назад в него. Търсенето +на низ е придвижваща курсора команда; тя премества курсора на +следващото място, където се среща низът. + +Командата за търсене на Емакс се различава от командата за търсене на +повечето редактори по това, че тя е "постъпкова". Това означава, че +търсенето се извършва още докато въвеждате текста, който търсите. + +Командата за започване на търсене е C-s за търсене напред, и C-r за +търсене назад. НО ПОЧАКАЙТЕ! Не ги пробвайте сега. + +Когато въведете C-s, ще забележите, че низът "I-search" се появява +като подсказка в ехо областта. Това ви казва, че Емакс е в това, +което се нарича постъпково търсене, чакайки ви да въвеждате текста, +който искате да търсите. приключва търсенето. + +>> Сега въведете C-s, за да започнете търсенето. БАВНО, буква по + буква, въведете думата "търсене", изчаквайки след въвеждането на + всеки знак, за да може да забележите какво става с курсора. Сега + извършихте търсене на "търсене" веднъж. +>> Въведете отново C-s, за да търсите друго съвпадение с "търсене". +>> Сега въведете три пъти и вижте как се придвижва курсора. +>> Въведете , за да прекратите търсенето. + +Забелязахте ли какво стана? Емакс, когато търси постъпково, се опитва +да намери следващото съвпадение на низа, който се въвежда. За да +отидете на следващото съвпадение на "търсне", просто отново въведете +C-s. Ако няма такова съвпадение, Емакс бибипва и ви казва, че +търсенето е "провалено" (failing). C-g също прекратява търсенето. + +ЗАБЕЛЕЖКА: На някои системи въвеждането на C-s ще замрази екрана и вие +няма да може да видите повече реакция от Емакс. Това показва, че +"способност" на операционната система, наречена "управление на потока" +(flow control), е прихванала C-s и не го пропуска до Емакс. За да +размразите екрана, въведете C-q. Тогава вижте секцията "Спонтанно +включване на постъпковото търсене" (Spontaneous Entry to Incremental +Search) в ръководството на Емакс за съвет как да се справите с тази +"способност". + +Ако сте в средата на постъпково търсене и въведете , ще +забележите, че последният знак в търсения низ се изтрива и търсенето +се връща към последното място на търсене. Например, предположете, че +сте въвели "т", за да намерите първото съвпадение с "т". Сега, ако +въведете "ъ", курсорът ще се придвижи към първото съвпадение на "тъ". +Сега въведете . Това изтрива знака "ъ" от низа за търсене и +курсорът се премества назад, до първото съвпадение с "т". + +Ако сте в средата на търсене и въведете контролен или мета знак (с +няколко изключения -- знаците, които са специални по време на търсене, +като C-s и C-r), търсенето се прекратява. + +C-s започва търсене, което гледа за съвпадение с низа, даден за +търсене СЛЕД текущото място на курсора. Ако искате да търсите нещо +по-ранно от текста, вместо това въведете C-r. Всичко, което казахме +за C-s, важи и за C-r, освен че посоката на търсене е обърната. + + +* МНОЖЕСТВО ПРОЗОРЦИ +---------------- + +Една от привлекателните способности на Емакс е тази, че може да +гледате повече от един прозорец на екрана в даден момент от време. + +>> Придвижете курсора до този ред и въведете C-u 0 C-l (това е + CONTROL-L, не CONTROL-1). + +>> Сега въведете C-x 2, което ще раздели екрана на два отделни + прозореца. Двата прозореца показват това въведение. Курсорът + остава на по-горния прозорец. + +>> Въведете C-M-v, за да скролирате долния прозорец. (Ако нямате + истински клавиш META, въведете ESC C-v.) + +>> Въведете C-x o ("o" от "other" -- "друг"), за да придвижите + курсора в долния прозорец. +>> Използвайте C-v и M-v в долния прозорец, за да го скролирате. + Продължете четенето на тези насоки от въведението в горния + прозорец. + +>> Въведете C-x o отново, за да придвижите курсора отново в горния + прозорец. Курсорът в горния прозорец е точно там, където е бил + преди. + +Може да продължите да използвате C-x o, за да превключвате между +прозорците. Всеки прозорец има собствено място на курсора, но само +един прозорец показва курсор. Всички обикновени команди за +редактиране се прилагат в прозореца, в който е курсорът. Ние наричаме +този прозорец "текущ прозорец". + +Командата C-M-v е много полезна, когато редактирате текст в един +прозорец и използвате другия прозорец просто за справка. Може да +държите курсора винаги в прозореца, където редактирате, и да +напредвате последователно в другия прозорец чрез C-M-v. + +C-M-v е пример за знак CONTROL-META. Ако имате истински клавиш META, +може да въвеждате C-M-v, задържайки едновременно CONTROL и META, +докато въвеждате v. Няма значение дали CONTROL или META "е натиснат +първи", защото и двата клавиша действат, модифицирайки знака, който +сте въвели. + +Ако нямате истински клавиш META и използвате ESC вместо това, редът +има значение: трябва да въвеждате ESC, последван от CONTROL-v, защото +CONTROL-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 level). Това се отбелязва от +квадратни скоби в реда на режима, които ограждат скобите около името +на главния режим. Например, може да видите [(Fundamental)] вместо (Fundamental). -ъБ ДБ УЕ НБИОЕФЕ ПФ ЧМПЦЕОПФП ОЙЧП ОБ ТЕДБЛФЙТБОЕ, ЧЯЧЕДЕФЕ ESC ESC -ESC. фПЧБ Е ПВЭБ ЛПНБОДБ ЪБ "ЙЪМЙЪБОЕ". нПЦЕ Й ДБ С ЙЪРПМЪЧБФЕ ЪБ -НБИБОЕ ОБ ДПРЯМОЙФЕМОЙ РТПЪПТГЙ, Й НБИБОЕ ПФ НЙОЙВХЖЕТБ. +За да се махнете от вложеното ниво на редактиране, въведете ESC ESC +ESC. Това е обща команда за "излизане". Може и да я използвате за +махане (скриване) на допълнителни прозорци, както и за да се махнете +от минибуфера. ->> чЯЧЕДЕФЕ M-x ЪБ ДБ ЧМЕЪЕФЕ Ч НЙОЙВХЖЕТ; ФПЗБЧБ ЧЯЧЕДЕФЕ ESC ESC ESC - ЪБ ДБ ЙЪМЕЪЕФЕ. +>> Въведете M-x, за да влезете в минибуфер; тогава въведете ESC ESC + ESC, за да излезете. -оЕ НПЦЕФЕ ДБ ЙЪРПМЪЧБФЕ C-g ЪБ ДБ ЙЪМЕЪЕФЕ ПФ ЧМПЦЕОП ОЙЧП ОБ -ТЕДБЛФЙТБОЕ. фПЧБ Е ФБЛБ, ЪБЭПФП C-g УЕ ЙЪРПМЪЧБ ЪБ РТЕЛТБФСЧБОЕ ОБ -ЛПНБОДЙ Й БТЗХНЕОФЙ чяфте ЧЯЧ ЧМПЦЕОП ОЙЧП ОБ ТЕДБЛФЙТБОЕ. +Не можете да използвате C-g, за да излезете от вложено ниво на +редактиране. Това е така, защото C-g се използва за прекратяване на +команди и аргументи ВЪТРЕ във вложено ниво на редактиране. -* рпмхюбчбое об дпрямойфемоб рпнпэ +* ПОЛУЧАВАНЕ НА ДОПЪЛНИТЕЛНА ПОМОЩ ---------------------------------- -ч ФПЧБ ЧЯЧЕДЕОЙЕ УЕ ПРЙФБИНЕ ДБ ПУЙЗХТЙН ДПУФБФЯЮОП ЙОЖПТНБГЙС, ЪБ ДБ -ЪБРПЮОЕФЕ ДБ ЙЪРПМЪЧБФЕ еНБЛУ. йНБ ФПМЛПЧБ НОПЗП ПЭЕ Ч еНБЛУ, ЮЕ ОЕ Е -ЧЯЪНПЦОП ФП ДБ ВЯДЕ ПВСУОЕОП ЧУЙЮЛПФП ФХЛ. пВБЮЕ НПЦЕ ДБ РПЙУЛБФЕ ДБ -ОБХЮЙФЕ РПЧЕЮЕ ЪБ еНБЛУ, ФЯК ЛБФП ФПК РТЙФЕЦБЧБ ПЭЕ НОПЗП РПМЕЪОЙ -УРПУПВОПУФЙ. еНБЛУ ЙНБ ЛПНБОДЙ ЪБ ЮЕФЕОЕ ОБ ДПЛХНЕОФБГЙСФБ ОБ еНБЛУ -ЛПНБОДЙФЕ. фЕЪЙ "РПНПЭОЙ" ЛПНБОДЙ ЧУЙЮЛЙ ЪБРПЮЧБФ УЯУ ЪОБЛБ -CONTROL-h, ЛПКФП УЕ ОБТЙЮБ "ЪОБЛЯФ ЪБ РПНПЭ". +В това въведение се опитахме да осигурим достатъчно информация, за да +започнете да използвате Емакс. Има толкова много още в Емакс, че не е +възможно то да бъде обяснено всичкото тук. Обаче може да поискате да +научите повече за Емакс, тъй като той притежава още много полезни +способности. Емакс има команди за четене на документацията на Емакс +командите. Тези "помощни" команди всички започват със знака +CONTROL-h, който се нарича "знакът за помощ". -ъБ ДБ ЙЪРПМЪЧБФЕ УРПУПВОПУФЙФЕ ОБ ФБЪЙ РПНПЭ, ЧЯЧЕДЕФЕ ЪОБЛБ C-h, Й -УМЕД ФПЧБ ЪОБЛБ, ЛБЪЧБЭ ЛБЛЯЧ ЧЙД РПНПЭ ЙУЛБФЕ. бЛП обйуфйоб УФЕ УЕ -ЙЪЗХВЙМЙ ЧЯЧЕДЕФЕ C-h ? Й еНБЛУ ЭЕ ЧЙ ЛБЦЕ У ЛБЛЧП НПЦЕ ДБ ЧЙ -РПНПЗОЕ. бЛП УФЕ ЧЯЧЕМЙ C-h Й ТЕЫЙФЕ, ЮЕ ОЕ УЕ ОХЦДБЕФЕ ПФ РПНПЭ, -РТПУФП ЧЯЧЕДЕФЕ C-g ЪБ ДБ С РТЕЛТБФЙФЕ. +За да използвате възможностите на тази помощ, въведете знака C-h и +след това знака, казващ какъв вид помощ искате. Ако НАИСТИНА сте се +изгубили, въведете C-h ? и Емакс ще ви каже с какво може да ви +помогне. Ако сте въвели C-h и решите, че не се нуждаете от помощ, +просто въведете C-g, за да я прекратите. -(оСЛПЙ ЛПНРАФТЙ РТПНЕОСФ ЪОБЮЕОЙЕФП ОБ ЪОБЛБ C-h. фЕ ОБЙУФЙОБ ОЕ -ФТСВЧБ ДБ РТБЧСФ ФПЧБ ЛБФП УМСРБ НСТЛБ ЪБ ЧУЙЮЛЙ РПФТЕВЙФЕМЙ, ФБЛБ ЮЕ -ЙНБФЕ ПУОПЧБОЙЕ ДБ УЕ ПРМБЮЕФЕ ОБ УЙУФЕНОЙС БДНЙОЙУФТБФПТ. нЕЦДХ -ДТХЗПФП, БЛП C-h ОЕ ЙЪЧЕЦДБ УЯПВЭЕОЙЕ ЪБ РПНПЭ Ч ДЯОПФП ОБ ЕЛТБОБ, -ПРЙФБКФЕ ЛМБЧЙЫБ F1 ЙМЙ M-x help ЧНЕУФП ФПЧБ.) +(Някои компютри променят значението на знака C-h. Те наистина не +трябва да правят това като сляпа мярка за всички потребители, така че +имате основание да се оплачете на системния администратор. Между +другото, ако C-h не извежда съобщение за помощ в дъното на екрана, +опитайте клавиша F1 или M-x help вместо това.) -оБК-ПУОПЧОБФБ РПНПЭОБ УРПУПВОПУФ Е C-h c. чЯЧЕДЕФЕ C-h, ЪОБЛБ c, Й -ЛПНБОДЕО ЪОБЛ ЙМЙ РПУМЕДПЧБФЕМОПУФ ПФ ЪОБГЙ ПВТБЪХЧБЭБ ЛПНБОДБ; ФПЗБЧБ -еНБЛУ ЭЕ ЙЪЧЕДЕ НОПЗП ЛТБФЛП ПРЙУБОЙЕ ОБ ЛПНБОДБФБ. +Най-основното помощно средство е C-h c. Въведете C-h, знака c и +команден знак или последователност от знаци, образуващи команда; +тогава Емакс ще изведе много кратко описание на командата. >> Type C-h c C-p. - фПЧБ УЯПВЭЕОЙЕ ФТСВЧБ ДБ ЙЪЧЕДЕ ОЕЭП ЛБФП + +Изведеното описание трябва да бъде нещо като C-p runs the command previous-line - (C-p ЙЪРЯМОСЧБ ЛПНБОДБФБ РТЕДЙЫЕО-ТЕД) + (C-p изпълнява командата предишен-ред) -фПЧБ ЧЙ ЛБЪЧБ "ЙНЕФП ОБ ЖХОЛГЙСФБ". йНЕОБФБ ОБ ЖХОЛГЙЙФЕ УЕ ЙЪРПМЪЧБФ -ОБК-ЧЕЮЕ ЪБ ОБУФТПКЧБОЕ Й ТБЪЫЙТСЧБОЕ ОБ еНБЛУ. оП ФЯК ЛБФП ЙНЕОБФБ -ОБ ЖХОЛГЙЙФЕ УБ ЙЪВТБОЙ ФБЛБ, ЮЕ ДБ РПЛБЪЧБФ ЛБЛЧП РТБЧЙ ЛПНБОДБФБ, ФЕ -НПЗБФ ДБ УМХЦБФ Й ЪБ НОПЗП ЛТБФЛБ ДПЛХНЕОФБГЙС -- ДПУФБФЯЮОБ ЪБ ДБ ЧЙ -РТЙРПНОЙ ЛПНБОДЙ, ЛПЙФП ЧЕЮЕ УФЕ ХЮЙМЙ. +Това ви казва "името на функцията". Имената на функциите се използват +най-вече за настройване и разширяване на Емакс. Но тъй като имената +на функциите са избрани така, че да показват какво прави командата, те +могат да служат и за много кратка документация -- достатъчна, за да ви +припомни команди, които вече сте учили. -нОПЗПЪОБЛПЧЙ ЛПНБОДЙ, ЛБФП C-x C-s Й (БЛП ОСНБФЕ ЛМБЧЙЫ META ЙМЙ EDIT -ЙМЙ ALT) v УЯЭП УБ РПЪЧПМЕОЙ УМЕД C-h c. +Многознакови команди, като C-x C-s и (ако нямате клавиш META или EDIT +или ALT) v, също са позволени след C-h c. -ъБ ДБ РПМХЮЙФЕ ПЭЕ ЙОЖПТНБГЙС ЪБ ЛПНБОДБ, ЙЪРПМЪЧБКФЕ C-h k ЧНЕУФП C-h +За да получите още информация за команда, използвайте C-h k вместо C-h c. ->> чЯЧЕДЕФЕ C-h k C-p. +>> Въведете C-h k C-p. -фПЧБ ЙЪЧЕЦДБ ДПЛХНЕОФБГЙСФБ ОБ ЖХОЛГЙСФБ, ЛБЛФП Й ОЕКОПФП ЙНЕ, Ч -ПФДЕМЕО еНБЛУ РТПЪПТЕГ. лПЗБФП С РТПЮЕФЕФЕ, ЧЯЧЕДЕФЕ C-x 1 ЪБ ДБ -НБИОЕФЕ РПНПЭОЙС ФЕЛУФ. оЕ Е ОХЦОП ДБ РТБЧЙФЕ ФПЧБ ФПЮОП УЕЗБ. нПЦЕ -ДБ ТЕДБЛФЙТБФЕ ДПЛБФП УЕ ПВТЯЭБФЕ ЛЯН РПНПЭОЙС ФЕЛУФ ЪБ УРТБЧЛБ, Й -УМЕД ФПЧБ ДБ ЧЯЧЕДЕФЕ C-x 1. +Това извежда документацията на функцията, както и нейното име, в +отделен Емакс прозорец. Когато я прочетете, въведете C-x 1, за да +махнете помощния текст. Не е нужно да правите това точно сега. Може +да редактирате, докато се обръщате към помощния текст за справка, и +след това да въведете C-x 1. -еФП ПЭЕ ОСЛПМЛП РПМЕЪОЙ C-h ЧЯЪНПЦОПУФЙ: +Ето още няколко полезни C-h възможности: - C-h f пРЙУЧБ ЖХОЛГЙС. фТСВЧБ ДБ ЧЯЧЕДЕФЕ ЙНЕФП ОБ - ЖХОЛГЙСФБ. + C-h f Описва функция. Трябва да въведете името на + функцията. ->> пРЙФБКФЕ У ЧЯЧЕЦДБОЕ ОБ C-h f previous-line. - фПЧБ ЙЪЧЕЦДБ ГСМБФБ ЙОЖПТНБГЙС, ЛПСФП еНБЛУ ЪОБЕ ЪБ ЖХОЛГЙСФБ, - ЛПСФП ПУЯЭЕУФЧСЧБ ЛПНБОДБФБ C-p. +>> Опитайте с въвеждане на C-h f previous-line. + Това извежда цялата информация, която Емакс знае за функцията, + която осъществява командата C-p. -рПДПВОБ ЛПНБОДБ, C-h v, ЙЪЧЕЦДБ ДПЛХНЕОФБГЙСФБ ОБ РТПНЕОМЙЧЙФЕ, ЛПЙФП -НПЦЕ ДБ РТПНЕОСФЕ, ЪБ ДБ ОБУФТПКЧБФЕ РПЧЕДЕОЙЕФП ОБ еНБЛУ. фТСВЧБ ДБ -ЧЯЧЕДЕФЕ ЙНЕФП ОБ РТПНЕОМЙЧБФБ, ЛПЗБФП еНБЛУ ЧЙ РПДУЛБЦЕ ФПЧБ. +Подобна команда, C-h v, извежда документацията на променливите, които +може да променяте, за да настройвате поведението на Емакс. Трябва да +въведете името на променливата, когато Емакс ви подскаже това. - C-h a лПНБОДБ бРТПРПУ. чЯЧЕЦДБФЕ ЛМАЮПЧБ ДХНБ Й еНБЛУ ЭЕ - РПЛБЦЕ УРЙУЯЛ ОБ ЧУЙЮЛЙ ЛПНБОДЙ, ЮЙЕФП ЙНЕ УЯДЯТЦБ - ФБЪЙ ЛМАЮПЧБ ДХНБ. фЕЪЙ ЛПНБОДЙ НПЗБФ ЧУЙЮЛЙ ДБ ВЯДБФ - ЙЪЧЙЛБОЙ ЮТЕЪ META-x. ъБ ОСЛПЙ ЛПНБОДЙ ЛПНБОДБФБ - бРТПРПУ ЭЕ ЙЪЧЕДЕ ДПРЯМОЙФЕМОП ЕДОПЪОБЛПЧБ ЙМЙ - ДЧХЪОБЛПЧБ РПУМЕДПЧБФЕМОПУФ ПФ ЛМБЧЙЫЙ, ЛПСФП РХУЛБФ - УЯЭБФБ ЛПНБОДБ. + C-h a Команда Апропос. Въведете ключова дума и Емакс ще + покаже списък на всички команди, чието име съдържа + тази ключова дума. Тези команди могат всички да бъдат + извикани чрез META-x. За някои команди командата + Апропос ще изведе допълнително еднознакова или + двузнакова последователност от клавиши, която пуска + същата команда. ->> чЯЧЕДЕФЕ C-h a file. +>> Въведете C-h a file. -фПЧБ ЙЪЧЕЦДБ Ч ДТХЗ РТПЪПТЕГ УРЙУЯЛ ОБ ЧУЙЮЛЙ M-x ЛПНБОДЙ, ЛПЙФП -УЯДЯТЦБФ "file" Ч ФСИОПФП ЙНЕ. эЕ ЧЙДЙФЕ ЪОБЛПЧЙ ЛПНБОДЙ ЛБФП C-x C-f -ЙЪВТПЕОЙ ЙЪНЕЦДХ УЯПФЧЕФОЙФЕ ЙНЕОБ ОБ ЛПНБОДЙ, ЛБФП find-file. +Това извежда в друг прозорец списък на всички M-x команди, които +съдържат "file" в тяхното име. Ще видите знакови команди като C-x +C-f, изброени измежду съответните имена на команди, като find-file. ->> чЯЧЕДЕФЕ C-M-v ЪБ ДБ УЛТПМЙТБФЕ РПНПЭОЙС РТПЪПТЕГ. оБРТБЧЕФЕ ЗП - ОСЛПМЛП РЯФЙ. +>> Въведете C-M-v, за да скролирате помощния прозорец. Направете го + няколко пъти. ->> чЯЧЕДЕФЕ C-x 1 ЪБ ДБ ЙЪФТЙЕФЕ РПНПЭОЙС РТПЪПТЕГ. +>> Въведете C-x 1, за да изтриете помощния прозорец. - C-h i юЕФЕОЕ ОБ ТЯЛПЧПДУФЧБ (Info). фБЪЙ ЛПНБОДБ ЧЙ РТБЭБ Ч - УРЕГЙБМЕО ВХЖЕТ ОБТЙЮБО `*info*', ЛЯДЕФП НПЦЕ ДБ - ЮЕФЕФЕ ТЯЛПЧПДУФЧБФБ ОБ ЙОУФБМЙТБОЙФЕ ЧЯЧ ЧБЫБФБ - УЙУФЕНБ РБЛЕФЙ. чЯЧЕДЕФЕ m emacs ЪБ ДБ - ЮЕФЕФЕ ТЯЛПЧПДУФЧПФП ОБ еНБЛУ. бЛП ОЙЛПЗБ РТЕДЙ ФПЧБ - ОЕ УФЕ ЙЪРПМЪЧБМЙ Info, ЧЯЧЕДЕФЕ ? Й еНБЛУ ЭЕ ЧЛМАЮЙ - ЧЯЧЕДЕОЙЕ ЪБ ЧЯЪНПЦОПУФЙФЕ ОБ ТЕЦЙНБ йОЖП. чЕДОЯЦ УМЕД - ЛБФП УФЕ РТЕНЙОБМЙ ФПЧБ ЧЯЧЕДЕОЙЕ, ФТСВЧБ ДБ УЕ - ЛПОУХМФЙТБФЕ У еНБЛУ йОЖП ТЯЛПЧПДУФЧПФП ЛБФП ЧБЫБ - ПУОПЧОБ ДПЛХНЕОФБГЙС. + C-h i Четене на ръководства (Info). Тази команда ви праща в + специален буфер, наричан "*info*", където може да + четете ръководствата на инсталираните във вашата + система пакети. Въведете m emacs , за да + четете ръководството на Емакс. Ако никога преди това + не сте използвали Info, въведете ? и Емакс ще включи + въведение във възможностите на режима Инфо. Веднъж + след като сте преминали това въведение, трябва да се + консултирате с Емакс Инфо ръководството като ваша + основна документация. -* пэе чяънпцопуфй +* ОЩЕ ВЪЗМОЖНОСТИ ----------------- -нПЦЕ ДБ ОБХЮЙФЕ РПЧЕЮЕ ЪБ еНБЛУ У ЮЕФЕОЕ ОБ ОЕЗПЧПФП ТЯЛПЧПДУФЧП, ЙМЙ -ЛБФП ЛОЙЗБ, ЙМЙ Ч йОЖП (ЙЪРПМЪЧБКФЕ НЕОАФП РПНПЭ (Help) ЙМЙ ЧЯЧЕДЕФЕ -F10 h r). дЧЕ ЧЯЪНПЦОПУФЙ, ЛПЙФП НПЦЕ ДБ ЦЕМБЕФЕ Ч ОБЮБМПФП, УБ -ДПЧЯТЫЧБОЕ (completion), ЛПЕФП УРЕУФСЧБ РЙУБОЕ, Й dired, ЛПКФП -ПРТПУФСЧБ ВПТБЧЕОЕФП У ЖБКМПЧЕ. +Може да научите повече за Емакс с четене на неговото ръководство, или +като книга, или в Инфо (използвайте менюто помощ (Help) или въведете +F10 h r). Две възможности, които може да желаете в началото, са +довършване (completion), което спестява писане, и dired, който +опростява боравенето с файлове. -дПЧЯТЫЧБОЕФП Е ОБЮЙО ДБ ЙЪВСЗЧБФЕ ОЕОХЦОП РЙУБОЕ. оБРЙТНЕТ, БЛП -ЙУЛБФЕ ДБ РТЕЧЛМАЮЙФЕ ЛЯН ВХЖЕТБ *Messages*, НПЦЕ ДБ ЧЯЧЕДЕФЕ C-x b -*M Й еНБЛУ ЭЕ ЪБРЯМОЙ ПУФБОБМБФБ ЮБУФ ПФ ЙНЕФП ОБ ВХЖЕТБ, -ДПЛПМЛПФП НПЦЕ ДБ УЕ ПРТЕДЕМЙ ПФ ФПЧБ, ЛПКФП УФЕ ЧЯЧЕМЙ. дПЧЯТЫЧБОЕФП -Е ПРЙУБОП Ч йОЖП-ТЯЛПЧПДУФЧПФП ОБ еНБЛУ Ч РБТЮЕФП "дПЧЯТЫЧБОЕ" +Довършването е начин да избягвате ненужно писане. Например, ако +искате да превключите към буфера *Messages*, може да въведете C-x b +*M и Емакс ще запълни останалата част от името на буфера, +доколкото може да се определи от това, което сте въвели. Довършването +е описано в Инфо-ръководството на Емакс в страницата "Довършване" ("Completion"). -Dired ЧЙ РПЪЧПМСЧБ ДБ ЗМЕДБФЕ УРЙУЯЛБ ПФ ЖБКМПЧЕ Ч ДЙТЕЛФПТЙС (Й ЛБФП -ЧЯЪНПЦОПУФ ОЕКОЙФЕ РПДДЙТЕЛФПТЙЙ), ДБ УЕ РТЙДЧЙЦЧБФЕ Ч ФПЪЙ УРЙУЯЛ, ДБ -РПУЕЭБЧБФЕ, РТЕЙНЕОХЧБФЕ, ЙЪФТЙЧБФЕ Й ЙЪПВЭП ДЕКУФЧБФЕ ЧЯТИХ -ЖБКМПЧЕФЕ. Dired Е ПРЙУБО Ч йОЖП-ТЯЛПЧПДУФЧПФП ОБ еНБЛУ Ч РБТЮЕФП +Dired ви позволява да гледате списъка от файлове в директория (и като +възможност: нейните поддиректории), да се придвижвате в този списък, +да посещавате, преименувате, изтривате и изобщо действате върху +файловете. Dired е описан в Инфо-ръководството на Емакс в страницата "Dired". -тЯЛПЧПДУФЧПФП ОБ еНБЛУ ПРЙУЧБ ПЭЕ НОПЗП ДТХЗЙ ЧЯЪНПЦОПУФЙ ОБ -ТЕДБЛФПТБ. +Ръководството на Емакс описва още много други възможности на +редактора. -* ъблмаюеойе +* ЗАКЛЮЧЕНИЕ ------------ -ъБРПНОЕФЕ, ЪБ ДБ ЙЪМЕЪЕФЕ ВЕЪЧЯЪЧТБФОП ПФ еНБЛУ ЙЪРПМЪЧБКФЕ C-x C-c. -ъБ ДБ ЙЪМЕЪЕФЕ ЧТЕНЕООП Ч ПВЧЙЧЛБ, ФБЛБ ЮЕ ДБ УЕ ЧЯТОЕФЕ Ч еНБЛУ -РП-ЛЯУОП, ЙЪРПМЪЧБКФЕ C-z. +Запомнете: за да излезете безвъзвратно от Емакс, използвайте C-x C-c. +За да излезете временно в обвивка, така че да се върнете в Емакс +по-късно, използвайте C-z. -фПЧБ ЧЯЧЕДЕОЙЕ Е РТЕДЧЙДЕОП ДБ ВЯДЕ ТБЪВЙТБЕНП ЪБ ЧУЙЮЛЙ ОПЧЙ -РПФТЕВЙФЕМЙ, ФБЛБ ЮЕ БЛП ОБНЙТБФЕ ОЕЭП ОЕСУОП, ОЕ УЕ УБНППВЧЙОСЧБКФЕ --- ПРМБЮЕФЕ УЕ! +Това въведение е предвидено да бъде разбираемо за всички нови +потребители, така че ако намирате нещо неясно, не се самообвинявайте +-- оплачете се! -* лпрйтбое +* КОПИРАНЕ ---------- -фПЧБ ЧЯЧЕДЕОЙЕ РТПЙЪМЙЪБ ПФ ДЯМЗБ РПТЕДЙГБ ЧЯЧЕДЕОЙС Ч еНБЛУ -ЪБРПЮЧБКЛЙ ПФ ЕДОП ОБРЙУБОП ПФ уФАЯТФ лТБЛТБЖФ ЪБ ОБЮБМОЙС еНБЛУ. +Това въведение произлиза от дълга поредица въведения в Емакс, +започвайки от едно, написано от Стюърт Кракрафт за началния Емакс. -фБЪЙ ЧЕТУЙС ОБ ЧЯЧЕДЕОЙЕФП, ЛБЛФП Й зох еНБЛУ, Е ЪБЭЙФЕОБ У БЧФПТУЛЙ -РТБЧБ Й ЙДЧБ У ТБЪТЕЫЕОЙЕ ДБ ТБЪРТПУФТБОСЧБФЕ ЛПРЙС РТЙ УМЕДОЙФЕ -ХУМПЧЙС: +Тази версия на въведението, както и ГНУ Емакс, е защитена с авторски +права и идва с разрешение да разпространявате копия при следните +условия: This version of the tutorial, like GNU Emacs, is copyrighted, and comes with permission to distribute copies on certain conditions: @@ -1181,15 +1183,15 @@ Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation under the above conditions, provided also that they carry prominent notices stating who last altered them. -хУМПЧЙСФБ ЪБ ЛПРЙТБОЕ ОБ УБНЙС еНБЛУ УБ РП-УМПЦОЙ, ОП Ч УЯЭЙС ДХИ. -нПМС РТПЮЕФЕФЕ ЖБКМБ COPYING Й ФПЗБЧБ ДБЧБКФЕ ЛПРЙС ОБ зох еНБЛУ ОБ -УЧПЙ РТЙСФЕМЙ. рПНПЗОЕФЕ ДБ УРТЕН ЪБФЧПТЕОПУФФБ ОБ РТПЗТБНЙФЕ -("РТЙФЕЦБОЙЕФП") ЛБФП ЙЪРПМЪЧБНЕ, РЙЫЕН Й УРПДЕМСНЕ УЧПВПДЕО УПЖФХЕТ! +Условията за копиране на самия Емакс са по-сложни, но в същия дух. +Моля, прочетете файла COPYING и тогава давайте копия на ГНУ Емакс на +свои приятели. Помогнете да спрем затвореността на програмите +("притежанието"), като използваме, пишем и споделяме свободен софтуер! -рТЕЧПДЯФ ОБ ВЯМЗБТУЛЙ Е ЙЪЧЯТЫЕО ПФ пЗОСО лХМЕЧ +Преводът на български е извършен от Огнян Кулев . ;;; Local Variables: -;;; coding: koi8-r +;;; coding: windows-1251 ;;; End: ;;; arch-tag: 70cf6ad7-c2e4-41fe-8199-74aa52683b0e From d42f90385b734af3711b1573f5bab1977b1627f2 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Dec 2003 12:57:07 +0000 Subject: [PATCH 23/82] (zone-mode): Use write-file-functions, not write-file-hooks. --- lisp/ChangeLog | 5 +++++ lisp/net/zone-mode.el | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 008fa30367a..2f1d4f8615a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2003-12-29 Peter 'Luna' Runestig + + * net/zone-mode.el (zone-mode): Use write-file-functions, not + write-file-hooks. + 2003-12-29 Eric Hanchrow (tiny change) * autorevert.el (auto-revert-interval): Doc fix. diff --git a/lisp/net/zone-mode.el b/lisp/net/zone-mode.el index 591deee3144..6b4d22f9b13 100644 --- a/lisp/net/zone-mode.el +++ b/lisp/net/zone-mode.el @@ -92,7 +92,7 @@ Zone-mode does two things: - fontification" - (add-hook 'write-file-hooks 'zone-mode-update-serial-hook nil t) + (add-hook 'write-file-functions 'zone-mode-update-serial-hook nil t) (if (null zone-mode-syntax-table) (zone-mode-load-time-setup)) ;; should have been run at load-time From 65f3f600169a05911a71cac506df36e2d47b33dd Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Dec 2003 13:00:09 +0000 Subject: [PATCH 24/82] (xml-get-attribute-or-nil): Doc fix. --- lisp/ChangeLog | 4 ++++ lisp/xml.el | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2f1d4f8615a..fbc051c4573 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2003-12-29 Eli Zaretskii + + * xml.el (xml-get-attribute-or-nil): Doc fix. + 2003-12-29 Peter 'Luna' Runestig * net/zone-mode.el (zone-mode): Use write-file-functions, not diff --git a/lisp/xml.el b/lisp/xml.el index 72ffa43dcc9..dbd991f5583 100644 --- a/lisp/xml.el +++ b/lisp/xml.el @@ -106,7 +106,7 @@ CHILD-NAME should be a lower case symbol." (defun xml-get-attribute-or-nil (node attribute) "Get from NODE the value of ATTRIBUTE. -nil is returned if the attribute was not found. +Return `nil' if the attribute was not found. See also `xml-get-attribute'." (when (xml-node-attributes node) From 5d80fe1f115e3788eadab23c57e6227419cd8a40 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Dec 2003 13:05:00 +0000 Subject: [PATCH 25/82] (C Modes): Fix the xref. --- man/programs.texi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/man/programs.texi b/man/programs.texi index e3775569860..6b3776e0ac3 100644 --- a/man/programs.texi +++ b/man/programs.texi @@ -1398,8 +1398,8 @@ Mode}). The Foldout package provides folding-editor features This section gives a brief description of the special features available in C, C++, Objective-C, Java, CORBA IDL, and Pike modes. -(These are called ``C mode and related modes.'') @xref{Top, CC Mode, -ccmode, , CC Mode}, for a more extensive description of these modes +(These are called ``C mode and related modes.'') @xref{Top, , CC Mode, +ccmode, CC Mode}, for a more extensive description of these modes and their special features. @menu From 36b99f18645414e61d73812ffe73c7ba85069eef Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Dec 2003 13:09:14 +0000 Subject: [PATCH 26/82] (Vi Macros): Fix reference to the Emacs manual. --- man/viper.texi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/man/viper.texi b/man/viper.texi index 2012ee58875..a31ce9a003d 100644 --- a/man/viper.texi +++ b/man/viper.texi @@ -2779,7 +2779,7 @@ As if all that is not enough, Viper (through its interface to Emacs macros) lets the user define keyboard macros that ask for confirmation or even prompt the user for input and then continue. To do this, one should type @kbd{C-x q} (for confirmation) or @kbd{C-u C-x q} (for prompt). -For details, @pxref{Kbd Macro Query,,Customization,emacs,The GNU Emacs +For details, @pxref{Keyboard Macro Query,,Customization,emacs,The GNU Emacs Manual} @refill When the user finishes defining a macro (which is done by typing @kbd{C-x)} --- From ecd5fe1f75272e24ea439052301e089f57adc43c Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Dec 2003 13:22:30 +0000 Subject: [PATCH 27/82] (ange-ftp-name-format): Allow USER to contain "@", as required by some ISP hosting service. Fix defcustom argument syntax errors that prevented use of customization. --- lisp/ChangeLog | 6 ++++++ lisp/net/ange-ftp.el | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index fbc051c4573..7487e4b4376 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2003-12-29 Michael R. Wolf (tiny change) + + * net/ange-ftp.el (ange-ftp-name-format): Allow USER to contain + "@", as required by some ISP hosting service. Fix defcustom + argument syntax errors that prevented use of customization. + 2003-12-29 Eli Zaretskii * xml.el (xml-get-attribute-or-nil): Doc fix. diff --git a/lisp/net/ange-ftp.el b/lisp/net/ange-ftp.el index b96e7f1a298..dc3b5a62da9 100644 --- a/lisp/net/ange-ftp.el +++ b/lisp/net/ange-ftp.el @@ -686,7 +686,7 @@ :prefix "ange-ftp-") (defcustom ange-ftp-name-format - '("^/\\(\\([^@/:]*\\)@\\)?\\([^@/:]*[^@/:.]\\):\\(.*\\)" . (3 2 4)) + '("^/\\(\\([^/:]*\\)@\\)?\\([^@/:]*[^@/:.]\\):\\(.*\\)" . (3 2 4)) "*Format of a fully expanded remote file name. This is a list of the form \(REGEXP HOST USER NAME\), @@ -694,7 +694,7 @@ where REGEXP is a regular expression matching the full remote name, and HOST, USER, and NAME are the numbers of parenthesized expressions in REGEXP for the components (in that order)." :group 'ange-ftp - :type '(list regexp + :type '(list (regexp :tag "Name regexp") (integer :tag "Host group") (integer :tag "User group") (integer :tag "Name group"))) From 6b531f6fce334d3f872f0270c86a32b31951ea8e Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Dec 2003 13:31:16 +0000 Subject: [PATCH 28/82] Describe the change in texnfo-upd.el by Bob Chassel. --- lisp/ChangeLog | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7487e4b4376..99f9cd59f43 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -117,6 +117,14 @@ * ffap.el (ffap-read-file-or-url): Revert previous change. +2003-12-25 Robert J. Chassell + + * textmodes/texnfo-upd.el (texinfo-multi-file-update): Create a + new list of included files called `files-with-node-lines', that + only have node lines. This way @include commands can include any + file, such as version and update files without node lines, not + just files that are chapters. + 2003-12-25 Andreas Schwab * jka-compr.el (jka-compr-insert-file-contents): Avoid error when From 1015017fa09c279e29a2810cde1f9b8a91aed3d1 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Dec 2003 13:42:37 +0000 Subject: [PATCH 29/82] (comint-watch-for-password-prompt): Pass `string' as arg to send-invisible (send-invisible): Doc fix. The argument is now a prompt, not the string to send. (comint-read-noecho): Doc fix. --- lisp/comint.el | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/lisp/comint.el b/lisp/comint.el index 5509e71d984..bc9d2b017cb 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -1901,7 +1901,8 @@ RET, LFD, or ESC. DEL or C-h rubs out. C-u kills line. C-g aborts (if filter and C-g is pressed, this function returns nil rather than a string). Note that the keystrokes comprising the text can still be recovered -\(temporarily) with \\[view-lossage]. Some people find this worrysome. +\(temporarily) with \\[view-lossage]. Some people find this worrysome (see, +however, `clear-this-command-keys'). Once the caller uses the password, it can erase the password by doing (clear-string STRING)." (let ((ans "") @@ -1948,24 +1949,22 @@ by doing (clear-string STRING)." (message "") ans))) -(defun send-invisible (str) +(defun send-invisible (&optional prompt) "Read a string without echoing. Then send it to the process running in the current buffer. The string is sent using `comint-input-sender'. Security bug: your string can still be temporarily recovered with -\\[view-lossage]." +\\[view-lossage]; `clear-this-command-keys' can fix that." (interactive "P") ; Defeat snooping via C-x ESC ESC (let ((proc (get-buffer-process (current-buffer)))) - (cond ((not proc) - (error "Current buffer has no process")) - ((stringp str) - (comint-snapshot-last-prompt) - (funcall comint-input-sender proc str)) - (t - (let ((str (comint-read-noecho "Non-echoed text: " t))) - (if (stringp str) - (send-invisible str) - (message "Warning: text will be echoed"))))))) + (if proc + (let ((str (comint-read-noecho (or prompt "Non-echoed text: ") t))) + (if (stringp str) + (progn + (comint-snapshot-last-prompt) + (funcall comint-input-sender proc str)) + (message "Warning: text will be echoed"))) + (error "Current buffer has no process")))) (defun comint-watch-for-password-prompt (string) "Prompt in the minibuffer for password and send without echoing. @@ -1977,8 +1976,7 @@ This function could be in the list `comint-output-filter-functions'." (when (string-match comint-password-prompt-regexp string) (when (string-match "^[ \n\r\t\v\f\b\a]+" string) (setq string (replace-match "" t t string))) - (let ((pw (comint-read-noecho string t))) - (send-invisible pw)))) + (send-invisible string))) ;; Low-level process communication From d9c4f5125eb30ebadd49971678c76617aebdac9c Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Dec 2003 13:44:14 +0000 Subject: [PATCH 30/82] *** empty log message *** --- etc/ChangeLog | 4 ++++ lisp/ChangeLog | 8 ++++++++ man/ChangeLog | 4 ++++ 3 files changed, 16 insertions(+) diff --git a/etc/ChangeLog b/etc/ChangeLog index 2a98dc67294..bceac931cd5 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,7 @@ +2003-12-29 Ognyan Kulev + + * TUTORIAL.bg: Use windows-1251 encoding. Fix punctuation errors. + 2003-11-21 Lars Hansen * TODO: Add plans for change of file attributes UID and GID from diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 99f9cd59f43..4ff7f833c0e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2003-12-29 David Herring (tiny change) + + * comint.el (comint-watch-for-password-prompt): Pass `string' as + arg to send-invisible + (send-invisible): Doc fix. The argument is now a prompt, not the + string to send. + (comint-read-noecho): Doc fix. + 2003-12-29 Michael R. Wolf (tiny change) * net/ange-ftp.el (ange-ftp-name-format): Allow USER to contain diff --git a/man/ChangeLog b/man/ChangeLog index 978b1e03d41..1471525b495 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,7 @@ +2003-12-29 Kevin Ryde + + * programs.texi (C Modes): Fix the xref. + 2003-12-23 Nick Roberts * building.texi (Watch Expressions): Update. From 74a47d1fba2e5b01db681f75e35f2f78af62fc7c Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Dec 2003 13:51:54 +0000 Subject: [PATCH 31/82] (internal_equal): Return t for two NaN arguments. --- src/fns.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/fns.c b/src/fns.c index e4252c98ca5..ff40c706edd 100644 --- a/src/fns.c +++ b/src/fns.c @@ -2169,7 +2169,15 @@ internal_equal (o1, o2, depth) switch (XTYPE (o1)) { case Lisp_Float: - return (extract_float (o1) == extract_float (o2)); + { + double d1, d2; + + d1 = extract_float (o1); + d2 = extract_float (o2); + /* If d is a NaN, then d != d. Two NaNs should be `equal' even + though they are not =. */ + return d1 == d2 || (d1 != d1 && d2 != d2); + } case Lisp_Cons: if (!internal_equal (XCAR (o1), XCAR (o2), depth + 1)) From 243a3ae0807559210bb92e7ced8778c116da09a2 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Dec 2003 14:04:31 +0000 Subject: [PATCH 32/82] (kill-some-buffers): Doc fix. --- lisp/files.el | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lisp/files.el b/lisp/files.el index 1dc6e5454df..ce4d67d33e4 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -3727,8 +3727,9 @@ This command is used in the special Dired buffer created by (kill-buffer buffer)))) (defun kill-some-buffers (&optional list) - "For each buffer in LIST, ask whether to kill it. -LIST defaults to all existing live buffers." + "Kill some buffers. Asks the user whether to kill each one of them. +Non-interactively, if optional argument LIST is non-`nil', it +specifies the list of buffers to kill, asking for approval for each one." (interactive) (if (null list) (setq list (buffer-list))) From c2be49ed9250a19e4521fa1498d92f24b5f7a76d Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 29 Dec 2003 14:06:29 +0000 Subject: [PATCH 33/82] *** empty log message *** --- lisp/ChangeLog | 4 ++++ man/ChangeLog | 2 ++ src/ChangeLog | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 4ff7f833c0e..e4d943565a9 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2003-12-29 Eli Zaretskii + + * files.el (kill-some-buffers): Doc fix. + 2003-12-29 David Herring (tiny change) * comint.el (comint-watch-for-password-prompt): Pass `string' as diff --git a/man/ChangeLog b/man/ChangeLog index 1471525b495..e57e5fbb4fe 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,5 +1,7 @@ 2003-12-29 Kevin Ryde + * viper.texi (Vi Macros): Fix reference to the Emacs manual. + * programs.texi (C Modes): Fix the xref. 2003-12-23 Nick Roberts diff --git a/src/ChangeLog b/src/ChangeLog index 17135ca34c7..121142703c9 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2003-12-29 James Clark (tiny change) + + * fns.c (internal_equal): Return t for two NaN arguments. + 2003-12-29 Richard M. Stallman * data.c (store_symval_forwarding): Handle setting From ed47250a60f29e7c7bbbe517e39daee92fbc58cb Mon Sep 17 00:00:00 2001 From: "Robert J. Chassell" Date: Mon, 29 Dec 2003 16:45:00 +0000 Subject: [PATCH 34/82] Changed arch tag comment out glyph from `%' to `@c' since the Texinfo comment out glyph is active at the end of this file. --- lispintro/texinfo.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lispintro/texinfo.tex b/lispintro/texinfo.tex index 4ef8dd7a01e..7258e9f0a5e 100644 --- a/lispintro/texinfo.tex +++ b/lispintro/texinfo.tex @@ -3,7 +3,7 @@ % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % -\def\texinfoversion{2003-07-16.18} +\def\texinfoversion{2003-12-29.16} % % Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. @@ -6772,4 +6772,4 @@ @c time-stamp-end: "}" @c End: -% arch-tag: 53261dd3-7df7-4ec3-9d90-af7a955d3c87 +@c arch-tag: 53261dd3-7df7-4ec3-9d90-af7a955d3c87 From 52f2cda2f4285d82a7b3dd366ad43a01509903ab Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 19:03:08 +0000 Subject: [PATCH 35/82] Update author email addr. --- lisp/arc-mode.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/arc-mode.el b/lisp/arc-mode.el index 9f254b54d69..7ac7a402c3a 100644 --- a/lisp/arc-mode.el +++ b/lisp/arc-mode.el @@ -2,7 +2,7 @@ ;; Copyright (C) 1995, 1997, 1998, 2003 Free Software Foundation, Inc. -;; Author: Morten Welinder +;; Author: Morten Welinder ;; Keywords: archives msdog editing major-mode ;; Favourite-brand-of-beer: None, I hate beer. From d09596261d476518b62c603e40b198dbaed71d6f Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 19:04:08 +0000 Subject: [PATCH 36/82] (bookmark-get-bookmark): Use assoc-string. --- lisp/bookmark.el | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lisp/bookmark.el b/lisp/bookmark.el index 762de7323a2..67ae2c84865 100644 --- a/lisp/bookmark.el +++ b/lisp/bookmark.el @@ -335,10 +335,7 @@ through a file easier.") "Return the full entry for BOOKMARK in bookmark-alist. If BOOKMARK is not a string, return nil." (when (stringp bookmark) - (apply (if bookmark-completion-ignore-case - #'assoc-ignore-case - #'assoc) - (list bookmark bookmark-alist)))) + (assoc-string bookmark bookmark-alist bookmark-completion-ignore-case))) (defun bookmark-get-bookmark-record (bookmark) From 55e9b10d6959a34f537caab0e76079f1c6badd32 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 19:10:24 +0000 Subject: [PATCH 37/82] (comint-arguments): Set COUNT after ARGS is complete. (comint-dynamic-complete-as-filename): Rename local vars. (comint-dynamic-list-filename-completions): Likewise. (comint-dynamic-list-completions-config): New var. (comint-dynamic-list-completions): Handle both SPC and TAB right. (comint-file-name-chars): Add []. (comint-word): Use skip-chars-backward, not search. --- lisp/comint.el | 111 +++++++++++++++++++++++++++---------------------- 1 file changed, 61 insertions(+), 50 deletions(-) diff --git a/lisp/comint.el b/lisp/comint.el index bc9d2b017cb..6bc40a01bd3 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -1344,16 +1344,16 @@ Argument 0 is the command name." ;; Put the previous arg, if there was one, onto ARGS. (setq str (substring string beg pos) args (if quotes (cons str args) - (nconc (comint-delim-arg str) args)) - count (1+ count))) + (nconc (comint-delim-arg str) args)))) + (setq count (length args)) (setq quotes (match-beginning 1)) (setq beg (match-beginning 0)) (setq pos (match-end 0)))) (if beg (setq str (substring string beg pos) args (if quotes (cons str args) - (nconc (comint-delim-arg str) args)) - count (1+ count))) + (nconc (comint-delim-arg str) args)))) + (setq count (length args)) (let ((n (or nth (1- count))) (m (if mth (1- (- count mth)) 0))) (mapconcat @@ -2082,7 +2082,7 @@ between the process-mark and point." (comint-skip-input) (interrupt-process nil comint-ptyp) ;; (process-send-string nil "\n") - ) +) (defun comint-kill-subjob () "Send kill signal to the current subjob. @@ -2551,7 +2551,7 @@ directory tracking functions.") (defvar comint-file-name-chars (if (memq system-type '(ms-dos windows-nt cygwin)) "~/A-Za-z0-9_^$!#%&{}@`'.,:()-" - "~/A-Za-z0-9+@:_.$#%,={}-") + "[]~/A-Za-z0-9+@:_.$#%,={}-") "String of characters valid in a file name. Note that all non-ASCII characters are considered valid in a file name regardless of what this variable says. @@ -2577,15 +2577,19 @@ Word constituents are considered to be those in WORD-CHARS, which is like the inside of a \"[...]\" (see `skip-chars-forward'), plus all non-ASCII characters." (save-excursion - (let ((non-word-chars (concat "[^\\\\" word-chars "]")) (here (point))) - (while (and (re-search-backward non-word-chars nil 'move) - ;;(memq (char-after (point)) shell-file-name-quote-list) - (or (>= (following-char) 128) - (eq (preceding-char) ?\\))) - (backward-char 1)) - ;; Don't go forward over a word-char (this can happen if we're at bob). - (when (or (not (bobp)) (looking-at non-word-chars)) - (forward-char 1)) + (let ((here (point)) + giveup) + (while (not giveup) + (let ((startpoint (point))) + (skip-chars-backward (concat "\\\\" word-chars)) + (if (and (> (- (point) 2) (point-min)) + (= (char-after (- (point) 2)) ?\\)) + (forward-char -2)) + (if (and (> (- (point) 1) (point-min)) + (>= (char-after (- (point) 1)) 128)) + (forward-char -1)) + (if (= (point) startpoint) + (setq giveup t)))) ;; Set match-data to match the entire string. (when (< (point) here) (set-match-data (list (point) here)) @@ -2697,10 +2701,10 @@ See `comint-dynamic-complete-filename'. Returns t if successful." (t (cdr comint-completion-addsuffix)))) (filename (or (comint-match-partial-filename) "")) - (pathdir (file-name-directory filename)) - (pathnondir (file-name-nondirectory filename)) - (directory (if pathdir (comint-directory pathdir) default-directory)) - (completion (file-name-completion pathnondir directory))) + (filedir (file-name-directory filename)) + (filenondir (file-name-nondirectory filename)) + (directory (if filedir (comint-directory filedir) default-directory)) + (completion (file-name-completion filenondir directory))) (cond ((null completion) (message "No completions of %s" filename) (setq success nil)) @@ -2714,21 +2718,21 @@ See `comint-dynamic-complete-filename'. Returns t if successful." (let ((file (concat (file-name-as-directory directory) completion))) (insert (comint-quote-filename (substring (directory-file-name completion) - (length pathnondir)))) + (length filenondir)))) (cond ((symbolp (file-name-completion completion directory)) ;; We inserted a unique completion. (insert (if (file-directory-p file) dirsuffix filesuffix)) (unless minibuffer-p (message "Completed"))) ((and comint-completion-recexact comint-completion-addsuffix - (string-equal pathnondir completion) + (string-equal filenondir completion) (file-exists-p file)) ;; It's not unique, but user wants shortest match. (insert (if (file-directory-p file) dirsuffix filesuffix)) (unless minibuffer-p (message "Completed shortest"))) ((or comint-completion-autolist - (string-equal pathnondir completion)) + (string-equal filenondir completion)) ;; It's not unique, list possible completions. (comint-dynamic-list-filename-completions)) (t @@ -2812,10 +2816,10 @@ See also `comint-dynamic-complete-filename'." ;; but subsequent changes may have made this unnecessary. sm. ;;(file-name-handler-alist nil) (filename (or (comint-match-partial-filename) "")) - (pathdir (file-name-directory filename)) - (pathnondir (file-name-nondirectory filename)) - (directory (if pathdir (comint-directory pathdir) default-directory)) - (completions (file-name-all-completions pathnondir directory))) + (filedir (file-name-directory filename)) + (filenondir (file-name-nondirectory filename)) + (directory (if filedir (comint-directory filedir) default-directory)) + (completions (file-name-all-completions filenondir directory))) (if (not completions) (message "No completions of %s" filename) (comint-dynamic-list-completions @@ -2827,6 +2831,8 @@ See also `comint-dynamic-complete-filename'." ;; command is repeatedly used without the set of completions changing. (defvar comint-displayed-dynamic-completions nil) +(defvar comint-dynamic-list-completions-config nil) + (defun comint-dynamic-list-completions (completions) "List in help buffer sorted COMPLETIONS. Typing SPC flushes the help buffer." @@ -2856,30 +2862,35 @@ Typing SPC flushes the help buffer." (select-window window) (scroll-up)))) - (let ((conf (current-window-configuration))) - (with-output-to-temp-buffer "*Completions*" - (display-completion-list completions)) - (message "Type space to flush; repeat completion command to scroll") - (let (key first) - (if (save-excursion - (set-buffer (get-buffer "*Completions*")) - (set (make-local-variable - 'comint-displayed-dynamic-completions) - completions) - (setq key (read-key-sequence nil) - first (aref key 0)) - (and (consp first) (consp (event-start first)) - (eq (window-buffer (posn-window (event-start first))) - (get-buffer "*Completions*")) - (eq (key-binding key) 'mouse-choose-completion))) - ;; If the user does mouse-choose-completion with the mouse, - ;; execute the command, then delete the completion window. - (progn - (mouse-choose-completion first) - (set-window-configuration conf)) - (if (eq first ?\ ) - (set-window-configuration conf) - (setq unread-command-events (listify-key-sequence key))))))))) + ;; Display a completion list for the first time. + (setq comint-dynamic-list-completions-config + (current-window-configuration)) + (with-output-to-temp-buffer "*Completions*" + (display-completion-list completions)) + (message "Type space to flush; repeat completion command to scroll")) + + ;; Read the next key, to process SPC. + (let (key first) + (if (save-excursion + (set-buffer (get-buffer "*Completions*")) + (set (make-local-variable + 'comint-displayed-dynamic-completions) + completions) + (setq key (read-key-sequence nil) + first (aref key 0)) + (and (consp first) (consp (event-start first)) + (eq (window-buffer (posn-window (event-start first))) + (get-buffer "*Completions*")) + (eq (key-binding key) 'mouse-choose-completion))) + ;; If the user does mouse-choose-completion with the mouse, + ;; execute the command, then delete the completion window. + (progn + (mouse-choose-completion first) + (set-window-configuration comint-dynamic-list-completions-config)) + (unless (eq first ?\ ) + (setq unread-command-events (listify-key-sequence key))) + (unless (eq first ?\t) + (set-window-configuration comint-dynamic-list-completions-config)))))) (defun comint-get-next-from-history () From 3750be31d39fd4f0d9efaf43c0586ef44186108f Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 19:12:17 +0000 Subject: [PATCH 38/82] (file-cache-ignore-case): New variable. (file-cache-assoc-function): Var deleted. Use assoc-string instead. --- lisp/filecache.el | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/lisp/filecache.el b/lisp/filecache.el index d315a3b1c8b..71b67af355f 100644 --- a/lisp/filecache.el +++ b/lisp/filecache.el @@ -212,13 +212,10 @@ Defaults to the value of `case-fold-search'." :group 'file-cache ) -(defcustom file-cache-assoc-function - (if (memq system-type (list 'ms-dos 'windows-nt 'cygwin)) - 'assoc-ignore-case - 'assoc) - "Function to use to check completions in the file cache. -Defaults to `assoc-ignore-case' on DOS and Windows, and `assoc' on -other systems." +(defcustom file-cache-ignore-case + (memq system-type (list 'ms-dos 'windows-nt 'cygwin)) + "Non-nil means ignore case when checking completions in the file cache. +Defaults to nil on DOS and Windows, and t on other systems." :type 'sexp :group 'file-cache ) @@ -301,8 +298,9 @@ in each directory, not to the directory list itself." (message "File %s does not exist" file) (let* ((file-name (file-name-nondirectory file)) (dir-name (file-name-directory file)) - (the-entry (funcall file-cache-assoc-function - file-name file-cache-alist)) + (the-entry (assoc-string + file-name file-cache-alist + file-cache-ignore-case)) ) ;; Does the entry exist already? (if the-entry @@ -402,7 +400,7 @@ or the optional REGEXP argument." (interactive (list (completing-read "Delete file from cache: " file-cache-alist))) (setq file-cache-alist - (delq (funcall file-cache-assoc-function file file-cache-alist) + (delq (assoc-string file file-cache-alist file-cache-ignore-case) file-cache-alist))) (defun file-cache-delete-file-list (file-list) @@ -458,8 +456,9 @@ or the optional REGEXP argument." ;; Returns the name of a directory for a file in the cache (defun file-cache-directory-name (file) - (let* ((directory-list (cdr (funcall file-cache-assoc-function - file file-cache-alist))) + (let* ((directory-list (cdr (assoc-string + file file-cache-alist + file-cache-ignore-case))) (len (length directory-list)) (directory) (num) @@ -556,7 +555,8 @@ the name is considered already unique; only the second substitution ;; If we've already inserted a unique string, see if the user ;; wants to use that one (if (and (string= string completion-string) - (funcall file-cache-assoc-function string file-cache-alist)) + (assoc-string string file-cache-alist + file-cache-ignore-case)) (if (and (eq last-command this-command) (string= file-cache-last-completion completion-string)) (progn @@ -725,7 +725,8 @@ match REGEXP." "Debugging function." (interactive (list (completing-read "File Cache: " file-cache-alist))) - (message "%s" (funcall file-cache-assoc-function file file-cache-alist)) + (message "%s" (assoc-string file file-cache-alist + file-cache-ignore-case)) ) (defun file-cache-display () From 21b22cf98495436bf28dd8e2fc57b5664526ca6b Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 19:12:40 +0000 Subject: [PATCH 39/82] (define-generic-mode): Doc fix. --- lisp/generic.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/generic.el b/lisp/generic.el index 8f13dc375e7..bd6fa0608aa 100644 --- a/lisp/generic.el +++ b/lisp/generic.el @@ -54,7 +54,7 @@ ;; ;; * Additional expressions to font-lock. This should be a list of ;; expressions, each of which should be of the same form -;; as those in `font-lock-defaults-alist'. +;; as those in `font-lock-keywords'. ;; ;; * List of regular expressions to be placed in auto-mode-alist. ;; @@ -206,7 +206,7 @@ KEYWORD-LIST is a list of keywords to highlight with `font-lock-keyword-face'. Each keyword should be a string. FONT-LOCK-LIST is a list of additional expressions to highlight. Each entry -in the list should have the same form as an entry in `font-lock-defaults-alist' +in the list should have the same form as an entry in `font-lock-keywords'. AUTO-MODE-LIST is a list of regular expressions to add to `auto-mode-alist'. These regexps are added to `auto-mode-alist' as soon as `define-generic-mode' From f0d5dc24425172267cfbadf135dcfa0838a6d874 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 19:13:28 +0000 Subject: [PATCH 40/82] (shell-file-name-chars): Add []. (shell-dynamic-complete-as-command): Rename local vars. --- lisp/shell.el | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/lisp/shell.el b/lisp/shell.el index cc83dcf1429..1817a1fd3b4 100644 --- a/lisp/shell.el +++ b/lisp/shell.el @@ -167,7 +167,7 @@ This is a fine thing to set in your `.emacs' file.") (defvar shell-file-name-chars (if (memq system-type '(ms-dos windows-nt cygwin)) "~/A-Za-z0-9_^$!#%&{}@`'.,:()-" - "~/A-Za-z0-9+@:_.$#%,={}-") + "[]~/A-Za-z0-9+@:_.$#%,={}-") "String of characters valid in a file name. This variable is used to initialize `comint-file-name-chars' in the shell buffer. The value may depend on the operating system or shell. @@ -941,36 +941,37 @@ Returns t if successful." "Dynamically complete at point as a command. See `shell-dynamic-complete-filename'. Returns t if successful." (let* ((filename (or (comint-match-partial-filename) "")) - (pathnondir (file-name-nondirectory filename)) - (paths (cdr (reverse exec-path))) + (filenondir (file-name-nondirectory filename)) + (path-dirs (cdr (reverse exec-path))) (cwd (file-name-as-directory (expand-file-name default-directory))) (ignored-extensions (and comint-completion-fignore (mapconcat (function (lambda (x) (concat (regexp-quote x) "$"))) comint-completion-fignore "\\|"))) - (path "") (comps-in-path ()) (file "") (filepath "") (completions ())) - ;; Go thru each path in the search path, finding completions. - (while paths - (setq path (file-name-as-directory (comint-directory (or (car paths) "."))) - comps-in-path (and (file-accessible-directory-p path) - (file-name-all-completions pathnondir path))) + (dir "") (comps-in-dir ()) + (file "") (abs-file-name "") (completions ())) + ;; Go thru each dir in the search path, finding completions. + (while path-dirs + (setq dir (file-name-as-directory (comint-directory (or (car path-dirs) "."))) + comps-in-dir (and (file-accessible-directory-p dir) + (file-name-all-completions filenondir dir))) ;; Go thru each completion found, to see whether it should be used. - (while comps-in-path - (setq file (car comps-in-path) - filepath (concat path file)) + (while comps-in-dir + (setq file (car comps-in-dir) + abs-file-name (concat dir file)) (if (and (not (member file completions)) (not (and ignored-extensions (string-match ignored-extensions file))) - (or (string-equal path cwd) - (not (file-directory-p filepath))) + (or (string-equal dir cwd) + (not (file-directory-p abs-file-name))) (or (null shell-completion-execonly) - (file-executable-p filepath))) + (file-executable-p abs-file-name))) (setq completions (cons file completions))) - (setq comps-in-path (cdr comps-in-path))) - (setq paths (cdr paths))) + (setq comps-in-dir (cdr comps-in-dir))) + (setq path-dirs (cdr path-dirs))) ;; OK, we've got a list of completions. (let ((success (let ((comint-completion-addsuffix nil)) - (comint-dynamic-simple-complete pathnondir completions)))) + (comint-dynamic-simple-complete filenondir completions)))) (if (and (memq success '(sole shortest)) comint-completion-addsuffix (not (file-directory-p (comint-match-partial-filename)))) (insert " ")) From 147fbf703d1996d723523d849b402e792be0d066 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 19:14:03 +0000 Subject: [PATCH 41/82] (backup-buffer-copy): If MODES is nil, don't set modes. --- lisp/files.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lisp/files.el b/lisp/files.el index ce4d67d33e4..4983b1287e8 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -2552,7 +2552,8 @@ BACKUPNAME is the backup file name, which is the old file renamed." (not (file-writable-p to-name))) (delete-file to-name)) (copy-file from-name to-name t t))) - (set-file-modes to-name (logand modes #o1777))) + (and modes + (set-file-modes to-name (logand modes #o1777)))) (defun file-name-sans-versions (name &optional keep-backup-version) "Return file NAME sans backup versions or strings. From 1d0c27179df9117ca5ba32f23614c10b31027d74 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 19:15:23 +0000 Subject: [PATCH 42/82] (kill-find): New command. (find-dired): Make buffer read-only. Set up a keymap with C-c C-k running kill-find. (find-dired-filter, find-dired-sentinel): Bind inhibit-read-only. --- lisp/find-dired.el | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/lisp/find-dired.el b/lisp/find-dired.el index b1051acf7fd..9407afc3862 100644 --- a/lisp/find-dired.el +++ b/lisp/find-dired.el @@ -123,6 +123,10 @@ as the final argument." (car find-ls-option))) ;; The next statement will bomb in classic dired (no optional arg allowed) (dired-mode dir (cdr find-ls-option)) + (let ((map (make-sparse-keymap))) + (set-keymap-parent map (current-local-map)) + (define-key map "\C-c\C-k" 'kill-find) + (use-local-map map)) (make-local-variable 'dired-sort-inhibit) (setq dired-sort-inhibit t) (set (make-local-variable 'revert-buffer-function) @@ -144,6 +148,7 @@ as the final argument." ;; Make second line a ``find'' line in analogy to the ``total'' or ;; ``wildcard'' line. (insert " " args "\n") + (setq buffer-read-only t) ;; Start the find process. (let ((proc (start-process-shell-command find-dired-find-program (current-buffer) args))) (set-process-filter proc (function find-dired-filter)) @@ -152,6 +157,16 @@ as the final argument." (move-marker (process-mark proc) 1 (current-buffer))) (setq mode-line-process '(":%s")))) +(defun kill-find () + "Kill the `find' process running in the current buffer." + (interactive) + (let ((find (get-buffer-process (current-buffer)))) + (and find (eq (process-status find) 'run) + (eq (process-filter find) (function find-dired-filter)) + (condition-case nil + (delete-process find) + (error nil))))) + ;;;###autoload (defun find-name-dired (dir pattern) "Search DIR recursively for files matching the globbing pattern PATTERN, @@ -192,7 +207,8 @@ Thus ARG can also contain additional grep options." (defun find-dired-filter (proc string) ;; Filter for \\[find-dired] processes. - (let ((buf (process-buffer proc))) + (let ((buf (process-buffer proc)) + (inhibit-read-only t)) (if (buffer-name buf) ; not killed? (save-excursion (set-buffer buf) @@ -229,7 +245,8 @@ Thus ARG can also contain additional grep options." (defun find-dired-sentinel (proc state) ;; Sentinel for \\[find-dired] processes. - (let ((buf (process-buffer proc))) + (let ((buf (process-buffer proc)) + (inhibit-read-only t)) (if (buffer-name buf) (save-excursion (set-buffer buf) From 14e2791a5a0c78903d1cb841b04166198f0b523d Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 19:16:05 +0000 Subject: [PATCH 43/82] (font-lock-after-change-function): Bind inhibit-quit. --- lisp/font-lock.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lisp/font-lock.el b/lisp/font-lock.el index 1be0b724590..b76c818a517 100644 --- a/lisp/font-lock.el +++ b/lisp/font-lock.el @@ -1031,7 +1031,8 @@ what properties to clear before refontifying a region.") ;; Called when any modification is made to buffer text. (defun font-lock-after-change-function (beg end old-len) - (let ((inhibit-point-motion-hooks t)) + (let ((inhibit-point-motion-hooks t) + (inhibit-quit t)) (save-excursion (save-match-data ;; Rescan between start of lines enclosing the region. From 7f18ce220c404f8003ea2c6a7fb51573b8d5b67c Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 19:17:24 +0000 Subject: [PATCH 44/82] (pop-up-frame-function): Use quote, not `function'. (frame-notice-user-settings): Calculate ADJUSTED-TOP copying with lists as coordinate values. --- lisp/frame.el | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/lisp/frame.el b/lisp/frame.el index 367f40d6f8e..a470fbc0f97 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -85,8 +85,9 @@ for pop-up frames." :group 'frames) (setq pop-up-frame-function - (function (lambda () - (make-frame pop-up-frame-alist)))) + ;; Using `function' here caused some sort of problem. + '(lambda () + (make-frame pop-up-frame-alist))) (defcustom special-display-frame-alist '((height . 14) (width . 80) (unsplittable . t)) @@ -335,10 +336,22 @@ React to settings of `default-frame-alist', `initial-frame-alist' there." frame-initial-geometry-arguments))) (top (frame-parameter frame-initial-frame 'top))) (when (and (consp initial-top) (eq '- (car initial-top))) - (setq newparms - (append newparms - `((top . ,(+ top (* lines char-height)))) - nil))) + (let ((adjusted-top + (cond ((and (consp top) + (eq '+ (car top))) + (list '+ + (+ (cadr top) + (* lines char-height)))) + ((and (consp top) + (eq '- (car top))) + (list '- + (- (cadr top) + (* lines char-height)))) + (t (+ top (* lines char-height)))))) + (setq newparms + (append newparms + `((top . ,adjusted-top)) + nil)))) (modify-frame-parameters frame-initial-frame newparms) (tool-bar-mode -1))))) From 0445150cafe7b28d3d928366dde6e5085732bdd8 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 19:18:09 +0000 Subject: [PATCH 45/82] (info-lookup): Use assoc-string. --- lisp/info-look.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/info-look.el b/lisp/info-look.el index 21f265199dd..a184567ea9c 100644 --- a/lisp/info-look.el +++ b/lisp/info-look.el @@ -321,7 +321,7 @@ If optional argument QUERY is non-nil, query for the help mode." (let* ((completions (info-lookup->completions topic mode)) (ignore-case (info-lookup->ignore-case topic mode)) (entry (or (assoc (if ignore-case (downcase item) item) completions) - (assoc-ignore-case item completions) + (assoc-string item completions t) (error "Not documented as a %s: %s" topic (or item "")))) (modes (info-lookup->all-modes topic mode)) (window (selected-window)) From ca205aa366add88b1c3bac714a851da8c1db00d3 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 19:18:20 +0000 Subject: [PATCH 46/82] *** empty log message *** --- etc/NEWS | 3 ++- lisp/ChangeLog | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/etc/NEWS b/etc/NEWS index a4ca184e250..fd4ffb215b4 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -7265,7 +7265,8 @@ Additional image properties supported are: `:index INDEX' INDEX must be an integer >= 0. Load image number INDEX from a -multi-image GIF file. An error is signaled if INDEX is too large. +multi-image GIF file. If INDEX is too large, the image displays +as a hollow box. This could be used to implement limited support for animated GIFs. For example, the following function displays a multi-image GIF file diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e4d943565a9..8c8fba26c93 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,41 @@ +2003-12-29 Richard M. Stallman + + * info-look.el (info-lookup): Use assoc-string. + + * frame.el (pop-up-frame-function): Use quote, not `function'. + (frame-notice-user-settings): Calculate ADJUSTED-TOP + copying with lists as coordinate values. + + * font-lock.el (font-lock-after-change-function): Bind inhibit-quit. + + * find-dired.el (kill-find): New command. + (find-dired): Make buffer read-only. + Set up a keymap with C-c C-k running kill-find. + (find-dired-filter, find-dired-sentinel): Bind inhibit-read-only. + + * files.el (backup-buffer-copy): If MODES is nil, don't set modes. + + * filecache.el (file-cache-ignore-case): New variable. + (file-cache-assoc-function): Var deleted. Use assoc-string instead. + + * comint.el (comint-arguments): Set COUNT after ARGS is complete. + (comint-dynamic-complete-as-filename): Rename local vars. + (comint-dynamic-list-filename-completions): Likewise. + + * comint.el (comint-dynamic-list-completions-config): New var. + (comint-dynamic-list-completions): Handle both SPC and TAB right. + + * comint.el (comint-file-name-chars): Add []. + (comint-word): Use skip-chars-backward, not search. + + * shell.el (shell-file-name-chars): Add []. + + * shell.el (shell-dynamic-complete-as-command): Rename local vars. + + * bookmark.el (bookmark-get-bookmark): Use assoc-string. + + * generic.el (define-generic-mode): Doc fix. + 2003-12-29 Eli Zaretskii * files.el (kill-some-buffers): Doc fix. From 9f4aee27cac6fa39fcae058ddd0a8fa6c701ffbb Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 19:18:53 +0000 Subject: [PATCH 47/82] (Info-insert-dir): Use assoc-string. --- lisp/info.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/info.el b/lisp/info.el index 9616dbb1feb..3438320beb4 100644 --- a/lisp/info.el +++ b/lisp/info.el @@ -918,7 +918,7 @@ a case-insensitive match is tried." (beginning-of-line) (setq end (point)) (push (list nodename other beg end) this-buffer-nodes))) - (if (assoc-ignore-case "top" this-buffer-nodes) + (if (assoc-string "top" this-buffer-nodes t) (setq nodes (nconc this-buffer-nodes nodes)) (setq problems t) (message "No `top' node in %s" Info-dir-file-name))))) From 5ef5d6ce31fe96ea47ce8f29cb12b36f16b657d3 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 19:51:54 +0000 Subject: [PATCH 48/82] (copy-rectangle-to-register): Doc fix. --- lisp/register.el | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lisp/register.el b/lisp/register.el index 8185ae4bc44..0ba6a9addd6 100644 --- a/lisp/register.el +++ b/lisp/register.el @@ -304,8 +304,10 @@ START and END are buffer positions indicating what to prepend." (defun copy-rectangle-to-register (register start end &optional delete-flag) "Copy rectangular region into register REGISTER. -With prefix arg, delete as well. -Called from program, takes four args: REGISTER, START, END and DELETE-FLAG. +With prefix arg, delete as well. To insert this register +in the buffer, use \\[insert-register]. + +Called from a program, takes four args: REGISTER, START, END and DELETE-FLAG. START and END are buffer positions giving two corners of rectangle." (interactive "cCopy rectangle to register: \nr\nP") (set-register register From 9462bf2c713842c2288982b14648f5df1c19ef05 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 19:52:25 +0000 Subject: [PATCH 49/82] (sendmail-user-agent-compose): Use assoc-string. --- lisp/simple.el | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lisp/simple.el b/lisp/simple.el index ade177c5b8e..d23ed11c6c3 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -3735,9 +3735,9 @@ See also `read-mail-command' concerning reading mail." (same-window-buffer-names nil) (same-window-regexps nil)) (funcall switch-function "*mail*"))) - (let ((cc (cdr (assoc-ignore-case "cc" other-headers))) - (in-reply-to (cdr (assoc-ignore-case "in-reply-to" other-headers))) - (body (cdr (assoc-ignore-case "body" other-headers)))) + (let ((cc (cdr (assoc-string "cc" other-headers t))) + (in-reply-to (cdr (assoc-string "in-reply-to" other-headers t))) + (body (cdr (assoc-string "body" other-headers t)))) (or (mail continue to subject in-reply-to cc yank-action send-actions) continue (error "Message aborted")) From 617631c0f39083d73c5007d0612f689ea941642a Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 19:56:54 +0000 Subject: [PATCH 50/82] (assoc-ignore-case, assoc-ignore-representation): Use assoc-string, and mark them obsolete. (delay-mode-hooks): Mark as permanent local. --- lisp/subr.el | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/lisp/subr.el b/lisp/subr.el index e760936572b..a2b09d6b63b 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -298,27 +298,19 @@ If TEST is omitted or nil, `equal' is used." (setq tail (cdr tail))) value)) +(make-obsolete 'assoc-ignore-case 'assoc-string) (defun assoc-ignore-case (key alist) "Like `assoc', but ignores differences in case and text representation. KEY must be a string. Upper-case and lower-case letters are treated as equal. Unibyte strings are converted to multibyte for comparison." - (let (element) - (while (and alist (not element)) - (if (eq t (compare-strings key 0 nil (car (car alist)) 0 nil t)) - (setq element (car alist))) - (setq alist (cdr alist))) - element)) + (assoc-string key alist t)) +(make-obsolete 'assoc-ignore-representation 'assoc-string) (defun assoc-ignore-representation (key alist) "Like `assoc', but ignores differences in text representation. KEY must be a string. Unibyte strings are converted to multibyte for comparison." - (let (element) - (while (and alist (not element)) - (if (eq t (compare-strings key 0 nil (car (car alist)) 0 nil)) - (setq element (car alist))) - (setq alist (cdr alist))) - element)) + (assoc-string key alist nil)) (defun member-ignore-case (elt list) "Like `member', but ignores differences in case and text representation. @@ -1820,6 +1812,7 @@ in BODY." (defvar delayed-mode-hooks nil "List of delayed mode hooks waiting to be run.") (make-variable-buffer-local 'delayed-mode-hooks) +(put 'delay-mode-hooks 'permanent-local t) (defun run-mode-hooks (&rest hooks) "Run mode hooks `delayed-mode-hooks' and HOOKS, or delay HOOKS. From 9d133481d6caf87ff3f230caaca07da9b69dcf12 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 19:58:11 +0000 Subject: [PATCH 51/82] (term-exec): Set up sentinel. (term-sentinel): New function. (term-handle-exit): New function. --- lisp/term.el | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/lisp/term.el b/lisp/term.el index d2088a29785..b329004c083 100644 --- a/lisp/term.el +++ b/lisp/term.el @@ -1290,6 +1290,7 @@ buffer. The hook term-exec-hook is run after each exec." (goto-char (point-max)) (set-marker (process-mark proc) (point)) (set-process-filter proc 'term-emulate-terminal) + (set-process-sentinel proc 'term-sentinel) ;; Feed it the startfile. (cond (startfile ;;This is guaranteed to wait long enough @@ -1306,6 +1307,49 @@ buffer. The hook term-exec-hook is run after each exec." (run-hooks 'term-exec-hook) buffer))) +(defun term-sentinel (proc msg) + "Sentinel for term buffers. +The main purpose is to get rid of the local keymap." + (let ((buffer (process-buffer proc))) + (if (memq (process-status proc) '(signal exit)) + (progn + (if (null (buffer-name buffer)) + ;; buffer killed + (set-process-buffer proc nil) + (let ((obuf (current-buffer))) + ;; save-excursion isn't the right thing if + ;; process-buffer is current-buffer + (unwind-protect + (progn + ;; Write something in the compilation buffer + ;; and hack its mode line. + (set-buffer buffer) + ;; Get rid of local keymap. + (use-local-map nil) + (term-handle-exit (process-name proc) + msg) + ;; Since the buffer and mode line will show that the + ;; process is dead, we can delete it now. Otherwise it + ;; will stay around until M-x list-processes. + (delete-process proc)) + (set-buffer obuf)))) + )))) + +(defun term-handle-exit (process-name msg) + "Write process exit (or other change) message MSG in the current buffer." + (let ((buffer-read-only nil) + (omax (point-max)) + (opoint (point))) + ;; Record where we put the message, so we can ignore it + ;; later on. + (goto-char omax) + (insert ?\n "Process " process-name " " msg) + ;; Force mode line redisplay soon. + (force-mode-line-update) + (if (and opoint (< opoint omax)) + (goto-char opoint)))) + + ;;; Name to use for TERM. ;;; Using "emacs" loses, because bash disables editing if TERM == emacs. (defvar term-term-name "eterm") From d6b4d749d00f0871ba30b8b0123d96c64c6b9c70 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 19:59:24 +0000 Subject: [PATCH 52/82] (rfc822-address-start): Declare variable. Renamed from address-start. All uses changed. --- lisp/mail/rfc822.el | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/lisp/mail/rfc822.el b/lisp/mail/rfc822.el index 9b3d5c18d4c..1a5dfad67f8 100644 --- a/lisp/mail/rfc822.el +++ b/lisp/mail/rfc822.el @@ -30,11 +30,13 @@ ;;; Code: -;; uses address-start free, throws to address +(defvar rfc822-address-start) + +;; uses rfc822-address-start free, throws to address (defun rfc822-bad-address (reason) (save-restriction (insert "_^_") - (narrow-to-region address-start + (narrow-to-region rfc822-address-start (if (re-search-forward "[,;]" nil t) (max (point-min) (1- (point))) (point-max))) @@ -52,7 +54,7 @@ ": \"") (goto-char (point-max)) (insert "\")")) (rfc822-nuke-whitespace) - (throw 'address (buffer-substring address-start (point)))) + (throw 'address (buffer-substring rfc822-address-start (point)))) (defun rfc822-nuke-whitespace (&optional leave-space) (let (ch) @@ -179,7 +181,7 @@ ;; domain-literal is "[" *(dtext | quoted-pair) "]" ;; dtext is "[^][\\n" ;; domain-ref is atom - (let ((address-start (point)) + (let ((rfc822-address-start (point)) (n 0)) (catch 'address ;; optimize common cases: @@ -198,14 +200,14 @@ (or (bobp) (/= (preceding-char) ?\ ) (delete-char -1)) ;; relying on the fact that rfc822-looking-at ;; doesn't mung match-data - (throw 'address (buffer-substring address-start (match-end 0))))) - (goto-char address-start) + (throw 'address (buffer-substring rfc822-address-start (match-end 0))))) + (goto-char rfc822-address-start) (while t (cond ((and (= n 1) (rfc822-looking-at ?@)) ;; local-part@domain (rfc822-snarf-domain) (throw 'address - (buffer-substring address-start (point)))) + (buffer-substring rfc822-address-start (point)))) ((rfc822-looking-at ?:) (cond ((not allow-groups) (rfc822-bad-address "A group name may not appear here")) @@ -261,7 +263,7 @@ (throw 'address nil)) ((= n 1) ; allow "foo" (losing unix seems to do this) (throw 'address - (buffer-substring address-start (point)))) + (buffer-substring rfc822-address-start (point)))) ((> n 1) (rfc822-bad-address "Missing comma between addresses or badly-formatted address")) ((or (eobp) (= (following-char) ?,)) @@ -289,12 +291,12 @@ (replace-match "\\1 " t)) (goto-char (point-min)) - (rfc822-nuke-whitespace) (let ((list ()) tem - address-start); this is for rfc822-bad-address + rfc822-address-start); this is for rfc822-bad-address + (rfc822-nuke-whitespace) (while (not (eobp)) - (setq address-start (point)) + (setq rfc822-address-start (point)) (setq tem (catch 'address ; this is for rfc822-bad-address (cond ((rfc822-looking-at ?\,) From 5da640603d8884e49b5181c5b91eb1e398a19cd4 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 20:00:36 +0000 Subject: [PATCH 53/82] (ange-ftp-start-process): Copy the environment. --- lisp/net/ange-ftp.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lisp/net/ange-ftp.el b/lisp/net/ange-ftp.el index dc3b5a62da9..0277bd0aabc 100644 --- a/lisp/net/ange-ftp.el +++ b/lisp/net/ange-ftp.el @@ -1918,7 +1918,8 @@ on the gateway machine to do the ftp instead." ;; but that doesn't work: ftp never responds. ;; Can anyone find a fix for that? (let ((process-connection-type t) - (process-environment process-environment) + ;; Copy this so we don't alter it permanently. + (process-environment (copy-tree process-environment)) (buffer (get-buffer-create name))) (save-excursion (set-buffer buffer) From f1d02ba429c97bdca9a7f0986ffe88139153f2af Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 20:01:32 +0000 Subject: [PATCH 54/82] Display message that this file is obsolete. --- lisp/obsolete/sc.el | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lisp/obsolete/sc.el b/lisp/obsolete/sc.el index e9798a0a253..26486577aa4 100644 --- a/lisp/obsolete/sc.el +++ b/lisp/obsolete/sc.el @@ -11,5 +11,7 @@ (require 'supercite) (provide 'sc) +(message "The name `sc' works but is obsolete; please use `supercite' instead") + ;;; arch-tag: 31e8ae19-689e-4b7d-9161-6d7dd60c6ece ;;; sc.el ends here From 3066be24c14256604ae91e149f2b1f51f792afca Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 20:02:15 +0000 Subject: [PATCH 55/82] (handwrite): Make the handwrite credit message a comment rather than an output command. --- lisp/play/handwrite.el | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lisp/play/handwrite.el b/lisp/play/handwrite.el index 5c6aa8f3abf..11499444920 100644 --- a/lisp/play/handwrite.el +++ b/lisp/play/handwrite.el @@ -159,8 +159,7 @@ Variables: handwrite-linespace (default 12) (setq next-line-add-newlines t) (switch-to-buffer ps-buf-name) (handwrite-insert-header buf-name) - (insert "\n(\\nCreated by GNU Emacs' handwrite version " - emacs-version "\\n\\n)=print flush\n") + (insert "%%Creator: GNU Emacs' handwrite version " emacs-version "\n") (handwrite-insert-preamble) (handwrite-insert-info) (handwrite-insert-font) From 3e86c60b95adb1485c09ed32a3decf89ebfbf871 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 20:03:05 +0000 Subject: [PATCH 56/82] (save-buffer-state-x): Use with-no-warnings. --- lisp/progmodes/antlr-mode.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/progmodes/antlr-mode.el b/lisp/progmodes/antlr-mode.el index f3a540fc491..b7bf99efa2e 100644 --- a/lisp/progmodes/antlr-mode.el +++ b/lisp/progmodes/antlr-mode.el @@ -161,7 +161,7 @@ ;; More compile-time-macros (eval-when-compile (defmacro save-buffer-state-x (&rest body) ; similar to EMACS/lazy-lock.el - (let ((modified (gensym "save-buffer-state-x-modified-"))) + (let ((modified (with-no-warnings (gensym "save-buffer-state-x-modified-")))) `(let ((,modified (buffer-modified-p))) (unwind-protect (let ((buffer-undo-list t) (inhibit-read-only t) From a3ae17d490db9c7a64f5f031e0dd1f838ea46c17 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 20:03:46 +0000 Subject: [PATCH 57/82] (sh-get-indent-info): Don't move point back if at bob. --- lisp/progmodes/sh-script.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el index e63dda1c663..a23dc0a307e 100644 --- a/lisp/progmodes/sh-script.el +++ b/lisp/progmodes/sh-script.el @@ -2052,7 +2052,8 @@ STRING This is ignored for the purposes of calculating (progn (setq result (append result val)) (setq align-point (point)))) - (forward-char -1) + (or (bobp) + (forward-char -1)) (skip-chars-forward "[a-z0-9]*?") ) ((string-match "[])}]" x) From 67d120ebadb080a3c7ec16f7a4855fd6227b923e Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 20:06:19 +0000 Subject: [PATCH 58/82] (mail-mode-flyspell-verify): Search for header separator alone on a line, literally, and search for it backward, not forward. (flyspell-abbrev-table): Always use global-abbrev-table if there is no local one. --- lisp/textmodes/flyspell.el | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lisp/textmodes/flyspell.el b/lisp/textmodes/flyspell.el index dc4f521c018..e71eb440c12 100644 --- a/lisp/textmodes/flyspell.el +++ b/lisp/textmodes/flyspell.el @@ -267,7 +267,9 @@ property of the major mode name.") (defun mail-mode-flyspell-verify () "This function is used for `flyspell-generic-check-word-p' in Mail mode." (let ((in-headers (save-excursion - (re-search-forward mail-header-separator nil t))) + ;; When mail-header-separator is "", + ;; it is likely to be found in both directions. + (not (re-search-backward (concat "^" (regexp-quote mail-header-separator) "$") nil t)))) (in-signature (save-excursion (re-search-backward message-signature-separator nil t)))) (cond (in-headers @@ -1628,7 +1630,7 @@ misspelled words backwards." (defun flyspell-abbrev-table () (if flyspell-use-global-abbrev-table-p global-abbrev-table - local-abbrev-table)) + (or local-abbrev-table global-abbrev-table))) ;*---------------------------------------------------------------------*/ ;* flyspell-define-abbrev ... */ From 39be25da15140fb56874984e1c52bf792b70fdd6 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 20:25:53 +0000 Subject: [PATCH 59/82] (Buffer Modification): Add restore-buffer-modified-p. (Killing Buffers): Add buffer-live-p. --- lispref/buffers.texi | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lispref/buffers.texi b/lispref/buffers.texi index 5b1104eb058..634838f903f 100644 --- a/lispref/buffers.texi +++ b/lispref/buffers.texi @@ -517,6 +517,11 @@ function @code{force-mode-line-update} works by doing this: @end example @end defun +@defun restore-buffer-modified-p flag +Like @code{set-buffer-modified-p}, but does not force redisplay +of mode lines. +@end defun + @deffn Command not-modified This command marks the current buffer as unmodified, and not needing to be saved. With prefix arg, it marks the buffer as modified, so that it @@ -953,6 +958,11 @@ variable @code{buffer-offer-save} automatically becomes buffer-local when set for any reason. @xref{Buffer-Local Variables}. @end defvar +@defun buffer-live-p buffer +This function returns @code{t} if @var{object} is a buffer which has +not been killed, @code{nil} otherwise. +@end defun + @node Indirect Buffers @section Indirect Buffers @cindex indirect buffers From 00b3c1cd3194a3d2586d50bb2ce5ee39f88bff6f Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 20:28:06 +0000 Subject: [PATCH 60/82] (Refresh Screen): Add force-window-update. (Invisible Text): Explain about moving point out of invis text. (Overlay Properties): Add overlay-properties. (Managing Overlays): Add overlayp. (GIF Images): Invalid image number displays a hollow box. --- lisp/ChangeLog | 35 +++++++++++++++++++++++++++++++++++ lispref/display.texi | 36 +++++++++++++++++++++++++++++++++--- 2 files changed, 68 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8c8fba26c93..c6694b0ad03 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,40 @@ 2003-12-29 Richard M. Stallman + * textmodes/flyspell.el (mail-mode-flyspell-verify): + Search for header separator alone on a line, literally, + and search for it backward, not forward. + (flyspell-abbrev-table): Always use global-abbrev-table + if there is no local one. + + * progmodes/sh-script.el (sh-get-indent-info): + Don't move point back if at bob. + + * progmodes/antlr-mode.el (save-buffer-state-x): Use with-no-warnings. + + * play/handwrite.el (handwrite): Make the handwrite credit message + a comment rather than an output command. + + * obsolete/sc.el: Display message that this file is obsolete. + + * net/ange-ftp.el (ange-ftp-start-process): Copy the environment. + + * mail/rfc822.el (rfc822-address-start): Declare variable. + Renamed from address-start. All uses changed. + + * term.el (term-exec): Set up sentinel. + (term-sentinel): New function. + (term-handle-exit): New function. + + * subr.el (assoc-ignore-case, assoc-ignore-representation): + Use assoc-string, and mark them obsolete. + (delay-mode-hooks): Mark as permanent local. + + * simple.el (sendmail-user-agent-compose): Use assoc-string. + + * register.el (copy-rectangle-to-register): Doc fix. + + * info.el (Info-insert-dir): Use assoc-string. + * info-look.el (info-lookup): Use assoc-string. * frame.el (pop-up-frame-function): Use quote, not `function'. diff --git a/lispref/display.texi b/lispref/display.texi index abbbab0ce79..bd415b69697 100644 --- a/lispref/display.texi +++ b/lispref/display.texi @@ -53,6 +53,17 @@ Even more powerful is @code{redraw-display}: This function clears and redisplays all visible frames. @end deffn + This function forces certain windows to be redisplayed +but does not clear them. + +@defun force-window-update object +This function forces redisplay of some or all windows. If +@var{object} is a window, it forces redisplay of that window. If +@var{object} is a buffer or buffer name, it forces redisplay of all +windows displaying that buffer. If @var{object} is @code{nil}, it +forces redisplay of all windows. +@end defun + Processing user input takes absolute priority over redisplay. If you call these functions when input is available, they do nothing immediately, but a full redisplay does happen eventually---after all the @@ -517,6 +528,7 @@ warnings buffer. Each element of the list should be a list of symbols. If it matches the first few elements in a warning type, then that warning is not logged. @end defopt + @node Invisible Text @section Invisible Text @@ -613,12 +625,22 @@ major mode should use the mode's own name as an element of @end example @vindex line-move-ignore-invisible - Ordinarily, commands that operate on text or move point do not care + Ordinarily, functions that operate on text or move point do not care whether the text is invisible. The user-level line motion commands explicitly ignore invisible newlines if @code{line-move-ignore-invisible} is non-@code{nil}, but only because they are explicitly programmed to do so. + However, if a command ends with point inside or immediately after +invisible text, the main editing loop moves point further forward or +further backward (in the same direction that the command already moved +it) until that condition is no longer true. Thus, if the command +moved point back into an invisible range, Emacs moves point back to +the beginning of that range, following the previous visible character. +If the command moved point forward into an invisible range, Emacs +moves point forward past the first visible character that follows the +invisible text. + Incremental search can make invisible overlays visible temporarily and/or permanently when a match includes invisible text. To enable this, the overlay should have a non-@code{nil} @@ -978,6 +1000,10 @@ is @code{nil}. @defun overlay-put overlay prop value This function sets the value of property @var{prop} recorded in @var{overlay} to @var{value}. It returns @var{value}. +@end defun + +@defun overlay-properties overlay +This returns a copy of the property list of @var{overlay}. @end defun See also the function @code{get-char-property} which checks both @@ -1155,6 +1181,10 @@ property) rather than replacing it. This section describes the functions to create, delete and move overlays, and to examine their contents. +@defun overlayp object +This function returns @code{t} if @var{object} is an overlay. +@end defun + @defun make-overlay start end &optional buffer front-advance rear-advance This function creates and returns an overlay that belongs to @var{buffer} and ranges from @var{start} to @var{end}. Both @var{start} @@ -3114,8 +3144,8 @@ them, Emacs can display them. @item :index @var{index} You can use @code{:index} to specify one image from a GIF file that contains more than one image. This property specifies use of image -number @var{index} from the file. An error is signaled if the GIF file -doesn't contain an image with index @var{index}. +number @var{index} from the file. If the GIF file doesn't contain an +image with index @var{index}, the image displays as a hollow box. @end table @ignore From 67203dbdf11bbeab54138e9dac5a0fcccea4b1e4 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 20:28:40 +0000 Subject: [PATCH 61/82] (Contents of Directories): Add directory-files-and-attributes. --- lispref/files.texi | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lispref/files.texi b/lispref/files.texi index 83c33752323..575a90ccf92 100644 --- a/lispref/files.texi +++ b/lispref/files.texi @@ -2165,6 +2165,14 @@ An error is signaled if @var{directory} is not the name of a directory that can be read. @end defun +@defun directory-files-and-attributes directory &optional full-name match-regexp nosort +This is similar to @code{directory-files} in deciding which files +to report on and how to report their names. However, instead +of returning a list of file names, it returns for each file a +list @code{(@var{filename} . @var{attributes})}, where @var{attributes} +is what @code{file-attributes} would return for that file. +@end defun + @defun file-name-all-versions file dirname This function returns a list of all versions of the file named @var{file} in directory @var{dirname}. From 0c10c5de42ae41fad92880817bfb8b6e43e4bcbe Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 20:58:40 +0000 Subject: [PATCH 62/82] (Frames and Windows): Add set-frame-selected-window and frame-root-window. --- lispref/frames.texi | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lispref/frames.texi b/lispref/frames.texi index 76b4228cc4f..ec3c1c6dc7c 100644 --- a/lispref/frames.texi +++ b/lispref/frames.texi @@ -921,11 +921,22 @@ selected window with @code{frame-selected-window}. @defun frame-selected-window frame This function returns the window on @var{frame} that is selected within @var{frame}. +@end defun + +@defun set-frame-selected-window frame window +This sets the selected window of frame @var{frame} to @var{window}. +If @var{frame} is @code{nil}, it operates on the selected frame. If +@var{frame} is the selected frame, this makes @var{window} the +selected window. @end defun Conversely, selecting a window for Emacs with @code{select-window} also makes that window selected within its frame. @xref{Selecting Windows}. +@defun frame-root-window frame +This function returns the window at the top left corner of @var{frame}. +@end defun + Another function that (usually) returns one of the windows in a given frame is @code{minibuffer-window}. @xref{Minibuffer Misc}. From 5b2279a391d8b6a89dac513a9a5e38667820b820 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 20:59:33 +0000 Subject: [PATCH 63/82] (Garbage Collection): Add memory-use-counts. --- lispref/internals.texi | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lispref/internals.texi b/lispref/internals.texi index 2a4572560a7..907a01df9e9 100644 --- a/lispref/internals.texi +++ b/lispref/internals.texi @@ -383,6 +383,12 @@ You can use this to get a general idea of how your actions affect the memory usage. @end defun +@defun memory-use-counts +This returns a list of numbers that count the number of objects +created in this Emacs session. Each of these counters increments for +a certain kind of object. See the documentation string for details. +@end defun + @defvar gcs-done This variable contains the total number of garbage collections done so far in this Emacs session. From 9f0812867abf2b6b3809a71304e6579d9ae32cbe Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 21:24:11 +0000 Subject: [PATCH 64/82] (Building Lists): remq moved elsewhere. (Sets And Lists): remq moved here. (Association Lists): Refer to assoc-string. --- lispref/lists.texi | 62 +++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/lispref/lists.texi b/lispref/lists.texi index 885d1e07f28..b123de5ab10 100644 --- a/lispref/lists.texi +++ b/lispref/lists.texi @@ -707,31 +707,6 @@ x @end example @end defun -@defun remq object list -This function returns a copy of @var{list}, with all elements removed -which are @code{eq} to @var{object}. The letter @samp{q} in @code{remq} -says that it uses @code{eq} to compare @var{object} against the elements -of @code{list}. - -@example -@group -(setq sample-list '(a b c a b c)) - @result{} (a b c a b c) -@end group -@group -(remq 'a sample-list) - @result{} (b c b c) -@end group -@group -sample-list - @result{} (a b c a b c) -@end group -@end example -@noindent -The function @code{delq} offers a way to perform this operation -destructively. See @ref{Sets And Lists}. -@end defun - @defun copy-tree tree &optional vecp This function returns a copy the tree @code{tree}. If @var{tree} is a cons cell, this makes a new cons cell with the same @sc{car} and @@ -1346,9 +1321,34 @@ and the @code{(4)} in the @code{sample-list} are not @code{eq}: @end group @end example -The following two functions are like @code{memq} and @code{delq} but use -@code{equal} rather than @code{eq} to compare elements. @xref{Equality -Predicates}. +@defun remq object list +This function returns a copy of @var{list}, with all elements removed +which are @code{eq} to @var{object}. The letter @samp{q} in @code{remq} +says that it uses @code{eq} to compare @var{object} against the elements +of @code{list}. + +@example +@group +(setq sample-list '(a b c a b c)) + @result{} (a b c a b c) +@end group +@group +(remq 'a sample-list) + @result{} (b c b c) +@end group +@group +sample-list + @result{} (a b c a b c) +@end group +@end example +@noindent +The function @code{delq} offers a way to perform this operation +destructively. See @ref{Sets And Lists}. +@end defun + +The following three functions are like @code{memq}, @code{delq} and +@code{remq}, but use @code{equal} rather than @code{eq} to compare +elements. @xref{Equality Predicates}. @defun member object list The function @code{member} tests to see whether @var{object} is a member @@ -1541,9 +1541,9 @@ Here is another example, in which the keys and values are not symbols: @end smallexample @end defun - The functions @code{assoc-ignore-representation} and -@code{assoc-ignore-case} are much like @code{assoc} except using -@code{compare-strings} to do the comparison. @xref{Text Comparison}. + The function @code{assoc-string} is much like @code{assoc} except +that it ignores certain differences between strings. @xref{Text +Comparison}. @defun rassoc value alist This function returns the first association with value @var{value} in From 41495ddda84404d8ffb5d05c0575d61578d2db35 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 21:24:48 +0000 Subject: [PATCH 65/82] (Minibuffer Misc): Add set-minibuffer-window. --- lispref/minibuf.texi | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lispref/minibuf.texi b/lispref/minibuf.texi index 114942ed787..473859ccd6c 100644 --- a/lispref/minibuf.texi +++ b/lispref/minibuf.texi @@ -1645,6 +1645,14 @@ frame---a frame that has no minibuffer of its own necessarily uses some other frame's minibuffer window. @end defun +@defun set-minibuffer-window window +This function specifies @var{window} as the minibuffer window to use. +This affects where the minibuffer is displayed if you put text in it +without invoking the usual minibuffer commands. It has no effect on +the usual minibuffer input functions because they all start by +choosing the minibuffer window according to the current frame. +@end defun + @c Emacs 19 feature @defun window-minibuffer-p window This function returns non-@code{nil} if @var{window} is a minibuffer window. From 3ab66863d39abc89dcbca30e678b3fad344f83b6 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 21:27:13 +0000 Subject: [PATCH 66/82] (Search-based Fontification): Explain that face specs are symbols with face names as values. --- lispref/modes.texi | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/lispref/modes.texi b/lispref/modes.texi index 6a55cd75c8a..2292346ffdf 100644 --- a/lispref/modes.texi +++ b/lispref/modes.texi @@ -2024,9 +2024,10 @@ If you use @code{regexp-opt} to produce the regular expression @var{matcher}, then you can use @code{regexp-opt-depth} (@pxref{Syntax of Regexps}) to calculate the value for @var{match}. -@item (@var{matcher} . @var{facename}) -In this kind of element, @var{facename} is an expression whose value -specifies the face name to use for highlighting. +@item (@var{matcher} . @var{facespec}) +In this kind of element, @var{facespec} is an object which specifies +the face variable to use for highlighting. In the simplest case, it +is a Lisp variable (a symbol), whose value should be a face name. @example ;; @r{Highlight occurrences of @samp{fubar},} @@ -2034,8 +2035,7 @@ specifies the face name to use for highlighting. ("fubar" . fubar-face) @end example -The value of @var{facename} is usually a face name (a symbol), but it -can also be a list of the form +However, @var{facespec} can also be a list of the form @example (face @var{face} @var{prop1} @var{val1} @var{prop2} @var{val2}@dots{}) @@ -2053,21 +2053,21 @@ which specifies how to highlight matches found by @var{matcher}. It has the form @example -(@var{subexp} @var{facename} @var{override} @var{laxmatch}) +(@var{subexp} @var{facespec} @var{override} @var{laxmatch}) @end example The @sc{car}, @var{subexp}, is an integer specifying which subexpression of the match to fontify (0 means the entire matching text). The second -subelement, @var{facename}, specifies the face, as described above. +subelement, @var{facespec}, specifies the face, as described above. The last two values in @var{highlighter}, @var{override} and @var{laxmatch}, are flags. If @var{override} is @code{t}, this element can override existing fontification made by previous elements of @code{font-lock-keywords}. If it is @code{keep}, then each character is fontified if it has not been fontified already by some -other element. If it is @code{prepend}, the face @var{facename} is -added to the beginning of the @code{font-lock-face} property. If it -is @code{append}, the face @var{facename} is added to the end of the +other element. If it is @code{prepend}, the face specified by +@var{facespec} is added to the beginning of the @code{font-lock-face} +property. If it is @code{append}, the face is added to the end of the @code{font-lock-face} property. If @var{laxmatch} is non-@code{nil}, it means there should be no error @@ -2231,7 +2231,7 @@ textual modes. Additional properties (other than @code{font-lock-face}) that are being managed by Font Lock mode. Font Lock mode normally manages only the @code{font-lock-face} property; if you want it to manage others as -well, you must specify them in a @var{facename} in +well, you must specify them in a @var{facespec} in @code{font-lock-keywords} as well as adding them to this list. @end defvar From 1ee89891a8c788cf970b0866b0ca4b4a33606b24 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 21:29:15 +0000 Subject: [PATCH 67/82] (Converting Representations): Add multibyte-char-to-unibyte and unibyte-char-to-multibyte. (Encoding and I/O): Add file-name-coding-system. --- lispref/nonascii.texi | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/lispref/nonascii.texi b/lispref/nonascii.texi index e66c7d15757..419a23efae7 100644 --- a/lispref/nonascii.texi +++ b/lispref/nonascii.texi @@ -210,6 +210,18 @@ multibyte string. If @var{string} is a multibyte string, it is returned unchanged. @end defun +@defun multibyte-char-to-unibyte char +This convert the multibyte character @var{char} to a unibyte +character, based on @code{nonascii-translation-table} and +@code{nonascii-insert-offset}. +@end defun + +@defun unibyte-char-to-multibyte char +This convert the unibyte character @var{char} to a multibyte +character, based on @code{nonascii-translation-table} and +@code{nonascii-insert-offset}. +@end defun + @node Selecting a Representation @section Selecting a Representation @@ -701,6 +713,26 @@ interested in. The variable @code{selection-coding-system} specifies how to encode selections for the window system. @xref{Window System Selections}. +@defvar file-name-coding-system +The variable @code{file-name-coding-system} specifies the coding +system to use for encoding file names. Emacs encodes file names using +that coding system for all file operations. If +@code{file-name-coding-system} is @code{nil}, Emacs uses a default +coding system determined by the selected language environment. In the +default language environment, any non-@acronym{ASCII} characters in +file names are not encoded specially; they appear in the file system +using the internal Emacs representation. +@end defvar + + @strong{Warning:} if you change @code{file-name-coding-system} (or +the language environment) in the middle of an Emacs session, problems +can result if you have already visited files whose names were encoded +using the earlier coding system and are handled differently under the +new coding system. If you try to save one of these buffers under the +visited file name, saving may use the wrong file name, or it may get +an error. If such a problem happens, use @kbd{C-x C-w} to specify a +new file name for that buffer. + @node Lisp and Coding Systems @subsection Coding Systems in Lisp From f3d95494d6c373a57d60512b0a508c185d395845 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 21:32:10 +0000 Subject: [PATCH 68/82] (Math Functions): asin, acos, log, log10 report domain-error errors. --- lispref/numbers.texi | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/lispref/numbers.texi b/lispref/numbers.texi index 63f3035dfcf..9c71922c0d0 100644 --- a/lispref/numbers.texi +++ b/lispref/numbers.texi @@ -1047,8 +1047,8 @@ pi/2 @tex @math{\pi/2} @end tex -(inclusive) whose sine is @var{arg}; if, however, @var{arg} -is out of range (outside [-1, 1]), then the result is a NaN. +(inclusive) whose sine is @var{arg}; if, however, @var{arg} is out of +range (outside [-1, 1]), it signals a @code{domain-error} error. @end defun @defun acos arg @@ -1059,8 +1059,8 @@ pi @tex @math{\pi} @end tex -(inclusive) whose cosine is @var{arg}; if, however, @var{arg} -is out of range (outside [-1, 1]), then the result is a NaN. +(inclusive) whose cosine is @var{arg}; if, however, @var{arg} is out +of range (outside [-1, 1]), it signals a @code{domain-error} error. @end defun @defun atan y &optional x @@ -1112,8 +1112,8 @@ If you don't specify @var{base}, the base @ifnottex @i{e} @end ifnottex -is used. If @var{arg} -is negative, the result is a NaN. +is used. If @var{arg} is negative, it signals a @code{domain-error} +error. @end defun @ignore @@ -1132,8 +1132,9 @@ lose accuracy. @defun log10 arg This function returns the logarithm of @var{arg}, with base 10. If -@var{arg} is negative, the result is a NaN. @code{(log10 @var{x})} -@equiv{} @code{(log @var{x} 10)}, at least approximately. +@var{arg} is negative, it signals a @code{domain-error} error. +@code{(log10 @var{x})} @equiv{} @code{(log @var{x} 10)}, at least +approximately. @end defun @defun expt x y From 76aac1c198edfe9eac39343cd56c9f04cf4ee16d Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 21:35:37 +0000 Subject: [PATCH 69/82] (Time of Day): Add set-time-zone-rule. --- lispref/os.texi | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lispref/os.texi b/lispref/os.texi index 5706c33d607..5401701b973 100644 --- a/lispref/os.texi +++ b/lispref/os.texi @@ -1010,6 +1010,13 @@ integers. Thus, you can use times obtained from @code{current-time} (see above) and from @code{file-attributes} (@pxref{File Attributes}). @end defun +@defun set-time-zone-rule tz +This function specifies the local time zone according to @var{tz}. If +@var{tz} is @code{nil}, that means to use an implementation-defined +default time zone. If @var{tz} is @code{t}, that means to use +Universal Time. +@end defun + @defun float-time &optional time-value This function returns the current time as a floating-point number of seconds since the epoch. The argument @var{time-value}, if given, From 81e65dff20729fc4637f65a1086a2dba46aea415 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 21:37:17 +0000 Subject: [PATCH 70/82] (Modifying Strings): Add clear-string. (Text Comparison): Add assoc-string and remove assoc-ignore-case, assoc-ignore-representation. --- lispref/strings.texi | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/lispref/strings.texi b/lispref/strings.texi index acab7286d0d..7cc182cc058 100644 --- a/lispref/strings.texi +++ b/lispref/strings.texi @@ -377,6 +377,14 @@ Since it is impossible to change the length of an existing string, it is an error if @var{obj} doesn't fit within @var{string}'s actual length, or if any new character requires a different number of bytes from the character currently present at that point in @var{string}. +@end defun + + To clear out a string that contained a password, use +@code{clear-string}: + +@defun clear-string string +This clears the contents of @var{string} to zeros +and may change its length. @end defun @need 2000 @@ -518,13 +526,10 @@ two strings. The sign is negative if @var{string1} (or its specified portion) is less. @end defun -@defun assoc-ignore-case key alist -@defunx assoc-ignore-representation key alist -These functions work like @code{assoc}, except that @var{key} must be -a string, all elements of @var{alist} must be cons cells whose -@sc{car} is a string, and comparison is done using -@code{compare-strings}. @code{assoc-ignore-case} ignores case -differences, whereas @code{assoc-ignore-representation} does not. +@defun assoc-string key alist &optional case-fold +This function works like @code{assoc}, except that @var{key} must be a +string, and comparison is done using @code{compare-strings}. If +@var{case-fold} is non-@code{nil}, it ignores case differences. @xref{Association Lists}. @end defun From 6fac48b39c3b6534774de41fe2307b3db2ec4766 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 21:51:29 +0000 Subject: [PATCH 71/82] (Examining Properties): Add get-char-property-and-overlay. Change arg name in get-char-property. (Special Properties): Update handling of keymap property. --- lispref/text.texi | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/lispref/text.texi b/lispref/text.texi index b72ce8a263d..1b460aa5077 100644 --- a/lispref/text.texi +++ b/lispref/text.texi @@ -1890,7 +1890,8 @@ begins. @xref{Usual Display}. Column number computations ignore the width of the window and the amount of horizontal scrolling. Consequently, a column value can be -arbitrarily high. The first (or leftmost) column is numbered 0. +arbitrarily high. The first (or leftmost) column is numbered 0. They +also ignore overlays and text properties, aside from invisibility. @defun current-column This function returns the horizontal position of point, measured in @@ -2409,7 +2410,7 @@ has a category that is a symbol, then @code{get-text-property} returns the @var{prop} property of that symbol. @end defun -@defun get-char-property pos prop &optional object +@defun get-char-property position prop &optional object This function is like @code{get-text-property}, except that it checks overlays first and then text properties. @xref{Overlays}. @@ -2422,6 +2423,20 @@ string, only text properties are considered, since strings never have overlays. @end defun +@defun get-char-property-and-overlay position prop &optional object +This is like @code{get-char-property}, but gives extra information +about the overlay that the property value comes from. + +Its value is a cons cell whose @sc{car} is the property value, the +same value @code{get-char-property} would return with the same +arguments. Its @sc{cdr} is the overlay in which the property was +found, or @code{nil}, if it was found as a text property or not found +at all. + +If @var{position} is at the end of @var{object}, both the @sc{car} and +the @sc{cdr} of the value are @code{nil}. +@end defun + @defvar char-property-alias-alist This variable holds an alist which maps property names to a list of alternative property names. If a character does not specify a direct @@ -2860,11 +2875,13 @@ The @code{keymap} property specifies an additional keymap for commands. The property's value for the character before point applies if it is non-@code{nil} and rear-sticky, and the property's value for the character after point applies if it is non-@code{nil} and -front-sticky. When the value applies, it is used for key lookup -before the buffer's local map. (For mouse clicks, the position of the -click is used instead of the position of point.) If the property -value is a symbol, the symbol's function definition is used as the -keymap. @xref{Active Keymaps}. +front-sticky. (For mouse clicks, the position of the click is used +instead of the position of point.) If the property value is a symbol, +the symbol's function definition is used as the keymap. + +When this keymap applies, it is used for key lookup before the minor +mode keymaps and before the buffer's local map. @xref{Active +Keymaps}. @item local-map @kindex local-map @r{(text property)} From dbcd9cd756728dcc2fca63b3357a080aff5a96fc Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 21:52:03 +0000 Subject: [PATCH 72/82] (Creating Buffer-Local): Add local-variable-if-set-p. --- lispref/variables.texi | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lispref/variables.texi b/lispref/variables.texi index bbe7358b5d7..4ff40120ca4 100644 --- a/lispref/variables.texi +++ b/lispref/variables.texi @@ -1335,6 +1335,12 @@ This returns @code{t} if @var{variable} is buffer-local in buffer @code{nil}. @end defun +@defun local-variable-if-set-p variable &optional buffer +This returns @code{t} if @var{variable} will become buffer-local in +buffer @var{buffer} (which defaults to the current buffer) if it is +set there. +@end defun + @defun buffer-local-value variable buffer This function returns the buffer-local binding of @var{variable} (a symbol) in buffer @var{buffer}. If @var{variable} does not have a From 4d25144d00a10b580fbbbb708f19a5199a497a30 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 29 Dec 2003 21:53:46 +0000 Subject: [PATCH 73/82] (Choosing Window): Add same-window-p, special-display-p. (Window Configurations): Add window-configuration-frame. --- lispref/ChangeLog | 50 ++++++++++++++++++++++++++++++++++++++++++++ lispref/windows.texi | 27 ++++++++++++++++++++---- 2 files changed, 73 insertions(+), 4 deletions(-) diff --git a/lispref/ChangeLog b/lispref/ChangeLog index 1b9aabffe46..f591037daab 100644 --- a/lispref/ChangeLog +++ b/lispref/ChangeLog @@ -1,3 +1,53 @@ +2003-12-29 Richard M. Stallman + + * windows.texi (Choosing Window): Add same-window-p, special-display-p. + (Window Configurations): Add window-configuration-frame. + + * variables.texi (Creating Buffer-Local): Add local-variable-if-set-p. + + * text.texi (Examining Properties): Add get-char-property-and-overlay. + Change arg name in get-char-property. + (Special Properties): Update handling of keymap property. + + * strings.texi (Modifying Strings): Add clear-string. + (Text Comparison): Add assoc-string and remove + assoc-ignore-case, assoc-ignore-representation. + + * os.texi (Time of Day): Add set-time-zone-rule. + + * numbers.texi (Math Functions): asin, acos, log, log10 + report domain-error errors. + + * nonascii.texi (Converting Representations): + Add multibyte-char-to-unibyte and unibyte-char-to-multibyte. + (Encoding and I/O): Add file-name-coding-system. + + * modes.texi (Search-based Fontification): Explain that + face specs are symbols with face names as values. + + * minibuf.texi (Minibuffer Misc): Add set-minibuffer-window. + + * lists.texi (Building Lists): remq moved elsewhere. + (Sets And Lists): remq moved here. + (Association Lists): Refer to assoc-string. + + * internals.texi (Garbage Collection): Add memory-use-counts. + + * frames.texi (Frames and Windows): Add set-frame-selected-window + and frame-root-window. + + * files.texi (Contents of Directories): + Add directory-files-and-attributes. + + * display.texi (Refresh Screen): Add force-window-update. + (Invisible Text): Explain about moving point out of invis text. + (Overlay Properties): Add overlay-properties. + (Managing Overlays): Add overlayp. + (GIF Images): Invalid image number displays a hollow box. + + * buffers.texi (Buffer Modification): Add restore-buffer-modified-p. + (Killing Buffers): Add buffer-live-p. + 2003-12-25 Markus Rost * display.texi (Fringes): Fix typo "set-buffer-window". diff --git a/lispref/windows.texi b/lispref/windows.texi index 158ab354057..425d5601ec9 100644 --- a/lispref/windows.texi +++ b/lispref/windows.texi @@ -1027,6 +1027,14 @@ list is the regular expression, and the rest of the list says how to create the frame. See above, under @code{special-display-buffer-names}. @end defopt +@defun special-display-p buffer-name +This function returns non-@code{nil} if displaying a buffer +named @var{buffer-name} with @code{display-buffer} would +create a special frame. The value is @code{t} if it would +use the default frame paramaters, or else the specified list +of frame parameters. +@end defun + @defvar special-display-function This variable holds the function to call to display a buffer specially. It receives the buffer as an argument, and should return the window in @@ -1075,6 +1083,12 @@ the regular expressions in this list, @code{display-buffer} handles the buffer by switching to it in the selected window. @end defopt +@defun same-window-p buffer-name +This function returns @code{t} if displaying a buffer +named @var{buffer-name} with @code{display-buffer} would +put it in the selected window. +@end defun + @c Emacs 19 feature @defvar display-buffer-function This variable is the most flexible way to customize the behavior of @@ -2163,10 +2177,15 @@ regards configurations as unequal if they differ in any respect, even a saved point or mark. @end defun - Primitives to look inside of window configurations would make sense, -but none are implemented. It is not clear they are useful enough to -be worth implementing. See the file @file{winner.el} for some more -operations on windows configurations. +@defun window-configuration-frame config +This function returns the frame for which the window configuration +@var{config} was made. +@end defun + + Other primitives to look inside of window configurations would make +sense, but are not implemented because we did not need them. See the +file @file{winner.el} for some more operations on windows +configurations. @node Window Hooks @section Hooks for Window Scrolling and Changes From 462c6e815a01d64f0b6a166da9f8de20f34b0a26 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Tue, 30 Dec 2003 08:08:22 +0000 Subject: [PATCH 74/82] Renamed INSTALL-CVS to INSTALL.CVS to avoid file-name clashes with install-sh on 8+3 filesystems. --- INSTALL-CVS => INSTALL.CVS | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename INSTALL-CVS => INSTALL.CVS (100%) mode change 100755 => 100644 diff --git a/INSTALL-CVS b/INSTALL.CVS old mode 100755 new mode 100644 similarity index 100% rename from INSTALL-CVS rename to INSTALL.CVS From ab5136eab7bceb5de1f81eb919d03465c81df5c1 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Tue, 30 Dec 2003 08:26:00 +0000 Subject: [PATCH 75/82] emacs-lisp/tcover-unsafep.el, emacs-lisp/tcover-ses.el: Renamed from testcover-unsafep.el and testcover-ses.el to avoid file-name clashes on 8+3 DOS filesystems. --- lisp/ChangeLog | 6 ++++++ lisp/emacs-lisp/{testcover-ses.el => tcover-ses.el} | 0 lisp/emacs-lisp/{testcover-unsafep.el => tcover-unsafep.el} | 0 3 files changed, 6 insertions(+) rename lisp/emacs-lisp/{testcover-ses.el => tcover-ses.el} (100%) rename lisp/emacs-lisp/{testcover-unsafep.el => tcover-unsafep.el} (100%) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c6694b0ad03..a5bdef47c48 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2003-12-29 Eli Zaretskii + + * emacs-lisp/tcover-unsafep.el, emacs-lisp/tcover-ses.el: Renamed + from testcover-unsafep.el and testcover-ses.el to avoid file-name + clashes on 8+3 DOS filesystems. + 2003-12-29 Richard M. Stallman * textmodes/flyspell.el (mail-mode-flyspell-verify): diff --git a/lisp/emacs-lisp/testcover-ses.el b/lisp/emacs-lisp/tcover-ses.el similarity index 100% rename from lisp/emacs-lisp/testcover-ses.el rename to lisp/emacs-lisp/tcover-ses.el diff --git a/lisp/emacs-lisp/testcover-unsafep.el b/lisp/emacs-lisp/tcover-unsafep.el similarity index 100% rename from lisp/emacs-lisp/testcover-unsafep.el rename to lisp/emacs-lisp/tcover-unsafep.el From 4a5ad08ea594d74da5c740d24916f0a9d075643e Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Tue, 30 Dec 2003 08:49:27 +0000 Subject: [PATCH 76/82] * toolbar/gud-next.pbm, toolbar/gud-next.xpm * toolbar/gud-nexti.pbm, toolbar/gud-nexti.xpm * toolbar/gud-step.pbm, toolbar/gud-step.xpm * toolbar/gud-stepi.pbm, toolbar/gud-stepi.xpm: Renamed to gud-n.*, gud-ni.*, gud-s.*, and gud-si.*, respectively, to avoid file-name clashes on 8+3 filesystems. --- lisp/toolbar/{gud-next.pbm => gud-n.pbm} | Bin lisp/toolbar/{gud-next.xpm => gud-n.xpm} | 0 lisp/toolbar/{gud-nexti.pbm => gud-ni.pbm} | Bin lisp/toolbar/{gud-nexti.xpm => gud-ni.xpm} | 0 lisp/toolbar/{gud-step.pbm => gud-s.pbm} | Bin lisp/toolbar/{gud-step.xpm => gud-s.xpm} | 0 lisp/toolbar/{gud-stepi.pbm => gud-si.pbm} | Bin lisp/toolbar/{gud-stepi.xpm => gud-si.xpm} | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename lisp/toolbar/{gud-next.pbm => gud-n.pbm} (100%) rename lisp/toolbar/{gud-next.xpm => gud-n.xpm} (100%) rename lisp/toolbar/{gud-nexti.pbm => gud-ni.pbm} (100%) rename lisp/toolbar/{gud-nexti.xpm => gud-ni.xpm} (100%) rename lisp/toolbar/{gud-step.pbm => gud-s.pbm} (100%) rename lisp/toolbar/{gud-step.xpm => gud-s.xpm} (100%) rename lisp/toolbar/{gud-stepi.pbm => gud-si.pbm} (100%) rename lisp/toolbar/{gud-stepi.xpm => gud-si.xpm} (100%) diff --git a/lisp/toolbar/gud-next.pbm b/lisp/toolbar/gud-n.pbm similarity index 100% rename from lisp/toolbar/gud-next.pbm rename to lisp/toolbar/gud-n.pbm diff --git a/lisp/toolbar/gud-next.xpm b/lisp/toolbar/gud-n.xpm similarity index 100% rename from lisp/toolbar/gud-next.xpm rename to lisp/toolbar/gud-n.xpm diff --git a/lisp/toolbar/gud-nexti.pbm b/lisp/toolbar/gud-ni.pbm similarity index 100% rename from lisp/toolbar/gud-nexti.pbm rename to lisp/toolbar/gud-ni.pbm diff --git a/lisp/toolbar/gud-nexti.xpm b/lisp/toolbar/gud-ni.xpm similarity index 100% rename from lisp/toolbar/gud-nexti.xpm rename to lisp/toolbar/gud-ni.xpm diff --git a/lisp/toolbar/gud-step.pbm b/lisp/toolbar/gud-s.pbm similarity index 100% rename from lisp/toolbar/gud-step.pbm rename to lisp/toolbar/gud-s.pbm diff --git a/lisp/toolbar/gud-step.xpm b/lisp/toolbar/gud-s.xpm similarity index 100% rename from lisp/toolbar/gud-step.xpm rename to lisp/toolbar/gud-s.xpm diff --git a/lisp/toolbar/gud-stepi.pbm b/lisp/toolbar/gud-si.pbm similarity index 100% rename from lisp/toolbar/gud-stepi.pbm rename to lisp/toolbar/gud-si.pbm diff --git a/lisp/toolbar/gud-stepi.xpm b/lisp/toolbar/gud-si.xpm similarity index 100% rename from lisp/toolbar/gud-stepi.xpm rename to lisp/toolbar/gud-si.xpm From 74c942dea8d5ad78bbb53d60449f9d8a94fed152 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Tue, 30 Dec 2003 08:50:29 +0000 Subject: [PATCH 77/82] (gud-tool-bar-map): Modify names of icon files for gud-next, gud-nexti, gud-step and gud-stepi to prevent file-name clashes on 8+3 DOS filesystems. --- lisp/progmodes/gud.el | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el index 48a007aef27..76e00cc4438 100644 --- a/lisp/progmodes/gud.el +++ b/lisp/progmodes/gud.el @@ -162,11 +162,14 @@ Used to grey out relevant toolbar icons.") (gud-run . "gud-run") (gud-until . "gud-until") (gud-cont . "gud-cont") - (gud-step . "gud-step") - (gud-next . "gud-next") + ;; gud-s, gud-si etc. instead of gud-step, + ;; gud-stepi, to avoid file-name clashes on DOS + ;; 8+3 filesystems. + (gud-step . "gud-s") + (gud-next . "gud-n") (gud-finish . "gud-finish") - (gud-stepi . "gud-stepi") - (gud-nexti . "gud-nexti") + (gud-stepi . "gud-si") + (gud-nexti . "gud-ni") (gud-up . "gud-up") (gud-down . "gud-down")) map) From d9e0b412fc4a60736407b53dc054d0a95f275023 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Tue, 30 Dec 2003 08:51:06 +0000 Subject: [PATCH 78/82] *** empty log message *** --- ChangeLog | 5 +++++ lisp/ChangeLog | 13 ++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 0dbff7b166d..1a535606dc6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2003-12-30 Eli Zaretskii + + * INSTALL.CVS: Renamed from INSTALL-CVS to avoid file-name + clashes with install-sh on 8+3 filesystems. + 2003-12-08 Miles Bader * .cvsignore: Add .arch-inventory. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a5bdef47c48..5f00f5bc963 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,4 +1,15 @@ -2003-12-29 Eli Zaretskii +2003-12-30 Eli Zaretskii + + * progmodes/gud.el (gud-tool-bar-map): Modify names of icon files + for gud-next, gud-nexti, gud-step and gud-stepi to prevent + file-name clashes on 8+3 DOS filesystems. + + * toolbar/gud-next.pbm, toolbar/gud-next.xpm + * toolbar/gud-nexti.pbm, toolbar/gud-nexti.xpm + * toolbar/gud-step.pbm, toolbar/gud-step.xpm + * toolbar/gud-stepi.pbm, toolbar/gud-stepi.xpm: Renamed to + gud-n.*, gud-ni.*, gud-s.*, and gud-si.*, respectively, to avoid + file-name clashes on 8+3 filesystems. * emacs-lisp/tcover-unsafep.el, emacs-lisp/tcover-ses.el: Renamed from testcover-unsafep.el and testcover-ses.el to avoid file-name From fa8f290e464cba96844a2756c94f072d599a79f7 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Tue, 30 Dec 2003 10:46:37 +0000 Subject: [PATCH 79/82] (rmail-convert-to-babyl-format): Make the code cleaner (suggested by Richard M. Stallman). --- lisp/ChangeLog | 3 +++ lisp/mail/rmail.el | 50 ++++++++++++++++++++++++++-------------------- 2 files changed, 31 insertions(+), 22 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5f00f5bc963..074a9ed87ab 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2003-12-30 Eli Zaretskii + * mail/rmail.el (rmail-convert-to-babyl-format): Make the code + cleaner (suggested by Richard Stallman). + * progmodes/gud.el (gud-tool-bar-map): Modify names of icon files for gud-next, gud-nexti, gud-step and gud-stepi to prevent file-name clashes on 8+3 DOS filesystems. diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el index acc7e4839dd..512712ec4bc 100644 --- a/lisp/mail/rmail.el +++ b/lisp/mail/rmail.el @@ -1687,19 +1687,22 @@ It returns t if it got any new messages." (delete-region (point) (search-backward ":")) (insert ": 8bit"))) (if base64-header-field-end - (condition-case nil - (save-excursion - (base64-decode-region (1+ header-end) - (- (point) 2)) - ;; Change "base64" to "8bit", to reflect the - ;; decoding we just did. - (goto-char (1+ header-end)) - (while (search-forward "\r\n" (point-max) t) - (replace-match "\n")) - (goto-char base64-header-field-end) - (delete-region (point) (search-backward ":")) - (insert ": 8bit")) - (error nil))) + (save-excursion + (when + (condition-case nil + (progn + (base64-decode-region (1+ header-end) + (- (point) 2)) + t) + (error nil)) + ;; Change "base64" to "8bit", to reflect the + ;; decoding we just did. + (goto-char (1+ header-end)) + (while (search-forward "\r\n" (point-max) t) + (replace-match "\n")) + (goto-char base64-header-field-end) + (delete-region (point) (search-backward ":")) + (insert ": 8bit")))) (setq last-coding-system-used nil) (or rmail-enable-mime (not rmail-enable-multibyte) @@ -1829,15 +1832,18 @@ It returns t if it got any new messages." (delete-region (point) (search-backward ":")) (insert ": 8bit"))) (if base64-header-field-end - (condition-case nil - (save-excursion - (base64-decode-region header-end (point)) - ;; Change "base64" to "8bit", to reflect the - ;; decoding we just did. - (goto-char base64-header-field-end) - (delete-region (point) (search-backward ":")) - (insert ": 8bit")) - (error nil)))) + (save-excursion + (when + (condition-case nil + (progn + (base64-decode-region header-end (point)) + t) + (error nil)) + ;; Change "base64" to "8bit", to reflect the + ;; decoding we just did. + (goto-char base64-header-field-end) + (delete-region (point) (search-backward ":")) + (insert ": 8bit"))))) (save-excursion (save-restriction From 630dd2508734a8601c8458dc1dbf2f22626841c8 Mon Sep 17 00:00:00 2001 From: Simon Josefsson Date: Tue, 30 Dec 2003 10:59:36 +0000 Subject: [PATCH 80/82] Change maintainer to FSF. Suggested by karl@freefriends.org (Karl Berry), since the Texinfo Elisp files have only been distributed with Emacs for some years. (texinfo-mode-hook): Customize. --- lisp/ChangeLog | 7 +++++++ lisp/textmodes/texinfo.el | 8 +++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 074a9ed87ab..c6ce9bbf71c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2003-12-30 Simon Josefsson + + * textmodes/texinfo.el: Change maintainer to FSF. Suggested by + karl@freefriends.org (Karl Berry), since the Texinfo Elisp files + have only been distributed with Emacs for some years. + (texinfo-mode-hook): Customize. + 2003-12-30 Eli Zaretskii * mail/rmail.el (rmail-convert-to-babyl-format): Make the code diff --git a/lisp/textmodes/texinfo.el b/lisp/textmodes/texinfo.el index 1bead17e10c..25670e8c310 100644 --- a/lisp/textmodes/texinfo.el +++ b/lisp/textmodes/texinfo.el @@ -5,7 +5,7 @@ ;; Author: Robert J. Chassell ;; Date: [See date below for texinfo-version] -;; Maintainer: bug-texinfo@gnu.org +;; Maintainer: FSF ;; Keywords: maint, tex, docs ;; This file is part of GNU Emacs. @@ -59,6 +59,12 @@ :type 'string :group 'texinfo) +(defcustom texinfo-mode-hook nil + "Normal hook run when entering Texinfo mode." + :type 'hook + :options '(turn-on-auto-fill flyspell-mode) + :group 'texinfo) + ;;; Autoloads: From 37ec692a024d538a1c913c310b71e8e8f32ee1ad Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Tue, 30 Dec 2003 11:43:21 +0000 Subject: [PATCH 81/82] (rmail-convert-to-babyl-format): Fix off-by-one error in arguments to base64-decode-region. Remove ^M characters after decoding base64. --- lisp/ChangeLog | 6 ++++++ lisp/mail/rmail.el | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c6ce9bbf71c..97539c809ed 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2003-12-30 Eli Zaretskii + + * mail/rmail.el (rmail-convert-to-babyl-format): Fix off-by-one + error in arguments to base64-decode-region. Remove ^M characters + after decoding base64. + 2003-12-30 Simon Josefsson * textmodes/texinfo.el: Change maintainer to FSF. Suggested by diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el index 512712ec4bc..6185fd12286 100644 --- a/lisp/mail/rmail.el +++ b/lisp/mail/rmail.el @@ -1836,9 +1836,12 @@ It returns t if it got any new messages." (when (condition-case nil (progn - (base64-decode-region header-end (point)) + (base64-decode-region (1+ header-end) (point)) t) (error nil)) + (goto-char header-end) + (while (search-forward "\r\n" (point-max) t) + (replace-match "\n")) ;; Change "base64" to "8bit", to reflect the ;; decoding we just did. (goto-char base64-header-field-end) From 8a37230a70acc8943ba45f52504179ddcc1a5468 Mon Sep 17 00:00:00 2001 From: Miles Bader Date: Tue, 30 Dec 2003 14:53:35 +0000 Subject: [PATCH 82/82] Use arch-tag: syntax that tla can grok --- lispintro/texinfo.tex | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lispintro/texinfo.tex b/lispintro/texinfo.tex index 7258e9f0a5e..af648f19e17 100644 --- a/lispintro/texinfo.tex +++ b/lispintro/texinfo.tex @@ -3,7 +3,7 @@ % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % -\def\texinfoversion{2003-12-29.16} +\def\texinfoversion{2003-12-30.09} % % Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. @@ -6772,4 +6772,6 @@ @c time-stamp-end: "}" @c End: -@c arch-tag: 53261dd3-7df7-4ec3-9d90-af7a955d3c87 +@ignore + arch-tag: 53261dd3-7df7-4ec3-9d90-af7a955d3c87 +@end ignore