| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 | ;;; -*- mode: emacs-lisp; lexical-binding: t -*-;;; rpl-base.el -- basic setup for the RPL tools;; Copyright (C) 2014 Paul Onions;; Author: Paul Onions <paul.onions@acm.org>;; Keywords: RPL, SysRPL, HP48, HP49, HP50;; This file is free software, see the LICENCE file in this directory;; for copying terms.;;; Commentary:;; Basic setup for the RPL tools.;;; Code:(require 'cl-lib);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Customizations;;(defgroup rpl nil  "Tools for working with the RPL calculator programming language.");;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Utility functions for generating/loading pre-computed data;;(defvar rpl-tools-data-dir  (and load-file-name (concat (file-name-directory load-file-name) "data/"))  "RPL tools data directory.")(defun rpl-write-data-file (obj filename)  "Write OBJ to FILENAME using function `print'.The directory in which to write the file defaults to the value ofthe variable `rpl-tools-data-dir'. This can be overridden byspecifying a different path in the FILENAME string (eitherrelative or absolute)."  (let ((default-directory rpl-tools-data-dir))    (with-temp-buffer      (print obj (current-buffer))      (write-region (point-min) (point-max) filename))))(defun rpl-read-data-file (filename)  "Read a Lisp object from FILENAME using function `read'.The directory in which FILENAME resides is assumed to be thevalue of the variable `rpl-tools-data-dir'. This can beoverridden by specifying a different path in the FILENAMEstring (either relative or absolute)."  (let ((default-directory rpl-tools-data-dir))    (with-temp-buffer      (insert-file-contents filename)      (goto-char (point-min))      (read (current-buffer)))));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Common keymap (including the ``RPL'' menu);;(defvar rpl-menu-compile-buffer-enable nil)(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-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-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..." rpl-apropos-thing-at-point))    map)  "The RPL tools common keymap.")(defun rpl-apropos-thing-at-point ()  "Call the appropriate apropos command, depending on major mode."  (interactive)  (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))        ((eql major-mode 'sasm-mode)         (call-interactively 'sasm-compile-buffer))));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Developer utils;;(defvar rpl-debug nil)(defmacro rpl-debug-message (msg)  (if rpl-debug      `(message ,msg)    nil))(defun rpl-force-reload ()  (interactive)  (load "rpl-base")  (load "sysrpl-mode"));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; End of file;;(provide 'rpl-base)
 |