comparison lisp/comint.el @ 57419:658b7dadee60

(comint-mouse-insert-input): Remove. (comint-insert-input): Make it work for mouse bindings. (comint-mode-map): Move defs into the declaration.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Sun, 10 Oct 2004 04:29:21 +0000
parents 7cd2b62c16ce
children bcfb3a26a3bd
comparison
equal deleted inserted replaced
57418:3a8c458de33d 57419:658b7dadee60
1 ;;; comint.el --- general command interpreter in a window stuff 1 ;;; comint.el --- general command interpreter in a window stuff
2 2
3 ;; Copyright (C) 1988,90,92,93,94,95,96,97,98,99,2000,01,02,03,2004 3 ;; Copyright (C) 1988, 1990, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 ;; Free Software Foundation, Inc. 4 ;; 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
5 5
6 ;; Author: Olin Shivers <shivers@cs.cmu.edu> 6 ;; Author: Olin Shivers <shivers@cs.cmu.edu>
7 ;; Simon Marshall <simon@gnu.org> 7 ;; Simon Marshall <simon@gnu.org>
8 ;; Maintainer: FSF 8 ;; Maintainer: FSF
9 ;; Keywords: processes 9 ;; Keywords: processes
183 narrowing in effect. This way you will be certain that none of 183 narrowing in effect. This way you will be certain that none of
184 the remaining prompts will be accidentally messed up. You may 184 the remaining prompts will be accidentally messed up. You may
185 wish to put something like the following in your `.emacs' file: 185 wish to put something like the following in your `.emacs' file:
186 186
187 \(add-hook 'comint-mode-hook 187 \(add-hook 'comint-mode-hook
188 '(lambda () 188 (lambda ()
189 (define-key comint-mode-map \"\C-w\" 'comint-kill-region) 189 (define-key comint-mode-map \"\C-w\" 'comint-kill-region)
190 (define-key comint-mode-map [C-S-backspace] 190 (define-key comint-mode-map [C-S-backspace]
191 'comint-kill-whole-line))) 191 'comint-kill-whole-line)))
192 192
193 If you sometimes use comint-mode on text-only terminals or with `emacs-nw', 193 If you sometimes use comint-mode on text-only terminals or with `emacs-nw',
194 you might wish to use another binding for `comint-kill-whole-line'." 194 you might wish to use another binding for `comint-kill-whole-line'."
195 :type 'boolean 195 :type 'boolean
196 :group 'comint 196 :group 'comint
367 "Predicate for filtering additions to input history. 367 "Predicate for filtering additions to input history.
368 Takes one argument, the input. If non-nil, the input may be saved on the input 368 Takes one argument, the input. If non-nil, the input may be saved on the input
369 history list. Default is to save anything that isn't all whitespace.") 369 history list. Default is to save anything that isn't all whitespace.")
370 370
371 (defvar comint-input-filter-functions '() 371 (defvar comint-input-filter-functions '()
372 "Functions to call before input is sent to the process. 372 "Special hook run before input is sent to the process.
373 These functions get one argument, a string containing the text to send. 373 These functions get one argument, a string containing the text to send.")
374
375 You can use `add-hook' to add functions to this list
376 either globally or locally.")
377 374
378 (defvar comint-output-filter-functions '(comint-postoutput-scroll-to-bottom) 375 (defvar comint-output-filter-functions '(comint-postoutput-scroll-to-bottom)
379 "Functions to call after output is inserted into the buffer. 376 "Functions to call after output is inserted into the buffer.
380 One possible function is `comint-postoutput-scroll-to-bottom'. 377 One possible function is `comint-postoutput-scroll-to-bottom'.
381 These functions get one argument, a string containing the text as originally 378 These functions get one argument, a string containing the text as originally
409 ;; entirely, searching for uses of this variable will help to identify 406 ;; entirely, searching for uses of this variable will help to identify
410 ;; places that need attention. 407 ;; places that need attention.
411 (defcustom comint-use-prompt-regexp-instead-of-fields nil 408 (defcustom comint-use-prompt-regexp-instead-of-fields nil
412 "*If non-nil, use `comint-prompt-regexp' to distinguish prompts from user-input. 409 "*If non-nil, use `comint-prompt-regexp' to distinguish prompts from user-input.
413 If nil, then program output and user-input are given different `field' 410 If nil, then program output and user-input are given different `field'
414 properties, which emacs commands can use to distinguish them (in 411 properties, which Emacs commands can use to distinguish them (in
415 particular, common movement commands such as begining-of-line respect 412 particular, common movement commands such as begining-of-line respect
416 field boundaries in a natural way)." 413 field boundaries in a natural way)."
417 :type 'boolean 414 :type 'boolean
418 :group 'comint) 415 :group 'comint)
419 416
430 `(process-kill-without-query)'). In contrast, the `comint-mode-hook' is only 427 `(process-kill-without-query)'). In contrast, the `comint-mode-hook' is only
431 executed once when the buffer is created." 428 executed once when the buffer is created."
432 :type 'hook 429 :type 'hook
433 :group 'comint) 430 :group 'comint)
434 431
435 (defvar comint-mode-map nil) 432 (defvar comint-mode-map
433 (let ((map (make-sparse-keymap)))
434 ;; Keys:
435 (define-key map "\ep" 'comint-previous-input)
436 (define-key map "\en" 'comint-next-input)
437 (define-key map [C-up] 'comint-previous-input)
438 (define-key map [C-down] 'comint-next-input)
439 (define-key map "\er" 'comint-previous-matching-input)
440 (define-key map "\es" 'comint-next-matching-input)
441 (define-key map [?\C-c ?\M-r] 'comint-previous-matching-input-from-input)
442 (define-key map [?\C-c ?\M-s] 'comint-next-matching-input-from-input)
443 (define-key map "\e\C-l" 'comint-show-output)
444 (define-key map "\C-m" 'comint-send-input)
445 (define-key map "\C-d" 'comint-delchar-or-maybe-eof)
446 (define-key map "\C-c " 'comint-accumulate)
447 (define-key map "\C-c\C-x" 'comint-get-next-from-history)
448 (define-key map "\C-c\C-a" 'comint-bol-or-process-mark)
449 (define-key map "\C-c\C-u" 'comint-kill-input)
450 (define-key map "\C-c\C-w" 'backward-kill-word)
451 (define-key map "\C-c\C-c" 'comint-interrupt-subjob)
452 (define-key map "\C-c\C-z" 'comint-stop-subjob)
453 (define-key map "\C-c\C-\\" 'comint-quit-subjob)
454 (define-key map "\C-c\C-m" 'comint-insert-input)
455 (define-key map "\C-c\C-o" 'comint-delete-output)
456 (define-key map "\C-c\C-r" 'comint-show-output)
457 (define-key map "\C-c\C-e" 'comint-show-maximum-output)
458 (define-key map "\C-c\C-l" 'comint-dynamic-list-input-ring)
459 (define-key map "\C-c\C-n" 'comint-next-prompt)
460 (define-key map "\C-c\C-p" 'comint-previous-prompt)
461 (define-key map "\C-c\C-d" 'comint-send-eof)
462 (define-key map "\C-c\C-s" 'comint-write-output)
463 (define-key map "\C-c." 'comint-insert-previous-argument)
464 ;; Mouse Buttons:
465 (define-key map [mouse-2] 'comint-insert-input)
466 ;; Menu bars:
467 ;; completion:
468 (define-key map [menu-bar completion]
469 (cons "Complete" (make-sparse-keymap "Complete")))
470 (define-key map [menu-bar completion complete-expand]
471 '("Expand File Name" . comint-replace-by-expanded-filename))
472 (define-key map [menu-bar completion complete-listing]
473 '("File Completion Listing" . comint-dynamic-list-filename-completions))
474 (define-key map [menu-bar completion complete-file]
475 '("Complete File Name" . comint-dynamic-complete-filename))
476 (define-key map [menu-bar completion complete]
477 '("Complete Before Point" . comint-dynamic-complete))
478 ;; Input history:
479 (define-key map [menu-bar inout]
480 (cons "In/Out" (make-sparse-keymap "In/Out")))
481 (define-key map [menu-bar inout delete-output]
482 '("Delete Current Output Group" . comint-delete-output))
483 (define-key map [menu-bar inout append-output-to-file]
484 '("Append Current Output Group to File" . comint-append-output-to-file))
485 (define-key map [menu-bar inout write-output]
486 '("Write Current Output Group to File" . comint-write-output))
487 (define-key map [menu-bar inout next-prompt]
488 '("Forward Output Group" . comint-next-prompt))
489 (define-key map [menu-bar inout previous-prompt]
490 '("Backward Output Group" . comint-previous-prompt))
491 (define-key map [menu-bar inout show-maximum-output]
492 '("Show Maximum Output" . comint-show-maximum-output))
493 (define-key map [menu-bar inout show-output]
494 '("Show Current Output Group" . comint-show-output))
495 (define-key map [menu-bar inout kill-input]
496 '("Kill Current Input" . comint-kill-input))
497 (define-key map [menu-bar inout copy-input]
498 '("Copy Old Input" . comint-insert-input))
499 (define-key map [menu-bar inout forward-matching-history]
500 '("Forward Matching Input..." . comint-forward-matching-input))
501 (define-key map [menu-bar inout backward-matching-history]
502 '("Backward Matching Input..." . comint-backward-matching-input))
503 (define-key map [menu-bar inout next-matching-history]
504 '("Next Matching Input..." . comint-next-matching-input))
505 (define-key map [menu-bar inout previous-matching-history]
506 '("Previous Matching Input..." . comint-previous-matching-input))
507 (define-key map [menu-bar inout next-matching-history-from-input]
508 '("Next Matching Current Input" . comint-next-matching-input-from-input))
509 (define-key map [menu-bar inout previous-matching-history-from-input]
510 '("Previous Matching Current Input" . comint-previous-matching-input-from-input))
511 (define-key map [menu-bar inout next-history]
512 '("Next Input" . comint-next-input))
513 (define-key map [menu-bar inout previous-history]
514 '("Previous Input" . comint-previous-input))
515 (define-key map [menu-bar inout list-history]
516 '("List Input History" . comint-dynamic-list-input-ring))
517 (define-key map [menu-bar inout expand-history]
518 '("Expand History Before Point" . comint-replace-by-expanded-history))
519 ;; Signals
520 (let ((signals-map (make-sparse-keymap "Signals")))
521 (define-key map [menu-bar signals] (cons "Signals" signals-map))
522 (define-key signals-map [eof] '("EOF" . comint-send-eof))
523 (define-key signals-map [kill] '("KILL" . comint-kill-subjob))
524 (define-key signals-map [quit] '("QUIT" . comint-quit-subjob))
525 (define-key signals-map [cont] '("CONT" . comint-continue-subjob))
526 (define-key signals-map [stop] '("STOP" . comint-stop-subjob))
527 (define-key signals-map [break] '("BREAK" . comint-interrupt-subjob)))
528 ;; Put them in the menu bar:
529 (setq menu-bar-final-items (append '(completion inout signals)
530 menu-bar-final-items))
531 map))
436 532
437 ;; Fixme: Is this still relevant? 533 ;; Fixme: Is this still relevant?
438 (defvar comint-ptyp t 534 (defvar comint-ptyp t
439 "Non-nil if communications via pty; false if by pipe. Buffer local. 535 "Non-nil if communications via pty; false if by pipe. Buffer local.
440 This is to work around a bug in Emacs process signaling.") 536 This is to work around a bug in Emacs process signaling.")
545 (make-local-variable 'comint-file-name-quote-list) 641 (make-local-variable 'comint-file-name-quote-list)
546 (set (make-local-variable 'comint-accum-marker) (make-marker)) 642 (set (make-local-variable 'comint-accum-marker) (make-marker))
547 (add-hook 'change-major-mode-hook 'font-lock-defontify nil t) 643 (add-hook 'change-major-mode-hook 'font-lock-defontify nil t)
548 ;; This behavior is not useful in comint buffers, and is annoying 644 ;; This behavior is not useful in comint buffers, and is annoying
549 (set (make-local-variable 'next-line-add-newlines) nil)) 645 (set (make-local-variable 'next-line-add-newlines) nil))
550
551 (if comint-mode-map
552 nil
553 ;; Keys:
554 (setq comint-mode-map (make-sparse-keymap))
555 (define-key comint-mode-map "\ep" 'comint-previous-input)
556 (define-key comint-mode-map "\en" 'comint-next-input)
557 (define-key comint-mode-map [C-up] 'comint-previous-input)
558 (define-key comint-mode-map [C-down] 'comint-next-input)
559 (define-key comint-mode-map "\er" 'comint-previous-matching-input)
560 (define-key comint-mode-map "\es" 'comint-next-matching-input)
561 (define-key comint-mode-map [?\C-c ?\M-r] 'comint-previous-matching-input-from-input)
562 (define-key comint-mode-map [?\C-c ?\M-s] 'comint-next-matching-input-from-input)
563 (define-key comint-mode-map "\e\C-l" 'comint-show-output)
564 (define-key comint-mode-map "\C-m" 'comint-send-input)
565 (define-key comint-mode-map "\C-d" 'comint-delchar-or-maybe-eof)
566 (define-key comint-mode-map "\C-c " 'comint-accumulate)
567 (define-key comint-mode-map "\C-c\C-x" 'comint-get-next-from-history)
568 (define-key comint-mode-map "\C-c\C-a" 'comint-bol-or-process-mark)
569 (define-key comint-mode-map "\C-c\C-u" 'comint-kill-input)
570 (define-key comint-mode-map "\C-c\C-w" 'backward-kill-word)
571 (define-key comint-mode-map "\C-c\C-c" 'comint-interrupt-subjob)
572 (define-key comint-mode-map "\C-c\C-z" 'comint-stop-subjob)
573 (define-key comint-mode-map "\C-c\C-\\" 'comint-quit-subjob)
574 (define-key comint-mode-map "\C-c\C-m" 'comint-insert-input)
575 (define-key comint-mode-map "\C-c\C-o" 'comint-delete-output)
576 (define-key comint-mode-map "\C-c\C-r" 'comint-show-output)
577 (define-key comint-mode-map "\C-c\C-e" 'comint-show-maximum-output)
578 (define-key comint-mode-map "\C-c\C-l" 'comint-dynamic-list-input-ring)
579 (define-key comint-mode-map "\C-c\C-n" 'comint-next-prompt)
580 (define-key comint-mode-map "\C-c\C-p" 'comint-previous-prompt)
581 (define-key comint-mode-map "\C-c\C-d" 'comint-send-eof)
582 (define-key comint-mode-map "\C-c\C-s" 'comint-write-output)
583 (define-key comint-mode-map "\C-c." 'comint-insert-previous-argument)
584 ;; Mouse Buttons:
585 (define-key comint-mode-map [mouse-2] 'comint-mouse-insert-input)
586 ;; Menu bars:
587 ;; completion:
588 (define-key comint-mode-map [menu-bar completion]
589 (cons "Complete" (make-sparse-keymap "Complete")))
590 (define-key comint-mode-map [menu-bar completion complete-expand]
591 '("Expand File Name" . comint-replace-by-expanded-filename))
592 (define-key comint-mode-map [menu-bar completion complete-listing]
593 '("File Completion Listing" . comint-dynamic-list-filename-completions))
594 (define-key comint-mode-map [menu-bar completion complete-file]
595 '("Complete File Name" . comint-dynamic-complete-filename))
596 (define-key comint-mode-map [menu-bar completion complete]
597 '("Complete Before Point" . comint-dynamic-complete))
598 ;; Input history:
599 (define-key comint-mode-map [menu-bar inout]
600 (cons "In/Out" (make-sparse-keymap "In/Out")))
601 (define-key comint-mode-map [menu-bar inout delete-output]
602 '("Delete Current Output Group" . comint-delete-output))
603 (define-key comint-mode-map [menu-bar inout append-output-to-file]
604 '("Append Current Output Group to File" . comint-append-output-to-file))
605 (define-key comint-mode-map [menu-bar inout write-output]
606 '("Write Current Output Group to File" . comint-write-output))
607 (define-key comint-mode-map [menu-bar inout next-prompt]
608 '("Forward Output Group" . comint-next-prompt))
609 (define-key comint-mode-map [menu-bar inout previous-prompt]
610 '("Backward Output Group" . comint-previous-prompt))
611 (define-key comint-mode-map [menu-bar inout show-maximum-output]
612 '("Show Maximum Output" . comint-show-maximum-output))
613 (define-key comint-mode-map [menu-bar inout show-output]
614 '("Show Current Output Group" . comint-show-output))
615 (define-key comint-mode-map [menu-bar inout kill-input]
616 '("Kill Current Input" . comint-kill-input))
617 (define-key comint-mode-map [menu-bar inout copy-input]
618 '("Copy Old Input" . comint-insert-input))
619 (define-key comint-mode-map [menu-bar inout forward-matching-history]
620 '("Forward Matching Input..." . comint-forward-matching-input))
621 (define-key comint-mode-map [menu-bar inout backward-matching-history]
622 '("Backward Matching Input..." . comint-backward-matching-input))
623 (define-key comint-mode-map [menu-bar inout next-matching-history]
624 '("Next Matching Input..." . comint-next-matching-input))
625 (define-key comint-mode-map [menu-bar inout previous-matching-history]
626 '("Previous Matching Input..." . comint-previous-matching-input))
627 (define-key comint-mode-map [menu-bar inout next-matching-history-from-input]
628 '("Next Matching Current Input" . comint-next-matching-input-from-input))
629 (define-key comint-mode-map [menu-bar inout previous-matching-history-from-input]
630 '("Previous Matching Current Input" . comint-previous-matching-input-from-input))
631 (define-key comint-mode-map [menu-bar inout next-history]
632 '("Next Input" . comint-next-input))
633 (define-key comint-mode-map [menu-bar inout previous-history]
634 '("Previous Input" . comint-previous-input))
635 (define-key comint-mode-map [menu-bar inout list-history]
636 '("List Input History" . comint-dynamic-list-input-ring))
637 (define-key comint-mode-map [menu-bar inout expand-history]
638 '("Expand History Before Point" . comint-replace-by-expanded-history))
639 ;; Signals
640 (define-key comint-mode-map [menu-bar signals]
641 (cons "Signals" (make-sparse-keymap "Signals")))
642 (define-key comint-mode-map [menu-bar signals eof]
643 '("EOF" . comint-send-eof))
644 (define-key comint-mode-map [menu-bar signals kill]
645 '("KILL" . comint-kill-subjob))
646 (define-key comint-mode-map [menu-bar signals quit]
647 '("QUIT" . comint-quit-subjob))
648 (define-key comint-mode-map [menu-bar signals cont]
649 '("CONT" . comint-continue-subjob))
650 (define-key comint-mode-map [menu-bar signals stop]
651 '("STOP" . comint-stop-subjob))
652 (define-key comint-mode-map [menu-bar signals break]
653 '("BREAK" . comint-interrupt-subjob))
654 ;; Put them in the menu bar:
655 (setq menu-bar-final-items (append '(completion inout signals)
656 menu-bar-final-items))
657 )
658 646
659 (defun comint-check-proc (buffer) 647 (defun comint-check-proc (buffer)
660 "Return t if there is a living process associated w/buffer BUFFER. 648 "Return t if there is a living process associated w/buffer BUFFER.
661 Living means the status is `open', `run', or `stop'. 649 Living means the status is `open', `run', or `stop'.
662 BUFFER can be either a buffer or the name of one." 650 BUFFER can be either a buffer or the name of one."
796 changed t)) 784 changed t))
797 (if changed 785 (if changed
798 (set-process-coding-system proc decoding encoding)) 786 (set-process-coding-system proc decoding encoding))
799 proc)) 787 proc))
800 788
801 (defun comint-insert-input () 789 (defun comint-insert-input (&optional event)
802 "In a Comint buffer, set the current input to the previous input at point." 790 "In a Comint buffer, set the current input to the previous input at point."
803 (interactive) 791 (interactive (list last-input-event))
792 (if event (mouse-set-point event))
804 (let ((pos (point))) 793 (let ((pos (point)))
805 (if (not (eq (get-char-property pos 'field) 'input)) 794 (if (not (eq (get-char-property pos 'field) 'input))
806 ;; No input at POS, fall back to the global definition. 795 ;; No input at POS, fall back to the global definition.
807 (let* ((keys (this-command-keys)) 796 (let* ((keys (this-command-keys))
808 (last-key (and (vectorp keys) (aref keys (1- (length keys))))) 797 (last-key (and (vectorp keys) (aref keys (1- (length keys)))))
816 (process-mark (get-buffer-process (current-buffer)))) 805 (process-mark (get-buffer-process (current-buffer))))
817 (point)) 806 (point))
818 ;; Insert the input at point 807 ;; Insert the input at point
819 (insert (buffer-substring-no-properties 808 (insert (buffer-substring-no-properties
820 (previous-single-char-property-change (1+ pos) 'field) 809 (previous-single-char-property-change (1+ pos) 'field)
821 (next-single-char-property-change pos 'field)))))) 810 (next-single-char-property-change pos 'field))))))
822
823 (defun comint-mouse-insert-input (event)
824 "In a Comint buffer, set the current input to the previous input you click on."
825 (interactive "e")
826 (mouse-set-point event)
827 (comint-insert-input))
828 811
829 812
830 ;; Input history processing in a buffer 813 ;; Input history processing in a buffer
831 ;; =========================================================================== 814 ;; ===========================================================================
832 ;; Useful input history functions, courtesy of the Ergo group. 815 ;; Useful input history functions, courtesy of the Ergo group.
2134 "Stop the current subjob. 2117 "Stop the current subjob.
2135 This command also kills the pending input 2118 This command also kills the pending input
2136 between the process mark and point. 2119 between the process mark and point.
2137 2120
2138 WARNING: if there is no current subjob, you can end up suspending 2121 WARNING: if there is no current subjob, you can end up suspending
2139 the top-level process running in the buffer. If you accidentally do 2122 the top-level process running in the buffer. If you accidentally do
2140 this, use \\[comint-continue-subjob] to resume the process. (This 2123 this, use \\[comint-continue-subjob] to resume the process. (This
2141 is not a problem with most shells, since they ignore this signal.)" 2124 is not a problem with most shells, since they ignore this signal.)"
2142 (interactive) 2125 (interactive)
2143 (comint-skip-input) 2126 (comint-skip-input)
2144 (stop-process nil comint-ptyp)) 2127 (stop-process nil comint-ptyp))
2145 2128
2355 (when (eq (get-text-property (1- pt) 'read-only) 'fence) 2338 (when (eq (get-text-property (1- pt) 'read-only) 'fence)
2356 (remove-list-of-text-properties (1- pt) pt '(read-only))))))) 2339 (remove-list-of-text-properties (1- pt) pt '(read-only)))))))
2357 2340
2358 (defun comint-kill-whole-line (&optional arg) 2341 (defun comint-kill-whole-line (&optional arg)
2359 "Kill current line, ignoring read-only and field properties. 2342 "Kill current line, ignoring read-only and field properties.
2360 With prefix arg, kill that many lines starting from the current line. 2343 With prefix ARG, kill that many lines starting from the current line.
2361 If arg is negative, kill backward. Also kill the preceding newline, 2344 If arg is negative, kill backward. Also kill the preceding newline,
2362 instead of the trailing one. \(This is meant to make C-x z work well 2345 instead of the trailing one. \(This is meant to make \\[repeat] work well
2363 with negative arguments.) 2346 with negative arguments.)
2364 If arg is zero, kill current line but exclude the trailing newline. 2347 If arg is zero, kill current line but exclude the trailing newline.
2365 The read-only status of newlines is updated with `comint-update-fence', 2348 The read-only status of newlines is updated with `comint-update-fence',
2366 if necessary." 2349 if necessary."
2367 (interactive "p") 2350 (interactive "p")
2503 e.g. loading or compiling a file. 2486 e.g. loading or compiling a file.
2504 Provides a default, if there is one, and returns the result filename. 2487 Provides a default, if there is one, and returns the result filename.
2505 2488
2506 See `comint-source-default' for more on determining defaults. 2489 See `comint-source-default' for more on determining defaults.
2507 2490
2508 PROMPT is the prompt string. PREV-DIR/FILE is the (directory . file) pair 2491 PROMPT is the prompt string. PREV-DIR/FILE is the (directory . file) pair
2509 from the last source processing command. SOURCE-MODES is a list of major 2492 from the last source processing command. SOURCE-MODES is a list of major
2510 modes used to determine what file buffers contain source files. (These 2493 modes used to determine what file buffers contain source files. (These
2511 two arguments are used for determining defaults). If MUSTMATCH-P is true, 2494 two arguments are used for determining defaults). If MUSTMATCH-P is true,
2512 then the filename reader will only accept a file that exists. 2495 then the filename reader will only accept a file that exists.
2513 2496
3501 ;; completion job. 3484 ;; completion job.
3502 3485
3503 3486
3504 (provide 'comint) 3487 (provide 'comint)
3505 3488
3506 ;;; arch-tag: 1793314c-09db-40be-9549-9aeae3e75164 3489 ;; arch-tag: 1793314c-09db-40be-9549-9aeae3e75164
3507 ;;; comint.el ends here 3490 ;;; comint.el ends here