tra cứu một từ trong Dictionary.app trong Terminal


19

Có một bash hoặc applescript để tìm kiếm một từ trong /Applications/Dictionary.appcửa sổ Terminal không?

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

bỏ qua --args, nói "gõ một từ để tra cứu"

⌃ Control ⌘ Command DTuy nhiên, các cải tiến của Mac Dictionary cho thấy tôi đang tìm cách khởi chạy ứng dụng đầy đủ, không chỉ là popover nhỏ.


Thay vì nút "thêm", bạn chỉ cần nhấp vào tên của từ điển trong cửa sổ bật lên để mở tìm kiếm trong ứng dụng từ điển.
gentmatt

Cảm ơn mọi người, there_more_than_one_way_to_ Da_a_cat
denis

Câu trả lời:


20

Bạn có thể dùng...

open dict://my_word

... sẽ mở ứng dụng Từ điển và tra cứu chuỗi my_word. Nếu bạn muốn sử dụng nhiều từ, hãy sử dụng một cái gì đó như open dict://"Big Bang Theory".

Không có đầu ra trong Terminal mặc dù.


Cảm ơn. Có một danh sách các Magicprefix mở: ... một nơi nào đó không?
denis

@Denis Tôi không biết một nguồn nào đặc biệt thu thập các tùy chọn lệnh không có giấy tờ cho open. Nhưng nói chung, hint.macworld.com là một nguồn nổi tiếng về đá quý ẩn. Tôi cũng đã từng biết một nguồn khác thu thập defaults writecác lệnh không có giấy tờ , nhưng tôi không thể nhớ nó chỉ biết và Google cũng không giúp tôi ...
gentmatt

Tôi đã thực hiện một bản tóm tắt ngắn gọn openvề SuperUser trước đây superuser.com/questions/4368/os-x-equivalent-of-windows-run-box/ phỏng
Josh Hunt

@denis hệ thống duy trì một cơ sở dữ liệu của tất cả các tiền tố mà tất cả các ứng dụng được cài đặt đã cho nó biết cách xử lý. Nếu bạn có thể nghĩ về một cách sử dụng thực tế để biết rằng miếng ngon đó, hỏi một câu hỏi đầy đủ sẽ rất tuyệt vời.
bmike

18

Sử dụng các ràng buộc Python Objective-C, bạn có thể tạo một tập lệnh python nhỏ để lấy nó từ Từ điển OS X tích hợp. Đây là một bài viết chi tiết về kịch bản này "

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

Lưu nó vào dict.py, và sau đó chỉ cần chạypython dict.py dictation

nhập mô tả hình ảnh ở đây

Kiểm tra bài đăng để biết thêm hướng dẫn về cách truy cập tất cả trên thiết bị đầu cuối của bạn.


1
Tôi đã sử dụng tập lệnh này, nhưng không có ngắt dòng trong đầu ra, nó trông như thế này: i.imgur.com/ooAwQCA.png (trên OS X 10.9).
h__

Tôi cũng không nhận được dòng mới trong đầu ra. Kiểm tra print repr(dictresult.encode('utf-8'))cho tôi thấy điều này:'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

Tôi đã thêm một số thay thế chuỗi để mô phỏng ngắt dòng .. có vẻ hoạt động tốt mặc dù tôi chưa thử nghiệm rộng rãi: gist.github.com/lambdamusic/bdd56b25a5f547599f7f
magicrebirth

Điều này dường như không còn hoạt động nữa.
Toothrot

4

Tôi cũng sẽ đề xuất open dict://word, nhưng API từ điển của Google cũng sử dụng Từ điển Oxford Mỹ mới:

#!/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
API Google đó không được dùng nữa và trả về 404. Có vẻ như dictionaryapi.com có thể hoạt động, chỉ cần đăng nhập.
Sam Berry

4

Tôi tìm thấy một giải pháp bằng 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. lưu cái này làm dict.swift
  2. thêm sự cho phép bởi chmod +x dict.swift
  3. tra cứu từ điển
    • chạy với thông dịch viên ./dict.swift word
    • xây dựng bằng trình biên dịch swiftc dict.swiftvà chạy./dict word

2

Mã được cập nhật từ câu trả lời của David Perace, thêm một số màu và dòng mới:

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

Hãy thử Từ điển OSX (Tôi đã thực hiện điều này sau khi bị mắc kẹt với các câu trả lời khác và muốn một giải pháp không phải là Python). Nó sử dụng các định nghĩa từ Dictionary.app.

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

Nó sử dụng DictionaryKit , một trình bao bọc cho Dịch vụ từ điển riêng có sẵn trên OSX. Có thông tin cơ bản thú vị về cách thức hoạt động của NSHipster .



0

Tôi đi qua bài viết này để tìm kiếm một điều tương tự. Không hài lòng với các tùy chọn có sẵn nên kịch bản đơn giản. Đây là một thiết bị đầu cuối dựa trên từ điển với văn bản thành lời nói. Có thể được quan tâm ...

https://github.com/aefty/thes


0

Xem chủ đề sau để tìm hiểu cách sử dụng Dictionary.app trong Terminal: https://discussions.apple.com/thread/2679911?start=0&tstart=0


1
Câu trả lời trên Hỏi khác nhau không chỉ là một liên kết. Bạn có thể bao gồm một liên kết, nhưng vui lòng tóm tắt hoặc trích dẫn nó trong câu trả lời. Ý tưởng là làm cho câu trả lời đứng một mình.
nohillside
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.