changeset 55223:14d50685dce0

(comint-prompt-read-only): New variable. (comint-output-filter): Implement it.
author Luc Teirlinck <teirllm@auburn.edu>
date Thu, 29 Apr 2004 03:41:48 +0000
parents 968aecf8299b
children 649d109f3222
files lisp/comint.el
diffstat 1 files changed, 24 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- 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