Skip to content

Commit

Permalink
don't startup by default in "show all" mode
Browse files Browse the repository at this point in the history
my emacs takes a good couple of seconds merely to execute navigation
commands through the buffer with all the content, and isearch chews up
a *lot* of CPU.  It'd be nice to find out why and fix it, but in the
meantime start up in "BBC One" mode (by default; there's a customize
variable).

Also include emacs-style next/previous and refresh key bindings.
  • Loading branch information
csrhodes committed Mar 17, 2014
1 parent 06c0572 commit e233c80
Showing 1 changed file with 36 additions and 8 deletions.
44 changes: 36 additions & 8 deletions iplayer.el
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,10 @@
(iplayer-mode)
(orgstruct-mode 1)
(org-overview)
(goto-char (point-min)))
(goto-char (point-min))
(if iplayer-current-channel
(setq mode-line-process (format "[%s]" iplayer-current-channel))
(setq mode-line-process nil)))
(switch-to-buffer (get-buffer-create "*iplayer*")))

(defvar iplayer-presets
Expand All @@ -176,12 +179,21 @@
Used in the `iplayer-preset' command.")

(defcustom iplayer-startup-channel "BBC One"
"The channel to display at startup"
:type `(choice
,@(mapcar (lambda (x) `(const ,(cdr x))) iplayer-presets)
(const :tag "Show all content" nil))
:group 'iplayer)

(defun iplayer-frob-presets (presets)
(cond
((version< emacs-version "24")
(mapcar (lambda (x) (cons (read-kbd-macro (car x)) (cdr x))) presets))
(t presets)))

(defvar iplayer-current-channel nil)

(define-iplayer-command iplayer-preset (&optional keys)
"Switch display to a preset channel.
Expand All @@ -193,13 +205,19 @@ The presets are defined in the variable `iplayer-presets'."
((= (length keys) 1)
(let ((channel (cdr (assoc keys presets))))
(if channel
(progn
(setq mode-line-process (format "[%s]" channel))
(iplayer-channel (format "^%s$" channel)))
(iplayer-channel channel)
(error "no preset for key %s" keys)))))))

(defun iplayer-channel (channel)
(display-iplayer-tree (get-iplayer-tree "--channel" channel)))
(setq iplayer-current-channel channel)
(display-iplayer-tree (get-iplayer-tree "--channel" (format "^%s$" channel))))

(define-iplayer-command iplayer-refresh (&optional keys)
"Refresh the current iPlayer channel display."
(interactive)
(if iplayer-current-channel
(iplayer-channel iplayer-current-channel)
(iplayer-show-all)))

(defun iplayer-download ()
(interactive)
Expand Down Expand Up @@ -237,26 +255,36 @@ The presets are defined in the variable `iplayer-presets'."

(defconst iplayer-mode-map
(let ((map (make-sparse-keymap)))
(define-key map (kbd "0") 'iplayer)
(define-key map (kbd "0") 'iplayer-show-all)
(let ((presets "123456789!\"£$%^&*()"))
(dotimes (i (length presets))
(define-key map (read-kbd-macro (substring presets i (1+ i)))
'iplayer-preset)))
(define-key map (kbd "RET") 'iplayer-download)
(define-key map (kbd "g") 'iplayer-refresh)
(define-key map (kbd "j") 'iplayer-next)
(define-key map (kbd "k") 'iplayer-previous)
(define-key map (kbd "n") 'iplayer-next)
(define-key map (kbd "p") 'iplayer-previous)
map
))

(define-derived-mode iplayer-mode special-mode "iPlayer"
"A major mode for the BBC's iPlayer.
\\{iplayer-mode-map}")

(define-iplayer-command iplayer-show-all (&optional keys)
"Show all iPlayer entries."
(interactive)
(setq iplayer-current-channel nil)
(display-iplayer-tree (get-iplayer-tree)))

(define-iplayer-command iplayer (&optional keys)
"Start the emacs iPlayer interface."
(interactive)
(setq mode-line-process nil)
(display-iplayer-tree (get-iplayer-tree)))
(if iplayer-startup-channel
(iplayer-channel iplayer-startup-channel)
(iplayer-show-all)))

;;;###autoload
(autoload 'iplayer "iplayer" "Start the emacs iPlayer interface." t)
Expand Down

0 comments on commit e233c80

Please sign in to comment.