Quellcode durchsuchen

Added SysRPL buffer compilation by invoking RPLCOMP program.

Paul Onions vor 10 Jahren
Ursprung
Commit
9477c6c2a0
2 geänderte Dateien mit 38 neuen und 11 gelöschten Zeilen
  1. 13 7
      rpl-base.el
  2. 25 4
      sysrpl-mode.el

+ 13 - 7
rpl-base.el

@@ -58,26 +58,26 @@ string (either relative or absolute)."
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Common keymap (including the ``RPL'' menu)
 ;;
-(defvar rpl-menu-compile-file-enable nil)
+(defvar rpl-menu-compile-buffer-enable nil)
 
-(make-variable-buffer-local 'rpl-menu-compile-file-enable)
+(make-variable-buffer-local 'rpl-menu-compile-buffer-enable)
 
 (defvar rpl-common-keymap
   (let ((map (make-sparse-keymap "RPL"))
         (menu-map (make-sparse-keymap "RPL")))
     (set-keymap-parent map prog-mode-map)
     ;; Key assignments
-    (define-key map (kbd "C-c C-k") 'rpl-compile-file)
+    (define-key map (kbd "C-c C-k") 'rpl-compile-buffer)
     (define-key map (kbd "C-c C-a") 'rpl-apropos-thing-at-point)
     ;; Menu items
     (define-key map [menu-bar rpl-menu] (cons "RPL" menu-map))
-    (define-key menu-map [rpl-menu-compile-file]
-      '(menu-item "Compile File..." rpl-compile-file
-                  :enable rpl-menu-compile-file-enable))
+    (define-key menu-map [rpl-menu-compile-buffer]
+      '(menu-item "Compile Buffer" rpl-compile-buffer
+                  :enable rpl-menu-compile-buffer-enable))
     (define-key menu-map [rpl-menu-separator-1]
       '(menu-item "--"))
     (define-key menu-map [rpl-menu-apropos]
-      '(menu-item "Apropos (at point)..." rpl-apropos-thing-at-point))
+      '(menu-item "Apropos..." rpl-apropos-thing-at-point))
     map)
   "The RPL tools common keymap.")
 
@@ -87,6 +87,12 @@ string (either relative or absolute)."
   (cond ((eql major-mode 'sysrpl-mode)
          (call-interactively 'sysrpl-apropos-thing-at-point))))
 
+(defun rpl-compile-buffer ()
+  "Call the appropriate compile-buffer command, depending on major mode."
+  (interactive)
+  (cond ((eql major-mode 'sysrpl-mode)
+         (call-interactively 'sysrpl-compile-buffer))))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Developer utils
 ;;

+ 25 - 4
sysrpl-mode.el

@@ -23,11 +23,21 @@
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Customizations
 ;;
-(defcustom rpl-sysrpl-default-calculator :HP50G
+(defcustom sysrpl-default-calculator :HP50G
   "Default calculator type for SysRPL mode."
   :type '(radio :HP38G :HP39G :HP48G :HP49G :HP50G)
   :group 'rpl)
 
+(defcustom sysrpl-compiler-program "rplcomp"
+  "External SysRPL compiler program name."
+  :type 'string
+  :group 'rpl)
+
+(defcustom sysrpl-compiler-output-bufname "*rplcomp*"
+  "Buffer name in which to capture SysRPL compiler output."
+  :type 'string
+  :group 'rpl)
+
 (defface sysrpl-name '((t :foreground "darkblue"))
   "Face used for displaying SysRPL names (e.g DROP)."
   :group 'rpl)
@@ -97,9 +107,9 @@
                   names)))
 
 (defvar sysrpl-font-lock-keywords
-  (sysrpl-font-lock-compile-keywords (rpl-edb-all-names (sysrpl-edb-calculator rpl-sysrpl-default-calculator))))
+  (sysrpl-font-lock-compile-keywords (rpl-edb-all-names (sysrpl-edb-calculator sysrpl-default-calculator))))
 
-(defvar sysrpl-selected-calculator rpl-sysrpl-default-calculator
+(defvar sysrpl-selected-calculator sysrpl-default-calculator
   "Currently selected calculator model.")
 
 (defun sysrpl-select-hp38g ()
@@ -171,6 +181,17 @@ point."
       (setq buffer-read-only t))
     (fit-window-to-buffer (display-buffer bufname))))
 
+(defun sysrpl-compile-buffer ()
+  "Compile the current buffer."
+  (interactive)
+  (let ((tmp-filename (make-temp-file "sysrpl" nil ".s")))
+    (write-region (point-min) (point-max) tmp-filename)
+    (with-current-buffer (get-buffer-create sysrpl-compiler-output-bufname)
+      (setq buffer-read-only nil)
+      (erase-buffer)
+      (call-process sysrpl-compiler-program tmp-filename t nil "-" "-"))
+    (display-buffer sysrpl-compiler-output-bufname)))
+
 (defvar sysrpl-mode-map
   (let ((map (make-sparse-keymap))
         (menu-map (make-sparse-keymap)))
@@ -206,7 +227,7 @@ point."
   (make-local-variable 'eldoc-documentation-function)
   (setq eldoc-documentation-function 'sysrpl-get-eldoc-message)
   (setq font-lock-defaults (list 'sysrpl-font-lock-keywords))
-  (setq rpl-menu-compile-file-enable nil))
+  (setq rpl-menu-compile-buffer-enable t))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; End of file