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.


Zamiast przycisku „więcej” wystarczy kliknąć nazwę słownika w oknie podręcznym, aby otworzyć wyszukiwanie w aplikacji słownika.
gentmatt

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.


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.


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", "'")
  }
}

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

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()

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 .




Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.