-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathskeleton-pair.el
63 lines (58 loc) · 1.75 KB
/
skeleton-pair.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
(setq skeleton-pair t)
(defvar skeleton-pair-cond-alist
'(
(?\( . ((t _ ")")))
(?\{ . ((t n _ n "}")))
(?\[ . (((char-bf ?=) n _ n "]")
(t _ "]")))
(?\" . ((t _ "\"")))
(?, . (((eolp) -1 " , ")
(t)))
(?= . (((eolp) -1 " " "= ")
(t)))
;; (?/ . (((bolp) "*" n _ n "*/")
;; (t _)))
;; (?. . (((bolp) -1 "->")
;; (t _)))
))
(defadvice skeleton-pair-insert-maybe (around condition activate)
(let* ((skeleton-pair-alist skeleton-pair-alist)
(key last-command-event)
(cnd (cdr (assq key skeleton-pair-cond-alist))))
(while
(and
cnd
(null
(if (eval (caar cnd))
(setq skeleton-pair-alist (list (cons key (cdar cnd))))
nil)))
(setq cnd (cdr cnd)))
;; (message (format "%S" skeleton-pair-alist))
ad-do-it))
(defun char-bf (x)
(let ((x (if (listp x) x (list x))))
(save-excursion
(skip-chars-backward " \t")
(memq (char-before (point)) x))))
(defun match-str-bf (regexp &optional back)
"str-bf is writen by ran9er"
(string-match
regexp
(save-excursion
(skip-chars-backward " \t")
(buffer-substring-no-properties
(point)
(progn (funcall (or back 'backward-sexp))(point))))))
;;;###autoload
(defun skeleton-pair-alist-update (&optional keymap)
(interactive)
(let ((keymap (or keymap (current-local-map))))
(mapc ;; (local-set-key (char-to-string (cadr x)) 'skeleton-pair-insert-maybe)
(eval
`(lambda(x)
(define-key ',keymap
(eval `(kbd ,(char-to-string (car x))))
;; (char-to-string (cadr x))
'skeleton-pair-insert-maybe)))
skeleton-pair-cond-alist)))
;; (skeleton-pair-alist-update)