# HG changeset patch # User Luc Teirlinck # Date 1083210108 0 # Node ID 14d50685dce055098c4269d4090f19eefd26fd03 # Parent 968aecf8299b3c555a5b6a51d55da29834075b06 (comint-prompt-read-only): New variable. (comint-output-filter): Implement it. diff -r 968aecf8299b -r 14d50685dce0 lisp/comint.el --- a/lisp/comint.el Wed Apr 28 23:20:59 2004 +0000 +++ b/lisp/comint.el Thu Apr 29 03:41:48 2004 +0000 @@ -171,6 +171,14 @@ This is a good thing to set in mode hooks.") +(defcustom comint-prompt-read-only nil + "If non-nil, the comint prompt is read only. +This does not affect existing prompts. +Certain derived modes may override this option." + :type 'boolean + :group 'comint + :version "21.4") + (defvar comint-delimiter-argument-list () "List of characters to recognise as separate arguments in input. Strings comprising a character in this list will separate the arguments @@ -1687,16 +1695,25 @@ (let ((inhibit-read-only t)) (add-text-properties comint-last-output-start (point) '(rear-nonsticky t - field output - inhibit-line-move-field-capture t)))) + field output + inhibit-line-move-field-capture t)))) ;; Highlight the prompt, where we define `prompt' to mean ;; the most recent output that doesn't end with a newline. - (unless (and (bolp) (null comint-last-prompt-overlay)) - ;; Need to create or move the prompt overlay (in the case - ;; where there is no prompt ((bolp) == t), we still do - ;; this if there's already an existing overlay). - (let ((prompt-start (save-excursion (forward-line 0) (point)))) + (let ((prompt-start (save-excursion (forward-line 0) (point))) + (inhibit-read-only t)) + (when comint-prompt-read-only + (or (= (point-min) prompt-start) + (get-text-property (1- prompt-start) 'read-only) + (put-text-property + (1- prompt-start) prompt-start 'read-only 'fence)) + (add-text-properties + prompt-start (point) + '(read-only t rear-non-sticky t front-sticky (read-only)))) + (unless (and (bolp) (null comint-last-prompt-overlay)) + ;; Need to create or move the prompt overlay (in the case + ;; where there is no prompt ((bolp) == t), we still do + ;; this if there's already an existing overlay). (if comint-last-prompt-overlay ;; Just move an existing overlay (move-overlay comint-last-prompt-overlay