Browse Source

Apropos function now working.

Paul Onions 10 years ago
parent
commit
aec64b04bd
2 changed files with 31 additions and 0 deletions
  1. 7 0
      rpl-base.el
  2. 24 0
      sysrpl-mode.el

+ 7 - 0
rpl-base.el

@@ -68,6 +68,7 @@ string (either relative or absolute)."
     (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-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]
@@ -80,6 +81,12 @@ string (either relative or absolute)."
     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))))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Developer utils
 ;;

+ 24 - 0
sysrpl-mode.el

@@ -125,6 +125,30 @@
 (defun sysrpl-show-stack-effect (name)
   (message (rpl-edb-get-stack-effect sysrpl-selected-calculator name)))
 
+(defun sysrpl-apropos-thing-at-point (name)
+  "Show information about NAME in a popup buffer.
+When called interactively NAME defaults to the word around
+point."
+  (interactive (list (completing-read "Apropos: " (rpl-edb-all-names sysrpl-selected-calculator)
+                                      nil nil (thing-at-point 'word))))
+  (let ((bufname (format "*SysRPL: %s*" name)))
+    (with-current-buffer (get-buffer-create bufname)
+      (setq buffer-read-only nil)
+      (erase-buffer)
+      (insert (rpl-edb-get-stack-effect sysrpl-selected-calculator name))
+      (newline)
+      (insert (rpl-edb-get-description sysrpl-selected-calculator name))
+      (newline)
+      (insert (format "Address: %s" (rpl-edb-get-address sysrpl-selected-calculator name)))
+      (newline)
+      (insert (format "Flags: %s" (rpl-edb-get-flags sysrpl-selected-calculator name)))
+      (newline)
+      (end-of-buffer)
+      (help-mode)
+      (set-buffer-modified-p nil)
+      (setq buffer-read-only t))
+    (fit-window-to-buffer (display-buffer bufname))))
+
 (defvar sysrpl-mode-map
   (let ((map (make-sparse-keymap))
         (menu-map (make-sparse-keymap)))