コマンドラインでファイルを最近使用したとマークできますか?

コマンドラインでファイルを最近使用したとマークできますか?

GTKアプリケーションはファイルをXMLに追加して最近使用されたものとしてマークします~/.local/share/recently-used.xbelが、私はしばしばLatexなどのターミナルベースのアプリケーションのファイルを使用し、これらのファイルはGTKリストには表示されません。インポートできませんでした。

Linuxの使用中にターミナルとGUI側の間の円滑な操作を可能にするために、「最近の」リストにファイルを明示的に追加するために使用できるCLIコマンドはありますか?公式の方法、または迅速かつ簡単なハッキングですが、ファイル作成の副作用がありますrecently-used.xbel

答え1

次のPythonスクリプトはGIOを使用して、最近使用したリストに引数として提供されたすべてのファイルを追加します。

#!/usr/bin/python3

import gi, sys
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gio, GLib

rec_mgr = Gtk.RecentManager.get_default()

for arg in sys.argv[1:]:
    rec_mgr.add_item(Gio.File.new_for_path(arg).get_uri())

GLib.idle_add(Gtk.main_quit)
Gtk.main()

Gtkイベントループを開始するには、最後の2行が必要です。これを行わないと、管理者からの変更シグナルは処理されず、ファイルは最近使用されたリストに追加されません。

答え2

これは、Gtkの代わりにGlibを​​使用する別のバージョンのJavascriptです。に基づいて今回のパッチGNOMEシェルに。

#!/usr/bin/env gjs

imports.gi.versions.GLib = "2.0"
const { GLib } = imports.gi

function add
(uri, mtype) {
  try {
    let xbel, bmf

    xbel = GLib.build_filenamev([ GLib.get_user_data_dir(), 'recently-used.xbel' ])

    bmf = new GLib.BookmarkFile()
    bmf.load_from_file(xbel)

    bmf.add_application(uri, "Bred", 'bred %u')
    bmf.set_mime_type(uri, mtype);

    bmf.to_file(xbel)
  }
  catch (err) {
    console.log(err.message)
  }
}

function usage
() {
  console.error('Usage: add-recent <filename> <mime-type>')
}

if (ARGV.length == 2)
  add(ARGV[0], ARGV[1])
else
  usage()

関連情報