parent
f5336944e6
commit
b18062cae7
5 changed files with 59 additions and 0 deletions
@ -0,0 +1,9 @@ |
|||||||
|
[submodule "ace-jump-mode"] |
||||||
|
path = ace-jump-mode |
||||||
|
url = https://github.com/winterTTr/ace-jump-mode.git |
||||||
|
[submodule "emacs-no-easy-keys"] |
||||||
|
path = emacs-no-easy-keys |
||||||
|
url = https://github.com/danamlund/emacs-no-easy-keys.git |
||||||
|
[submodule "multiple-cursors.el"] |
||||||
|
path = multiple-cursors.el |
||||||
|
url = https://github.com/magnars/multiple-cursors.el.git |
||||||
@ -0,0 +1 @@ |
|||||||
|
Subproject commit 07b713792aec8cfb1bed7e1effaa9bf2b1cf3282 |
||||||
@ -0,0 +1 @@ |
|||||||
|
Subproject commit 90f44351c28a0d9c8206f60f0bef02ae9c0c9733 |
||||||
@ -0,0 +1 @@ |
|||||||
|
Subproject commit a3e6ec7c93c376f35c9add3ff8d155bdf2e079a4 |
||||||
@ -0,0 +1,47 @@ |
|||||||
|
(require 'json) |
||||||
|
(require 'thingatpt) |
||||||
|
|
||||||
|
(setq wordnik-api-key "fa815fa92045b7fa23699014d0a01c081b3d9c3c761292bf3") |
||||||
|
|
||||||
|
(defun wordnik-get-syn-buffer-for-word (word) |
||||||
|
(url-retrieve-synchronously (concat "http://api.wordnik.com//v4/word.json/" word "/relatedWords?relationshipTypes=synonym&limitPerRelationshipType=25&api_key=" wordnik-api-key))) |
||||||
|
|
||||||
|
(defun thesaurus-process-http-headers () |
||||||
|
"In the buffer created by `url-retrieve-synchronously', |
||||||
|
there are HTTP headers, and content. This fn removes the headers |
||||||
|
from the buffer, parsing the Content-Length header to verify that |
||||||
|
a substantive response was received. |
||||||
|
|
||||||
|
This implementation deletes each line until finding a blank line, |
||||||
|
which in correctly-formatted HTTP messages signals the end of the |
||||||
|
headers and the beginning of the message content. |
||||||
|
" |
||||||
|
(let ((clength -1)) |
||||||
|
(while (/= (point) (line-end-position)) |
||||||
|
(when (and (< clength 0) |
||||||
|
(re-search-forward "^[Cc]ontent-[Ll]ength ?: *\\(.*\\)$" (line-end-position) t)) |
||||||
|
(setq clength (string-to-number (match-string 1))) |
||||||
|
(goto-char (line-beginning-position))) |
||||||
|
(delete-region (point) (line-end-position)) |
||||||
|
(delete-char 1)) |
||||||
|
(delete-char 1) |
||||||
|
clength)) |
||||||
|
|
||||||
|
(defun wn/synonym-list (word) |
||||||
|
"Look up synonyms for (word) on wordnik and return them as an array of strings" |
||||||
|
(let ((buf (wordnik-get-syn-buffer-for-word word))) |
||||||
|
(if buf |
||||||
|
(progn |
||||||
|
(with-current-buffer buf |
||||||
|
(goto-char (point-min)) |
||||||
|
(thesaurus-process-http-headers) |
||||||
|
(let ((json-object-type 'alist)) |
||||||
|
(cdr (assoc 'words (elt (json-read-from-string (buffer-substring-no-properties (point) (line-end-position))) 0))))))))) |
||||||
|
|
||||||
|
(defun wn/synonym-at-point () |
||||||
|
(interactive) |
||||||
|
(let ((word (word-at-point))) |
||||||
|
(message "Synonyms for %s: %S" word (wn/synonym-list word)))) |
||||||
|
|
||||||
|
(provide 'wordnik-synonym) |
||||||
|
|
||||||
Loading…
Reference in new issue