emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/lua-mode 08d83fc 443/468: Merge pull request #180 from nbf


From: Philip Kaludercic
Subject: [nongnu] elpa/lua-mode 08d83fc 443/468: Merge pull request #180 from nbfalcon/bugfix/lua-start-process-hangs
Date: Thu, 5 Aug 2021 04:59:26 -0400 (EDT)

branch: elpa/lua-mode
commit 08d83fcbccf56b00d5262da74012deaaf511804b
Merge: e81d0f2 1135932
Author: immerrr again <immerrr@gmail.com>
Commit: GitHub <noreply@github.com>

    Merge pull request #180 from nbfalcon/bugfix/lua-start-process-hangs
    
    `lua-start-proces': don't hang if already running
---
 lua-mode.el          | 50 +++++++++++++++++++++++++-------------------------
 test/test-process.el | 24 ++++++++++++++++++++++++
 2 files changed, 49 insertions(+), 25 deletions(-)

diff --git a/lua-mode.el b/lua-mode.el
index 0428a315..ccdb1be 100644
--- a/lua-mode.el
+++ b/lua-mode.el
@@ -311,7 +311,7 @@ Should be a list of strings."
   "The active Lua process")
 
 (defvar lua-process-buffer nil
-  "Buffer used for communication with the Lua process")
+  "Buffer used for communication with the Lua process.")
 
 (defun lua--customize-set-prefix-key (prefix-key-sym prefix-key-val)
   (cl-assert (eq prefix-key-sym 'lua-prefix-key))
@@ -1911,32 +1911,33 @@ This function just searches for a `end' at the 
beginning of a line."
 PROGRAM defaults to NAME, which defaults to `lua-default-application'.
 When called interactively, switch to the process buffer."
   (interactive)
-  (or switches
-      (setq switches lua-default-command-switches))
   (setq name (or name (if (consp lua-default-application)
                           (car lua-default-application)
                         lua-default-application)))
   (setq program (or program lua-default-application))
-  (setq lua-process-buffer (apply 'make-comint name program startfile 
switches))
-  (setq lua-process (get-buffer-process lua-process-buffer))
-  (set-process-query-on-exit-flag lua-process nil)
-  (with-current-buffer lua-process-buffer
-    ;; enable error highlighting in stack traces
-    (require 'compile)
-    (setq lua--repl-buffer-p t)
-    (make-local-variable 'compilation-error-regexp-alist)
-    (setq compilation-error-regexp-alist
-          (cons (list lua-traceback-line-re 1 2)
-                compilation-error-regexp-alist))
-    (compilation-shell-minor-mode 1)
-    (setq-local comint-prompt-regexp lua-prompt-regexp)
-
-    ;; Don't send initialization code until seeing the prompt to ensure that
-    ;; the interpreter is ready.
-    (while (not (lua-prompt-line))
-      (accept-process-output (get-buffer-process (current-buffer)))
-      (goto-char (point-max)))
-    (lua-send-string lua-process-init-code))
+  ;; don't re-initialize if there already is a lua process
+  (unless (comint-check-proc (format "*%s*" name))
+    (setq lua-process-buffer (apply #'make-comint name program startfile
+                                    (or switches 
lua-default-command-switches)))
+    (setq lua-process (get-buffer-process lua-process-buffer))
+    (set-process-query-on-exit-flag lua-process nil)
+    (with-current-buffer lua-process-buffer
+      ;; enable error highlighting in stack traces
+      (require 'compile)
+      (setq lua--repl-buffer-p t)
+      (make-local-variable 'compilation-error-regexp-alist)
+      (setq compilation-error-regexp-alist
+            (cons (list lua-traceback-line-re 1 2)
+                  compilation-error-regexp-alist))
+      (compilation-shell-minor-mode 1)
+      (setq-local comint-prompt-regexp lua-prompt-regexp)
+
+      ;; Don't send initialization code until seeing the prompt to ensure that
+      ;; the interpreter is ready.
+      (while (not (lua-prompt-line))
+        (accept-process-output (get-buffer-process (current-buffer)))
+        (goto-char (point-max)))
+      (lua-send-string lua-process-init-code)))
 
   ;; when called interactively, switch to process buffer
   (if (called-interactively-p 'any)
@@ -1944,8 +1945,7 @@ When called interactively, switch to the process buffer."
 
 (defun lua-get-create-process ()
   "Return active Lua process creating one if necessary."
-  (unless (comint-check-proc lua-process-buffer)
-    (lua-start-process))
+  (lua-start-process)
   lua-process)
 
 (defun lua-kill-process ()
diff --git a/test/test-process.el b/test/test-process.el
new file mode 100644
index 0000000..bedb11c
--- /dev/null
+++ b/test/test-process.el
@@ -0,0 +1,24 @@
+;;; test-funcname-at-point.el --- Test the repl functions
+
+;;; Commentary:
+
+;; Test functions to interact with the REPL.
+
+;;; Code:
+
+(describe "`lua-start-process'"
+  (it "doesn't hang for an already-running process"
+    ;; Acquire a *lua* repl buffer
+    (save-current-buffer
+      (funcall-interactively #'lua-start-process)
+      ;; Input some text
+      (with-current-buffer lua-process-buffer
+        (insert "table.insert"))
+      (switch-to-buffer (get-buffer-create "*scratch*"))
+      ;; Try restarting the repl buffer
+      (funcall-interactively #'lua-start-process)
+
+      ;; `lua-start-process' shouldn't hang, and it should have switched back.
+      (expect (current-buffer) :to-be lua-process-buffer))))
+
+;;; test-process.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]