+(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))))
+