summaryrefslogtreecommitdiff
path: root/lisp/term.el
diff options
context:
space:
mode:
authorChong Yidong <cyd@stupidchicken.com>2008-09-25 00:05:52 +0000
committerChong Yidong <cyd@stupidchicken.com>2008-09-25 00:05:52 +0000
commit5273453b6833f87c852bee6b8b39a7658ba75490 (patch)
tree33f464e91806294dd6ef3c305acd72fe39bf89bf /lisp/term.el
parent1601aa7acf196ef3cca10f3bd4794eb4ad6950d5 (diff)
downloademacs-5273453b6833f87c852bee6b8b39a7658ba75490.tar.gz
(term-emulate-terminal): Encode input string before checking its
length.
Diffstat (limited to 'lisp/term.el')
-rw-r--r--lisp/term.el28
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))