;;; term.el --- general command interpreter in a window stuff
-;; Copyright (C) 1988, 1990, 1992, 1994-1995, 2001-2013 Free Software
+;; Copyright (C) 1988, 1990, 1992, 1994-1995, 2001-2014 Free Software
;; Foundation, Inc.
;; Author: Per Bothner <per@bothner.com>
;; full advantage of this package
;;
;; (add-hook 'term-mode-hook
-;; (function
-;; (lambda ()
-;; (setq term-prompt-regexp "^[^#$%>\n]*[#$%>] *")
-;; (make-local-variable 'mouse-yank-at-point)
-;; (make-local-variable 'transient-mark-mode)
-;; (setq mouse-yank-at-point t)
-;; (setq transient-mark-mode nil)
-;; (auto-fill-mode -1)
-;; (setq tab-width 8 ))))
+;; (function
+;; (lambda ()
+;; (setq term-prompt-regexp "^[^#$%>\n]*[#$%>] *")
+;; (setq-local mouse-yank-at-point t)
+;; (setq-local transient-mark-mode nil)
+;; (auto-fill-mode -1)
+;; (setq tab-width 8 ))))
;;
;;
;; ----------------------------------------
:type 'boolean
:group 'term)
+(defcustom term-suppress-hard-newline nil
+ "Non-nil means interpreter should not break long lines with newlines.
+This means text can automatically reflow if the window is resized."
+ :version "24.4"
+ :type 'boolean
+ :group 'term)
+
;; Where gud-display-frame should put the debugging arrow. This is
;; set by the marker-filter, which scans the debugger's output for
;; indications of the current pc.
(when term-escape-char
;; Undo previous term-set-escape-char.
(define-key term-raw-map term-escape-char 'term-send-raw))
- (setq term-escape-char (vector key))
+ (setq term-escape-char (if (vectorp key) key (vector key)))
(define-key term-raw-map term-escape-char term-raw-escape-map)
;; FIXME: If we later call term-set-escape-char again with another key,
;; we should undo this binding.
(if (and (not (featurep 'xemacs))
(display-graphic-p)
overflow-newline-into-fringe
+ ;; Subtract 1 from the width when any fringe has zero width,
+ ;; not just the right fringe. Bug#18601.
+ (/= (frame-parameter nil 'left-fringe) 0)
(/= (frame-parameter nil 'right-fringe) 0))
- (window-width)
- (1- (window-width))))
+ (window-body-width)
+ (1- (window-body-width))))
\f
(put 'term-mode 'mode-class 'special)
(run-hooks 'mouse-leave-buffer-hook)
(setq this-command 'yank)
(mouse-set-point click)
- (term-send-raw-string
- (or (cond ; From `mouse-yank-primary':
- ((eq system-type 'windows-nt)
- (or (x-get-selection 'PRIMARY)
- (x-get-selection-value)))
- ((fboundp 'x-get-selection-value)
- (or (x-get-selection-value)
- (x-get-selection 'PRIMARY)))
- (t
- (x-get-selection 'PRIMARY)))
- (error "No selection is available")))))
+ (term-send-raw-string (gui-get-primary-selection))))
(defun term-paste ()
"Insert the last stretch of killed text at point."
(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.
+ (cond ((or term-suppress-hard-newline (<= 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
(let ((end (string-match "\r?$" str i)))
(if end
(funcall term-command-hook
- (prog1 (substring str (1+ i) end)
- (setq i (match-end 0))))
+ (decode-coding-string
+ (prog1 (substring str (1+ i) end)
+ (setq i (match-end 0)))
+ locale-coding-system))
(setq term-terminal-parameter (substring str i))
(setq term-terminal-state 4)
(setq i str-length))))
(if (< down 0) term-scroll-start term-scroll-end))))
(when (or (and (< down 0) (< scroll-needed 0))
(and (> down 0) (> scroll-needed 0)))
- (let ((save-point (copy-marker (point))) (save-top))
+ (let ((save-point (point-marker)) (save-top))
(goto-char term-home-marker)
(cond (term-scroll-with-delete
(if (< down 0)
(and (consp first)
(eq (window-buffer (posn-window (event-start first)))
(get-buffer "*Completions*"))
- (eq (key-binding key) 'mouse-choose-completion)))
- ;; If the user does mouse-choose-completion with the mouse,
+ (memq (key-binding key)
+ '(mouse-choose-completion choose-completion))))
+ ;; If the user does choose-completion with the mouse,
;; execute the command, then delete the completion window.
(progn
(choose-completion first)