我可以从命令行将文件标记为最近使用过吗?

我可以从命令行将文件标记为最近使用过吗?

GTK 应用程序通过将文件添加到 中的 XML 来将文件标记为最近使用过的~/.local/share/recently-used.xbel文件,但我经常使用来自终端驱动应用程序(如 Latex)的文件,并且这些文件未在 GTK 列表中标记,因此无法从 中的“最近”书签中获取GUI 文件浏览器/选择器等..

是否有一个 CLI 命令可以用来显式地将文件添加到“最近”列表中,以便在 Linux 使用过程中的终端和 GUI 端之间实现平滑操作?要么是官方方式,要么是快速简单的破解,但具有写入文件的副作用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

这是 Javascript 的另一个版本,它使用 Glib 而不是 Gtk。基于这个补丁到 gnome-shell。

#!/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()

相关内容