wyszukaj słowo w Dictionary.app w Terminalu

19

Czy jest jakiś bash lub applecript, aby wyszukać słowo w /Applications/Dictionary.appoknie terminala?

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

ignoruje --args, mówi „wpisz słowo, aby wyszukać”

Ulepszenia słownika Mac sugerują ⌃ Control ⌘ Command Djednak, że chcę uruchomić pełną aplikację, a nie tylko mały popover.

denis
źródło
Zamiast przycisku „więcej” wystarczy kliknąć nazwę słownika w oknie podręcznym, aby otworzyć wyszukiwanie w aplikacji słownika.
gentmatt
Dzięki wszystkim, there's_more_than_one_way_to_skin_a_cat
Denis

Odpowiedzi:

20

Możesz użyć...

open dict://my_word

... który otworzy aplikację Dictionary i odszuka ciąg my_word. Jeśli chcesz użyć wielu słów, użyj czegoś takiego open dict://"Big Bang Theory".

W terminalu nie ma jednak żadnych danych wyjściowych.

gentmatt
źródło
Dzięki. Czy istnieje lista otwartych prefiksów magicznych: ... gdzieś?
den
@Denis Nie znam źródła, które specjalnie gromadzi nieudokumentowane opcje poleceń open. Ale ogólnie rzecz biorąc, hints.macworld.com jest dobrze znanym źródłem ukrytych klejnotów. Ja również wykorzystywane do poznania innego źródła, które zbiera nielegalnych defaults writepoleceń, ale nie mogę sobie przypomnieć, że po prostu wiem, a Google nie może mi pomóc albo ...
gentmatt
Krótko podsumowałem openSuperUser jakiś czas temu superuser.com/questions/4368/os-x-equivalent-of-windows-run-box/…
Josh Hunt
@denis system utrzymuje bazę danych wszystkich prefiksów, które wszystkie zainstalowane aplikacje powiedziały, jak sobie z tym poradzić. Jeśli potrafisz wymyślić praktyczny sposób na poznanie tego smakołyka, zadawanie pełnego pytania byłoby niesamowite.
bmike
18

Korzystając z powiązań Python Objective-C, możesz utworzyć tylko mały skrypt Pythona, aby uzyskać go z wbudowanego słownika OS X. Oto post opisujący ten skrypt „

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

Zapisz to dict.py, a następnie po prostu uruchompython dict.py dictation

wprowadź opis zdjęcia tutaj

Sprawdź pocztę, aby uzyskać więcej instrukcji na temat udostępniania jej w całym terminalu.

Josh Hunt
źródło
1
Użyłem tego skryptu, ale nie ma podziału wiersza w danych wyjściowych, wygląda to tak: i.imgur.com/ooAwQCA.png (w systemie OS X 10.9).
h__
Nie otrzymuję również nowej linii w danych wyjściowych. Sprawdzanie print repr(dictresult.encode('utf-8'))pokazuje mi to:'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
Dodałem kilka zamienników ciągów, aby zasymulować podział
magicrebirth
To wydaje się już nie działać.
Toothrot
4

Chciałem również zasugerować open dict://word, ale interfejs API słownika Google korzysta również z 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", "'")
  }
}
Lri
źródło
1
Interfejs API Google jest przestarzały i zwraca 404. Wygląda na to, że słownikapi.com może działać, wystarczy się zalogować.
Sam Berry
4

Znalazłem rozwiązanie za pomocą Swift 4.

#!/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. zapisz to jako dict.swift
  2. dodaj pozwolenie przez chmod +x dict.swift
  3. słownik wyszukiwania
    • biegnij z tłumaczem ./dict.swift word
    • buduj przy pomocy kompilatora swiftc dict.swifti uruchamiaj./dict word
peccu
źródło
2

Zaktualizowany kod z odpowiedzi Davida Perace'a, dodaj kilka kolorów i nowe linie:

#!/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()
Huy Tran
źródło
1

Wypróbuj Dictionary OSX (zrobiłem to po tym, jak utknąłem z innymi odpowiedziami i chciałem rozwiązania innego niż Python). Korzysta z definicji z Dictionary.app.

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

Wykorzystuje DictionaryKit , opakowanie dla prywatnych usług słownikowych dostępnych w OSX. Jest interesująca podstawowa informacja o tym, jak to działa w NSHipster .

odlp
źródło
0

Natrafiłem na ten post, szukając podobnej rzeczy. Nie był zadowolony z dostępnych opcji, więc prosty skrypt. Jest to tezaurus oparty na terminalu z tekstem na mowę. Może być interesujące ...

https://github.com/aefty/thes

użytkownik 28958
źródło
0

Sprawdź następujący wątek, aby dowiedzieć się, jak korzystać z Dictionary.app w terminalu: https://discussions.apple.com/thread/2679911?start=0&tstart=0

kcidkcus
źródło
1
Odpowiedzi na Ask Different muszą być czymś więcej niż tylko linkiem. Można dołączyć link, ale proszę streść go lub fragmentuj w odpowiedzi. Chodzi o to, aby odpowiedź była samodzielna.
nohillside