|
@@ -2329,262 +2329,77 @@ this is test, does not rename files." |
|
|
|
|
|
|
|
|
;; (my-real-function-subr-p 'my-real-function-subr-p) |
|
|
;; (my-real-function-subr-p 'my-real-function-subr-p) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;; |
|
|
;; ilookup |
|
|
;; ilookup |
|
|
|
|
|
|
|
|
(defvar ilookup-prompt ">>> " |
|
|
|
|
|
"Prompt string for ilookup input.") |
|
|
|
|
|
|
|
|
|
|
|
(defvar ilookup-interval 0.5 |
|
|
|
|
|
"Time in second to show sdcv result for current input.") |
|
|
|
|
|
|
|
|
|
|
|
(defvar ilookup-current-prompt-point nil |
|
|
|
|
|
"Point of beginning of current prompt.") |
|
|
|
|
|
(make-variable-buffer-local 'ilookup-current-prompt-point) |
|
|
|
|
|
|
|
|
|
|
|
(defvar ilookup-mode-map |
|
|
|
|
|
(let ((map (make-sparse-keymap))) |
|
|
|
|
|
(define-key map (kbd "C-m") 'ilookup-enter) |
|
|
|
|
|
(define-key map (kbd "C-u") 'ilookup-kill-input) |
|
|
|
|
|
(define-key map (kbd "C-a") 'ilookup-goto-bol) |
|
|
|
|
|
map)) |
|
|
|
|
|
|
|
|
|
|
|
(define-derived-mode ilookup-mode fundamental-mode |
|
|
|
|
|
"iLookUp" |
|
|
|
|
|
"Major mode for incremental sdcv buffer." |
|
|
|
|
|
(set (make-local-variable 'font-lock-function) |
|
|
|
|
|
'ignore)) |
|
|
|
|
|
|
|
|
|
|
|
(defun ilookup-enter () |
|
|
|
|
|
"Enter function for `ilookup-mode'. |
|
|
|
|
|
Freeze current input and show next prompt." |
|
|
|
|
|
(interactive) |
|
|
|
|
|
(let ((pword (and |
|
|
|
|
|
;; do not get if currently on prompt |
|
|
|
|
|
(not (ilookup--on-prompt-p)) |
|
|
|
|
|
(thing-at-point 'word)))) |
|
|
|
|
|
;; print result is done only when currently on prompt |
|
|
|
|
|
(ilookup--print-result-from-input) |
|
|
|
|
|
(goto-char (point-max)) |
|
|
|
|
|
(unless (eq (point) |
|
|
|
|
|
(point-at-bol)) |
|
|
|
|
|
(newline)) |
|
|
|
|
|
(setq ilookup-current-prompt-point |
|
|
|
|
|
(point)) |
|
|
|
|
|
(insert ilookup-prompt) |
|
|
|
|
|
(and pword |
|
|
|
|
|
(insert pword)))) |
|
|
|
|
|
|
|
|
|
|
|
(defun ilookup-kill-input () |
|
|
|
|
|
"Delete `ilookup-bol' to current point." |
|
|
|
|
|
(interactive) |
|
|
|
|
|
(delete-region (ilookup-bol) |
|
|
|
|
|
(point))) |
|
|
|
|
|
|
|
|
|
|
|
(defun ilookup-goto-bol () |
|
|
|
|
|
"Go to ilookup bol." |
|
|
|
|
|
(interactive) |
|
|
|
|
|
(goto-char (ilookup-bol))) |
|
|
|
|
|
|
|
|
|
|
|
(defvar ilookup-sdcv-command "sdcv -n '%s'" |
|
|
|
|
|
"Command of sdcv.") |
|
|
|
|
|
(setq ilookup-sdcv-command "sdcv -n -u jmdict-en-ja '%s'") |
|
|
|
|
|
|
|
|
|
|
|
(defvar ilookup-buffer nil |
|
|
|
|
|
"Pointer to ilookup buffer.") |
|
|
|
|
|
|
|
|
|
|
|
(defvar ilookup--timer nil |
|
|
|
|
|
"Idle timer object for ilookup.") |
|
|
|
|
|
|
|
|
(when (fetch-library |
|
|
|
|
|
"https://raw.github.com/10sr/emacs-lisp/master/ilookup.el" |
|
|
|
|
|
t) |
|
|
|
|
|
(lazy-load-eval 'ilookup |
|
|
|
|
|
'(ilookup-open) |
|
|
|
|
|
(setq ilookup-alist |
|
|
|
|
|
'( |
|
|
|
|
|
("en" . (lambda (word) |
|
|
|
|
|
(shell-command-to-string |
|
|
|
|
|
(format "sdcv -n -u dictd_www.dict.org_gcide '%s'" |
|
|
|
|
|
word)))) |
|
|
|
|
|
("ja" . (lambda (word) |
|
|
|
|
|
(shell-command-to-string |
|
|
|
|
|
(format "sdcv -n -u EJ-GENE95 -u jmdict-en-ja '%s'" |
|
|
|
|
|
word)))) |
|
|
|
|
|
("jaj" . (lambda (word) |
|
|
|
|
|
(shell-command-to-string |
|
|
|
|
|
(format "sdcv -n -u jmdict-en-ja '%s'" |
|
|
|
|
|
word)))) |
|
|
|
|
|
("jag" . |
|
|
|
|
|
(lambda (word) |
|
|
|
|
|
(with-temp-buffer |
|
|
|
|
|
(insert (shell-command-to-string |
|
|
|
|
|
(format "sdcv -n -u 'Genius English-Japanese' '%s'" |
|
|
|
|
|
word))) |
|
|
|
|
|
(html2text) |
|
|
|
|
|
(buffer-substring (point-min) |
|
|
|
|
|
(point-max))))) |
|
|
|
|
|
("alc" . (lambda (word) |
|
|
|
|
|
(shell-command-to-string |
|
|
|
|
|
(format "alc '%s' | head -n 20" |
|
|
|
|
|
word)))) |
|
|
|
|
|
("app" . (lambda (word) |
|
|
|
|
|
(shell-command-to-string |
|
|
|
|
|
(format "dict_app '%s'" |
|
|
|
|
|
word)))) |
|
|
|
|
|
;; letters broken |
|
|
|
|
|
("ms" . |
|
|
|
|
|
(lambda (word) |
|
|
|
|
|
(let ((url (concat |
|
|
|
|
|
"http://api.microsofttranslator.com/V2/Ajax.svc/" |
|
|
|
|
|
"Translate?appId=%s&text=%s&to=%s")) |
|
|
|
|
|
(apikey "3C9778666C5BA4B406FFCBEE64EF478963039C51") |
|
|
|
|
|
(target "ja") |
|
|
|
|
|
(eword (url-hexify-string word))) |
|
|
|
|
|
(with-current-buffer (url-retrieve-synchronously |
|
|
|
|
|
(format url |
|
|
|
|
|
apikey |
|
|
|
|
|
eword |
|
|
|
|
|
target)) |
|
|
|
|
|
(message "") |
|
|
|
|
|
(goto-char (point-min)) |
|
|
|
|
|
(search-forward-regexp "^$" |
|
|
|
|
|
nil |
|
|
|
|
|
t) |
|
|
|
|
|
(url-unhex-string (buffer-substring-no-properties |
|
|
|
|
|
(point) |
|
|
|
|
|
(point-max))))))) |
|
|
|
|
|
)) |
|
|
|
|
|
;; (funcall (cdr (assoc "ms" |
|
|
|
|
|
;; ilookup-alist)) |
|
|
|
|
|
;; "dictionary") |
|
|
|
|
|
|
|
|
(defvar ilookup--last-input nil |
|
|
|
|
|
"Last input queryed.") |
|
|
|
|
|
|
|
|
;; (switch-to-buffer (url-retrieve-synchronously "http://api.microsofttranslator.com/V2/Ajax.svc/Translate?appId=3C9778666C5BA4B406FFCBEE64EF478963039C51&text=dictionary&to=ja")) |
|
|
|
|
|
|
|
|
(defvar ilookup-default "sdcv" |
|
|
|
|
|
"Default command for ilookup. |
|
|
|
|
|
This value should be a key of `ilookup-alist'.") |
|
|
|
|
|
|
|
|
;; (switch-to-buffer (url-retrieve-synchronously "http://google.com")) |
|
|
|
|
|
|
|
|
(defvar ilookup-alist |
|
|
|
|
|
'( |
|
|
|
|
|
("sdcv" . (lambda (word) |
|
|
|
|
|
(shell-command-to-string (format "sdcv -n '%s'" |
|
|
|
|
|
word)))) |
|
|
|
|
|
) |
|
|
|
|
|
"Alist of ilookup functions. |
|
|
|
|
|
Each element should be in the form of (NAME . FUNCTION). |
|
|
|
|
|
FUNCTION must accept one argument as word to search and return the string of |
|
|
|
|
|
result for that word.") |
|
|
|
|
|
|
|
|
|
|
|
(setq ilookup-alist |
|
|
|
|
|
'( |
|
|
|
|
|
("en" . (lambda (word) |
|
|
|
|
|
(shell-command-to-string |
|
|
|
|
|
(format "sdcv -n -u dictd_www.dict.org_gcide '%s'" |
|
|
|
|
|
word)))) |
|
|
|
|
|
("ja" . (lambda (word) |
|
|
|
|
|
(shell-command-to-string |
|
|
|
|
|
(format "sdcv -n -u EJ-GENE95 -u jmdict-en-ja '%s'" |
|
|
|
|
|
word)))) |
|
|
|
|
|
("jaj" . (lambda (word) |
|
|
|
|
|
(shell-command-to-string |
|
|
|
|
|
(format "sdcv -n -u jmdict-en-ja '%s'" |
|
|
|
|
|
word)))) |
|
|
|
|
|
("jag" . (lambda (word) |
|
|
|
|
|
(with-temp-buffer |
|
|
|
|
|
(insert (shell-command-to-string |
|
|
|
|
|
(format "sdcv -n -u 'Genius English-Japanese' '%s'" |
|
|
|
|
|
word))) |
|
|
|
|
|
(html2text) |
|
|
|
|
|
(buffer-substring (point-min) |
|
|
|
|
|
(point-max))))) |
|
|
|
|
|
("alc" . (lambda (word) |
|
|
|
|
|
(shell-command-to-string |
|
|
|
|
|
(format "alc '%s' | head -n 20" |
|
|
|
|
|
word)))) |
|
|
|
|
|
("app" . (lambda (word) |
|
|
|
|
|
(shell-command-to-string |
|
|
|
|
|
(format "dict_app '%s'" |
|
|
|
|
|
word)))) |
|
|
|
|
|
;; letters broken |
|
|
|
|
|
("ms" . |
|
|
|
|
|
(lambda (word) |
|
|
|
|
|
(let ((url (concat "http://api.microsofttranslator.com/V2/Ajax.svc/" |
|
|
|
|
|
"Translate?appId=%s&text=%s&to=%s")) |
|
|
|
|
|
(apikey "3C9778666C5BA4B406FFCBEE64EF478963039C51") |
|
|
|
|
|
(target "ja") |
|
|
|
|
|
(eword (url-hexify-string word))) |
|
|
|
|
|
(with-current-buffer (url-retrieve-synchronously |
|
|
|
|
|
(format url |
|
|
|
|
|
apikey |
|
|
|
|
|
eword |
|
|
|
|
|
target)) |
|
|
|
|
|
(message "") |
|
|
|
|
|
(goto-char (point-min)) |
|
|
|
|
|
(search-forward-regexp "^$" |
|
|
|
|
|
nil |
|
|
|
|
|
t) |
|
|
|
|
|
(url-unhex-string (buffer-substring-no-properties (point) |
|
|
|
|
|
(point-max))))))) |
|
|
|
|
|
)) |
|
|
|
|
|
|
|
|
(setq ilookup-default "ja"))) |
|
|
|
|
|
|
|
|
;; (funcall (cdr (assoc "ms" |
|
|
|
|
|
;; ilookup-alist)) |
|
|
|
|
|
;; "dictionary") |
|
|
|
|
|
|
|
|
|
|
|
;; (switch-to-buffer (url-retrieve-synchronously "http://api.microsofttranslator.com/V2/Ajax.svc/Translate?appId=3C9778666C5BA4B406FFCBEE64EF478963039C51&text=dictionary&to=ja")) |
|
|
|
|
|
|
|
|
|
|
|
;; (switch-to-buffer (url-retrieve-synchronously "http://google.com")) |
|
|
|
|
|
|
|
|
|
|
|
(setq ilookup-default "ja") |
|
|
|
|
|
|
|
|
|
|
|
(defun ilookup--timer-add () |
|
|
|
|
|
"Entry idle timer for ilookup." |
|
|
|
|
|
(and (eq ilookup-buffer |
|
|
|
|
|
(current-buffer)) |
|
|
|
|
|
;; do not duplicate timer |
|
|
|
|
|
(not ilookup--timer) |
|
|
|
|
|
(setq ilookup--timer |
|
|
|
|
|
(run-with-idle-timer ilookup-interval |
|
|
|
|
|
t |
|
|
|
|
|
'ilookup--print-result-from-input)))) |
|
|
|
|
|
|
|
|
|
|
|
(defun ilookup--timer-remove () |
|
|
|
|
|
"Remove idle timer for ilookup." |
|
|
|
|
|
;; remote only when killing buffer is ilookup buffer |
|
|
|
|
|
(and (eq ilookup-buffer |
|
|
|
|
|
(current-buffer)) |
|
|
|
|
|
ilookup--timer |
|
|
|
|
|
(cancel-timer ilookup--timer))) |
|
|
|
|
|
|
|
|
|
|
|
(defun ilookup-bol () |
|
|
|
|
|
"Return point to bol ignoring prompt." |
|
|
|
|
|
(save-excursion |
|
|
|
|
|
(beginning-of-line) |
|
|
|
|
|
(or (search-forward ilookup-prompt |
|
|
|
|
|
(point-at-eol) |
|
|
|
|
|
t) |
|
|
|
|
|
(point)))) |
|
|
|
|
|
|
|
|
|
|
|
(defun ilookup--get-output-start () |
|
|
|
|
|
"Return point where outputs should be inserted. |
|
|
|
|
|
This function insert newline if required." |
|
|
|
|
|
(when ilookup-current-prompt-point |
|
|
|
|
|
(save-excursion |
|
|
|
|
|
(goto-char ilookup-current-prompt-point) |
|
|
|
|
|
(forward-line 1) |
|
|
|
|
|
(when (ilookup--on-prompt-p) |
|
|
|
|
|
(end-of-line) |
|
|
|
|
|
(newline)) |
|
|
|
|
|
(point-at-bol)))) |
|
|
|
|
|
|
|
|
|
|
|
(defun ilookup--print-result-from-input () |
|
|
|
|
|
"Get entry for current ilookup input." |
|
|
|
|
|
(let ((input (ilookup--get-input)) |
|
|
|
|
|
(outpoint (ilookup--get-output-start))) |
|
|
|
|
|
(and input |
|
|
|
|
|
;; do not query same word twice |
|
|
|
|
|
(not (equal ilookup--last-input |
|
|
|
|
|
input)) |
|
|
|
|
|
outpoint |
|
|
|
|
|
(let* ( |
|
|
|
|
|
;; colon sepatated list of input |
|
|
|
|
|
(inputl (split-string input |
|
|
|
|
|
":")) |
|
|
|
|
|
;; funcname for `ilookup-alist' |
|
|
|
|
|
(fname (if (eq (length inputl) |
|
|
|
|
|
2) |
|
|
|
|
|
(car inputl) |
|
|
|
|
|
ilookup-default)) |
|
|
|
|
|
(func (cdr (assoc fname |
|
|
|
|
|
ilookup-alist))) |
|
|
|
|
|
(word (if (eq (length inputl) |
|
|
|
|
|
2) |
|
|
|
|
|
(nth 1 |
|
|
|
|
|
inputl) |
|
|
|
|
|
(car inputl)))) |
|
|
|
|
|
(save-excursion |
|
|
|
|
|
(setq ilookup--last-input input) |
|
|
|
|
|
(goto-char outpoint) |
|
|
|
|
|
(delete-region (point) |
|
|
|
|
|
(point-max)) |
|
|
|
|
|
(insert (if func |
|
|
|
|
|
(funcall func |
|
|
|
|
|
word) |
|
|
|
|
|
(format "No func found for `%s'" |
|
|
|
|
|
fname)))))))) |
|
|
|
|
|
|
|
|
|
|
|
(defun ilookup--get-result (word fname) |
|
|
|
|
|
"Return result string for WORD with FNAME." |
|
|
|
|
|
nil) |
|
|
|
|
|
|
|
|
|
|
|
(defun ilookup--get-input () |
|
|
|
|
|
"Get current input for ilookup buffer. |
|
|
|
|
|
Return nil if current position is not on prompt line." |
|
|
|
|
|
(and (eq ilookup-buffer |
|
|
|
|
|
(current-buffer)) |
|
|
|
|
|
(ilookup--on-prompt-p) |
|
|
|
|
|
(buffer-substring-no-properties (ilookup-bol) |
|
|
|
|
|
(point-at-eol)))) |
|
|
|
|
|
|
|
|
|
|
|
(defsubst ilookup--on-prompt-p () |
|
|
|
|
|
"Return true if currently on prompt line." |
|
|
|
|
|
(eq (line-number-at-pos) |
|
|
|
|
|
(line-number-at-pos ilookup-current-prompt-point))) |
|
|
|
|
|
|
|
|
|
|
|
(defun ilookup-open () |
|
|
|
|
|
"Open ilookup buffer." |
|
|
|
|
|
(interactive) |
|
|
|
|
|
(if ilookup-buffer |
|
|
|
|
|
(pop-to-buffer ilookup-buffer) |
|
|
|
|
|
(with-current-buffer (setq ilookup-buffer |
|
|
|
|
|
(get-buffer-create "*ilookup*")) |
|
|
|
|
|
(ilookup-mode) |
|
|
|
|
|
(font-lock-mode t) |
|
|
|
|
|
(ilookup-enter) |
|
|
|
|
|
(ilookup--timer-add) |
|
|
|
|
|
(add-hook 'kill-buffer-hook |
|
|
|
|
|
'ilookup--timer-remove) |
|
|
|
|
|
) |
|
|
|
|
|
(pop-to-buffer ilookup-buffer))) |
|
|
|
|
|
|
|
|
|
|
|
;;; emacs.el ends here |
|
|
;;; emacs.el ends here |