Schlagen Sie ein Wort in Dictionary.app im Terminal nach


19

Gibt es eine Bash oder ein Applescript, um ein Wort in /Applications/Dictionary.appeinem Terminalfenster nachzuschlagen ?

open -a /Applications/Dictionary.app/ --args word

ignoriert --args und sagt "tippe ein Wort, um nachzuschlagen"

Verbesserungen im Mac-Wörterbuch⌃ Control ⌘ Command D legen jedoch nahe, dass ich die vollständige App starten möchte, nicht nur das kleine Popover.


Anstelle der Schaltfläche "Mehr" klicken Sie einfach im Popup auf den Namen des Wörterbuchs, um die Suche in der Wörterbuchanwendung zu öffnen.
Gentmatt

Antworten:


20

Sie können ...

open dict://my_word

... das die Dictionary-Anwendung öffnet und die Zeichenfolge nachschlägt my_word. Wenn Sie mehrere Wörter verwenden möchten, verwenden Sie etwas wie open dict://"Big Bang Theory".

Es gibt jedoch keine Ausgabe im Terminal.


Vielen Dank. Gibt es eine Liste von offenen Magicprefix: ... irgendwo?
Denis

@Denis Ich kenne keine Quelle, die speziell undokumentierte Befehlsoptionen für sammelt open. Aber im Allgemeinen ist hints.macworld.com eine bekannte Quelle für versteckte Edelsteine. Ich kannte auch eine andere Quelle, die undokumentierte defaults writeBefehle sammelt , aber ich kann mich nicht erinnern, dass es nur bekannt ist und Google mir auch nicht geholfen hat ...
Gentmatt

Ich habe openvor einiger Zeit eine kurze Zusammenfassung über SuperUser gemacht. Superuser.com/questions/4368/os-x-equivalent-of-windows-run-box/…
Josh Hunt

@denis Das System verwaltet eine Datenbank mit allen Präfixen, die von allen installierten Apps angegeben wurden. Wenn Sie sich eine praktische Anwendung vorstellen können, um diesen Leckerbissen zu kennen, wäre es fantastisch, eine vollständige Frage zu stellen.
bmike

18

Mit den Python Objective-C-Bindungen können Sie nur ein kleines Python-Skript erstellen, um es aus dem integrierten OS X-Wörterbuch abzurufen. Hier ist ein Beitrag mit Details zu diesem Skript. "

#!/usr/bin/python

import sys
from DictionaryServices import *

def main():
    try:
        searchword = sys.argv[1].decode('utf-8')
    except IndexError:
        errmsg = 'You did not enter any terms to look up in the Dictionary.'
        print errmsg
        sys.exit()
    wordrange = (0, len(searchword))
    dictresult = DCSCopyTextDefinition(None, searchword, wordrange)
    if not dictresult:
        errmsg = "'%s' not found in Dictionary." % (searchword)
        print errmsg.encode('utf-8')
    else:
        print dictresult.encode('utf-8')

if __name__ == '__main__':
    main()

Speichern Sie das auf dict.pyund führen Sie es dann einfach auspython dict.py dictation

Bildbeschreibung hier eingeben

Weitere Anweisungen dazu, wie Sie auf den Post zugreifen können, finden Sie in Ihrem gesamten Terminal.


1
Ich habe dieses Skript verwendet, aber die Ausgabe enthält keinen Zeilenumbruch. Es sieht folgendermaßen aus: i.imgur.com/ooAwQCA.png (unter OS X 10.9).
h__

Ich bekomme auch keinen Zeilenumbruch in der Ausgabe. Checking print repr(dictresult.encode('utf-8'))zeigt mir das:'dictation |d\xc9\xaak\xcb\x88te\xc9\xaa\xca\x83(\xc9\x99)n| \xe2\x96\xb6noun [ mass noun ] 1 the action of dictating words to be typed, written down, or recorded on tape: the dictation of letters. \xe2\x80\xa2 the activity of taking down a passage that is dictated by a teacher as a test of spelling, writing, or language skills: passages for dictation. \xe2\x80\xa2 words that are dictated: the job will involve taking dictation, drafting ...'
nnn

