Remove bongo music player
@@ -8,7 +8,7 @@
|
||||
("67e998c3c23fe24ed0fb92b9de75011b92f35d3e89344157ae0d544d50a63a72" default)))
|
||||
'(package-selected-packages
|
||||
(quote
|
||||
(bongo org-ref json-mode cargo racer ess-smart-underscore company-tern auto-complete markdown-mode xref-js2 js2-refactor js2-mode writeroom-mode weechat counsel ivy-bibtex org-bullets paredit zenburn-theme slime rust-mode racket-mode polymode org lua-mode haskell-mode geiser ergoemacs-mode djvu auctex)))
|
||||
(org-ref json-mode cargo racer ess-smart-underscore company-tern auto-complete markdown-mode xref-js2 js2-refactor js2-mode writeroom-mode weechat counsel ivy-bibtex org-bullets paredit zenburn-theme slime rust-mode racket-mode polymode org lua-mode haskell-mode geiser ergoemacs-mode djvu auctex)))
|
||||
'(tramp-syntax (quote default) nil (tramp)))
|
||||
(custom-set-faces
|
||||
;; custom-set-faces was added by Custom.
|
||||
|
||||
@@ -1,83 +0,0 @@
|
||||
;;; bongo-autoloads.el --- automatically extracted autoloads
|
||||
;;
|
||||
;;; Code:
|
||||
|
||||
(add-to-list 'load-path (directory-file-name
|
||||
(or (file-name-directory #$) (car load-path))))
|
||||
|
||||
|
||||
;;;### (autoloads nil "bongo" "bongo.el" (0 0 0 0))
|
||||
;;; Generated autoloads from bongo.el
|
||||
|
||||
(autoload 'bongo-start "bongo" "\
|
||||
Start playing the current track in the nearest playlist buffer.
|
||||
If there is no current track, perform the action appropriate for the current
|
||||
playback mode (for example, for regressive playback, play the last track).
|
||||
However, if something is already playing, do nothing.
|
||||
When called interactively and the current track is a stop action track,
|
||||
continue playback as if the action track had finished playing.
|
||||
CALLED-INTERACTIVELY-P is non-nil when called interactively.
|
||||
|
||||
\(fn &optional CALLED-INTERACTIVELY-P)" t nil)
|
||||
|
||||
(autoload 'bongo-start/stop "bongo" "\
|
||||
Start or stop playback in the nearest Bongo playlist buffer.
|
||||
With prefix ARGUMENT, call `bongo-stop' even if already stopped.
|
||||
CALLED-INTERACTIVELY-P is non-nil when called interactively.
|
||||
|
||||
\(fn &optional ARGUMENT CALLED-INTERACTIVELY-P)" t nil)
|
||||
|
||||
(autoload 'bongo-show "bongo" "\
|
||||
Display what Bongo is playing in the minibuffer.
|
||||
If INSERT-FLAG (prefix argument if interactive) is non-nil,
|
||||
insert the description at point.
|
||||
Return the description string.
|
||||
|
||||
\(fn &optional INSERT-FLAG)" t nil)
|
||||
|
||||
(autoload 'bongo-playlist "bongo" "\
|
||||
Switch to a Bongo playlist buffer.
|
||||
See the function `bongo-playlist-buffer'.
|
||||
|
||||
\(fn)" t nil)
|
||||
|
||||
(autoload 'bongo-library "bongo" "\
|
||||
Switch to a Bongo library buffer.
|
||||
See the function `bongo-library-buffer'.
|
||||
|
||||
\(fn)" t nil)
|
||||
|
||||
(autoload 'bongo-switch-buffers "bongo" "\
|
||||
In Bongo, switch from a playlist to a library, or vice versa.
|
||||
With prefix argument PROMPT, prompt for the buffer to switch to.
|
||||
|
||||
\(fn &optional PROMPT)" t nil)
|
||||
|
||||
(autoload 'bongo "bongo" "\
|
||||
Switch to a Bongo buffer.
|
||||
See the function `bongo-buffer'.
|
||||
|
||||
\(fn)" t nil)
|
||||
|
||||
(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "bongo" '("bongo-" "afplay" "mikmod" "timidity" "speexdec" "ogg123" "vlc" "define-bongo-backend" "with-")))
|
||||
|
||||
;;;***
|
||||
|
||||
;;;### (autoloads nil "lastfm-submit" "lastfm-submit.el" (0 0 0 0))
|
||||
;;; Generated autoloads from lastfm-submit.el
|
||||
|
||||
(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lastfm-submit" '("lastfm")))
|
||||
|
||||
;;;***
|
||||
|
||||
;;;### (autoloads nil nil ("bongo-pkg.el") (0 0 0 0))
|
||||
|
||||
;;;***
|
||||
|
||||
;; Local Variables:
|
||||
;; version-control: never
|
||||
;; no-byte-compile: t
|
||||
;; no-update-autoloads: t
|
||||
;; coding: utf-8
|
||||
;; End:
|
||||
;;; bongo-autoloads.el ends here
|
||||
@@ -1,6 +0,0 @@
|
||||
(define-package "bongo" "20171118.1842" "play music with Emacs"
|
||||
'((cl-lib "0.5")
|
||||
(emacs "24.1")))
|
||||
;; Local Variables:
|
||||
;; no-byte-compile: t
|
||||
;; End:
|
||||
@@ -1,18 +0,0 @@
|
||||
This is the file .../info/dir, which contains the
|
||||
topmost node of the Info hierarchy, called (dir)Top.
|
||||
The first time you invoke Info you start off looking at this node.
|
||||
|
||||
File: dir, Node: Top This is the top of the INFO tree
|
||||
|
||||
This (the Directory node) gives a menu of major topics.
|
||||
Typing "q" exits, "?" lists all Info commands, "d" returns here,
|
||||
"h" gives a primer for first-timers,
|
||||
"mEmacs<Return>" visits the Emacs manual, etc.
|
||||
|
||||
In Emacs, you can click mouse button 2 on a menu item or cross reference
|
||||
to select it.
|
||||
|
||||
* Menu:
|
||||
|
||||
Emacs
|
||||
* Bongo: (bongo). Play music with Emacs.
|
||||
|
Before Width: | Height: | Size: 488 B |
|
Before Width: | Height: | Size: 772 B |
|
Before Width: | Height: | Size: 359 B |
|
Before Width: | Height: | Size: 448 B |
|
Before Width: | Height: | Size: 544 B |
|
Before Width: | Height: | Size: 603 B |
|
Before Width: | Height: | Size: 290 B |
|
Before Width: | Height: | Size: 335 B |
|
Before Width: | Height: | Size: 826 B |
@@ -1,75 +0,0 @@
|
||||
;;; lastfm-submit.el --- submit information to Last.fm
|
||||
;; Copyright (C) 2006 Daniel Brockman <daniel@brockman.se>
|
||||
|
||||
;; This file is free software; you can redistribute it and/or
|
||||
;; modify it under the terms of the GNU General Public License as
|
||||
;; published by the Free Software Foundation; either version 2 of
|
||||
;; the License, or (at your option) any later version.
|
||||
|
||||
;; This file is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
;; of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
;; See the GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public
|
||||
;; License along with GNU Emacs; if not, write to the Free
|
||||
;; Software Foundation, 51 Franklin Street, Fifth Floor,
|
||||
;; Boston, MA 02110-1301, USA.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; This is a thin frontend to the `lastfmsumbit' tool,
|
||||
;; which is included in the `lastfmsubmitd' distribution,
|
||||
;; available at the following URL:
|
||||
|
||||
;; <http://www.red-bean.com/~decklin/software/lastfmsubmitd/>
|
||||
|
||||
;; Please note that you may have to be in the `lastfm' group
|
||||
;; to run the `lastfmsubmit' program, and that you may have
|
||||
;; to relogin for such a group change to take effect.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(defcustom lastfmsubmit-program-name
|
||||
(or (executable-find "lastfmsubmit")
|
||||
;; Debian puts it here.
|
||||
(executable-find "/usr/lib/lastfmsubmitd/lastfmsubmit"))
|
||||
"The name of the `lastfmsubmit' executable.
|
||||
Note that you may have to be in the `lastfm' group to run this program,
|
||||
and that adding yourself to a group normally requires that you re-login."
|
||||
:type 'string
|
||||
:group 'multimedia
|
||||
:group 'external)
|
||||
|
||||
(defun lastfm-submit (artist title length &optional album mbid time)
|
||||
"Submit TITLE by ARTIST to Last.fm using the `lastfmsubmit' tool.
|
||||
ARTIST is the name of the artist and TITLE is the name of the track.
|
||||
LENGTH is the length of the track, either as a number of seconds
|
||||
or formatted as \"HOURS:MINUTES:SECONDS\" (HOURS may be omitted).
|
||||
ALBUM is either nil or the name of the album on which the track appears.
|
||||
MBID is either nil or the MusicBrainz ID of the track.
|
||||
TIME is either nil or the time at which the track was played, formatted
|
||||
in UTC as \"%Y-%m-%d %H:%M:%S\" (see `format-time-string').
|
||||
See also `lastfmsubmit-program-name'."
|
||||
(when (numberp length)
|
||||
(setq length (number-to-string (round length))))
|
||||
(unless (string-match "^\\(\\([0-9]+:\\)?[0-9]+:\\)?[0-9]+$" length)
|
||||
(error "Badly formed track length: %s" length))
|
||||
(with-temp-buffer
|
||||
(let ((status (apply 'call-process lastfmsubmit-program-name nil t nil
|
||||
"--artist" artist "--title" title "--length" length
|
||||
(append (when album (list "--album" album))
|
||||
(when mbid (list "--mbid" mbid))))))
|
||||
(unless (equal status 0)
|
||||
(with-output-to-temp-buffer "*lastfmsumbit*"
|
||||
(princ (buffer-string)))
|
||||
(if (integerp status)
|
||||
(error "lastfmsubmit failed with exit code %s" status)
|
||||
(error "lastfmsubmit failed: %s" status))))))
|
||||
|
||||
;;; Local Variables:
|
||||
;;; coding: utf-8
|
||||
;;; End:
|
||||
|
||||
(provide 'lastfm-submit)
|
||||
;;; lastfm-submit.el ends here.
|
||||
@@ -1,240 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
## tree-from-tags.rb --- create file hierarchies from media tags
|
||||
# Copyright (C) 2006, 2007 Daniel Brockman
|
||||
|
||||
# Author: Daniel Brockman <daniel@brockman.se>
|
||||
# Created: April 24, 2006
|
||||
|
||||
# This file is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License as
|
||||
# published by the Free Software Foundation; either version 2 of
|
||||
# the License, or (at your option) any later version.
|
||||
#
|
||||
# This file is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See the GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public
|
||||
# License along with GNU Emacs; if not, write to the Free
|
||||
# Software Foundation, 51 Franklin Street, Fifth Floor,
|
||||
# Boston, MA 02110-1301, USA.
|
||||
#
|
||||
# To run this program, you need Ruby-taglib, available at
|
||||
# <https://robinst.github.io/taglib-ruby/>.
|
||||
|
||||
require "fileutils"
|
||||
require "find"
|
||||
require "taglib"
|
||||
|
||||
if ARGV.empty? or ["-?", "-h", "-help", "--help"].include? ARGV.first
|
||||
puts "Usage: #$0 [--hardlinks] DIRECTORIES..."
|
||||
puts "
|
||||
This program recursively scans DIRECTORIES for media files in formats
|
||||
that support embedded file tags, such as Ogg and MP3.
|
||||
|
||||
For each file with sufficient embedded information, it creates a symlink
|
||||
in the current directory, or in a subdirectory of the current directory,
|
||||
pointing to the original file.
|
||||
|
||||
If given the `--hardlinks' option, it creates hardlinks instead.
|
||||
|
||||
The symlinks or hardlinks created by this program follow a certain
|
||||
naming scheme that is understood by Bongo, the Emacs media player."
|
||||
exit
|
||||
end
|
||||
|
||||
if ["--hard", "--hardlink", "--hardlinks"].include? ARGV.first
|
||||
ARGV.shift
|
||||
$hardlinks = true
|
||||
else
|
||||
$hardlinks = false
|
||||
end
|
||||
|
||||
class NotEnoughData < RuntimeError ; end
|
||||
|
||||
class String
|
||||
def blank? ; !self[/\S/] end
|
||||
def trim ; sub(/^\s+|\s+$/, "") end
|
||||
end
|
||||
|
||||
def escape_component (component)
|
||||
case component
|
||||
when "." then "Dot"
|
||||
when ".." then "Double Dot"
|
||||
else component.gsub(" - ", " -- ").gsub("/", "\\")
|
||||
end
|
||||
end
|
||||
|
||||
def join_components (*components)
|
||||
components.compact * " - "
|
||||
end
|
||||
|
||||
def parse_data (data)
|
||||
an = data[:artist_name]
|
||||
ay = data[:album_year]
|
||||
at = data[:album_title]
|
||||
ti = data[:track_index]
|
||||
tt = data[:track_title]
|
||||
|
||||
ay = nil if ay == "0"
|
||||
|
||||
case
|
||||
when an && ay && at && ti && tt
|
||||
components = [[an], [ay, at], [ti, tt]]
|
||||
when an && ay && at && tt
|
||||
components = [[an], [ay, at], [tt]]
|
||||
when an && at && ti && tt
|
||||
components = [[an], [at], [ti, tt]]
|
||||
when an && at && tt
|
||||
components = [[an], [at], [tt]]
|
||||
when an && tt
|
||||
components = [[an], [tt]]
|
||||
when tt
|
||||
components = [[tt]]
|
||||
else raise NotEnoughData
|
||||
end
|
||||
|
||||
return components.map { |x| x.map { |x| escape_component(x) } }
|
||||
end
|
||||
|
||||
COLUMNS = ENV["COLUMNS"] || 80
|
||||
|
||||
def singleton (&body)
|
||||
object = Object.new
|
||||
object.extend(Module.new(&body))
|
||||
object.send :initialize
|
||||
return object
|
||||
end
|
||||
|
||||
status_line = singleton do
|
||||
attr_reader :width
|
||||
def initialize
|
||||
@width = 0
|
||||
end
|
||||
|
||||
def remaining_width
|
||||
COLUMNS - @width
|
||||
end
|
||||
|
||||
def clear
|
||||
print "\b" * COLUMNS
|
||||
print " " * COLUMNS
|
||||
print "\b" * COLUMNS
|
||||
@width = 0
|
||||
end
|
||||
|
||||
def update
|
||||
clear ; yield ; flush
|
||||
end
|
||||
|
||||
def flush
|
||||
$stdout.flush
|
||||
end
|
||||
|
||||
def << string
|
||||
count = [remaining_width, string.size].min
|
||||
print string[0 ... count]
|
||||
@width += count
|
||||
end
|
||||
end
|
||||
|
||||
n_total_files = 0
|
||||
print "Counting files..." ; $stdout.flush
|
||||
Find.find(*ARGV) { |x| n_total_files += 1 if FileTest.file? x }
|
||||
puts " #{n_total_files}."
|
||||
|
||||
def warn_skip (file_name, message)
|
||||
puts "Warning: Skipping file `#{file_name}': #{message}"
|
||||
end
|
||||
|
||||
n_completed_files = 0 # This counts all files.
|
||||
n_processed_files = 0 # This only counts recognized files.
|
||||
n_created_links = 0
|
||||
Find.find *ARGV do |file_name|
|
||||
if FileTest.directory? file_name
|
||||
status_line.update do
|
||||
percent_done = n_completed_files * 100.0 / n_total_files
|
||||
status_line << "[%.2f%%] " % percent_done
|
||||
count = status_line.remaining_width - "Processing `'...".size
|
||||
if file_name.size > count
|
||||
file_name_tail = "[...]" + file_name[-count + 5 .. -1]
|
||||
else
|
||||
file_name_tail = file_name
|
||||
end
|
||||
status_line << "Processing `#{file_name_tail}'..."
|
||||
end
|
||||
elsif FileTest.file? file_name
|
||||
next if [".jpg", ".jpeg", ".png", ".gif"].include? \
|
||||
File.extname(file_name).downcase
|
||||
begin
|
||||
|
||||
TagLib::FileRef.open(file_name) do |file|
|
||||
n_processed_files += 1
|
||||
unless file.null?
|
||||
tag = file.tag
|
||||
data = { :artist_name => tag.artist,
|
||||
:album_year => tag.year.to_s,
|
||||
:album_title => tag.album,
|
||||
:track_index => "#{0 if tag.track < 10}#{tag.track}",
|
||||
:track_title => tag.title }
|
||||
|
||||
for key, value in data do
|
||||
if (value.nil? or value.blank?)
|
||||
data.delete key
|
||||
else
|
||||
data[key] = value.trim
|
||||
end
|
||||
end
|
||||
|
||||
components = parse_data(data).map { |x| join_components(*x) }.
|
||||
inject([]) { |a, x| a << join_components(a.last, x) }
|
||||
|
||||
dir_name = components[0...-1] * "/"
|
||||
new_file_name = components * "/" + File.extname(file_name)
|
||||
|
||||
FileUtils.mkdir_p(dir_name) if components.length > 1
|
||||
|
||||
begin
|
||||
if $hardlinks
|
||||
FileUtils.ln(file_name, new_file_name)
|
||||
else
|
||||
FileUtils.ln_s(file_name, new_file_name)
|
||||
end
|
||||
n_created_links += 1
|
||||
rescue Errno::EEXIST
|
||||
if $hardlinks
|
||||
raise unless File.stat(file_name).ino ==
|
||||
File.stat(new_file_name).ino
|
||||
else
|
||||
raise unless FileTest.symlink? new_file_name and
|
||||
File.readlink(new_file_name) == file_name
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
rescue NotEnoughData
|
||||
puts ; warn_skip file_name, "Not enough track data " +
|
||||
"(need at least the track title)."
|
||||
rescue Errno::EEXIST
|
||||
puts ; warn_skip file_name,
|
||||
"Cannot create #{$hardlinks ? "hardlink" : "symbolic link"}: " +
|
||||
"Conflicting file already exists. [original error: #$!]"
|
||||
rescue Interrupt
|
||||
puts ; puts "Interrupted." ; exit(1)
|
||||
rescue Exception
|
||||
puts ; raise
|
||||
end
|
||||
|
||||
n_completed_files += 1
|
||||
end
|
||||
end
|
||||
|
||||
status_line.update do
|
||||
status_line << "[100%] Processing `#{ARGV.last}'..."
|
||||
end
|
||||
|
||||
puts ; puts "Processed #{n_processed_files} media files " +
|
||||
"(created #{n_created_links} " +
|
||||
"#{$hardlinks ? "hardlinks" : "symbolic links"})."
|
||||