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.

denis
sumber
Alih-alih tombol "lebih" Anda cukup mengklik nama kamus di pop-up untuk membuka pencarian di aplikasi kamus.
gentmatt
Terima kasih semuanya, there_more_than_one_way_to_skin_a_cat
denis

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.

gentmatt
sumber
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.

Josh Hunt
sumber
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", "'")
  }
}
Lri
sumber
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
peccu
sumber
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()
Huy Tran
sumber
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 .

odlp
sumber
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

pengguna28958
sumber
0

Lihat di utas berikut untuk mengetahui cara menggunakan Dictionary.app di Terminal: https://discussions.apple.com/thread/2679911?start=0&tstart=0

kcidkcus
sumber
1
Jawaban tentang Tanya yang berbeda harus lebih dari sekadar tautan. Tidak apa-apa untuk memasukkan tautan, tapi tolong rangkum atau kutip dalam jawabannya. Idenya adalah untuk membuat jawabannya berdiri sendiri.
nohillside