buscar una palabra en Dictionary.app en Terminal

19

¿Hay un bash o applecript para buscar una palabra en /Applications/Dictionary.app desde una ventana de Terminal?

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

ignora --args, dice "escribe una palabra para buscar"

Mejoras en el diccionario de Mac sugiere ⌃ Control ⌘ Comando D sin embargo, estoy buscando lanzar la aplicación completa, no solo la pequeña ventana emergente.

    
pregunta denis 29.04.2013 - 11:48

9 respuestas

20

Puedes usar ...

open dict://my_word

... que abrirá la aplicación Diccionario y buscará la cadena my_word . Si quieres usar varias palabras, usa algo como open dict://"Big Bang Theory" .

Sin embargo, no hay salida en la Terminal.

    
respondido por el gentmatt 29.04.2013 - 12:53
18

Usando los enlaces Python Objective-C, puedes crear solo un pequeño script de Python para obtenerlo desde el diccionario integrado de OS X. Aquí hay una publicación que detalla este 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()

Guárdalo en dict.py y luego ejecuta python dict.py dictation

Echa un vistazo a la publicación para obtener más instrucciones sobre cómo hacer que sea accesible en todo tu terminal.

    
respondido por el Josh Hunt 29.04.2013 - 13:22
4

También iba a sugerir open dict://word , pero la API del diccionario de Google también usa el 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", "'")
  }
}
    
respondido por el user495470 29.04.2013 - 13:03
4

Encontré una solución 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. guarda esto como dict.swift
  2. agregar permiso por chmod +x dict.swift
  3. diccionario de búsqueda
    • ejecutar con el intérprete ./dict.swift word
    • compilar por el compilador swiftc dict.swift y ejecutar ./dict word
respondido por el peccu 16.11.2017 - 06:40
1

El código actualizado de la respuesta de David Perace, agrega algunos colores y nuevas líneas:

#!/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()
    
respondido por el Huy Tran 12.10.2015 - 23:38
0

Me encontré con este post buscando algo similar. No estaba contento con las opciones disponibles, así que hizo un script simple. Es un tesauro basado en terminal con texto a voz. Puede ser de interés ...

enlace

    
respondido por el user28958 20.04.2015 - 00:00
0

Consulte el siguiente hilo para averiguar cómo usar Dictionary.app en la Terminal: enlace

    
respondido por el kcidkcus 07.11.2015 - 17:35
0

Pruebe Dictionary OSX (Lo hice después de quedarme atascado con otras respuestas y querer una solución que no fuera de Python). Utiliza las definiciones de Dictionary.app .

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

Utiliza DictionaryKit , un envoltorio para los Servicios de diccionarios privados disponibles en OSX. Hay información de fondo interesante sobre cómo funciona esto en NSHipster .

    
respondido por el odlp 20.11.2016 - 17:33
0

compra este repositorio de github: enlace

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

    
respondido por el aztack 07.03.2018 - 04:50

Lea otras preguntas en las etiquetas