41 |
(defvar viper-syntax-preference) |
(defvar viper-syntax-preference) |
42 |
(defvar viper-saved-mark) |
(defvar viper-saved-mark) |
43 |
|
|
|
(require 'cl) |
|
44 |
(require 'ring) |
(require 'ring) |
45 |
|
|
46 |
(if noninteractive |
(if noninteractive |
1067 |
(t key))) |
(t key))) |
1068 |
|
|
1069 |
((listp key) |
((listp key) |
1070 |
(setq modifiers (subseq key 0 (1- (length key))) |
(setq modifiers (viper-subseq key 0 (1- (length key))) |
1071 |
base-key (viper-seq-last-elt key) |
base-key (viper-seq-last-elt key) |
1072 |
base-key-name (symbol-name base-key) |
base-key-name (symbol-name base-key) |
1073 |
char-p (= (length base-key-name) 1)) |
char-p (= (length base-key-name) 1)) |
1502 |
)) |
)) |
1503 |
|
|
1504 |
|
|
1505 |
|
;; this is copied from cl-extra.el |
1506 |
|
;; Return the subsequence of SEQ from START to END. |
1507 |
|
;; If END is omitted, it defaults to the length of the sequence. |
1508 |
|
;; If START or END is negative, it counts from the end. |
1509 |
|
(defun viper-subseq (seq start &optional end) |
1510 |
|
(if (stringp seq) (substring seq start end) |
1511 |
|
(let (len) |
1512 |
|
(and end (< end 0) (setq end (+ end (setq len (length seq))))) |
1513 |
|
(if (< start 0) (setq start (+ start (or len (setq len (length seq)))))) |
1514 |
|
(cond ((listp seq) |
1515 |
|
(if (> start 0) (setq seq (nthcdr start seq))) |
1516 |
|
(if end |
1517 |
|
(let ((res nil)) |
1518 |
|
(while (>= (setq end (1- end)) start) |
1519 |
|
(push (pop seq) res)) |
1520 |
|
(nreverse res)) |
1521 |
|
(copy-sequence seq))) |
1522 |
|
(t |
1523 |
|
(or end (setq end (or len (length seq)))) |
1524 |
|
(let ((res (make-vector (max (- end start) 0) nil)) |
1525 |
|
(i 0)) |
1526 |
|
(while (< start end) |
1527 |
|
(aset res i (aref seq start)) |
1528 |
|
(setq i (1+ i) start (1+ start))) |
1529 |
|
res)))))) |
1530 |
|
|
1531 |
|
|
1532 |
|
|
1533 |
(provide 'viper-util) |
(provide 'viper-util) |
1534 |
|
|