|
|
@@ -24,9 +24,11 @@ |
|
|
|
;; download library from web |
|
|
|
|
|
|
|
(defun fetch-library (url &optional byte-compile-p force-download-p) |
|
|
|
"If library does not exist, download it from URL and locate it in |
|
|
|
\"~/emacs.d/lisp/\". Return nil if library unfound and failed to download, |
|
|
|
otherwise the path where the library installed." |
|
|
|
"Download a library from URL and locate it in \"~/emacs.d/lisp/\". |
|
|
|
Return nil if library unfound and failed to download, |
|
|
|
otherwise the path where the library installed. |
|
|
|
If BYTE-COMPILE-P is t byte compile the file after downloading. |
|
|
|
If FORCE-DOWNLOAD-P it t ignore exisiting library and always download." |
|
|
|
(let* ((dir (expand-file-name (concat user-emacs-directory "lisp/"))) |
|
|
|
(lib (file-name-sans-extension (file-name-nondirectory url))) |
|
|
|
(lpath (concat dir lib ".el")) |
|
|
@@ -2327,4 +2329,104 @@ this is test, does not rename files." |
|
|
|
|
|
|
|
;; (my-real-function-subr-p 'my-real-function-subr-p) |
|
|
|
|
|
|
|
|
|
|
|
(define-derived-mode isdcv-mode fundamental-mode |
|
|
|
"iSDCV" |
|
|
|
"Major mode for incremental sdcv buffer." |
|
|
|
(set (make-local-variable 'font-lock-function) |
|
|
|
'ignore)) |
|
|
|
|
|
|
|
(defvar isdcv-sdcv-command "sdcv -n '%s'" |
|
|
|
"Command of sdcv.") |
|
|
|
|
|
|
|
(defvar isdcv-buffer nil |
|
|
|
"Pointer to incremental sdcv buffer.") |
|
|
|
|
|
|
|
(defvar isdcv--timer nil |
|
|
|
"Idle timer object for isdcv.") |
|
|
|
|
|
|
|
(defun isdcv--timer-add () |
|
|
|
"Entry idle timer for isdcv." |
|
|
|
(and (eq isdcv-buffer |
|
|
|
(current-buffer)) |
|
|
|
;; do not duplicate timer |
|
|
|
(not isdcv--timer) |
|
|
|
(setq isdcv--timer (run-with-idle-timer 1 |
|
|
|
t |
|
|
|
'isdcv--timer-function)))) |
|
|
|
|
|
|
|
(defun isdcv--timer-remove () |
|
|
|
"Remove idle timer for isdcv." |
|
|
|
;; remote only when killing buffer is isdcv buffer |
|
|
|
(and (eq isdcv-buffer |
|
|
|
(current-buffer)) |
|
|
|
isdcv--timer |
|
|
|
(cancel-timer isdcv--timer))) |
|
|
|
|
|
|
|
(defvar isdcv-current-prompt-point nil |
|
|
|
"Point of beginning of current prompt.") |
|
|
|
(make-variable-buffer-local 'isdcv--current-prompt-point) |
|
|
|
|
|
|
|
(defun isdcv-bol () |
|
|
|
"Return point to bol ignoring prompt." |
|
|
|
(point-at-bol)) |
|
|
|
|
|
|
|
(defun isdcv--get-output-start () |
|
|
|
"Return point where outputs should be inserted. |
|
|
|
This function insert newline if required." |
|
|
|
(when isdcv-current-prompt-point |
|
|
|
(save-excursion |
|
|
|
(goto-char isdcv-current-prompt-point) |
|
|
|
(forward-line 1) |
|
|
|
(when (eq (line-number-at-pos) |
|
|
|
(line-number-at-pos isdcv-current-prompt-point)) |
|
|
|
(end-of-line) |
|
|
|
(newline)) |
|
|
|
(point-at-bol)))) |
|
|
|
|
|
|
|
(defun isdcv--timer-function () |
|
|
|
"Get entry for current isdcv input." |
|
|
|
(let ((input (isdcv--get-input)) |
|
|
|
(outpoint (isdcv--get-output-start))) |
|
|
|
(and input |
|
|
|
outpoint |
|
|
|
isdcv-sdcv-command |
|
|
|
(save-excursion |
|
|
|
(goto-char outpoint) |
|
|
|
(delete-region (point) |
|
|
|
(point-max)) |
|
|
|
(call-process-shell-command (format isdcv-sdcv-command |
|
|
|
input) |
|
|
|
nil |
|
|
|
t |
|
|
|
t))))) |
|
|
|
|
|
|
|
(defun isdcv--get-input () |
|
|
|
"Get current input for isdcv buffer. |
|
|
|
Return nil if current position is not on prompt line." |
|
|
|
(and (eq isdcv-buffer |
|
|
|
(current-buffer)) |
|
|
|
(eq (line-number-at-pos) |
|
|
|
(line-number-at-pos isdcv-current-prompt-point)) |
|
|
|
(buffer-substring-no-properties (isdcv-bol) |
|
|
|
(point-at-eol)))) |
|
|
|
|
|
|
|
(defun isdcv-open () |
|
|
|
"Open isdcv buffer." |
|
|
|
(interactive) |
|
|
|
(if isdcv-buffer |
|
|
|
(pop-to-buffer isdcv-buffer) |
|
|
|
(with-current-buffer (setq isdcv-buffer |
|
|
|
(get-buffer-create "*isdcv*")) |
|
|
|
(isdcv-mode) |
|
|
|
(font-lock-mode t) |
|
|
|
(setq isdcv-current-prompt-point |
|
|
|
(point)) |
|
|
|
(forward-line -1) |
|
|
|
(isdcv--timer-add) |
|
|
|
(add-hook 'kill-buffer-hook |
|
|
|
'isdcv--timer-remove) |
|
|
|
) |
|
|
|
(pop-to-buffer isdcv-buffer))) |
|
|
|
|
|
|
|
;;; emacs.el ends here |