Christophe Weblog Wiki Code Publications Music
Derive from special-mode
authorSteve Purcell <steve@sanityinc.com>
Mon, 30 Dec 2013 10:11:06 +0000 (10:11 +0000)
committerSteve Purcell <steve@sanityinc.com>
Mon, 30 Dec 2013 10:11:06 +0000 (10:11 +0000)
- Ensures buffer is read-only, and responds to "q"
- Buffer is made temporarily writable while inserting programme tree

iplayer.el

index 7e1726bf66cc49e828a91c0a4384f0ae9efd58fa..d61b6d1d6168aaf7817f1e904dcaf0dc9aa297b3 100644 (file)
 
 (defun display-iplayer-tree (tree)
   (with-current-buffer (get-buffer-create "*iplayer*")
 
 (defun display-iplayer-tree (tree)
   (with-current-buffer (get-buffer-create "*iplayer*")
-    (delete-region (point-min) (point-max))
+    (let ((buffer-read-only nil))
+      (fundamental-mode)
+      (delete-region (point-min) (point-max))
+      (dolist (entry tree)
+        (let ((program (car entry))
+              (episodes (cdr entry)))
+          (insert (propertize (format "* %s\n" program) 'face 'outline-1))
+          (dolist (episode episodes)
+            (insert (propertize (format "** %s\n" (cdr episode))
+                                'face 'outline-2 'iplayer-id (car episode)))))))
     (iplayer-mode)
     (orgstruct-mode 1)
     (iplayer-mode)
     (orgstruct-mode 1)
-    (dolist (entry tree)
-      (let ((program (car entry))
-            (episodes (cdr entry)))
-        (insert (propertize (format "* %s\n" program) 'face 'outline-1))
-        (dolist (episode episodes)
-          (insert (propertize (format "** %s\n" (cdr episode))
-                              'face 'outline-2 'iplayer-id (car episode))))))
     (org-overview)
     (goto-char (point-min)))
   (switch-to-buffer (get-buffer-create "*iplayer*")))
     (org-overview)
     (goto-char (point-min)))
   (switch-to-buffer (get-buffer-create "*iplayer*")))
@@ -246,12 +248,9 @@ The presets are defined in the variable `iplayer-presets'."
     map
     ))
 
     map
     ))
 
-(defun iplayer-mode ()
+(define-derived-mode iplayer-mode special-mode "iPlayer"
   "A major mode for the BBC's iPlayer.
   "A major mode for the BBC's iPlayer.
-\\{iplayer-mode-map}"
-  (interactive)
-  (use-local-map iplayer-mode-map)
-  (setq major-mode 'iplayer-mode mode-name "iPlayer"))
+\\{iplayer-mode-map}")
 
 (define-iplayer-command iplayer (&optional keys)
   "Start the emacs iPlayer interface."
 
 (define-iplayer-command iplayer (&optional keys)
   "Start the emacs iPlayer interface."