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

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

[nongnu] elpa/kotlin-mode eb7183e47b 101/162: Merge pull request #25 fro


From: ELPA Syncer
Subject: [nongnu] elpa/kotlin-mode eb7183e47b 101/162: Merge pull request #25 from tninja/master
Date: Sat, 29 Jan 2022 08:25:26 -0500 (EST)

branch: elpa/kotlin-mode
commit eb7183e47b67a3f777b078290388ecac3254435a
Merge: 1ed0c5589e b2085f5315
Author: Gregg Hernandez <greggory.hz@gmail.com>
Commit: GitHub <noreply@github.com>

    Merge pull request #25 from tninja/master
    
    Adding REPL support
---
 README.md      | 49 ++++++++++++++++++++++++++++++++++++++++++++
 kotlin-mode.el | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 113 insertions(+)

diff --git a/README.md b/README.md
index 783ec534f3..43a7ffc167 100644
--- a/README.md
+++ b/README.md
@@ -16,3 +16,52 @@ with package management so you can use package management to 
install the mode fr
 
 (*) As at 2016-06-20 this mode is only in MELPA and not in MELPA stable, a 
release will be made when a
 version is ready to be declared.
+
+## Kotlin REPL key binding
+
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" 
frame="hsides">
+
+
+<colgroup>
+<col  class="org-left" />
+
+<col  class="org-left" />
+</colgroup>
+<thead>
+<tr>
+<th scope="col" class="org-left">Key</th>
+<th scope="col" class="org-left">Function</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td class="org-left">C-c C-z</td>
+<td class="org-left">Start REPL</td>
+</tr>
+
+
+<tr>
+<td class="org-left">C-c C-n</td>
+<td class="org-left">Send current line to REPL</td>
+</tr>
+
+
+<tr>
+<td class="org-left">C-c C-r</td>
+<td class="org-left">Send selected region to REPL</td>
+</tr>
+
+
+<tr>
+<td class="org-left">C-c C-c</td>
+<td class="org-left">Send current code block to REPL</td>
+</tr>
+
+
+<tr>
+<td class="org-left">C-c C-b</td>
+<td class="org-left">Send whole buffer to REPL</td>
+</tr>
+</tbody>
+</table>
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]