-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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