Skip to content

Instantly share code, notes, and snippets.

@Edenharder
Forked from lambdamusic/define.py
Created January 14, 2017 08:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Edenharder/d1e682975279feee8bcf46c75fb740b1 to your computer and use it in GitHub Desktop.
Save Edenharder/d1e682975279feee8bcf46c75fb740b1 to your computer and use it in GitHub Desktop.
Access osx dictionary in python
#!/usr/bin/env python
"""
Modified from
http://macscripter.net/viewtopic.php?id=26675
http://apple.stackexchange.com/questions/90040/look-up-a-word-in-dictionary-app-in-terminal
HowTo
chmod 755 define.py # make file executable
alias define="'/Users/me/Script/define.py'" # => add to .emacs_profile
# then (from command line)
define recursive # or any other word
# .. definition follows ..
"""
import sys
try:
from DictionaryServices import *
except:
print "WARNING: The pyobjc Python library was not found. You can install it by typing: 'pip install -U pyobjc'"
print "..................\n"
try:
from colorama import Fore, Back, Style
except:
print "WARNING: The colorama Python library was not found. You can install it by typing: 'pip install colorama'"
print "..................\n"
def main():
"""
define.py
Access the default OSX dictionary
2015-11-27
-added colors via colorama
"""
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:
s = dictresult.encode("utf-8")
arrow = doColor("\n\n\xe2\x96\xb6 ", "red")
s = s.replace('\xe2\x96\xb6', arrow) # arrow
bullet = doColor("\n\xe2\x80\xa2 ", "red")
s = s.replace('\xe2\x80\xa2', bullet) # bullet
phrases_header = doColor("\n\nPHRASES\n", "important")
s = s.replace('PHRASES', phrases_header)
derivatives_header = doColor("\n\nDERIVATIVES\n", "important")
s = s.replace('DERIVATIVES', derivatives_header)
origin_header = doColor("\n\nORIGIN\n", "important")
s = s.replace('ORIGIN', origin_header)
print doColor("Dictionary entry for:\n", "red")
print s
print "\n---------------------------------"
def doColor(s, style=None):
"""
util for returning a colored string
if colorama is not installed, FAIL SILENTLY
"""
try:
if style == "comment":
s = Style.DIM + s + Style.RESET_ALL
elif style == "important":
s = Style.BRIGHT + s + Style.RESET_ALL
elif style == "normal":
s = Style.RESET_ALL + s + Style.RESET_ALL
elif style == "red":
s = Fore.RED + s + Style.RESET_ALL
elif style == "green":
s = Fore.GREEN + s + Style.RESET_ALL
except:
pass
return s
if __name__ == '__main__':
main()
@Edenharder
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment