From: Chong Yidong Date: Thu, 25 Sep 2008 00:05:52 +0000 (+0000) Subject: (term-emulate-terminal): Encode input string before checking its X-Git-Tag: emacs-pretest-23.0.90~2776 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=5273453b6833f87c852bee6b8b39a7658ba75490;p=emacs.git (term-emulate-terminal): Encode input string before checking its length. --- diff --git a/lisp/term.el b/lisp/term.el index e9dad90736c..a74e271f13a 100644 --- a/lisp/term.el +++ b/lisp/term.el @@ -2718,7 +2718,11 @@ See `term-prompt-regexp'." (defun term-emulate-terminal (proc str) (with-current-buffer (process-buffer proc) - (let* ((i 0) char funny count save-point save-marker old-point temp win + (let* ((i 0) char funny + count ; number of decoded chars in substring + count-bytes ; number of bytes + decoded-substring + save-point save-marker old-point temp win (buffer-undo-list t) (selected (selected-window)) last-win @@ -2777,6 +2781,10 @@ See `term-prompt-regexp'." str i)) (when (not funny) (setq funny str-length)) (cond ((> funny i) + (setq decoded-substring + (decode-coding-string + (substring str i funny) + locale-coding-system)) (cond ((eq term-terminal-state 1) ;; We are in state 1, we need to wrap ;; around. Go to the beginning of @@ -2785,21 +2793,31 @@ See `term-prompt-regexp'." (term-down 1 t) (term-move-columns (- (term-current-column))) (setq term-terminal-state 0))) - (setq count (- funny i)) + (setq count (length decoded-substring)) (setq temp (- (+ (term-horizontal-column) count) term-width)) (cond ((<= temp 0)) ;; All count chars fit in line. ((> count temp) ;; Some chars fit. ;; This iteration, handle only what fits. (setq count (- count temp)) + (setq count-bytes + (length + (encode-coding-string + (substring decoded-substring 0 count) + 'binary))) (setq temp 0) - (setq funny (+ count i))) + (setq funny (+ count-bytes i))) ((or (not (or term-pager-count term-scroll-with-delete)) (> (term-handle-scroll 1) 0)) (term-adjust-current-row-cache 1) (setq count (min count term-width)) - (setq funny (+ count i)) + (setq count-bytes + (length + (encode-coding-string + (substring decoded-substring 0 count) + 'binary))) + (setq funny (+ count-bytes i)) (setq term-start-line-column term-current-column)) (t ;; Doing PAGER processing. @@ -2813,7 +2831,7 @@ See `term-prompt-regexp'." ;; following point if not eob nor insert-mode. (let ((old-column (current-column)) columns pos) - (insert (decode-coding-string (substring str i funny) locale-coding-system)) + (insert decoded-substring) (setq term-current-column (current-column) columns (- term-current-column old-column)) (when (not (or (eobp) term-insert-mode))