User Tools

Site Tools


tips:nrepl.el

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
tips:nrepl.el [2013/08/11 16:58]
netpyoung
tips:nrepl.el [2019/02/04 14:26] (current)
Line 1: Line 1:
-<​markdown>​ 
-# nrepl-n-sp.el 
- ​lighttable 비스무리하게,​ 소스코드 상에서 expression의 평가 결과를 확인하고 싶었습니다. 키 설정은, lighttable과 같은 `Ctrl + Enter`로 했습니다. 
- 
-*  코드도 그리 길지 않아 간략하게 설명하자면,​ 
- - 현재 커서가 포함된 expression의 영역을 구한다. 
- - expression 영역끝으로 커서를 보낸 후, 
- - expression의 내용과 핸들러를 nrepl-send-string으로 보낸다. 
- - 그러면, nrepl이 expression을 평가한 후  핸들러를 통해 평가 결과를 돌려준다. 
-</​markdown>​ 
- 
-<code lisp> ​ 
-(require '​nrepl) 
- 
-(defun n-sp:format (prefix str) 
-  ;; (xx:format "​@"​ "​1\n2\n"​) => "​@1\n@2\n"​ 
-  (let* ((str (replace-regexp-in-string "​\^M"​ ""​ str)) 
-         (str (split-string str "​\n"​ t)) 
-         ​(line-prefix (concat "​\n"​ prefix))) 
-    (concat prefix (mapconcat '​identity ​ str line-prefix) "​\n"​))) 
- 
- 
-(defun n-sp:​print-handler (buffer) 
-  ;; buffer value-handler stdout-handler stderr-handler &​optional done-handler 
-  (nrepl-make-response-handler 
-   ​buffer 
-   ​(lambda (buffer value) 
-     ​(with-current-buffer buffer (insert (n-sp:​format ";​=>​ " value)))) 
-   ​(lambda (buffer out) 
-     ​(with-current-buffer buffer (insert (n-sp:​format ";>>​ " out)))) 
-   ​(lambda (buffer err) 
-     (let ((err (first (split-string err " ​ ")))) 
-       ​(with-current-buffer buffer (insert (n-sp:​format ";​->​ " err))))) 
-   '​())) 
- 
- 
-(defun n-sp:​eval-last-exp () 
-  (interactive) 
-  (let* ((region (nrepl-region-for-expression-at-point)) 
-         (expr (buffer-substring (first region) (second region)))) 
-    (goto-char (second region)) 
-    (nrepl-send-string expr 
-                       ​(n-sp:​print-handler (current-buffer)) nrepl-buffer-ns))) 
- 
- 
-;; [== key setting ==] 
-(define-key nrepl-interaction-mode-map [(control return)] '​n-sp:​eval-last-exp) 
-</​code> ​ 
- 
-참고. 
- 
-<​code>​ 
-nrepl-region-for-expression-at-point:​ "​point가 가리키는,​ defun의 시작과 끝 지점을 반환한다"​ 
-nrepl-send-string:​ "​input받은 것을 보내고, 응답 핸들러 callback을 등록한다."​ 
-nrepl-make-response-handler:​ "​response-handler를 만든다.."​ 
- 
-insert: 현재 버퍼에서 가리키른 커서로부터 문자열을 입력한다. 
- 
-goto-char: 지정한 위치로 커서를 움직인다. 
- 
-(concat "​a"​ "​bc"​) ;=> "​abc"​ 
- 
-(split-string "1 2 3 " " ") ;=> ("​1"​ "​2"​ "​3"​ ""​) 
-(split-string "1 2 3 " " " t) ;=> ("​1"​ "​2"​ "​3"​) 
-</​code>​ 
  
 +* nrepl add on
 + - [[.nrepl.el:​nrepl-sp.el|nrepl simple print]]
tips/nrepl.el.txt · Last modified: 2019/02/04 14:26 (external edit)