cari sebuah kata di Dictionary.app di Terminal


19

Apakah ada bash atau applescript untuk mencari kata /Applications/Dictionary.appdari jendela Terminal?

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

abaikan --args, katakan "ketikkan kata untuk dicari"

Peningkatan Kamus Mac menunjukkan ⌃ Control ⌘ Command Dnamun saya ingin meluncurkan aplikasi lengkap, tidak hanya popover kecil.


Alih-alih tombol "lebih" Anda cukup mengklik nama kamus di pop-up untuk membuka pencarian di aplikasi kamus.
gentmatt

Jawaban:


20

Anda dapat gunakan...

open dict://my_word

... yang akan membuka aplikasi Kamus dan mencari string my_word. Jika Anda ingin menggunakan banyak kata, gunakan sesuatu seperti open dict://"Big Bang Theory".

Tidak ada output di Terminal.


Terima kasih. Apakah ada daftar magicprefix terbuka: ... suatu tempat?
denis

@Denis Saya tidak tahu sumber yang secara khusus mengumpulkan opsi perintah tidak berdokumen untuk open. Tapi secara umum, hints.macworld.com adalah sumber terkenal untuk permata tersembunyi. Saya juga tahu sumber yang berbeda yang mengumpulkan defaults writeperintah tidak berdokumen , tapi saya tidak bisa mengingatnya hanya tahu dan Google juga tidak membantu saya ...
gentmatt

Saya membuat ringkasan singkat opententang SuperUser beberapa waktu yang lalu superuser.com/questions/4368/os-x-equivalent-of-windows-run-box/…
Josh Hunt

@denis sistem mempertahankan database dari semua awalan yang semua aplikasi yang diinstal telah memberi tahu cara menangani. Jika Anda bisa memikirkan penggunaan praktis untuk mengetahui berita gembira itu, mengajukan pertanyaan lengkap akan luar biasa.
bmike

18

Menggunakan binding Python Objective-C, Anda bisa membuat skrip python kecil untuk mendapatkannya dari built in Kamus OS X. Inilah pos yang merinci skrip ini "

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

Simpan itu dict.py, dan kemudian jalankanpython dict.py dictation

masukkan deskripsi gambar di sini

Lihat pos untuk instruksi lebih lanjut tentang membuatnya dapat diakses di seluruh terminal Anda.


1
Saya menggunakan skrip ini, tetapi tidak ada jeda baris di output, sepertinya ini: i.imgur.com/ooAwQCA.png (pada OS X 10.9).
h__

Saya juga tidak mendapatkan baris baru di output. Memeriksa print repr(dictresult.encode('utf-8'))menunjukkan ini kepada saya:'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

Saya telah menambahkan beberapa penggantian string untuk mensimulasi jeda baris .. sepertinya berfungsi ok meskipun saya belum mengujinya secara ekstensif: gist.github.com/lambdamusic/bdd56b25a5f547599f7f
magicrebirth

Ini sepertinya tidak berfungsi lagi.
Toothrot

4

Saya juga akan menyarankan open dict://word, tetapi kamus Google API juga menggunakan 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
Google API itu sudah tidak digunakan lagi dan mengembalikan 404. Sepertinya dictionaryapi.com bisa berfungsi, cukup buat login.
Sam Berry

4

Saya menemukan solusi menggunakan 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. simpan ini sebagai dict.swift
  2. tambahkan izin oleh chmod +x dict.swift
  3. kamus pencarian
    • jalankan dengan penerjemah ./dict.swift word
    • membangun dengan kompiler swiftc dict.swiftdan jalankan./dict word

2

Kode yang diperbarui dari David Perace menjawab, menambahkan beberapa warna dan baris baru:

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

Coba Kamus OSX (saya membuat ini setelah terjebak dengan jawaban lain dan menginginkan solusi non-Python). Ini menggunakan definisi dari Dictionary.app.

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

Ini menggunakan DictionaryKit , pembungkus untuk Layanan Kamus pribadi yang tersedia di OSX. Ada informasi latar belakang yang menarik tentang cara kerjanya di NSHipster .



0

Saya menemukan posting ini mencari hal yang sama. Tidak senang dengan opsi yang tersedia sehingga dibuat skrip sederhana. Ini adalah tesaurus berbasis terminal dengan text to speech. Mungkin menarik ...

https://github.com/aefty/thes


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.