bongo-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [bongo-devel] Missing x-get-selection, m3u wish


From: Dieter Deyke
Subject: Re: [bongo-devel] Missing x-get-selection, m3u wish
Date: Sun, 04 Feb 2007 09:09:57 -0700
User-agent: Gnus/5.110006 (No Gnus v0.6) Emacs/22.0.93 (windows-nt)

Daniel Brockman <address@hidden> writes:

> Dieter Deyke <address@hidden> writes:
>
>> BTW, it would be nice to be able to insert .m3u files into
>> a playlist buffer.
>
> Please try the following implementation:
>
> diff -rN -u old-bongo/bongo.el new-bongo/bongo.el
> --- old-bongo/bongo.el        2007-02-03 19:01:04.000000000 +0100
> +++ new-bongo/bongo.el        2007-02-03 19:01:04.000000000 +0100
> @@ -6035,9 +6035,10 @@
>          ((consp file-name)
>           (if (null (cdr file-name))
>               (bongo-insert-file (car file-name))
> -           (let ((beginning (point)))
> -             (mapc 'bongo-insert-file file-name)
> -             (bongo-maybe-join-inserted-tracks beginning (point)))))
> +           (with-bongo-buffer
> +             (let ((beginning (point)))
> +               (mapc 'bongo-insert-file file-name)
> +               (bongo-maybe-join-inserted-tracks beginning (point))))))
>          ((file-directory-p file-name)
>           (bongo-insert-directory-tree file-name))
>          (t
> @@ -6215,6 +6216,71 @@
>               (bongo-format-infoset
>                (bongo-infoset-from-file-name uri)))))
>
> +(defun bongo-insert-m3u-playlist-contents (file-name)
> +  "Insert the contents of M3U playlist FILE-NAME."
> +  (interactive "fInsert contents of M3U playlist file: ")
> +  (let ((beginning (with-bongo-buffer (point))))
> +    (with-temp-buffer
> +      (let ((coding-system-for-read
> +             (if (string-equal (file-name-extension file-name) "m3u8")
> +                 'utf-8
> +               coding-system-for-read)))
> +        (let* ((absolute-file-name (car (insert-file-contents file-name)))
> +               (default-directory (file-name-directory absolute-file-name)))
> +          (goto-char (point-min))
> +          (while (not (eobp))
> +            (unless (char-equal ?# (char-after (point)))
> +              (bongo-insert-file
> +               (expand-file-name
> +                (buffer-substring (point) (point-at-eol)))))
> +            (forward-line 1)))))
> +    (with-bongo-buffer
> +      (bongo-maybe-join-inserted-tracks beginning (point)))))
> +
> +(defun bongo-insert-pls-playlist-contents (file-name)
> +  "Insert the contents of PLS playlist FILE-NAME."
> +  (interactive "fInsert contents of PLS playlist file: ")
> +  (let ((beginning (with-bongo-buffer (point))))
> +    (with-temp-buffer
> +      (let* ((absolute-file-name (car (insert-file-contents file-name)))
> +             (default-directory (file-name-directory absolute-file-name)))
> +        (goto-char (point-min))
> +        (when (not (looking-at "^\\[playlist\\]$"))
> +          (error "File does not appear to be a PLS playlist"))
> +        (forward-line 1)
> +        (let ((i 1))
> +          (catch 'bongo-done
> +            (while t
> +              (if (null (re-search-forward
> +                         (format "^file%d=\\(.*\\)$" i) nil t))
> +                  (throw 'bongo-done nil)
> +                (let ((entry-file-name (match-string 1))
> +                      (entry-title
> +                       (and (re-search-forward
> +                             (format "^title%d=\\(.*\\)" i) nil t)
> +                            (not (string-equal "" (match-string 1)))
> +                            (match-string 1))))
> +                  (if (bongo-uri-p entry-file-name)
> +                      (bongo-insert-uri entry-file-name entry-title)
> +                    (bongo-insert-file
> +                     (expand-file-name entry-file-name))))
> +                (setq i (+ i 1))))))))
> +    (with-bongo-buffer
> +      (bongo-maybe-join-inserted-tracks beginning (point)))))
> +
> +(defun bongo-insert-playlist-contents (file-name)
> +  "Insert the contents of playlist FILE-NAME.
> +If the first line in the file is `[playlist]', then it is
> +  assumed to be a PLS playlist.
> +Otherwise, it is assumed to be an M3U playlist."
> +  (interactive "fInsert contents of playlist file: ")
> +  (if (with-temp-buffer
> +        (insert-file-contents file-name nil 0 (length "[playlist]\r\n"))
> +        (goto-char (point-min))
> +        (looking-at "^\\[playlist\\]$"))
> +      (bongo-insert-pls-playlist-contents file-name)
> +    (bongo-insert-m3u-playlist-contents file-name)))
> +
>  (defun bongo-insert-action (action)
>    "Insert a new action track line corresponding to ACTION."
>    (interactive "xInsert action: ")
> @@ -7309,6 +7375,7 @@
>
>  (defun bongo-redefine-keys ()
>    "Define the usual keys in `bongo-mode-map'."
> +  (interactive)
>    (let ((map bongo-mode-map))
>      (define-key map "\C-m" 'bongo-dwim)
>      (define-key map [mouse-2] 'bongo-mouse-dwim)
> @@ -7358,6 +7425,7 @@
>      (define-key map "id" 'bongo-insert-directory)
>      (define-key map "it" 'bongo-insert-directory-tree)
>      (define-key map "iu" 'bongo-insert-uri)
> +    (define-key map "il" 'bongo-insert-playlist-contents)
>      (define-key map "iC" 'bongo-insert-cd)
>      (define-key map "e" 'bongo-append-enqueue)
>      (define-key map "E" 'bongo-insert-enqueue)
>
> --
> Daniel Brockman <address@hidden>

Seems to work perfectly so far.  Thank you!  The menu and the bongo
buffer templates don't mention this new capability yet.

Thanks,
-- 
Dieter Deyke
mailto:address@hidden mailto:address@hidden mailto:address@hidden
Vs lbh pna ernq guvf, lbh unir jnl gbb zhpu gvzr.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]