branch: elpa/lua-mode
commit 3d6f6ed0bf58ac4040085a749d0964491356288d
Author: juergen <juergen>
Commit: juergen <juergen>
enforce interactive mode by default: (defcustom
lua-default-command-switches (list "-i")...
xemacs-compatibility: use make-temp-name if make-temp-file isn't available
xemacs-compatibility: don't use comint-next-prompt because of different
behavior on xemacs (lua-send-region)
---
lua-mode.el | 55 +++++++++++++++++++++++++++++++++++++------------------
1 file changed, 37 insertions(+), 18 deletions(-)
diff --git a/lua-mode.el b/lua-mode.el
index b7f5857..bc12b33 100755
--- a/lua-mode.el
+++ b/lua-mode.el
@@ -94,7 +94,7 @@
:type 'string
:group 'lua)
-(defcustom lua-default-command-switches nil
+(defcustom lua-default-command-switches (list "-i")
"Command switches for `lua-default-application'.
Should be a list of strings."
:type '(repeat string)
@@ -234,6 +234,20 @@ traceback location."
"Character set that constitutes whitespace for indentation in lua.")
;;}}}
+;;{{{ lua-make-temp-file
+
+(eval-and-compile
+ (defalias 'lua-make-temp-file
+ (if (fboundp 'make-temp-file)
+ 'make-temp-file
+ (lambda (prefix &optional dir-flag) ;; Simple implementation
+ (expand-file-name
+ (make-temp-name prefix)
+ (if (fboundp 'temp-directory)
+ (temp-directory)
+ temporary-file-directory))))))
+
+;;}}}
;;{{{ lua-mode
;;;###autoload
@@ -932,10 +946,10 @@ This function just searches for a `end' at the beginning
of a line."
(setq lua-process-buffer (apply 'make-comint name program startfile
switches))
(setq lua-process (get-buffer-process lua-process-buffer))
;; wait for prompt
- (save-excursion
- (set-buffer lua-process-buffer)
+ (with-current-buffer lua-process-buffer
(while (not (lua-prompt-line))
- (accept-process-output (get-buffer-process (current-buffer))))))
+ (accept-process-output (get-buffer-process (current-buffer)))
+ (goto-char (point-max)))))
;;}}}
;;{{{ lua-kill-process
@@ -982,8 +996,9 @@ If `lua-process' is nil or dead, start a new process first."
"Send region to lua subprocess."
(interactive "r")
;; make temporary lua file
- (let ((tempfile (make-temp-file "lua-"))
- (current-prompt nil)
+ (let ((tempfile (lua-make-temp-file "lua-"))
+ (last-prompt nil)
+ (prompt-found nil)
(lua-stdin-line-offset (count-lines (point-min) start))
(lua-stdin-buffer (current-buffer))
current-prompt )
@@ -995,31 +1010,35 @@ If `lua-process' is nil or dead, start a new process
first."
(if (fboundp 'process-kill-without-query)
(process-kill-without-query lua-process))
;; send dofile(tempfile)
- (save-excursion
- (set-buffer lua-process-buffer)
- (setq current-prompt (comint-next-prompt 1))
- (comint-simple-send (get-buffer-process (current-buffer)) (format
"dofile(\"%s\")" tempfile))
- ;; wait for prompt
- (while (or (= (comint-next-prompt 1) current-prompt)
- (not (lua-prompt-line)))
- (accept-process-output (get-buffer-process (current-buffer)))))
+ (with-current-buffer lua-process-buffer
+ (goto-char (point-max))
+ (setq last-prompt (count-lines (point-min) (point-max)))
+ (comint-simple-send (get-buffer-process (current-buffer))
+ (format "dofile(\"%s\")"
+ (replace-regexp-in-string
+ "\\\\" "\\\\\\\\" tempfile)))
+ ;; wait for prompt
+ (while (not prompt-found)
+ (accept-process-output (get-buffer-process (current-buffer)))
+ (goto-char (point-max))
+ (setq prompt-found (and (lua-prompt-line) (not (= (count-lines
(point-min) (point-max)) last-prompt)))))
;; remove temp. lua file
(delete-file tempfile)
- (lua-postprocess-output-buffer lua-process-buffer current-prompt
lua-stdin-line-offset)
+ (lua-postprocess-output-buffer lua-process-buffer last-prompt
lua-stdin-line-offset)
(if lua-always-show
- (display-buffer lua-process-buffer))))
+ (display-buffer lua-process-buffer)))))
;;}}}
;;{{{ lua-postprocess-output-buffer
-(defun lua-postprocess-output-buffer (buf start &optional
lua-stdin-line-offset)
+(defun lua-postprocess-output-buffer (buf start-line &optional
lua-stdin-line-offset)
"Highlight tracebacks found in buf. If an traceback occurred return
t, otherwise return nil. BUF must exist."
(let ((lua-stdin-line-offset (or lua-stdin-line-offset 0))
line file bol err-p)
(save-excursion
(set-buffer buf)
- (goto-char start)
+ (goto-line start-line)
(while (re-search-forward lua-traceback-line-re nil t)
(setq file (match-string 1)
line (string-to-int (match-string 2)))))