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

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

[nongnu] elpa/kotlin-mode b91bab57b6 099/162: Adding REPL support, credi


From: ELPA Syncer
Subject: [nongnu] elpa/kotlin-mode b91bab57b6 099/162: Adding REPL support, credit to https://github.com/sarvex/kotlin-mode
Date: Sat, 29 Jan 2022 08:25:26 -0500 (EST)

branch: elpa/kotlin-mode
commit b91bab57b689d5eabcbf139962d3359c27f2c4e2
Author: Kang Tu <tninja@Pengs-MacBook-Pro.local>
Commit: Kang Tu <tninja@Pengs-MacBook-Pro.local>

    Adding REPL support, credit to https://github.com/sarvex/kotlin-mode
---
 kotlin-mode.el | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 64 insertions(+)

diff --git a/kotlin-mode.el b/kotlin-mode.el
index 90be5ed6b4..17300e9ddd 100644
--- a/kotlin-mode.el
+++ b/kotlin-mode.el
@@ -25,6 +25,7 @@
 
 ;;; Code:
 
+(require 'comint)
 (require 'rx)
 (require 'cc-cmds)
 
@@ -38,8 +39,71 @@
   :group 'kotlin-mode
   :safe 'integerp)
 
+(defcustom kotlin-command "kotlinc"
+  "The Kotlin command used for evaluating code."
+  :type 'string
+  :group 'kotlin)
+
+(defcustom kotlin-args-repl '()
+  "The arguments to pass to `kotlin-command' to start a REPL."
+  :type 'list
+  :group 'kotlin)
+
+(defcustom kotlin-repl-buffer "*KotlinREPL*"
+  "The name of the KotlinREPL buffer."
+  :type 'string
+  :group 'kotlin)
+
+(defun kotlin-send-region (start end)
+  "Send current region to Kotlin interpreter."
+  (interactive "r")
+  (comint-send-region kotlin-repl-buffer start end)
+  (comint-send-string kotlin-repl-buffer "\n"))
+
+(defun kotlin-send-buffer ()
+  "Send whole buffer to Kotlin interpreter."
+  (interactive)
+  (kotlin-send-region (point-min) (point-max)))
+
+(defun kotlin-send-block ()
+  (interactive)
+  (let* ((p (point)))
+    (mark-paragraph)
+    (kotlin-send-region (region-beginning) (region-end))
+    (goto-char p)))
+
+(defun kotlin-send-line ()
+  (interactive)
+  (kotlin-send-region
+   (line-beginning-position)
+   (line-end-position)))
+
+(defun kotlin-repl ()
+  "Launch a Kotlin REPL using `kotlin-command' as an inferior mode."
+  (interactive)
+
+  (unless (comint-check-proc kotlin-repl-buffer)
+    (set-buffer
+     (apply 'make-comint "KotlinREPL"
+            "env"
+            nil
+            "NODE_NO_READLINE=1"
+            kotlin-command
+            kotlin-args-repl))
+
+    (set (make-local-variable 'comint-preoutput-filter-functions)
+         (cons (lambda (string)
+                 (replace-regexp-in-string "\x1b\\[.[GJK]" "" string)) nil)))
+
+  (pop-to-buffer kotlin-repl-buffer))
+
 (defvar kotlin-mode-map
   (let ((map (make-keymap)))
+    (define-key map (kbd "C-c C-z") 'kotlin-repl)
+    (define-key map (kbd "C-c C-n") 'kotlin-send-line)
+    (define-key map (kbd "C-c C-r") 'kotlin-send-region)
+    (define-key map (kbd "C-c C-c") 'kotlin-send-block)
+    (define-key map (kbd "C-c C-b") 'kotlin-send-buffer)
     (define-key map (kbd "<tab>") 'c-indent-line-or-region)
     map)
   "Keymap for kotlin-mode")



reply via email to

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