Skip to content

Instantly share code, notes, and snippets.

@rhsev

rhsev/bookmarker Secret

Last active February 23, 2025 13:26
Show Gist options
  • Save rhsev/76fa11773c9079663e863d4e362faec0 to your computer and use it in GitHub Desktop.
Save rhsev/76fa11773c9079663e863d4e362faec0 to your computer and use it in GitHub Desktop.
This script acts as a wrapper for Brett Terpstra's [bookmark-cli](https://github.com/ttscoff/bookmark-cli). It shortens long bookmark IDs to 9-digit numbers and stores the mappings in a JSON file. The short ID is also added to the file’s Spotlight metadata. This ensures manageable IDs while preserving bookmark-cli’s robust file tracking.
#!/usr/bin/env ruby
require 'json'
require 'securerandom'
BOOKMARK_FILE = File.expand_path("~/bookmarks.json")
# JSON-Datei laden oder neue Struktur erstellen
def load_bookmarks
File.exist?(BOOKMARK_FILE) ? JSON.parse(File.read(BOOKMARK_FILE)) : {}
rescue JSON::ParserError
{}
end
# JSON-Datei speichern
def save_bookmarks(bookmarks)
File.write(BOOKMARK_FILE, JSON.pretty_generate(bookmarks))
end
# Erzeugt eine 9-stellige, zufällige ID
def generate_id
rand(100_000_000..999_999_999).to_s
end
# Finder-Metadaten setzen (für Spotlight-Suche)
def set_spotlight_metadata(path, id)
system("xattr -w com.apple.metadata:kMDItemDescription \"#{id}\" \"#{path}\"")
end
# Bookmark speichern mit `bookmark save`
def add_bookmark(path)
bookmarks = load_bookmarks
id = generate_id
while bookmarks.key?(id) # Sicherstellen, dass ID eindeutig ist
id = generate_id
end
# `bookmark save` aufrufen
bookmark_id = `bookmark save "#{path}"`.strip
if bookmark_id.empty?
puts "Fehler beim Speichern des Bookmarks."
exit(1)
end
# Finder-Metadaten setzen
set_spotlight_metadata(path, id)
bookmarks[id] = bookmark_id
save_bookmarks(bookmarks)
puts "Bookmark gespeichert mit ID: #{id}"
end
# Bookmark abrufen mit `bookmark find`
def get_bookmark(id)
bookmarks = load_bookmarks
if bookmarks.key?(id)
bookmark_id = bookmarks[id]
path = `bookmark find #{bookmark_id}`.strip
if path.empty?
puts "Kein gültiger Pfad gefunden."
else
puts "Gespeicherter Pfad für ID #{id}: #{path}"
end
else
puts "Kein Bookmark mit dieser ID gefunden."
end
end
# Bookmark löschen
def delete_bookmark(id)
bookmarks = load_bookmarks
if bookmarks.key?(id)
path = `bookmark find #{bookmarks[id]}`.strip
if !path.empty?
system("xattr -d com.apple.metadata:kMDItemDescription \"#{path}\"") # Metadaten löschen
end
bookmarks.delete(id)
save_bookmarks(bookmarks)
puts "Bookmark mit ID #{id} gelöscht."
else
puts "Kein Bookmark mit dieser ID gefunden."
end
end
# Alle Bookmarks anzeigen
def list_bookmarks
bookmarks = load_bookmarks
if bookmarks.empty?
puts "Keine gespeicherten Bookmarks."
else
puts "Gespeicherte Bookmarks:"
bookmarks.each { |id, bookmark_id| puts "#{id} → #{bookmark_id}" }
end
end
# CLI-Steuerung
command = ARGV[0]
argument = ARGV[1]
case command
when "add"
if argument
add_bookmark(argument)
else
puts "Pfad angeben: `bookmark_manager.rb add /path/to/file`"
end
when "get"
if argument
get_bookmark(argument)
else
puts "ID angeben: `bookmark_manager.rb get 123456789`"
end
when "delete"
if argument
delete_bookmark(argument)
else
puts "ID angeben: `bookmark_manager.rb delete 123456789`"
end
when "list"
list_bookmarks
else
puts "Nutzung:"
puts " bookmark_manager.rb add /path/to/file → Bookmark speichern"
puts " bookmark_manager.rb get 123456789 → Bookmark abrufen"
puts " bookmark_manager.rb delete 123456789 → Bookmark löschen"
puts " bookmark_manager.rb list → Alle Bookmarks anzeigen"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment