From 23f2d048b5df9fe9bfd39e8e1cd606e3bcd42c7c Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 7 Sep 2006 16:18:06 +0000 Subject: [PATCH] (inferior-prolog-flavor): New var left out of previous commit. (inferior-prolog-guess-flavor): New fun left out of previous commit. (prolog-consult-region-and-go): Don't hard code "*prolog*" and don't burp in dedicated windows. (inferior-prolog-self-insert-command): New command. (inferior-prolog-mode-map): Use it. --- lisp/ChangeLog | 10 ++++++++++ lisp/progmodes/prolog.el | 41 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index fde31fe5b21..7e50d886d56 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,13 @@ +2006-09-07 Stefan Monnier + + * progmodes/prolog.el (inferior-prolog-flavor): New var left out of + previous commit. + (inferior-prolog-guess-flavor): New fun left out of previous commit. + (prolog-consult-region-and-go): Don't hard code "*prolog*" and don't + burp in dedicated windows. + (inferior-prolog-self-insert-command): New command. + (inferior-prolog-mode-map): Use it. + 2006-09-07 Reiner Steib * international/latexenc.el (latex-inputenc-coding-alist): Add cp858. diff --git a/lisp/progmodes/prolog.el b/lisp/progmodes/prolog.el index 7bb8c3a3f40..c29a259c3a6 100644 --- a/lisp/progmodes/prolog.el +++ b/lisp/progmodes/prolog.el @@ -233,6 +233,8 @@ rigidly along with this one (not yet)." (let ((map (make-sparse-keymap))) ;; This map will inherit from `comint-mode-map' when entering ;; inferior-prolog-mode. + (define-key map [remap self-insert-command] + 'inferior-prolog-self-insert-command) map)) (defvar inferior-prolog-mode-syntax-table prolog-mode-syntax-table) @@ -300,6 +302,27 @@ Return not at end copies rest of line to end and sends it. ;; Try again. (inferior-prolog-process)))) +(defvar inferior-prolog-flavor 'unknown + "Either a symbol or a buffer position offset by one. +If a buffer position, the flavor has not been determined yet and +it is expected that the process's output has been or will +be inserted at that position plus one.") + +(defun inferior-prolog-guess-flavor (&optional ignored) + (save-excursion + (goto-char (1+ inferior-prolog-flavor)) + (setq inferior-prolog-flavor + (cond + ((looking-at "GNU Prolog") 'gnu) + ((looking-at "Welcome to SWI-Prolog") 'swi) + ((looking-at ".*\n") 'unknown) ;There's at least one line. + (t inferior-prolog-flavor)))) + (when (symbolp inferior-prolog-flavor) + (remove-hook 'comint-output-filter-functions + 'inferior-prolog-guess-flavor t) + (if (eq inferior-prolog-flavor 'gnu) + (set (make-local-variable 'comint-process-echoes) t)))) + ;;;###autoload (defalias 'run-prolog 'switch-to-prolog) ;;;###autoload @@ -318,6 +341,22 @@ With prefix argument \\[universal-prefix], prompt for the program to use." (inferior-prolog-run name)) (pop-to-buffer inferior-prolog-buffer)) +(defun inferior-prolog-self-insert-command () + "Insert the char in the buffer or pass it directly to the process." + (interactive) + (let* ((proc (get-buffer-process (current-buffer))) + (pmark (and proc (marker-position (process-mark proc))))) + (if (and (eq inferior-prolog-flavor 'gnu) + pmark + (null current-prefix-arg) + (eobp) + (eq (point) pmark) + (save-excursion + (goto-char (- pmark 3)) + (looking-at " \\? "))) + (comint-send-string proc (string last-command-char)) + (call-interactively 'self-insert-command)))) + (defun prolog-consult-region (compile beg end) "Send the region to the Prolog process made by \"M-x run-prolog\". If COMPILE (prefix arg) is not nil, use compile mode rather than consult mode." @@ -338,7 +377,7 @@ If COMPILE (prefix arg) is not nil, use compile mode rather than consult mode." If COMPILE (prefix arg) is not nil, use compile mode rather than consult mode." (interactive "P\nr") (prolog-consult-region compile beg end) - (switch-to-buffer "*prolog*")) + (pop-to-buffer inferior-prolog-buffer)) (defun inferior-prolog-load-file () "Pass the current buffer's file to the inferior prolog process." -- 2.39.2