From 119951651fe9200fbe0319a7cb7a274753838d33 Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Tue, 5 Jun 2012 14:54:18 +0200 Subject: [PATCH] Add ein:notebooklist-open-notebook-global --- ein-notebooklist.el | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/ein-notebooklist.el b/ein-notebooklist.el index 220733e..1f34591 100644 --- a/ein-notebooklist.el +++ b/ein-notebooklist.el @@ -48,6 +48,9 @@ (defvar ein:notebooklist-buffer-name-template "*ein:notebooklist %s*") +(defvar ein:notebooklist-list nil + "A list of opened `ein:$notebooklist'.") + (defun ein:notebooklist-url (url-or-port) (ein:url url-or-port "notebooks")) @@ -97,6 +100,7 @@ (setq ein:notebooklist (make-ein:$notebooklist :url-or-port url-or-port :data data)) + (add-to-list 'ein:notebooklist-list ein:notebooklist) (ein:notebooklist-render) (goto-char (point-min)) (current-buffer))) @@ -212,6 +216,35 @@ Notebook list data is passed via the buffer local variable (ein:notebooklist-mode) (widget-setup)) +(defun ein:notebooklist-open-notebook-global (nbpath) + "Choose notebook from all opened notebook list and open it." + (interactive + (list (completing-read + "Open notebook [URL-OR-PORT/NAME]: " + (apply #'append + (loop for nblist in ein:notebooklist-list + for url-or-port = (ein:$notebooklist-url-or-port nblist) + collect + (loop for note in (ein:$notebooklist-data nblist) + collect (format "%s/%s" + url-or-port + (plist-get note :name)))))))) + (let* ((path (split-string nbpath "/")) + (url-or-port (car path)) + (name (cadr path))) + (when (and (stringp url-or-port) + (string-match "^[0-9]+$" url-or-port)) + (setq url-or-port (string-to-number url-or-port))) + (let ((notebook-id + (loop for nblist in ein:notebooklist-list + if (loop for note in (ein:$notebooklist-data nblist) + when (equal (plist-get note :name) name) + return (plist-get note :notebook_id)) + return it))) + (if notebook-id + (ein:notebook-open url-or-port notebook-id) + (message "Notebook '%s' not found" nbpath))))) + ;;; Notebook list mode