Ich habe einige String-Ersetzungen hinzugefügt, um Zeilenumbrüche zu simulieren. Scheint in
Ordnung zu sein,

Das scheint nicht mehr zu funktionieren.
Toothrot

4

Ich wollte auch vorschlagen open dict://word, aber Googles Wörterbuch-API verwendet auch das New Oxford American Dictionary:

#!/usr/bin/env ruby

require "open-uri"
require "json"
require "cgi"

ARGV.each { |word|
  response = open("http://www.google.com/dictionary/json?callback=dict_api.callbacks.id100&q=#{CGI.escape(word)}&sl=en&tl=en&restrict=pr,de").read
  results = JSON.parse(response.sub(/dict_api.callbacks.id100\(/, "").sub(/,200,null\)$/, ""))
  next unless results["primaries"]
  results["primaries"][0]["entries"].select { |e| e["type"] == "meaning" }.each { |entry|
    puts word + ": " + entry["terms"][0]["text"].gsub(/x3c\/?(em|i|b)x3e/, "").gsub("x27", "'")
  }
}

1
Diese Google-API ist veraltet und gibt 404 zurück. Anscheinend könnte dictionaryapi.com funktionieren, Sie müssen sich lediglich anmelden.
Sam Berry

4

Ich habe mit Swift 4 eine Lösung gefunden.

#!/usr/bin/swift
import Foundation

if (CommandLine.argc < 2) {
    print("Usage: dictionary word")
}else{
    let argument = CommandLine.arguments[1]
    let result = DCSCopyTextDefinition(nil, argument as CFString, CFRangeMake(0, argument.count))?.takeRetainedValue() as String?
    print(result ?? "")
}
  1. Speichern Sie dies als dict.swift
  2. Erlaubnis hinzufügen von chmod +x dict.swift
  3. Nachschlagewörterbuch
    • laufen mit Dolmetscher ./dict.swift word
    • Vom Compiler erstellen swiftc dict.swiftund ausführen./dict word

2

Der aktualisierte Code von David Perace antworte, füge ein paar Farben und neue Zeilen hinzu:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
import re
from DictionaryServices import *

class bcolors:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'

def main():
    try:
        searchword = sys.argv[1].decode('utf-8')
    except IndexError:
        errmsg = 'You did not enter any terms to look up in the Dictionary.'
        print errmsg
        sys.exit()
    wordrange = (0, len(searchword))
    dictresult = DCSCopyTextDefinition(None, searchword, wordrange)
    if not dictresult:
        errmsg = "'%s' not found in Dictionary." % (searchword)
        print errmsg.encode('utf-8')
    else:
        result = dictresult.encode('utf-8')
        result = re.sub(r'\|(.+?)\|', bcolors.HEADER + r'/\1/' + bcolors.ENDC, result)
        result = re.sub(r'▶', '\n\n ' + bcolors.FAIL + '▶ ' + bcolors.ENDC, result)
        result = re.sub(r'• ', '\n   ' + bcolors.OKGREEN + '• ' + bcolors.ENDC, result)
        result = re.sub(r'(‘|“)(.+?)(’|”)', bcolors.WARNING + r'“\2”' + bcolors.ENDC, result)
        print result

if __name__ == '__main__':
    main()

1

Probieren Sie Dictionary OSX aus (das habe ich gemacht, nachdem ich mich mit anderen Antworten beschäftigt und eine Nicht-Python-Lösung gesucht hatte). Es verwendet die Definitionen von Dictionary.app.

dictionary cat
# cat 1 |kat| ▶noun 1 a small domesticated carnivorous mammal with soft fur...

Es verwendet DictionaryKit , einen Wrapper für die unter OSX verfügbaren privaten Dictionary Services. Es gibt interessante Hintergrundinformationen darüber, wie dies auf NSHipster funktioniert .



0

Ich bin auf diesen Beitrag gestoßen und habe nach einer ähnlichen Sache gesucht. War mit den verfügbaren Optionen nicht zufrieden, also machte es ein einfaches Skript. Es ist ein Terminal-basierter Thesaurus mit Text zu Sprache. Kann von Interesse sein ...

https://github.com/aefty/thes


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.