1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-03 11:33:37 +00:00

(term-raw-map): Set it up at load time.

(term-char-mode): Don't set up term-raw-map here.
(term-set-escape-char): Don't set up C-x subcommand.
(term-ansi-face-already-done): Renamed from
term-ansi-face-alredy-done.
(term-command-hook): Avoid error if STRING is empty.
(term, term-mode): Doc fixes.

Redesign handling of colors and faces.
Delete all the faces that this mode used to make.
(ansi-term-color-vector): New variable.
(ansi-term-fg-faces-vector, ansi-term-bg-faces-vector)
(ansi-term-inv-bg-faces-vector, ansi-term-inv-fg-faces-vector):
Variables deleted.
(term-default-fg-color, term-default-bg-color): Use defcustom.
(term-handle-colors-array): Use ansi-term-color-vector,
and specify face attributes rather than faces in `face' property.

(term-ansi-fg-faces-vector, term-ansi-bg-faces-vector)
(term-ansi-inv-fg-faces-vector, term-ansi-inv-bg-faces-vector)
(term-ansi-reverse-faces-vector): Unused variables deleted.
(term-ignore-error): Macro deleted.
This commit is contained in:
Richard M. Stallman 2003-02-04 11:43:01 +00:00
parent 37d4a06e71
commit c2f0944a1e

View File

@ -688,7 +688,7 @@ Buffer local variable.")
(defvar term-ansi-at-save-anon nil) (defvar term-ansi-at-save-anon nil)
(defvar term-ansi-current-bold 0) (defvar term-ansi-current-bold 0)
(defvar term-ansi-current-color 0) (defvar term-ansi-current-color 0)
(defvar term-ansi-face-alredy-done 0) (defvar term-ansi-face-already-done 0)
(defvar term-ansi-current-bg-color 0) (defvar term-ansi-current-bg-color 0)
(defvar term-ansi-current-underline 0) (defvar term-ansi-current-underline 0)
(defvar term-ansi-current-highlight 0) (defvar term-ansi-current-highlight 0)
@ -697,11 +697,6 @@ Buffer local variable.")
(defvar term-ansi-default-fg 0) (defvar term-ansi-default-fg 0)
(defvar term-ansi-default-bg 0) (defvar term-ansi-default-bg 0)
(defvar term-ansi-current-temp 0) (defvar term-ansi-current-temp 0)
(defvar term-ansi-fg-faces-vector nil)
(defvar term-ansi-bg-faces-vector nil)
(defvar term-ansi-inv-fg-faces-vector nil)
(defvar term-ansi-inv-bg-faces-vector nil)
(defvar term-ansi-reverse-faces-vector nil)
;;; Four should be enough, if you want more, just add. -mm ;;; Four should be enough, if you want more, just add. -mm
(defvar term-terminal-more-parameters 0) (defvar term-terminal-more-parameters 0)
@ -712,118 +707,19 @@ Buffer local variable.")
;;; faces -mm ;;; faces -mm
(defmacro term-ignore-error (&rest body) (defcustom term-default-fg-color nil
`(condition-case nil "Default color for foreground in `term'."
(progn ,@body) :group 'term
(error nil))) :type 'string)
(defvar term-default-fg-color nil) (defcustom term-default-bg-color nil
(defvar term-default-bg-color nil) "Default color for background in `term'."
:group 'term
:type 'string)
(when (fboundp 'make-face) (defvar ansi-term-color-vector
;;; --- Simple faces --- [nil "black" "red" "green" "yellow" "blue"
(copy-face 'default 'term-default) "magenta" "cyan" "white"])
(make-face 'term-default-fg)
(make-face 'term-default-bg)
(make-face 'term-default-fg-inv)
(make-face 'term-default-bg-inv)
(make-face 'term-bold)
(make-face 'term-underline)
(make-face 'term-invisible)
(make-face 'term-invisible-inv)
(term-ignore-error
(set-face-foreground 'term-default-fg term-default-fg-color))
(term-ignore-error
(set-face-background 'term-default-bg term-default-bg-color))
(term-ignore-error
(set-face-foreground 'term-default-fg-inv term-default-bg-color))
(term-ignore-error
(set-face-background 'term-default-bg-inv term-default-fg-color))
(term-ignore-error
(set-face-background 'term-invisible term-default-bg-color))
(term-ignore-error
(set-face-background 'term-invisible-inv term-default-fg-color))
;; Set the colors of the new faces.
(term-ignore-error
(make-face-bold 'term-bold))
(term-ignore-error
(set-face-underline-p 'term-underline t))
;;; --- Fg faces ---
(make-face 'term-black)
(make-face 'term-red)
(make-face 'term-green)
(make-face 'term-yellow)
(make-face 'term-blue)
(make-face 'term-magenta)
(make-face 'term-cyan)
(make-face 'term-white)
(term-ignore-error
(set-face-foreground 'term-black "black"))
(term-ignore-error
(set-face-foreground 'term-red "red"))
(term-ignore-error
(set-face-foreground 'term-green "green"))
(term-ignore-error
(set-face-foreground 'term-yellow "yellow"))
(term-ignore-error
(set-face-foreground 'term-blue "blue"))
(term-ignore-error
(set-face-foreground 'term-magenta "magenta"))
(term-ignore-error
(set-face-foreground 'term-cyan "cyan"))
(term-ignore-error
(set-face-foreground 'term-white "white"))
;;; --- Bg faces ---
(make-face 'term-blackbg)
(make-face 'term-redbg)
(make-face 'term-greenbg)
(make-face 'term-yellowbg)
(make-face 'term-bluebg)
(make-face 'term-magentabg)
(make-face 'term-cyanbg)
(make-face 'term-whitebg)
(term-ignore-error
(set-face-background 'term-blackbg "black"))
(term-ignore-error
(set-face-background 'term-redbg "red"))
(term-ignore-error
(set-face-background 'term-greenbg "green"))
(term-ignore-error
(set-face-background 'term-yellowbg "yellow"))
(term-ignore-error
(set-face-background 'term-bluebg "blue"))
(term-ignore-error
(set-face-background 'term-magentabg "magenta"))
(term-ignore-error
(set-face-background 'term-cyanbg "cyan"))
(term-ignore-error
(set-face-background 'term-whitebg "white")))
(defvar ansi-term-fg-faces-vector
[term-default-fg term-black term-red term-green term-yellow term-blue
term-magenta term-cyan term-white])
(defvar ansi-term-bg-faces-vector
[term-default-bg term-blackbg term-redbg term-greenbg term-yellowbg
term-bluebg term-magentabg term-cyanbg term-whitebg])
(defvar ansi-term-inv-bg-faces-vector
[term-default-fg-inv term-black term-red term-green term-yellow term-blue
term-magenta term-cyan term-white])
(defvar ansi-term-inv-fg-faces-vector
[term-default-bg-inv term-blackbg term-redbg term-greenbg term-yellowbg
term-bluebg term-magentabg term-cyanbg term-whitebg])
;;; Inspiration came from comint.el -mm ;;; Inspiration came from comint.el -mm
(defvar term-buffer-maximum-size 2048 (defvar term-buffer-maximum-size 2048
@ -832,7 +728,7 @@ Term buffers are truncated from the top to be no greater than this number.
Notice that a setting of 0 means 'don't truncate anything'. This variable Notice that a setting of 0 means 'don't truncate anything'. This variable
is buffer-local.") is buffer-local.")
;;; ;;;
(term-if-xemacs (term-if-xemacs
(defvar term-terminal-menu (defvar term-terminal-menu
'("Terminal" '("Terminal"
@ -841,149 +737,6 @@ is buffer-local.")
[ "Enable paging" term-pager-toggle (not term-pager-count)] [ "Enable paging" term-pager-toggle (not term-pager-count)]
[ "Disable paging" term-pager-toggle term-pager-count]))) [ "Disable paging" term-pager-toggle term-pager-count])))
(put 'term-mode 'mode-class 'special)
(defun term-mode ()
"Major mode for interacting with an inferior interpreter.
Interpreter name is same as buffer name, sans the asterisks.
In line sub-mode, return at end of buffer sends line as input,
while return not at end copies rest of line to end and sends it.
In char sub-mode, each character (except `term-escape-char`) is
set immediately.
This mode is typically customised to create inferior-lisp-mode,
shell-mode, etc.. This can be done by setting the hooks
term-input-filter-functions, term-input-filter, term-input-sender and
term-get-old-input to appropriate functions, and the variable
term-prompt-regexp to the appropriate regular expression.
An input history is maintained of size `term-input-ring-size', and
can be accessed with the commands \\[term-next-input],
\\[term-previous-input], and \\[term-dynamic-list-input-ring].
Input ring history expansion can be achieved with the commands
\\[term-replace-by-expanded-history] or \\[term-magic-space].
Input ring expansion is controlled by the variable `term-input-autoexpand',
and addition is controlled by the variable `term-input-ignoredups'.
Input to, and output from, the subprocess can cause the window to scroll to
the end of the buffer. See variables `term-scroll-to-bottom-on-input',
and `term-scroll-to-bottom-on-output'.
If you accidentally suspend your process, use \\[term-continue-subjob]
to continue it.
\\{term-mode-map}
Entry to this mode runs the hooks on term-mode-hook"
(interactive)
;; Do not remove this. All major modes must do this.
(kill-all-local-variables)
(setq major-mode 'term-mode)
(setq mode-name "Term")
(use-local-map term-mode-map)
(make-local-variable 'term-home-marker)
(setq term-home-marker (copy-marker 0))
(make-local-variable 'term-saved-home-marker)
(make-local-variable 'term-height)
(make-local-variable 'term-width)
(setq term-width (1- (window-width)))
(setq term-height (1- (window-height)))
(make-local-variable 'term-terminal-parameter)
(make-local-variable 'term-saved-cursor)
(make-local-variable 'term-last-input-start)
(setq term-last-input-start (make-marker))
(make-local-variable 'term-last-input-end)
(setq term-last-input-end (make-marker))
(make-local-variable 'term-last-input-match)
(setq term-last-input-match "")
(make-local-variable 'term-prompt-regexp) ; Don't set; default
(make-local-variable 'term-input-ring-size) ; ...to global val.
(make-local-variable 'term-input-ring)
(make-local-variable 'term-input-ring-file-name)
(or (and (boundp 'term-input-ring) term-input-ring)
(setq term-input-ring (make-ring term-input-ring-size)))
(make-local-variable 'term-input-ring-index)
(or (and (boundp 'term-input-ring-index) term-input-ring-index)
(setq term-input-ring-index nil))
(make-local-variable 'term-command-hook)
(setq term-command-hook (symbol-function 'term-command-hook))
;;; I'm not sure these saves are necessary but, since I
;;; haven't tested the whole thing on a net connected machine with
;;; a properly configured ange-ftp, I've decided to be conservative
;;; and put them in. -mm
(make-local-variable 'term-ansi-at-host)
(setq term-ansi-at-host (system-name))
(make-local-variable 'term-ansi-at-dir)
(setq term-ansi-at-dir default-directory)
(make-local-variable 'term-ansi-at-message)
(setq term-ansi-at-message nil)
;;; For user tracking purposes -mm
(make-local-variable 'ange-ftp-default-user)
(make-local-variable 'ange-ftp-default-password)
(make-local-variable 'ange-ftp-generate-anonymous-password)
;;; You may want to have different scroll-back sizes -mm
(make-local-variable 'term-buffer-maximum-size)
;;; Of course these have to be buffer-local -mm
(make-local-variable 'term-ansi-current-bold)
(make-local-variable 'term-ansi-current-color)
(make-local-variable 'term-ansi-face-alredy-done)
(make-local-variable 'term-ansi-current-bg-color)
(make-local-variable 'term-ansi-current-underline)
(make-local-variable 'term-ansi-current-highlight)
(make-local-variable 'term-ansi-current-reverse)
(make-local-variable 'term-ansi-current-invisible)
(make-local-variable 'term-terminal-state)
(make-local-variable 'term-kill-echo-list)
(make-local-variable 'term-start-line-column)
(make-local-variable 'term-current-column)
(make-local-variable 'term-current-row)
(make-local-variable 'term-log-buffer)
(make-local-variable 'term-scroll-start)
(make-local-variable 'term-scroll-end)
(setq term-scroll-end term-height)
(make-local-variable 'term-scroll-with-delete)
(make-local-variable 'term-pager-count)
(make-local-variable 'term-pager-old-local-map)
(make-local-variable 'term-old-mode-map)
(make-local-variable 'term-insert-mode)
(make-local-variable 'term-dynamic-complete-functions)
(make-local-variable 'term-completion-fignore)
(make-local-variable 'term-get-old-input)
(make-local-variable 'term-matching-input-from-input-string)
(make-local-variable 'term-input-autoexpand)
(make-local-variable 'term-input-ignoredups)
(make-local-variable 'term-delimiter-argument-list)
(make-local-variable 'term-input-filter-functions)
(make-local-variable 'term-input-filter)
(make-local-variable 'term-input-sender)
(make-local-variable 'term-eol-on-send)
(make-local-variable 'term-scroll-to-bottom-on-output)
(make-local-variable 'term-scroll-show-maximum-output)
(make-local-variable 'term-ptyp)
(make-local-variable 'term-exec-hook)
(make-local-variable 'term-vertical-motion)
(make-local-variable 'term-pending-delete-marker)
(setq term-pending-delete-marker (make-marker))
(make-local-variable 'term-current-face)
(make-local-variable 'term-pending-frame)
(setq term-pending-frame nil)
(run-hooks 'term-mode-hook)
(term-if-xemacs
(set-buffer-menubar
(append current-menubar (list term-terminal-menu))))
(or term-input-ring
(setq term-input-ring (make-ring term-input-ring-size)))
(term-update-mode-line))
(if term-mode-map (if term-mode-map
nil nil
(setq term-mode-map (make-sparse-keymap)) (setq term-mode-map (make-sparse-keymap))
@ -1016,7 +769,6 @@ Entry to this mode runs the hooks on term-mode-hook"
(define-key term-mode-map "\C-c\C-j" 'term-line-mode) (define-key term-mode-map "\C-c\C-j" 'term-line-mode)
(define-key term-mode-map "\C-c\C-q" 'term-pager-toggle) (define-key term-mode-map "\C-c\C-q" 'term-pager-toggle)
; ;; completion: ; ;; completion:
; (define-key term-mode-map [menu-bar completion] ; (define-key term-mode-map [menu-bar completion]
; (cons "Complete" (make-sparse-keymap "Complete"))) ; (cons "Complete" (make-sparse-keymap "Complete")))
@ -1114,7 +866,218 @@ Entry to this mode runs the hooks on term-mode-hook"
(define-key term-mode-map [menu-bar signals] (define-key term-mode-map [menu-bar signals]
(setq term-signals-menu (cons "Signals" newmap))) (setq term-signals-menu (cons "Signals" newmap)))
))) )))
;; Set up term-raw-map, etc.
(defun term-set-escape-char (c)
"Change term-escape-char and keymaps that depend on it."
(if term-escape-char
(define-key term-raw-map term-escape-char 'term-send-raw))
(setq c (make-string 1 c))
(define-key term-raw-map c term-raw-escape-map)
;; Define standard bindings in term-raw-escape-map
(define-key term-raw-escape-map "\C-v"
(lookup-key (current-global-map) "\C-v"))
(define-key term-raw-escape-map "\C-u"
(lookup-key (current-global-map) "\C-u"))
(define-key term-raw-escape-map c 'term-send-raw)
(define-key term-raw-escape-map "\C-q" 'term-pager-toggle)
;; The keybinding for term-char-mode is needed by the menubar code.
(define-key term-raw-escape-map "\C-k" 'term-char-mode)
(define-key term-raw-escape-map "\C-j" 'term-line-mode)
;; It's convenient to have execute-extended-command here.
(define-key term-raw-escape-map [?\M-x] 'execute-extended-command))
(let* ((map (make-keymap))
(esc-map (make-keymap))
(i 0))
(while (< i 128)
(define-key map (make-string 1 i) 'term-send-raw)
(define-key esc-map (make-string 1 i) 'term-send-raw-meta)
(setq i (1+ i)))
(dolist (elm (generic-character-list))
(define-key map (vector elm) 'term-send-raw))
(define-key map "\e" esc-map)
(setq term-raw-map map)
(setq term-raw-escape-map
(copy-keymap (lookup-key (current-global-map) "\C-x")))
;;; Added nearly all the 'grey keys' -mm
(progn
(term-if-xemacs
(define-key term-raw-map [button2] 'term-mouse-paste))
(term-ifnot-xemacs
(define-key term-raw-map [mouse-2] 'term-mouse-paste)
(define-key term-raw-map [menu-bar terminal] term-terminal-menu)
(define-key term-raw-map [menu-bar signals] term-signals-menu))
(define-key term-raw-map [up] 'term-send-up)
(define-key term-raw-map [down] 'term-send-down)
(define-key term-raw-map [right] 'term-send-right)
(define-key term-raw-map [left] 'term-send-left)
(define-key term-raw-map [delete] 'term-send-del)
(define-key term-raw-map [backspace] 'term-send-backspace)
(define-key term-raw-map [home] 'term-send-home)
(define-key term-raw-map [end] 'term-send-end)
(define-key term-raw-map [prior] 'term-send-prior)
(define-key term-raw-map [next] 'term-send-next)))
(term-set-escape-char ?\C-c)
(put 'term-mode 'mode-class 'special)
(defun term-mode ()
"Major mode for interacting with an inferior interpreter.
The interpreter name is same as buffer name, sans the asterisks.
There are two submodes: line mode and char mode. By default, you are
in char mode. In char sub-mode, each character (except
`term-escape-char') is set immediately.
In line mode, you send a line of input at a time; use
\\[term-send-input] to send.
In line mode, this maintains an input history of size
`term-input-ring-size', and you can access it with the commands
\\[term-next-input], \\[term-previous-input], and
\\[term-dynamic-list-input-ring]. Input ring history expansion can be
achieved with the commands \\[term-replace-by-expanded-history] or
\\[term-magic-space]. Input ring expansion is controlled by the
variable `term-input-autoexpand', and addition is controlled by the
variable `term-input-ignoredups'.
Input to, and output from, the subprocess can cause the window to scroll to
the end of the buffer. See variables `term-scroll-to-bottom-on-input',
and `term-scroll-to-bottom-on-output'.
If you accidentally suspend your process, use \\[term-continue-subjob]
to continue it.
This mode can be customised to create specific modes for running
particular subprocesses. This can be done by setting the hooks
`term-input-filter-functions', `term-input-filter',
`term-input-sender' and `term-get-old-input' to appropriate functions,
and the variable `term-prompt-regexp' to the appropriate regular
expression.
Commands in raw mode:
\\{term-raw-map}
Commands in line mode:
\\{term-mode-map}
Entry to this mode runs the hooks on `term-mode-hook'."
(interactive)
;; Do not remove this. All major modes must do this.
(kill-all-local-variables)
(setq major-mode 'term-mode)
(setq mode-name "Term")
(use-local-map term-mode-map)
(make-local-variable 'term-home-marker)
(setq term-home-marker (copy-marker 0))
(make-local-variable 'term-saved-home-marker)
(make-local-variable 'term-height)
(make-local-variable 'term-width)
(setq term-width (1- (window-width)))
(setq term-height (1- (window-height)))
(make-local-variable 'term-terminal-parameter)
(make-local-variable 'term-saved-cursor)
(make-local-variable 'term-last-input-start)
(setq term-last-input-start (make-marker))
(make-local-variable 'term-last-input-end)
(setq term-last-input-end (make-marker))
(make-local-variable 'term-last-input-match)
(setq term-last-input-match "")
(make-local-variable 'term-prompt-regexp) ; Don't set; default
(make-local-variable 'term-input-ring-size) ; ...to global val.
(make-local-variable 'term-input-ring)
(make-local-variable 'term-input-ring-file-name)
(or (and (boundp 'term-input-ring) term-input-ring)
(setq term-input-ring (make-ring term-input-ring-size)))
(make-local-variable 'term-input-ring-index)
(or (and (boundp 'term-input-ring-index) term-input-ring-index)
(setq term-input-ring-index nil))
(make-local-variable 'term-command-hook)
(setq term-command-hook (symbol-function 'term-command-hook))
;;; I'm not sure these saves are necessary but, since I
;;; haven't tested the whole thing on a net connected machine with
;;; a properly configured ange-ftp, I've decided to be conservative
;;; and put them in. -mm
(make-local-variable 'term-ansi-at-host)
(setq term-ansi-at-host (system-name))
(make-local-variable 'term-ansi-at-dir)
(setq term-ansi-at-dir default-directory)
(make-local-variable 'term-ansi-at-message)
(setq term-ansi-at-message nil)
;;; For user tracking purposes -mm
(make-local-variable 'ange-ftp-default-user)
(make-local-variable 'ange-ftp-default-password)
(make-local-variable 'ange-ftp-generate-anonymous-password)
;;; You may want to have different scroll-back sizes -mm
(make-local-variable 'term-buffer-maximum-size)
;;; Of course these have to be buffer-local -mm
(make-local-variable 'term-ansi-current-bold)
(make-local-variable 'term-ansi-current-color)
(make-local-variable 'term-ansi-face-already-done)
(make-local-variable 'term-ansi-current-bg-color)
(make-local-variable 'term-ansi-current-underline)
(make-local-variable 'term-ansi-current-highlight)
(make-local-variable 'term-ansi-current-reverse)
(make-local-variable 'term-ansi-current-invisible)
(make-local-variable 'term-terminal-state)
(make-local-variable 'term-kill-echo-list)
(make-local-variable 'term-start-line-column)
(make-local-variable 'term-current-column)
(make-local-variable 'term-current-row)
(make-local-variable 'term-log-buffer)
(make-local-variable 'term-scroll-start)
(make-local-variable 'term-scroll-end)
(setq term-scroll-end term-height)
(make-local-variable 'term-scroll-with-delete)
(make-local-variable 'term-pager-count)
(make-local-variable 'term-pager-old-local-map)
(make-local-variable 'term-old-mode-map)
(make-local-variable 'term-insert-mode)
(make-local-variable 'term-dynamic-complete-functions)
(make-local-variable 'term-completion-fignore)
(make-local-variable 'term-get-old-input)
(make-local-variable 'term-matching-input-from-input-string)
(make-local-variable 'term-input-autoexpand)
(make-local-variable 'term-input-ignoredups)
(make-local-variable 'term-delimiter-argument-list)
(make-local-variable 'term-input-filter-functions)
(make-local-variable 'term-input-filter)
(make-local-variable 'term-input-sender)
(make-local-variable 'term-eol-on-send)
(make-local-variable 'term-scroll-to-bottom-on-output)
(make-local-variable 'term-scroll-show-maximum-output)
(make-local-variable 'term-ptyp)
(make-local-variable 'term-exec-hook)
(make-local-variable 'term-vertical-motion)
(make-local-variable 'term-pending-delete-marker)
(setq term-pending-delete-marker (make-marker))
(make-local-variable 'term-current-face)
(make-local-variable 'term-pending-frame)
(setq term-pending-frame nil)
(run-hooks 'term-mode-hook)
(term-if-xemacs
(set-buffer-menubar
(append current-menubar (list term-terminal-menu))))
(or term-input-ring
(setq term-input-ring (make-ring term-input-ring-size)))
(term-update-mode-line))
(defun term-reset-size (height width) (defun term-reset-size (height width)
(setq term-height height) (setq term-height height)
(setq term-width width) (setq term-width width)
@ -1227,70 +1190,12 @@ without any interpretation."
(defun term-send-next () (interactive) (term-send-raw-string "\e[6~")) (defun term-send-next () (interactive) (term-send-raw-string "\e[6~"))
(defun term-send-del () (interactive) (term-send-raw-string "\C-?")) (defun term-send-del () (interactive) (term-send-raw-string "\C-?"))
(defun term-send-backspace () (interactive) (term-send-raw-string "\C-H")) (defun term-send-backspace () (interactive) (term-send-raw-string "\C-H"))
(defun term-set-escape-char (c)
"Change term-escape-char and keymaps that depend on it."
(if term-escape-char
(define-key term-raw-map term-escape-char 'term-send-raw))
(setq c (make-string 1 c))
(define-key term-raw-map c term-raw-escape-map)
;; Define standard bindings in term-raw-escape-map
(define-key term-raw-escape-map "\C-x"
(lookup-key (current-global-map) "\C-x"))
(define-key term-raw-escape-map "\C-v"
(lookup-key (current-global-map) "\C-v"))
(define-key term-raw-escape-map "\C-u"
(lookup-key (current-global-map) "\C-u"))
(define-key term-raw-escape-map c 'term-send-raw)
(define-key term-raw-escape-map "\C-q" 'term-pager-toggle)
;; The keybinding for term-char-mode is needed by the menubar code.
(define-key term-raw-escape-map "\C-k" 'term-char-mode)
(define-key term-raw-escape-map "\C-j" 'term-line-mode)
;; It's convenient to have execute-extended-command here.
(define-key term-raw-escape-map [?\M-x] 'execute-extended-command))
(defun term-char-mode () (defun term-char-mode ()
"Switch to char (\"raw\") sub-mode of term mode. "Switch to char (\"raw\") sub-mode of term mode.
Each character you type is sent directly to the inferior without Each character you type is sent directly to the inferior without
intervention from Emacs, except for the escape character (usually C-c)." intervention from Emacs, except for the escape character (usually C-c)."
(interactive) (interactive)
(if (not term-raw-map)
(let* ((map (make-keymap))
(esc-map (make-keymap))
(i 0))
(while (< i 128)
(define-key map (make-string 1 i) 'term-send-raw)
(define-key esc-map (make-string 1 i) 'term-send-raw-meta)
(setq i (1+ i)))
(dolist (elm (generic-character-list))
(define-key map (vector elm) 'term-send-raw))
(define-key map "\e" esc-map)
(setq term-raw-map map)
(setq term-raw-escape-map
(copy-keymap (lookup-key (current-global-map) "\C-x")))
;;; Added nearly all the 'grey keys' -mm
(progn
(term-if-xemacs
(define-key term-raw-map [button2] 'term-mouse-paste))
(term-ifnot-xemacs
(define-key term-raw-map [mouse-2] 'term-mouse-paste)
(define-key term-raw-map [menu-bar terminal] term-terminal-menu)
(define-key term-raw-map [menu-bar signals] term-signals-menu))
(define-key term-raw-map [up] 'term-send-up)
(define-key term-raw-map [down] 'term-send-down)
(define-key term-raw-map [right] 'term-send-right)
(define-key term-raw-map [left] 'term-send-left)
(define-key term-raw-map [delete] 'term-send-del)
(define-key term-raw-map [backspace] 'term-send-backspace)
(define-key term-raw-map [home] 'term-send-home)
(define-key term-raw-map [end] 'term-send-end)
(define-key term-raw-map [prior] 'term-send-prior)
(define-key term-raw-map [next] 'term-send-next))
(term-set-escape-char ?\C-c)))
;; FIXME: Emit message? Cfr ilisp-raw-message ;; FIXME: Emit message? Cfr ilisp-raw-message
(if (term-in-line-mode) (if (term-in-line-mode)
(progn (progn
@ -1353,7 +1258,11 @@ the process. Any more args are arguments to PROGRAM."
;;;###autoload ;;;###autoload
(defun term (program) (defun term (program)
"Start a terminal-emulator in a new buffer." "Start a terminal-emulator in a new buffer.
The buffer is in Term mode; see `term-mode' for the
commands to use in that buffer.
\\<term-raw-map>Type \\[switch-to-buffer] to switch to another buffer."
(interactive (list (read-from-minibuffer "Run program: " (interactive (list (read-from-minibuffer "Run program: "
(or explicit-shell-file-name (or explicit-shell-file-name
(getenv "ESHELL") (getenv "ESHELL")
@ -3046,14 +2955,13 @@ See `term-prompt-regexp'."
;;; 0 (Reset) or unknown (reset anyway) ;;; 0 (Reset) or unknown (reset anyway)
(t (t
(setq term-current-face (setq term-current-face nil)
(list 'term-default-fg 'term-default-bg))
(setq term-ansi-current-underline 0) (setq term-ansi-current-underline 0)
(setq term-ansi-current-bold 0) (setq term-ansi-current-bold 0)
(setq term-ansi-current-reverse 0) (setq term-ansi-current-reverse 0)
(setq term-ansi-current-color 0) (setq term-ansi-current-color 0)
(setq term-ansi-current-invisible 0) (setq term-ansi-current-invisible 0)
(setq term-ansi-face-alredy-done 1) (setq term-ansi-face-already-done 1)
(setq term-ansi-current-bg-color 0))) (setq term-ansi-current-bg-color 0)))
; (message "Debug: U-%d R-%d B-%d I-%d D-%d F-%d B-%d" ; (message "Debug: U-%d R-%d B-%d I-%d D-%d F-%d B-%d"
@ -3061,53 +2969,65 @@ See `term-prompt-regexp'."
; term-ansi-current-reverse ; term-ansi-current-reverse
; term-ansi-current-bold ; term-ansi-current-bold
; term-ansi-current-invisible ; term-ansi-current-invisible
; term-ansi-face-alredy-done ; term-ansi-face-already-done
; term-ansi-current-color ; term-ansi-current-color
; term-ansi-current-bg-color) ; term-ansi-current-bg-color)
(if (= term-ansi-face-alredy-done 0) (if (= term-ansi-face-already-done 0)
(if (= term-ansi-current-reverse 1) (if (= term-ansi-current-reverse 1)
(progn (if (= term-ansi-current-invisible 1)
(if (= term-ansi-current-invisible 1)
(if (= term-ansi-current-color 0)
(setq term-current-face
'(term-default-bg-inv term-default-fg))
(setq term-current-face
(list (elt ansi-term-inv-fg-faces-vector term-ansi-current-color)
(elt ansi-term-inv-bg-faces-vector term-ansi-current-color))))
;; No need to bother with anything else if it's invisible
(progn
(setq term-current-face
(list (elt ansi-term-inv-fg-faces-vector term-ansi-current-color)
(elt ansi-term-inv-bg-faces-vector term-ansi-current-bg-color)))
(if (= term-ansi-current-bold 1)
(setq term-current-face
(append '(term-bold) term-current-face)))
(if (= term-ansi-current-underline 1)
(setq term-current-face
(append '(term-underline) term-current-face))))))
(if (= term-ansi-current-invisible 1)
(if (= term-ansi-current-bg-color 0)
(setq term-current-face
'(term-default-fg-inv term-default-bg))
(setq term-current-face (setq term-current-face
(list (elt ansi-term-fg-faces-vector term-ansi-current-bg-color) (if (= term-ansi-current-color 0)
(elt ansi-term-bg-faces-vector term-ansi-current-bg-color)))) (list :background
;; No need to bother with anything else if it's invisible term-default-fg-color
:foreground
term-default-fg-color)
(list :background
(elt ansi-term-color-vector term-ansi-current-color)
:foreground
(elt ansi-term-color-vector term-ansi-current-color)))
;; No need to bother with anything else if it's invisible
)
(setq term-current-face
(list :background
(elt ansi-term-color-vector term-ansi-current-color)
:foreground
(elt ansi-term-color-vector term-ansi-current-bg-color)))
(if (= term-ansi-current-bold 1)
(setq term-current-face
(append '(:weight bold) term-current-face)))
(if (= term-ansi-current-underline 1)
(setq term-current-face
(append '(:underline t) term-current-face))))
(if (= term-ansi-current-invisible 1)
(setq term-current-face
(if (= term-ansi-current-bg-color 0)
(list :background
term-default-bg-color
:foreground
term-default-bg-color)
(list :foreground
(elt ansi-term-color-vector term-ansi-current-bg-color)
:background
(elt ansi-term-color-vector term-ansi-current-bg-color)))
;; No need to bother with anything else if it's invisible
)
(setq term-current-face (setq term-current-face
(list (elt ansi-term-fg-faces-vector term-ansi-current-color) (list :foreground
(elt ansi-term-bg-faces-vector term-ansi-current-bg-color))) (elt ansi-term-color-vector term-ansi-current-color)
:background
(elt ansi-term-color-vector term-ansi-current-bg-color)))
(if (= term-ansi-current-bold 1) (if (= term-ansi-current-bold 1)
(setq term-current-face (setq term-current-face
(append '(term-bold) term-current-face))) (append '(:weight bold) term-current-face)))
(if (= term-ansi-current-underline 1) (if (= term-ansi-current-underline 1)
(setq term-current-face (setq term-current-face
(append '(term-underline) term-current-face)))))) (append '(:underline t) term-current-face))))))
; (message "Debug %S" term-current-face) ; (message "Debug %S" term-current-face)
(setq term-ansi-face-alredy-done 0)) (setq term-ansi-face-already-done 0))
;;; Handle a character assuming (eq terminal-state 2) - ;;; Handle a character assuming (eq terminal-state 2) -
@ -3246,7 +3166,9 @@ The top-most line is line 0."
;; Default value for the symbol term-command-hook. ;; Default value for the symbol term-command-hook.
(defun term-command-hook (string) (defun term-command-hook (string)
(cond ((= (aref string 0) ?\032) (cond ((equal string "")
t)
((= (aref string 0) ?\032)
;; gdb (when invoked with -fullname) prints: ;; gdb (when invoked with -fullname) prints:
;; \032\032FULLFILENAME:LINENUMBER:CHARPOS:BEG_OR_MIDDLE:PC\n ;; \032\032FULLFILENAME:LINENUMBER:CHARPOS:BEG_OR_MIDDLE:PC\n
(let* ((first-colon (string-match ":" string 1)) (let* ((first-colon (string-match ":" string 1))