cerca una parola in Dictionary.app in Terminal

19

C'è una bash o un applescript per cercare una parola in /Applications/Dictionary.app da una finestra di Terminale?

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

ignora --args, dice "scrivi una parola per cercare"

I miglioramenti del dizionario Mac suggeriscono ^ Control ⌘ Comando D tuttavia sto cercando di avviare l'app completa, non solo il piccolo popover.

    
posta denis 29.04.2013 - 11:48
fonte

9 risposte

20

Puoi usare ...

open dict://my_word

... che aprirà l'applicazione Dizionario e cercherà la stringa my_word . Se vuoi usare più parole usa qualcosa come open dict://"Big Bang Theory" .

Tuttavia non c'è uscita nel terminale.

    
risposta data 29.04.2013 - 12:53
fonte
18

Utilizzando i collegamenti Python Objective-C, è possibile creare solo un piccolo script python per ottenerlo dal dizionario OS X incorporato. Ecco un post che descrive in dettaglio questo script "

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

Salvalo in dict.py , quindi esegui python dict.py dictation

Consulta il post per ulteriori istruzioni su come renderlo accessibile a tutto il tuo terminale.

    
risposta data 29.04.2013 - 13:22
fonte
4

Stavo anche suggerendo open dict://word , ma l'API del dizionario di Google utilizza anche il dizionario New Oxford American:

#!/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", "'")
  }
}
    
risposta data 29.04.2013 - 13:03
fonte
4

Ho trovato una soluzione usando 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. salva questo come dict.swift
  2. aggiungi permesso di chmod +x dict.swift
  3. dizionario di ricerca
    • esegui con interprete ./dict.swift word
    • costruisci dal compilatore swiftc dict.swift ed esegui ./dict word
risposta data 16.11.2017 - 06:40
fonte
2

Il codice aggiornato dalla risposta di David Perace, aggiungi alcuni colori e nuove linee:

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

import sys
import re
from DictionaryServices import *

class bcolors:
    HEADER = '3[95m'
    OKBLUE = '3[94m'
    OKGREEN = '3[92m'
    WARNING = '3[93m'
    FAIL = '3[91m'
    ENDC = '3[0m'
    BOLD = '3[1m'
    UNDERLINE = '3[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'//' + 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'“”' + bcolors.ENDC, result)
        print result

if __name__ == '__main__':
    main()
    
risposta data 12.10.2015 - 23:38
fonte
1

controlla questo repository github: link

installazione: brew install https://raw.githubusercontent.com/takumakei/osx-dictionary/master/osx-dictionary.rb --HEAD

    
risposta data 07.03.2018 - 04:50
fonte
0

Mi sono imbattuto in questo post alla ricerca di una cosa simile. Non era contento delle opzioni disponibili, quindi è stato creato un semplice script. È un thesaurus basato su terminale con sintesi vocale. Potrebbe essere di interesse ...

link

    
risposta data 20.04.2015 - 00:00
fonte
0

Cerca nel thread seguente per scoprire come utilizzare Dictionary.app nel Terminale: link

    
risposta data 07.11.2015 - 17:35
fonte
0

Prova Dizionario OSX (l'ho fatto dopo essermi bloccato con altre risposte e volendo una soluzione non Python). Usa le definizioni da Dictionary.app .

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

Utilizza DictionaryKit , un wrapper per i Servizi di dizionario privati disponibili su OSX. Esistono interessanti informazioni di base su come funziona su NSHipster .

    
risposta data 20.11.2016 - 17:33
fonte

Leggi altre domande sui tag