From 5273453b6833f87c852bee6b8b39a7658ba75490 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Thu, 25 Sep 2008 00:05:52 +0000 Subject: [PATCH] (term-emulate-terminal): Encode input string before checking its length. --- lisp/term.el | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) 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)) -- 2.39.5