Now on revision 105818. ------------------------------------------------------------ revno: 105818 committer: Michael Albinus branch nick: trunk timestamp: Sun 2011-09-18 13:26:15 +0200 message: * net/tramp.el (top): Don't require 'shell. (tramp-methods): Fix docstring. (tramp-get-remote-tmpdir): New defun, moved from tramp-sh.el. Return complete remote file name. Handle "smb" case. Use `tramp-tmpdir', if defined for the respective method. (tramp-make-tramp-temp-file): Adapt call of `tramp-get-remote-tmpdir'. * net/tramp-compat.el (top): Require 'shell. * net/tramp-sh.el (tramp-do-copy-or-rename-file-out-of-band) (tramp-maybe-open-connection): Use `tramp-file-name-real-host' for `tramp-current-host'. (tramp-get-remote-tmpdir): Remove. * net/tramp-smb.el (tramp-methods): Add `tramp-remote-shell' and `tramp-tmpdir' entries. (tramp-smb-errors): Add "NT_STATUS_IMAGE_ALREADY_LOADED". (tramp-smb-handle-file-attributes): Ignore errors. (tramp-smb-wait-for-output): Check also for process end. diff: === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2011-09-18 07:36:20 +0000 +++ lisp/ChangeLog 2011-09-18 11:26:15 +0000 @@ -1,3 +1,25 @@ +2011-09-18 Michael Albinus + + * net/tramp.el (top): Don't require 'shell. + (tramp-methods): Fix docstring. + (tramp-get-remote-tmpdir): New defun, moved from tramp-sh.el. + Return complete remote file name. Handle "smb" case. Use + `tramp-tmpdir', if defined for the respective method. + (tramp-make-tramp-temp-file): Adapt call of `tramp-get-remote-tmpdir'. + + * net/tramp-compat.el (top): Require 'shell. + + * net/tramp-sh.el (tramp-do-copy-or-rename-file-out-of-band) + (tramp-maybe-open-connection): Use `tramp-file-name-real-host' for + `tramp-current-host'. + (tramp-get-remote-tmpdir): Remove. + + * net/tramp-smb.el (tramp-methods): Add `tramp-remote-shell' and + `tramp-tmpdir' entries. + (tramp-smb-errors): Add "NT_STATUS_IMAGE_ALREADY_LOADED". + (tramp-smb-handle-file-attributes): Ignore errors. + (tramp-smb-wait-for-output): Check also for process end. + 2011-09-18 Lars Magne Ingebrigtsen * mail/smtpmail.el (smtpmail-via-smtp): Ignore errors that arise === modified file 'lisp/net/tramp-compat.el' --- lisp/net/tramp-compat.el 2011-07-14 01:40:30 +0000 +++ lisp/net/tramp-compat.el 2011-09-18 11:26:15 +0000 @@ -41,6 +41,7 @@ (require 'advice) (require 'custom) (require 'format-spec) + (require 'shell) ;; As long as password.el is not part of (X)Emacs, it shouldn't be ;; mandatory. === modified file 'lisp/net/tramp-sh.el' --- lisp/net/tramp-sh.el 2011-09-04 18:14:34 +0000 +++ lisp/net/tramp-sh.el 2011-09-18 11:26:15 +0000 @@ -2280,7 +2280,7 @@ ;; password. (setq tramp-current-method (tramp-file-name-method v) tramp-current-user (tramp-file-name-user v) - tramp-current-host (tramp-file-name-host v)) + tramp-current-host (tramp-file-name-real-host v)) ;; Expand hops. Might be necessary for gateway methods. (setq v (car (tramp-compute-multi-hops v))) @@ -4292,7 +4292,7 @@ (gw (tramp-get-file-property hop "" "gateway" nil)) (g-method (and gw (tramp-file-name-method gw))) (g-user (and gw (tramp-file-name-user gw))) - (g-host (and gw (tramp-file-name-host gw))) + (g-host (and gw (tramp-file-name-real-host gw))) (command login-program) ;; We don't create the temporary file. In fact, ;; it is just a prefix for the ControlPath option @@ -4721,16 +4721,6 @@ x)) remote-path))))) -(defun tramp-get-remote-tmpdir (vec) - (with-connection-property vec "tmp-directory" - (let ((dir (tramp-shell-quote-argument "/tmp"))) - (if (and (tramp-send-command-and-check - vec (format "%s -d %s" (tramp-get-test-command vec) dir)) - (tramp-send-command-and-check - vec (format "%s -w %s" (tramp-get-test-command vec) dir))) - dir - (tramp-error vec 'file-error "Directory %s not accessible" dir))))) - (defun tramp-get-ls-command (vec) (with-connection-property vec "ls" (tramp-message vec 5 "Finding a suitable `ls' command") === modified file 'lisp/net/tramp-smb.el' --- lisp/net/tramp-smb.el 2011-06-04 13:58:37 +0000 +++ lisp/net/tramp-smb.el 2011-09-18 11:26:15 +0000 @@ -38,7 +38,15 @@ ;; ... and add it to the method list. ;;;###tramp-autoload (unless (memq system-type '(cygwin windows-nt)) - (add-to-list 'tramp-methods (cons tramp-smb-method nil))) + (add-to-list 'tramp-methods + `(,tramp-smb-method + ;; We define an empty command, because `tramp-smb-call-winexe' + ;; opens already the powershell. Used in `tramp-handle-shell-command'. + (tramp-remote-shell "") + ;; This is just a guess. We don't know whether the share "$C" + ;; is available for public use, and whether the user has write + ;; access. + (tramp-tmpdir "/C$/Temp")))) ;; Add a default for `tramp-default-method-alist'. Rule: If there is ;; a domain in USER, it must be the SMB method. @@ -98,7 +106,8 @@ "ERRnomem" "ERRnosuchshare" ;; Windows 4.0 (Windows NT), Windows 5.0 (Windows 2000), - ;; Windows 5.1 (Windows XP), Windows 5.2 (Windows Server 2003). + ;; Windows 5.1 (Windows XP), Windows 5.2 (Windows Server 2003), + ;; Windows 6.0 (Windows Vista), Windows 6.1 (Windows 7). "NT_STATUS_ACCESS_DENIED" "NT_STATUS_ACCOUNT_LOCKED_OUT" "NT_STATUS_BAD_NETWORK_NAME" @@ -107,6 +116,7 @@ "NT_STATUS_DIRECTORY_NOT_EMPTY" "NT_STATUS_DUPLICATE_NAME" "NT_STATUS_FILE_IS_A_DIRECTORY" + "NT_STATUS_IMAGE_ALREADY_LOADED" "NT_STATUS_IO_TIMEOUT" "NT_STATUS_LOGON_FAILURE" "NT_STATUS_NETWORK_ACCESS_DENIED" @@ -490,39 +500,40 @@ (defun tramp-smb-handle-file-attributes (filename &optional id-format) "Like `file-attributes' for Tramp files." (unless id-format (setq id-format 'integer)) - (with-parsed-tramp-file-name filename nil - (with-file-property v localname (format "file-attributes-%s" id-format) - (if (and (tramp-smb-get-share v) (tramp-smb-get-stat-capability v)) - (tramp-smb-do-file-attributes-with-stat v id-format) - ;; Reading just the filename entry via "dir localname" is not - ;; possible, because when filename is a directory, some - ;; smbclient versions return the content of the directory, and - ;; other versions don't. Therefore, the whole content of the - ;; upper directory is retrieved, and the entry of the filename - ;; is extracted from. - (let* ((entries (tramp-smb-get-file-entries - (file-name-directory filename))) - (entry (assoc (file-name-nondirectory filename) entries)) - (uid (if (equal id-format 'string) "nobody" -1)) - (gid (if (equal id-format 'string) "nogroup" -1)) - (inode (tramp-get-inode v)) - (device (tramp-get-device v))) + (ignore-errors + (with-parsed-tramp-file-name filename nil + (with-file-property v localname (format "file-attributes-%s" id-format) + (if (and (tramp-smb-get-share v) (tramp-smb-get-stat-capability v)) + (tramp-smb-do-file-attributes-with-stat v id-format) + ;; Reading just the filename entry via "dir localname" is not + ;; possible, because when filename is a directory, some + ;; smbclient versions return the content of the directory, and + ;; other versions don't. Therefore, the whole content of the + ;; upper directory is retrieved, and the entry of the filename + ;; is extracted from. + (let* ((entries (tramp-smb-get-file-entries + (file-name-directory filename))) + (entry (assoc (file-name-nondirectory filename) entries)) + (uid (if (equal id-format 'string) "nobody" -1)) + (gid (if (equal id-format 'string) "nogroup" -1)) + (inode (tramp-get-inode v)) + (device (tramp-get-device v))) - ;; Check result. - (when entry - (list (and (string-match "d" (nth 1 entry)) - t) ;0 file type - -1 ;1 link count - uid ;2 uid - gid ;3 gid - '(0 0) ;4 atime - (nth 3 entry) ;5 mtime - '(0 0) ;6 ctime - (nth 2 entry) ;7 size - (nth 1 entry) ;8 mode - nil ;9 gid weird - inode ;10 inode number - device))))))) ;11 file system number + ;; Check result. + (when entry + (list (and (string-match "d" (nth 1 entry)) + t) ;0 file type + -1 ;1 link count + uid ;2 uid + gid ;3 gid + '(0 0) ;4 atime + (nth 3 entry) ;5 mtime + '(0 0) ;6 ctime + (nth 2 entry) ;7 size + (nth 1 entry) ;8 mode + nil ;9 gid weird + inode ;10 inode number + device)))))))) ;11 file system number (defun tramp-smb-do-file-attributes-with-stat (vec &optional id-format) "Implement `file-attributes' for Tramp files using stat command." @@ -1352,12 +1363,13 @@ (found (progn (goto-char (point-min)) (re-search-forward tramp-smb-prompt nil t))) (err (progn (goto-char (point-min)) - (re-search-forward tramp-smb-errors nil t)))) + (re-search-forward tramp-smb-errors nil t))) + buffer-read-only) ;; Algorithm: get waiting output. See if last line contains - ;; tramp-smb-prompt sentinel or tramp-smb-errors strings. + ;; `tramp-smb-prompt' sentinel or `tramp-smb-errors' strings. ;; If not, wait a bit and again get waiting output. - (while (and (not found) (not err)) + (while (and (not found) (not err) (memq (process-status p) '(run open))) ;; Accept pending output. (tramp-accept-process-output p) @@ -1393,12 +1405,11 @@ ;;; TODO: ;; * Error handling in case password is wrong. -;; * Read password from "~/.netrc". ;; * Return more comprehensive file permission string. ;; * Try to remove the inclusion of dummy "" directory. Seems to be at ;; several places, especially in `tramp-smb-handle-insert-directory'. ;; * (RMS) Use unwind-protect to clean up the state so as to make the state ;; regular again. -;; * Make it multi-hop capable. +;; * Ignore case in file names. ;;; tramp-smb.el ends here === modified file 'lisp/net/tramp.el' --- lisp/net/tramp.el 2011-09-04 18:14:34 +0000 +++ lisp/net/tramp.el 2011-09-18 11:26:15 +0000 @@ -58,7 +58,6 @@ ;;; Code: (require 'tramp-compat) -(require 'shell) ;;; User Customizable Internal Variables: @@ -192,15 +191,16 @@ Each NAME stands for a remote access method. Each PARAM is a pair of the form (KEY VALUE). The following KEYs are defined: * `tramp-remote-shell' - This specifies the Bourne shell to use on the remote host. This - MUST be a Bourne-like shell. It is normally not necessary to set - this to any value other than \"/bin/sh\": Tramp wants to use a shell - which groks tilde expansion, but it can search for it. Also note - that \"/bin/sh\" exists on all Unixen, this might not be true for - the value that you decide to use. You Have Been Warned. + This specifies the shell to use on the remote host. This + MUST be a Bourne-like shell. It is normally not necessary to + set this to any value other than \"/bin/sh\": Tramp wants to + use a shell which groks tilde expansion, but it can search + for it. Also note that \"/bin/sh\" exists on all Unixen, + this might not be true for the value that you decide to use. + You Have Been Warned. * `tramp-remote-shell-args' For implementation of `shell-command', this specifies the - argument to let `tramp-remote-shell' run a command. + arguments to let `tramp-remote-shell' run a single command. * `tramp-login-program' This specifies the name of the program to use for logging in to the remote host. This may be the name of rsh or a workalike program, @@ -255,6 +255,9 @@ not have to be newline or carriage return characters. Other login programs are happy with just one character, the newline character. We use \"xy\" as the value for methods using \"plink\". + * `tramp-tmpdir' + A directory on the remote host for temporary files. If not + specified, \"/tmp\" is taken as default. What does all this mean? Well, you should specify `tramp-login-program' for all methods; this program is used to log in to the remote site. Then, @@ -3531,20 +3534,26 @@ ;; loaded already. (zerop (tramp-compat-funcall 'tramp-get-remote-uid vec 'integer)))))) +(defun tramp-get-remote-tmpdir (vec) + "Return directory for temporary files on the remote host identified by VEC." + (with-connection-property vec "tmpdir" + (let ((dir (tramp-make-tramp-file-name + (tramp-file-name-method vec) + (tramp-file-name-user vec) + (tramp-file-name-host vec) + (or + (tramp-get-method-parameter + (tramp-file-name-method vec) 'tramp-tmpdir) + "/tmp")))) + (if (and (file-directory-p dir) (file-writable-p dir)) + dir + (tramp-error vec 'file-error "Directory %s not accessible" dir))))) + (defun tramp-make-tramp-temp-file (vec) "Create a temporary file on the remote host identified by VEC. Return the local name of the temporary file." - (let ((prefix - (tramp-make-tramp-file-name - (tramp-file-name-method vec) - (tramp-file-name-user vec) - (tramp-file-name-host vec) - (tramp-drop-volume-letter - (expand-file-name - tramp-temp-name-prefix - ;; This is defined in tramp-sh.el. Let's assume this is - ;; loaded already. - (tramp-compat-funcall 'tramp-get-remote-tmpdir vec))))) + (let ((prefix (expand-file-name + tramp-temp-name-prefix (tramp-get-remote-tmpdir vec))) result) (while (not result) ;; `make-temp-file' would be the natural choice for ------------------------------------------------------------ revno: 105817 committer: Paul Eggert branch nick: trunk timestamp: Sun 2011-09-18 02:01:39 -0700 message: Fix minor problem found by static checking. * xdisp.c (reseat_at_next_visible_line_start): Mark locals as initialized, to pacify gcc -Wuninitialized. diff: === modified file 'src/ChangeLog' --- src/ChangeLog 2011-09-18 08:34:09 +0000 +++ src/ChangeLog 2011-09-18 09:01:39 +0000 @@ -1,5 +1,9 @@ 2011-09-18 Paul Eggert + Fix minor problem found by static checking. + * xdisp.c (reseat_at_next_visible_line_start): Mark locals as + initialized, to pacify gcc -Wuninitialized. + * fileio.c: Report proper errno when syscall falls. (Finsert_file_contents): Save and restore errno, so that report_file_error outputs the correct diagnostic. === modified file 'src/xdisp.c' --- src/xdisp.c 2011-09-18 07:36:10 +0000 +++ src/xdisp.c 2011-09-18 09:01:39 +0000 @@ -5722,9 +5722,10 @@ { int newline_found_p, skipped_p = 0; struct bidi_it bidi_it_prev; - int new_paragraph, first_elt, disp_prop; - EMACS_INT paragraph_end, disp_pos; - bidi_dir_t paragraph_dir; + int new_paragraph IF_LINT (= 0), first_elt IF_LINT (= 0); + int disp_prop IF_LINT (= 0); + EMACS_INT paragraph_end IF_LINT (= 0), disp_pos IF_LINT (= 0); + bidi_dir_t paragraph_dir IF_LINT (= 0); newline_found_p = forward_to_next_line_start (it, &skipped_p, &bidi_it_prev); ------------------------------------------------------------ revno: 105816 committer: Paul Eggert branch nick: trunk timestamp: Sun 2011-09-18 01:34:09 -0700 message: * fileio.c: Report proper errno when syscall falls. (Finsert_file_contents): Save and restore errno, so that report_file_error outputs the correct diagnostic. (Fwrite_region) [CLASH_DETECTION]: Likewise. diff: === modified file 'src/ChangeLog' --- src/ChangeLog 2011-09-18 07:33:04 +0000 +++ src/ChangeLog 2011-09-18 08:34:09 +0000 @@ -1,3 +1,10 @@ +2011-09-18 Paul Eggert + + * fileio.c: Report proper errno when syscall falls. + (Finsert_file_contents): Save and restore errno, + so that report_file_error outputs the correct diagnostic. + (Fwrite_region) [CLASH_DETECTION]: Likewise. + 2011-09-18 Eli Zaretskii * .gdbinit (pgx): Fix references to fields of `struct glyph'. === modified file 'src/fileio.c' --- src/fileio.c 2011-09-12 02:22:22 +0000 +++ src/fileio.c 2011-09-18 08:34:09 +0000 @@ -3187,6 +3187,7 @@ Lisp_Object p; EMACS_INT total = 0; int not_regular = 0; + int save_errno = 0; char read_buf[READ_BUF_SIZE]; struct coding_system coding; char buffer[1 << 14]; @@ -3250,6 +3251,7 @@ #endif /* WINDOWSNT */ { badopen: + save_errno = errno; if (NILP (visit)) report_file_error ("Opening input file", Fcons (orig_filename, Qnil)); st.st_mtime = -1; @@ -4281,6 +4283,7 @@ && current_buffer->modtime == -1) { /* If visiting nonexistent file, return nil. */ + errno = save_errno; report_file_error ("Opening input file", Fcons (orig_filename, Qnil)); } @@ -4618,7 +4621,9 @@ if (ret < 0) { #ifdef CLASH_DETECTION + save_errno = errno; if (!auto_saving) unlock_file (lockname); + errno = save_errno; #endif /* CLASH_DETECTION */ UNGCPRO; report_file_error ("Lseek error", Fcons (filename, Qnil)); ------------------------------------------------------------ revno: 105815 fixes bug(s): http://debbugs.gnu.org/9312 committer: Lars Magne Ingebrigtsen branch nick: trunk timestamp: Sun 2011-09-18 09:36:20 +0200 message: (smtpmail-via-smtp): Ignore errors that arise when sending QUIT. diff: === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2011-09-17 21:28:17 +0000 +++ lisp/ChangeLog 2011-09-18 07:36:20 +0000 @@ -1,3 +1,8 @@ +2011-09-18 Lars Magne Ingebrigtsen + + * mail/smtpmail.el (smtpmail-via-smtp): Ignore errors that arise + when sending QUIT (bug#9312). + 2011-09-17 Chong Yidong * replace.el (occur-mode-map): Rebind occur-edit-mode to "e" (Bug#8463). === modified file 'lisp/mail/smtpmail.el' --- lisp/mail/smtpmail.el 2011-09-14 22:57:57 +0000 +++ lisp/mail/smtpmail.el 2011-09-18 07:36:20 +0000 @@ -773,8 +773,12 @@ (eq (car result) 530)) ;; We got a "530 auth required", so we close and try ;; again, this time asking the user for a password. - (smtpmail-send-command process "QUIT") - (smtpmail-read-response process) + ;; We ignore any errors here, because some MTAs just + ;; close the connection immediately after giving the + ;; error message. + (ignore-errors + (smtpmail-send-command process "QUIT") + (smtpmail-read-response process)) (delete-process process) (setq process nil) (throw 'done ------------------------------------------------------------ revno: 105814 committer: Eli Zaretskii branch nick: trunk timestamp: Sun 2011-09-18 03:36:10 -0400 message: src/xdisp.c: Revert inadvertently committed changes. diff: === modified file 'src/xdisp.c' --- src/xdisp.c 2011-09-18 07:33:04 +0000 +++ src/xdisp.c 2011-09-18 07:36:10 +0000 @@ -18703,6 +18703,11 @@ it->current_x = new_x; it->continuation_lines_width += new_x; ++it->hpos; + /* Record the maximum and minimum buffer + positions seen so far in glyphs that will be + displayed by this row. */ + if (it->bidi_p) + RECORD_MAX_MIN_POS (it); if (i == nglyphs - 1) { /* If line-wrap is on, check if a previous @@ -18717,11 +18722,6 @@ || IT_DISPLAYING_WHITESPACE (it))) goto back_to_wrap; - /* Record the maximum and minimum buffer - positions seen so far in glyphs that will be - displayed by this row. */ - if (it->bidi_p) - RECORD_MAX_MIN_POS (it); set_iterator_to_next (it, 1); if (IT_OVERFLOW_NEWLINE_INTO_FRINGE (it)) { @@ -18739,8 +18739,6 @@ } } } - else if (it->bidi_p) - RECORD_MAX_MIN_POS (it); } else if (CHAR_GLYPH_PADDING_P (*glyph) && !FRAME_WINDOW_P (it->f)) @@ -18871,10 +18869,6 @@ xassert (it->first_visible_x <= it->last_visible_x); } } - /* Even if this display element produced no glyphs at all, - we want to record its position. */ - if (it->bidi_p && nglyphs == 0) - RECORD_MAX_MIN_POS (it); row->ascent = max (row->ascent, it->max_ascent); row->height = max (row->height, it->max_ascent + it->max_descent); ------------------------------------------------------------ revno: 105813 committer: Eli Zaretskii branch nick: trunk timestamp: Sun 2011-09-18 03:33:04 -0400 message: src/.gdbinit (pgx): Fix references to fields of `struct glyph'. diff: === modified file 'src/.gdbinit' --- src/.gdbinit 2011-06-18 13:28:53 +0000 +++ src/.gdbinit 2011-09-18 07:33:04 +0000 @@ -483,83 +483,83 @@ define pgx set $g = $arg0 # CHAR_GLYPH - if ($g->type == 0) - if ($g->u.ch >= ' ' && $g->u.ch < 127) - printf "CHAR[%c]", $g->u.ch + if ($g.type == 0) + if ($g.u.ch >= ' ' && $g.u.ch < 127) + printf "CHAR[%c]", $g.u.ch else - printf "CHAR[0x%x]", $g->u.ch + printf "CHAR[0x%x]", $g.u.ch end end # COMPOSITE_GLYPH - if ($g->type == 1) - printf "COMP[%d (%d..%d)]", $g->u.cmp.id, $g->slice.cmp.from, $g->slice.cmp.to + if ($g.type == 1) + printf "COMP[%d (%d..%d)]", $g.u.cmp.id, $g.slice.cmp.from, $g.slice.cmp.to end # GLYPHLESS_GLYPH - if ($g->type == 2) + if ($g.type == 2) printf "GLYPHLESS[" - if ($g->u.glyphless.method == 0) + if ($g.u.glyphless.method == 0) printf "THIN]" end - if ($g->u.glyphless.method == 1) + if ($g.u.glyphless.method == 1) printf "EMPTY]" end - if ($g->u.glyphless.method == 2) + if ($g.u.glyphless.method == 2) printf "ACRO]" end - if ($g->u.glyphless.method == 3) + if ($g.u.glyphless.method == 3) printf "HEX]" end end # IMAGE_GLYPH - if ($g->type == 3) - printf "IMAGE[%d]", $g->u.img_id + if ($g.type == 3) + printf "IMAGE[%d]", $g.u.img_id end # STRETCH_GLYPH - if ($g->type == 4) - printf "STRETCH[%d+%d]", $g->u.stretch.height, $g->u.stretch.ascent + if ($g.type == 4) + printf "STRETCH[%d+%d]", $g.u.stretch.height, $g.u.stretch.ascent end - xgettype ($g->object) + xgettype ($g.object) if ($type == Lisp_String) - printf " str=%x[%d]", $g->object, $g->charpos + printf " str=%x[%d]", $g.object, $g.charpos else - printf " pos=%d", $g->charpos + printf " pos=%d", $g.charpos end # For characters, print their resolved level and bidi type - if ($g->type == 0) - printf " blev=%d,btyp=", $g->resolved_level - pbiditype $g->bidi_type + if ($g.type == 0) + printf " blev=%d,btyp=", $g.resolved_level + pbiditype $g.bidi_type end - printf " w=%d a+d=%d+%d", $g->pixel_width, $g->ascent, $g->descent + printf " w=%d a+d=%d+%d", $g.pixel_width, $g.ascent, $g.descent # If not DEFAULT_FACE_ID - if ($g->face_id != 0) - printf " face=%d", $g->face_id - end - if ($g->voffset) - printf " vof=%d", $g->voffset - end - if ($g->multibyte_p) + if ($g.face_id != 0) + printf " face=%d", $g.face_id + end + if ($g.voffset) + printf " vof=%d", $g.voffset + end + if ($g.multibyte_p) printf " MB" end - if ($g->padding_p) + if ($g.padding_p) printf " PAD" end - if ($g->glyph_not_available_p) + if ($g.glyph_not_available_p) printf " N/A" end - if ($g->overlaps_vertically_p) + if ($g.overlaps_vertically_p) printf " OVL" end - if ($g->avoid_cursor_p) + if ($g.avoid_cursor_p) printf " AVOID" end - if ($g->left_box_line_p) + if ($g.left_box_line_p) printf " [" end - if ($g->right_box_line_p) + if ($g.right_box_line_p) printf " ]" end - if ($g->slice.img.x || $g->slice.img.y || $g->slice.img.width || $g->slice.img.height) - printf " slice=%d,%d,%d,%d" ,$g->slice.img.x, $g->slice.img.y, $g->slice.img.width, $g->slice.img.height + if ($g.slice.img.x || $g.slice.img.y || $g.slice.img.width || $g.slice.img.height) + printf " slice=%d,%d,%d,%d" ,$g.slice.img.x, $g.slice.img.y, $g.slice.img.width, $g.slice.img.height end printf "\n" end === modified file 'src/ChangeLog' --- src/ChangeLog 2011-09-17 18:21:24 +0000 +++ src/ChangeLog 2011-09-18 07:33:04 +0000 @@ -1,3 +1,7 @@ +2011-09-18 Eli Zaretskii + + * .gdbinit (pgx): Fix references to fields of `struct glyph'. + 2011-09-17 Eli Zaretskii * xdisp.c (produce_stretch_glyph): Another fix for changes made on === modified file 'src/xdisp.c' --- src/xdisp.c 2011-09-17 18:21:24 +0000 +++ src/xdisp.c 2011-09-18 07:33:04 +0000 @@ -18703,11 +18703,6 @@ it->current_x = new_x; it->continuation_lines_width += new_x; ++it->hpos; - /* Record the maximum and minimum buffer - positions seen so far in glyphs that will be - displayed by this row. */ - if (it->bidi_p) - RECORD_MAX_MIN_POS (it); if (i == nglyphs - 1) { /* If line-wrap is on, check if a previous @@ -18722,6 +18717,11 @@ || IT_DISPLAYING_WHITESPACE (it))) goto back_to_wrap; + /* Record the maximum and minimum buffer + positions seen so far in glyphs that will be + displayed by this row. */ + if (it->bidi_p) + RECORD_MAX_MIN_POS (it); set_iterator_to_next (it, 1); if (IT_OVERFLOW_NEWLINE_INTO_FRINGE (it)) { @@ -18739,6 +18739,8 @@ } } } + else if (it->bidi_p) + RECORD_MAX_MIN_POS (it); } else if (CHAR_GLYPH_PADDING_P (*glyph) && !FRAME_WINDOW_P (it->f)) @@ -18869,6 +18871,10 @@ xassert (it->first_visible_x <= it->last_visible_x); } } + /* Even if this display element produced no glyphs at all, + we want to record its position. */ + if (it->bidi_p && nglyphs == 0) + RECORD_MAX_MIN_POS (it); row->ascent = max (row->ascent, it->max_ascent); row->height = max (row->height, it->max_ascent + it->max_descent); ------------------------------------------------------------ revno: 105812 fixes bug(s): http://debbugs.gnu.org/8463 committer: Chong Yidong branch nick: trunk timestamp: Sat 2011-09-17 17:28:17 -0400 message: * lisp/replace.el (occur-mode-map): Rebind occur-edit-mode to "e". (occur-edit-mode-map): Bind C-c C-c to occur-cease-edit and C-o to occur-mode-display-occurrence. (occur-edit-mode): Add usage message. (occur-cease-edit): New command. (occur-after-change-function): Use text properties to find the position of the prefix text. (occur-engine): Set stickiness of prefix text properties. diff: === modified file 'etc/NEWS' --- etc/NEWS 2011-09-11 20:27:29 +0000 +++ etc/NEWS 2011-09-17 21:28:17 +0000 @@ -814,7 +814,7 @@ * New Modes and Packages in Emacs 24.1 ** Occur Edit mode applies edits made in *Occur* buffers to the -original buffers. It is bound to C-x C-q in Occur mode. +original buffers. It is bound to "e" in Occur mode. ** New global minor modes electric-pair-mode, electric-indent-mode, and electric-layout-mode. === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2011-09-17 19:05:52 +0000 +++ lisp/ChangeLog 2011-09-17 21:28:17 +0000 @@ -1,3 +1,14 @@ +2011-09-17 Chong Yidong + + * replace.el (occur-mode-map): Rebind occur-edit-mode to "e" (Bug#8463). + (occur-edit-mode-map): Bind C-c C-c to occur-cease-edit and C-o to + occur-mode-display-occurrence. + (occur-edit-mode): Add usage message. + (occur-cease-edit): New command. + (occur-after-change-function): Use text properties to find the + position of the prefix text. + (occur-engine): Set stickiness of prefix text properties. + 2011-09-17 Glenn Morris * progmodes/etags.el (complete-tag): === modified file 'lisp/net/ldap.el' --- lisp/net/ldap.el 2011-05-10 13:57:12 +0000 +++ lisp/net/ldap.el 2011-09-17 21:28:17 +0000 @@ -632,9 +632,10 @@ (setq record (cons (list name value) record)) (forward-line 1)) - (push (if withdn - (cons dn (nreverse record)) - (nreverse record)) result) + (cond (withdn + (push (cons dn (nreverse record)) result)) + (record + (push (nreverse record) result))) (setq record nil) (skip-chars-forward " \t\n") (message "Parsing results... %d" numres) === modified file 'lisp/replace.el' --- lisp/replace.el 2011-09-14 15:14:34 +0000 +++ lisp/replace.el 2011-09-17 21:28:17 +0000 @@ -810,7 +810,7 @@ ;; We use this alternative name, so we can use \\[occur-mode-mouse-goto]. (define-key map [mouse-2] 'occur-mode-mouse-goto) (define-key map "\C-c\C-c" 'occur-mode-goto-occurrence) - (define-key map "\C-x\C-q" 'occur-edit-mode) + (define-key map "e" 'occur-edit-mode) (define-key map "\C-m" 'occur-mode-goto-occurrence) (define-key map "o" 'occur-mode-goto-occurrence-other-window) (define-key map "\C-o" 'occur-mode-display-occurrence) @@ -864,8 +864,8 @@ (let ((map (make-sparse-keymap))) (set-keymap-parent map text-mode-map) (define-key map [mouse-2] 'occur-mode-mouse-goto) - (define-key map "\C-c\C-c" 'occur-mode-goto-occurrence) - (define-key map "\C-x\C-q" 'occur-mode) + (define-key map "\C-c\C-c" 'occur-cease-edit) + (define-key map "\C-o" 'occur-mode-display-occurrence) (define-key map "\C-c\C-f" 'next-error-follow-minor-mode) (define-key map [menu-bar occur] (cons (purecopy "Occur") occur-menu-map)) map) @@ -878,40 +878,54 @@ To return to ordinary Occur mode, use \\[occur-mode]." (setq buffer-read-only nil) - (add-hook 'after-change-functions 'occur-after-change-function nil t)) + (add-hook 'after-change-functions 'occur-after-change-function nil t) + (message (substitute-command-keys + "Editing: Type \\[occur-cease-edit] to return to Occur mode."))) + +(defun occur-cease-edit () + "Switch from Occur Edit mode to Occur mode." + (interactive) + (when (derived-mode-p 'occur-edit-mode) + (occur-mode) + (message "Switching to Occur mode."))) (defun occur-after-change-function (beg end length) (save-excursion (goto-char beg) - (let* ((m (get-text-property (line-beginning-position) 'occur-target)) + (let* ((line-beg (line-beginning-position)) + (m (get-text-property line-beg 'occur-target)) (buf (marker-buffer m)) - (col (current-column))) - (when (= length 0) - ;; Apply occur-target property to inserted (e.g. yanked) text. - (put-text-property beg end 'occur-target m) - ;; Did we insert a newline? Occur Edit mode can't create new - ;; Occur entries; just discard everything after the newline. - (save-excursion - (and (search-forward "\n" end t) - (delete-region (1- (point)) end)))) - (let ((line (- (line-number-at-pos) - (line-number-at-pos (window-start)))) - (readonly (with-current-buffer buf buffer-read-only)) - (win (or (get-buffer-window buf) - (display-buffer buf t))) - (text (save-excursion - (forward-line 0) - (search-forward ":" nil t) - (setq col (- col (current-column))) - (buffer-substring-no-properties (point) (line-end-position))))) - (with-selected-window win - (goto-char m) - (recenter line) - (if readonly - (message "Buffer `%s' is read only." buf) - (delete-region (line-beginning-position) (line-end-position)) - (insert text)) - (move-to-column col)))))) + col) + (when (and (get-text-property line-beg 'occur-prefix) + (not (get-text-property end 'occur-prefix))) + (when (= length 0) + ;; Apply occur-target property to inserted (e.g. yanked) text. + (put-text-property beg end 'occur-target m) + ;; Did we insert a newline? Occur Edit mode can't create new + ;; Occur entries; just discard everything after the newline. + (save-excursion + (and (search-forward "\n" end t) + (delete-region (1- (point)) end)))) + (let* ((line (- (line-number-at-pos) + (line-number-at-pos (window-start)))) + (readonly (with-current-buffer buf buffer-read-only)) + (win (or (get-buffer-window buf) + (display-buffer buf t))) + (line-end (line-end-position)) + (text (save-excursion + (goto-char (next-single-property-change + line-beg 'occur-prefix nil + line-end)) + (setq col (- (point) line-beg)) + (buffer-substring-no-properties (point) line-end)))) + (with-selected-window win + (goto-char m) + (recenter line) + (if readonly + (message "Buffer `%s' is read only." buf) + (delete-region (line-beginning-position) (line-end-position)) + (insert text)) + (move-to-column col))))))) (defun occur-revert-function (_ignore1 _ignore2) @@ -1336,9 +1350,12 @@ (when prefix-face `(font-lock-face prefix-face)) `(occur-prefix t mouse-face (highlight) - occur-target ,marker follow-link t - read-only t - help-echo "mouse-2: go to this occurrence")))) + ;; Allow insertion of text at + ;; the end of the prefix (for + ;; Occur Edit mode). + front-sticky t rear-nonsticky t + occur-target ,marker follow-link t + help-echo "mouse-2: go to this occurrence")))) (match-str ;; We don't put `mouse-face' on the newline, ;; because that loses. And don't put it ------------------------------------------------------------ revno: 105811 committer: Chong Yidong branch nick: trunk timestamp: Sat 2011-09-17 15:49:57 -0400 message: * doc/lispref/tips.texi: Don't bind a key sequence ending in C-g. Suggested by Edward O'Connor. diff: === modified file 'doc/lispref/ChangeLog' --- doc/lispref/ChangeLog 2011-09-17 08:18:48 +0000 +++ doc/lispref/ChangeLog 2011-09-17 19:49:57 +0000 @@ -1,3 +1,8 @@ +2011-09-17 Chong Yidong + + * tips.texi (Key Binding Conventions): Don't bind a key sequence + ending in C-g. Suggested by Edward O'Connor. + 2011-09-17 Eli Zaretskii * numbers.texi (Integer Basics): Add indexing for === modified file 'doc/lispref/tips.texi' --- doc/lispref/tips.texi 2011-05-29 22:41:06 +0000 +++ doc/lispref/tips.texi 2011-09-17 19:49:57 +0000 @@ -320,6 +320,10 @@ that context. @item +Similarly, don't bind a key sequence ending in @key{C-g}, since that +is commonly used to cancel a key sequence. + +@item Anything which acts like a temporary mode or state which the user can enter and leave should define @kbd{@key{ESC} @key{ESC}} or @kbd{@key{ESC} @key{ESC} @key{ESC}} as a way to escape. ------------------------------------------------------------ revno: 105810 committer: Glenn Morris branch nick: trunk timestamp: Sat 2011-09-17 12:05:52 -0700 message: complete-tag fix for bug#9526 * lisp/progmodes/etags.el (complete-tag): Fix call to completion-in-region. (cf info-complete). diff: === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2011-09-17 12:07:50 +0000 +++ lisp/ChangeLog 2011-09-17 19:05:52 +0000 @@ -1,3 +1,8 @@ +2011-09-17 Glenn Morris + + * progmodes/etags.el (complete-tag): + Fix call to completion-in-region. (Bug#9526) + 2011-09-17 Juri Linkov * textmodes/ispell.el (ispell-word): Add to the error message === modified file 'lisp/progmodes/etags.el' --- lisp/progmodes/etags.el 2011-07-20 16:45:00 +0000 +++ lisp/progmodes/etags.el 2011-09-17 19:05:52 +0000 @@ -2070,7 +2070,9 @@ (let ((comp-data (tags-completion-at-point-function))) (if (null comp-data) (error "Nothing to complete") - (apply 'completion-in-region comp-data)))) + (completion-in-region (car comp-data) (cadr comp-data) + (nth 2 comp-data) + (plist-get (nthcdr 3 comp-data) :predicate))))) (dolist (x '("^No tags table in use; use .* to select one$" "^There is no default tag$" ------------------------------------------------------------ revno: 105809 author: Sven Joachim committer: Glenn Morris branch nick: trunk timestamp: Sat 2011-09-17 11:43:04 -0700 message: * doc/man/emacs.1: Escape a dash. diff: === modified file 'doc/man/ChangeLog' --- doc/man/ChangeLog 2011-07-12 01:38:28 +0000 +++ doc/man/ChangeLog 2011-09-17 18:43:04 +0000 @@ -1,3 +1,7 @@ +2011-09-17 Sven Joachim + + * emacs.1: Escape a dash. + 2011-07-12 Chong Yidong * emacsclient.1: Document exit status. === modified file 'doc/man/emacs.1' --- doc/man/emacs.1 2011-03-12 19:19:47 +0000 +++ doc/man/emacs.1 2011-09-17 18:43:04 +0000 @@ -407,7 +407,7 @@ .IR fullwidth , or .IR fullheight , -which correspond to the command-line options `\-fs', `-mm', `\-fw', +which correspond to the command-line options `\-fs', `\-mm', `\-fw', and `\-fh', respectively. Note that this applies to the initial frame only. .TP ------------------------------------------------------------ revno: 105808 fixes bug(s): http://debbugs.gnu.org/9530 committer: Eli Zaretskii branch nick: trunk timestamp: Sat 2011-09-17 21:21:24 +0300 message: Fix bug #9530 with incorrect display of zero-width stretch. src/xdisp.c (produce_stretch_glyph): Another fix for changes made on 2011-08-30 (revision 105619). diff: === modified file 'src/ChangeLog' --- src/ChangeLog 2011-09-17 15:18:56 +0000 +++ src/ChangeLog 2011-09-17 18:21:24 +0000 @@ -1,5 +1,10 @@ 2011-09-17 Eli Zaretskii + * xdisp.c (produce_stretch_glyph): Another fix for changes made on + 2011-08-30 (revision 105619). (Bug#9530) + +2011-09-17 Eli Zaretskii + * xdisp.c (reseat_at_next_visible_line_start): Keep information about the current paragraph and restore it after the call to reseat. === modified file 'src/xdisp.c' --- src/xdisp.c 2011-09-17 15:18:56 +0000 +++ src/xdisp.c 2011-09-17 18:21:24 +0000 @@ -23298,14 +23298,7 @@ object = it->w->buffer; #ifdef HAVE_WINDOW_SYSTEM if (FRAME_WINDOW_P (it->f)) - { - append_stretch_glyph (it, object, width, height, ascent); - it->pixel_width = width; - it->ascent = it->phys_ascent = ascent; - it->descent = it->phys_descent = height - it->ascent; - it->nglyphs = width > 0 && height > 0 ? 1 : 0; - take_vertical_position_into_account (it); - } + append_stretch_glyph (it, object, width, height, ascent); else #endif { @@ -23317,6 +23310,19 @@ it->object = o_object; } } + + it->pixel_width = width; +#ifdef HAVE_WINDOW_SYSTEM + if (FRAME_WINDOW_P (it->f)) + { + it->ascent = it->phys_ascent = ascent; + it->descent = it->phys_descent = height - it->ascent; + it->nglyphs = width > 0 && height > 0 ? 1 : 0; + take_vertical_position_into_account (it); + } + else +#endif + it->nglyphs = width; } #ifdef HAVE_WINDOW_SYSTEM ------------------------------------------------------------ revno: 105807 fixes bug(s): http://debbugs.gnu.org/9470 committer: Eli Zaretskii branch nick: trunk timestamp: Sat 2011-09-17 18:18:56 +0300 message: Fix bug #9470 with slow redisplay in huge single-paragraph buffers. src/bidi.c (MAX_PARAGRAPH_SEARCH): New macro. (bidi_find_paragraph_start): Search back for paragraph beginning at most MAX_PARAGRAPH_SEARCH lines; if not found, return BEGV_BYTE. (bidi_move_to_visually_next): Only trigger paragraph-related computations when the last character is a newline or at EOB, not just any NEUTRAL_B. src/xdisp.c (reseat_at_next_visible_line_start): Keep information about the current paragraph and restore it after the call to reseat. diff: === modified file 'src/ChangeLog' --- src/ChangeLog 2011-09-17 12:19:04 +0000 +++ src/ChangeLog 2011-09-17 15:18:56 +0000 @@ -1,5 +1,16 @@ 2011-09-17 Eli Zaretskii + * xdisp.c (reseat_at_next_visible_line_start): Keep information + about the current paragraph and restore it after the call to + reseat. + + * bidi.c (MAX_PARAGRAPH_SEARCH): New macro. + (bidi_find_paragraph_start): Search back for paragraph beginning + at most MAX_PARAGRAPH_SEARCH lines; if not found, return BEGV_BYTE. + (bidi_move_to_visually_next): Only trigger paragraph-related + computations when the last character is a newline or at EOB, not + just any NEUTRAL_B. (Bug#9470) + * xdisp.c (set_cursor_from_row): Don't invoke special treatment of truncated lines if point is covered by a display string. (Bug#9524) === modified file 'src/bidi.c' --- src/bidi.c 2011-08-27 12:18:27 +0000 +++ src/bidi.c 2011-09-17 15:18:56 +0000 @@ -1071,15 +1071,25 @@ return val; } +/* On my 2005-vintage machine, searching back for paragraph start + takes ~1 ms per line. And bidi_paragraph_init is called 4 times + when user types C-p. The number below limits each call to + bidi_paragraph_init to about 10 ms. */ +#define MAX_PARAGRAPH_SEARCH 7500 + /* Find the beginning of this paragraph by looking back in the buffer. - Value is the byte position of the paragraph's beginning. */ + Value is the byte position of the paragraph's beginning, or + BEGV_BYTE if paragraph_start_re is still not found after looking + back MAX_PARAGRAPH_SEARCH lines in the buffer. */ static EMACS_INT bidi_find_paragraph_start (EMACS_INT pos, EMACS_INT pos_byte) { Lisp_Object re = paragraph_start_re; EMACS_INT limit = ZV, limit_byte = ZV_BYTE; + EMACS_INT n = 0; while (pos_byte > BEGV_BYTE + && n++ < MAX_PARAGRAPH_SEARCH && fast_looking_at (re, pos, pos_byte, limit, limit_byte, Qnil) < 0) { /* FIXME: What if the paragraph beginning is covered by a @@ -1089,6 +1099,8 @@ pos = find_next_newline_no_quit (pos - 1, -1); pos_byte = CHAR_TO_BYTE (pos); } + if (n >= MAX_PARAGRAPH_SEARCH) + pos_byte = BEGV_BYTE; return pos_byte; } @@ -2239,7 +2251,8 @@ GCPRO1 (bidi_it->string.lstring); /* If we just passed a newline, initialize for the next line. */ - if (!bidi_it->first_elt && bidi_it->orig_type == NEUTRAL_B) + if (!bidi_it->first_elt + && (bidi_it->ch == '\n' || bidi_it->ch == BIDI_EOB)) bidi_line_init (bidi_it); /* Prepare the sentinel iterator state, and cache it. When we bump @@ -2320,7 +2333,8 @@ reordering, whereas we _must_ know the paragraph base direction _before_ we process the paragraph's text, since the base direction affects the reordering. */ - if (bidi_it->scan_dir == 1 && bidi_it->orig_type == NEUTRAL_B) + if (bidi_it->scan_dir == 1 + && (bidi_it->ch == '\n' || bidi_it->ch == BIDI_EOB)) { /* The paragraph direction of the entire string, once determined, is in effect for the entire string. Setting the === modified file 'src/xdisp.c' --- src/xdisp.c 2011-09-17 08:09:45 +0000 +++ src/xdisp.c 2011-09-17 15:18:56 +0000 @@ -5722,6 +5722,9 @@ { int newline_found_p, skipped_p = 0; struct bidi_it bidi_it_prev; + int new_paragraph, first_elt, disp_prop; + EMACS_INT paragraph_end, disp_pos; + bidi_dir_t paragraph_dir; newline_found_p = forward_to_next_line_start (it, &skipped_p, &bidi_it_prev); @@ -5738,6 +5741,23 @@ forward_to_next_line_start (it, &skipped_p, &bidi_it_prev); } + /* Under bidi iteration, save the attributes of the paragraph we are + in, to be restored after the call to `reseat' below. That's + because `reseat' overwrites them, which requires unneeded and + potentially expensive backward search for paragraph beginning. + This search is unnecessary because we will be `reseat'ed to the + same position where we are now, for which we already have all the + information we need in the bidi iterator. */ + if (it->bidi_p && !STRINGP (it->string)) + { + new_paragraph = it->bidi_it.new_paragraph; + first_elt = it->bidi_it.first_elt; + paragraph_end = it->bidi_it.separator_limit; + paragraph_dir = it->bidi_it.paragraph_dir; + disp_pos = it->bidi_it.disp_pos; + disp_prop = it->bidi_it.disp_prop; + } + /* Position on the newline if that's what's requested. */ if (on_newline_p && newline_found_p) { @@ -5777,10 +5797,30 @@ IT_BYTEPOS (*it) = it->bidi_it.bytepos; } reseat (it, it->current.pos, 0); + if (it->bidi_p) + { + it->bidi_it.new_paragraph = new_paragraph; + it->bidi_it.first_elt = first_elt; + it->bidi_it.separator_limit = paragraph_end; + it->bidi_it.paragraph_dir = paragraph_dir; + it->bidi_it.disp_pos = disp_pos; + it->bidi_it.disp_prop = disp_prop; + } } } else if (skipped_p) - reseat (it, it->current.pos, 0); + { + reseat (it, it->current.pos, 0); + if (it->bidi_p) + { + it->bidi_it.new_paragraph = new_paragraph; + it->bidi_it.first_elt = first_elt; + it->bidi_it.separator_limit = paragraph_end; + it->bidi_it.paragraph_dir = paragraph_dir; + it->bidi_it.disp_pos = disp_pos; + it->bidi_it.disp_prop = disp_prop; + } + } CHECK_IT (it); } ------------------------------------------------------------ revno: 105806 committer: Juanma Barranquero branch nick: trunk timestamp: Sat 2011-09-17 14:19:04 +0200 message: Fix typos. diff: === modified file 'lisp/org/ChangeLog' --- lisp/org/ChangeLog 2011-09-02 16:38:40 +0000 +++ lisp/org/ChangeLog 2011-09-17 12:19:04 +0000 @@ -1,3 +1,7 @@ +2011-09-17 Juanma Barranquero + + * org.el (org-toggle-pretty-entities): Fix typo in message. + 2011-09-02 Chong Yidong * org-compat.el (org-pop-to-buffer-same-window): Deleted. === modified file 'lisp/org/org.el' --- lisp/org/org.el 2011-09-02 16:38:40 +0000 +++ lisp/org/org.el 2011-09-17 12:19:04 +0000 @@ -5660,7 +5660,7 @@ (org-set-local 'org-pretty-entities (not org-pretty-entities)) (org-restart-font-lock) (if org-pretty-entities - (message "Entities are displayed as UTF8 characers") + (message "Entities are displayed as UTF8 characters") (save-restriction (widen) (org-decompose-region (point-min) (point-max)) === modified file 'lisp/progmodes/cc-fonts.el' --- lisp/progmodes/cc-fonts.el 2011-09-07 07:16:40 +0000 +++ lisp/progmodes/cc-fonts.el 2011-09-17 12:19:04 +0000 @@ -290,7 +290,7 @@ res)))) (defun c-make-font-lock-search-form (regexp highlights) - ;; Return a lisp form which will fontify every occurence of REGEXP + ;; Return a lisp form which will fontify every occurrence of REGEXP ;; (a regular expression, NOT a function) between POINT and `limit' ;; with HIGHLIGHTS, a list of highlighters as specified on page ;; "Search-based Fontification" in the elisp manual. === modified file 'src/ChangeLog' --- src/ChangeLog 2011-09-17 08:09:45 +0000 +++ src/ChangeLog 2011-09-17 12:19:04 +0000 @@ -1303,7 +1303,7 @@ underline, overline, and strike-through. (ns_dumpglyphs_image, ns_dumpglyphs_stretch): Add call to ns_draw_text_decoration. Change treatment of cursor drawing to - accomomdate underlining, etc. + accommodate underlining, etc. 2011-07-28 Eli Zaretskii === modified file 'src/xmenu.c' --- src/xmenu.c 2011-09-09 01:06:52 +0000 +++ src/xmenu.c 2011-09-17 12:19:04 +0000 @@ -742,7 +742,7 @@ /* If popup_activated_flag is greater than 1 we are in a popup menu. Don't pass the frame to show_help_event for those. Passing frame creates an Emacs event. As we are looping in - popup_widget_loop, it won't be handeled. Passing NULL shows the tip + popup_widget_loop, it won't be handled. Passing NULL shows the tip directly without using an Emacs event. This is what the Lucid code does below. */ show_help_event (popup_activated_flag <= 1 ? cb_data->cl_data->f : NULL,