diff options
author | Chong Yidong <cyd@stupidchicken.com> | 2008-09-25 00:05:52 +0000 |
---|---|---|
committer | Chong Yidong <cyd@stupidchicken.com> | 2008-09-25 00:05:52 +0000 |
commit | 5273453b6833f87c852bee6b8b39a7658ba75490 (patch) | |
tree | 33f464e91806294dd6ef3c305acd72fe39bf89bf /lisp/term.el | |
parent | 1601aa7acf196ef3cca10f3bd4794eb4ad6950d5 (diff) | |
download | emacs-5273453b6833f87c852bee6b8b39a7658ba75490.tar.gz |
(term-emulate-terminal): Encode input string before checking its
length.
Diffstat (limited to 'lisp/term.el')
-rw-r--r-- | lisp/term.el | 28 |
1 files 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)) |