명령줄에서 파일을 최근에 사용한 것으로 표시할 수 있나요?

명령줄에서 파일을 최근에 사용한 것으로 표시할 수 있나요?

GTK 응용 프로그램은 파일을 의 XML에 추가하여 최근에 사용된 것으로 표시 ~/.local/share/recently-used.xbel하지만 저는 종종 Latex와 같은 터미널 기반 응용 프로그램의 파일을 사용하며 이러한 파일은 GTK 목록에 표시되지 않으므로 "에서 GUI 파일 브라우저/선택기 등을 가져올 수 없습니다. 최근' 북마크...

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

이것은 Gtk 대신 Glib를 사용하는 또 다른 버전의 Javascript입니다. 기반으로이번 패치그놈 쉘에.

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

관련 정보