しつこいようだけど mpv で次のファイルを再生させるスクリプト。
順番が Nautilus と同じでないのでイマイチ不便だなって。
だったらコレも作ってしまえ!
Gjs なり PyGObject なりでソートさせて出力するコマンドを。
mpv の拡張スクリプトでは無理なのでコマンドを自作する。
それを Lua で呼び出せばなんとかなるはず。
ついでに、いちいち拡張子を指定するのも面倒臭い。
てか Lua がショボいなら自作コマンドのほうで正規表現を使えばいい。
で、GNOME では動画ファイルの ContentType は以下のようになっている。
video/mp4
video/quicktime
video/x-matroska
ContentType なら先頭の video/ だけで動画ファイルを見分けできる。
ということでこんなスクリプトを書いてみた。
#!/usr/bin/gjs
if (ARGV.length == 0) {
print('usage: nautilus_ls {DIRNAME}');
} else {
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const re = /^video\//;
let files = [];
let d = Gio.file_new_for_path(ARGV[0]);
let ls = d.enumerate_children('standard::content-type', 0, null);
for (;;) {
let info = ls.next_file(null);
if (info == null)
break;
let t = info.get_content_type();
if (re.test(t))
files.push(info.get_name());
}
files.sort((s1, s2)=> {
let cmpstr1 = GLib.utf8_collate_key_for_filename(s1, -1);
let cmpstr2 = GLib.utf8_collate_key_for_filename(s2, -1);
if (cmpstr1 < cmpstr2)
return -1;
return 1;
});
print(files.join('\n'));
}
// ex: ft=js
Gjs での例。
nautilus_ls という拡張子無しファイル名でパスの通った場所に保存。
実行パーミッション追加でコマンドの出来上がり。
このコマンドを Lua で呼び出しする。
-- ~/.config/mpv/scripts/next_prev.lua
local utils = require 'mp.utils'
-- Ctrl+DOWN @ Next File Play
function on_nextfile()
local hit = false
local directory, fn = utils.split_path(mp.get_property('path'))
if directory == '.' then
directory = utils.getcwd()
end
local pfile = io.popen('nautilus_ls "'..directory..'"')
for filename in pfile:lines() do
if hit then
mp.commandv('loadfile', utils.join_path(directory, filename))
if mp.get_property_bool('pause') then
mp.set_property_bool('pause', false)
end
break
end
hit = filename == fn
end
pfile:close()
end
mp.add_key_binding('Ctrl+DOWN', 'nextfile_func', on_nextfile)
-- Ctrl+UP Previous File Play
function on_prevfile()
local prevfn = ''
local directory, fn = utils.split_path(mp.get_property('path'))
if directory == '.' then
directory = utils.getcwd()
end
local pfile = io.popen('nautilus_ls "'..directory..'"')
for filename in pfile:lines() do
if filename == fn and prevfn ~= '' then
mp.commandv('loadfile', utils.join_path(directory, prevfn))
if mp.get_property_bool('pause') then
mp.set_property_bool('pause', false)
end
break
end
prevfn = filename
end
pfile:close()
end
mp.add_key_binding('Ctrl+UP', 'prevfile_func', on_prevfile)
イケた!
GNOME 限定です、他の環境の人は参考程度に。