しつこいようだけど 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 限定です、他の環境の人は参考程度に。