rechercher un mot dans Dictionary.app dans Terminal


19

Existe-t-il un bash ou un applescript pour rechercher un mot dans /Applications/Dictionary.appune fenêtre de terminal?

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

ignore --args, dit "tapez un mot à rechercher"

Les améliorations du dictionnaire Mac suggèrent ⌃ Control ⌘ Command Dcependant que je cherche à lancer l'application complète, pas seulement le petit popover.


Au lieu du bouton "plus", vous cliquez simplement sur le nom du dictionnaire dans la fenêtre contextuelle pour ouvrir la recherche dans l'application du dictionnaire.
gentmatt

Réponses:


20

Vous pouvez utiliser...

open dict://my_word

... qui ouvrira l'application Dictionnaire et recherchera la chaîne my_word. Si vous souhaitez utiliser plusieurs mots, utilisez quelque chose comme open dict://"Big Bang Theory".

Il n'y a cependant pas de sortie dans le terminal.


Merci. Existe-t-il une liste de préfixes magiques ouverts: ... quelque part?
denis

@Denis Je ne connais pas de source qui recueille spécifiquement les options de commande non documentées pour open. Mais d'une manière générale, hints.macworld.com est une source bien connue pour les joyaux cachés. J'avais également l'habitude de connaître une source différente qui collecte des defaults writecommandes non documentées , mais je ne m'en souviens pas, je sais juste et Google ne m'a pas aidé non plus ...
gentmatt

J'ai fait un bref résumé de openSuperUser il y a un moment superuser.com/questions/4368/os-x-equivalent-of-windows-run-box/…
Josh Hunt

@denis le système maintient une base de données de tous les préfixes que toutes les applications installées lui ont dit comment gérer. Si vous pouvez penser à une utilisation pratique pour connaître cette friandise, poser une question complète serait génial.
bmike

18

En utilisant les liaisons Python Objective-C, vous pouvez créer juste un petit script python pour l'obtenir à partir du dictionnaire OS X intégré. Voici un article qui détaille ce 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()

Enregistrez cela dans dict.py, puis exécutez simplementpython dict.py dictation

entrez la description de l'image ici

Consultez la publication pour plus d'instructions sur la façon de la rendre accessible dans tout votre terminal.


1
J'ai utilisé ce script, mais il n'y a pas de saut de ligne dans la sortie, il ressemble à ceci: i.imgur.com/ooAwQCA.png (sur un OS X 10.9).
h__

Je n'ai pas non plus de retour à la ligne dans la sortie. La vérification print repr(dictresult.encode('utf-8'))me montre ceci:'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

J'ai ajouté quelques remplacements de chaîne pour simuler les sauts de ligne .. semble fonctionner correctement même si je ne l'ai pas testé de manière approfondie: gist.github.com/lambdamusic/bdd56b25a5f547599f7f
magicrebirth

Cela ne semble plus fonctionner.
Toothrot

4

J'allais également suggérer open dict://word, mais l'API de dictionnaire de Google utilise également le 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
Cette API Google est obsolète et renvoie 404. On dirait que dictionaryapi.com pourrait fonctionner, il suffit de faire une connexion.
Sam Berry

4

J'ai trouvé une solution en utilisant 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. enregistrer cela sous dict.swift
  2. ajouter l'autorisation par chmod +x dict.swift
  3. dictionnaire de recherche
    • courir avec interprète ./dict.swift word
    • construire par compilateur swiftc dict.swiftet exécuter./dict word

2

Le code mis à jour de David Perace répond, ajoute des couleurs et de nouvelles lignes:

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

Essayez Dictionary OSX (je l'ai fait après être resté coincé avec d'autres réponses et avoir voulu une solution non-Python). Il utilise les définitions de Dictionary.app.

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

Il utilise DictionaryKit , un wrapper pour les services de dictionnaire privés disponibles sur OSX. Il existe des informations de base intéressantes sur la façon dont cela fonctionne sur NSHipster .



0

Je suis tombé sur ce post à la recherche d'une chose similaire. N'était pas satisfait des options disponibles, donc un script simple. C'est un thésaurus basé sur terminal avec texte à la parole. Peut être intéressant ...

https://github.com/aefty/thes


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.