;; -*- lexical-binding: t; -*- (defvar servall-results-mode-map (let ((map (make-sparse-keymap))) (setq map (copy-keymap special-mode-map)) (define-key map "n" 'org-next-visible-heading) (define-key map "g" 'servall-results-update) (define-key map "\r" 'servall-results-open) (define-key map "p" 'org-previous-visible-heading) (define-key map "s" 'servall-results-re-search) map)) (defvar servall-results-buffer "*servall-results*") (define-derived-mode servall-results-mode org-mode "servall-results" "Mode for showing and selecting results" (setq-local buffer-read-only t servall-results-update-function nil servall-results-re-search-function nil servall-results-open-function nil)) (defun servall-results-update (&optional cb) (interactive) ;; assuming the update function takes a cb iff cb is nonnil. (if cb (funcall servall-results-update-function cb) (funcall servall-results-update-function))) (defun servall-results-re-search () (interactive) (call-interactively servall-results-re-search-function)) (defun servall-results-open () (interactive) (call-interactively servall-results-open-function)) (provide 'servall-results)