• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10.1/emacs-93/emacs/lisp/emulation/

Lines Matching +defs:viper +defs:fast +defs:keysequence

0 ;;; viper-macs.el --- functions implementing keyboard macros for Viper
29 (provide 'viper-macs)
32 (defvar viper-ex-work-buf)
33 (defvar viper-custom-file-name)
34 (defvar viper-current-state)
35 (defvar viper-fast-keyseq-timeout)
42 (or (featurep 'viper-util)
43 (load "viper-util.el" nil nil 'nosuffix))
44 (or (featurep 'viper-keym)
45 (load "viper-keym.el" nil nil 'nosuffix))
46 (or (featurep 'viper-mous)
47 (load "viper-mous.el" nil nil 'nosuffix))
48 (or (featurep 'viper-cmd)
49 (load "viper-cmd.el" nil nil 'nosuffix))
53 (require 'viper-util)
54 (require 'viper-keym)
60 (defvar viper-last-macro-reg nil)
65 (defvar viper-vi-kbd-macro-alist nil)
67 (defvar viper-insert-kbd-macro-alist nil)
69 (defvar viper-emacs-kbd-macro-alist nil)
73 (defvar viper-kbd-macro-parameters nil)
75 (defvar viper-this-kbd-macro nil
77 (defvar viper-last-kbd-macro nil
80 (defcustom viper-repeat-from-history-key 'f12
90 :group 'viper)
102 (set-buffer viper-ex-work-buf)
111 (setq viper-kbd-macro-parameters (list ins mod-char macro-name macro-body))
113 (viper-end-mapping-kbd-macro 'ignore)
115 (viper-display-macro macro-name)))
117 (if ins (viper-change-state-to-insert))
119 (define-key viper-vi-intercept-map "\C-x)" 'viper-end-mapping-kbd-macro)
120 (define-key viper-insert-intercept-map "\C-x)" 'viper-end-mapping-kbd-macro)
121 (define-key viper-emacs-intercept-map "\C-x)" 'viper-end-mapping-kbd-macro)
123 (viper-display-macro macro-name)
133 (set-buffer viper-ex-work-buf)
141 (setq temp (viper-fixup-macro (vconcat macro-name))) ;; copy and fixup
143 (viper-display-macro temp)))
144 (viper-unrecord-kbd-macro macro-name (if ins 'insert-state 'vi-state))
183 (setq key-seq (viper-subseq key-seq 0 (- (length key-seq) 2))))
188 (prin1-to-string (viper-display-macro key-seq))
191 (setq event (viper-read-key))
192 ;;(setq event (viper-read-event))
194 (if (viper-mouse-event-p event)
200 (viper-event-key event)))
206 (setq macro-name (viper-fixup-macro macro-name))
207 (if (viper-char-array-p macro-name)
208 (setq macro-name (viper-char-array-to-macro macro-name)))
211 (cond ((viper-char-array-p macro-body)
212 (setq macro-body (viper-char-array-to-macro macro-body)))
224 viper-insert-kbd-macro-alist
225 viper-vi-kbd-macro-alist))
228 viper-vi-kbd-minor-mode viper-insert-kbd-minor-mode
229 viper-emacs-kbd-minor-mode
230 viper-vi-intercept-minor-mode viper-insert-intercept-minor-mode
231 viper-emacs-intercept-minor-mode
247 (setq key-seq (viper-subseq key-seq 0 (- (length key-seq) 2))))
249 (setq key-seq (viper-subseq key-seq 0 (1- (length key-seq))))
255 (viper-display-macro key-seq))
258 (viper-do-sequence-completion key-seq macro-alist message))
265 (viper-display-macro key-seq))
268 (setq event (viper-read-key))
269 ;;(setq event (viper-read-event))
271 (if (viper-mouse-event-p event)
277 (viper-event-key event)))
295 (defun viper-end-mapping-kbd-macro (&optional ignore)
297 (define-key viper-vi-intercept-map "\C-x)" nil)
298 (define-key viper-insert-intercept-map "\C-x)" nil)
299 (define-key viper-emacs-intercept-map "\C-x)" nil)
301 (or (not viper-kbd-macro-parameters)
304 (let ((mod-char (nth 1 viper-kbd-macro-parameters))
305 (ins (nth 0 viper-kbd-macro-parameters))
306 (macro-name (nth 2 viper-kbd-macro-parameters))
307 (macro-body (nth 3 viper-kbd-macro-parameters)))
308 (setq viper-kbd-macro-parameters nil)
312 (setq macro-body (viper-events-to-macro last-kbd-macro))
315 (viper-change-state-to-vi)))
317 (viper-record-kbd-macro macro-name
319 (viper-display-macro macro-body))
322 (viper-display-macro macro-name)
323 (viper-display-macro macro-body)))
337 (defun viper-record-kbd-macro (macro-name state macro-body &optional scope)
338 "Record a Vi macro. Can be used in `.viper' file to define permanent macros.
349 keymap viper-vi-kbd-map)
350 'viper-vi-kbd-macro-alist)
353 keymap viper-insert-kbd-map)
354 'viper-insert-kbd-macro-alist)
357 keymap viper-emacs-kbd-map)
358 'viper-emacs-kbd-macro-alist)
367 ;; recorded in ~/.viper may be recorded as strings. So, convert to
369 (setq macro-name (viper-fixup-macro macro-name))
370 (if (viper-char-array-p macro-name)
371 (setq macro-name (viper-char-array-to-macro macro-name)))
372 (setq macro-body (viper-fixup-macro macro-body))
373 (if (viper-char-array-p macro-body)
374 (setq macro-body (viper-char-array-to-macro macro-body)))
390 (viper-display-macro macro-name)
391 (viper-abbreviate-string
394 (setq temp (viper-display-macro macro-body)))
406 (viper-display-macro macro-name)
407 (viper-abbreviate-string
410 (setq temp (viper-display-macro macro-body)))
419 (viper-display-macro macro-name)
420 (viper-abbreviate-string
423 (setq temp (viper-display-macro macro-body)))
430 (viper-abbreviate-file-name viper-custom-file-name)))
431 (viper-save-string-in-file
432 (format "\n(viper-record-kbd-macro %S '%S %s '%S)"
433 (viper-display-macro macro-name)
438 ;; macros in .viper.
445 viper-custom-file-name))
464 (vector (viper-key-to-emacs-key (aref macro-name 0)))
465 'viper-exec-mapped-kbd-macro)
467 (while (and lis (string< (viper-array-to-string (car (car lis)))
468 (viper-array-to-string macro-name)))
476 (cond ((eq scope t) (viper-kbd-global-pair old-elt))
477 ((symbolp scope) (assoc scope (viper-kbd-mode-alist old-elt)))
478 ((stringp scope) (assoc scope (viper-kbd-buf-alist old-elt)))))
483 (viper-kbd-mode-alist old-elt))))
486 (viper-kbd-buf-alist old-elt))))))
491 ;; macro name must be a vector of viper-style keys
492 ;; viper-unrecord-kbd-macro doesn't have scope. Macro definitions are inherited
497 (defun viper-unrecord-kbd-macro (macro-name state)
499 MACRO-NAME must be a vector of viper-style keys. This command is used by Viper
500 internally, but the user can also use it in ~/.viper to delete pre-defined
502 be passed to this function is to use viper-describe-kbd-macros and copy the
508 keymap viper-vi-kbd-map)
509 'viper-vi-kbd-macro-alist)
512 keymap viper-insert-kbd-map)
513 'viper-insert-kbd-macro-alist)
516 keymap viper-emacs-kbd-map)
517 'viper-emacs-kbd-macro-alist)
523 ;; recorded in ~/.viper may appear as strings. So, convert to vectors.
524 (setq macro-name (viper-fixup-macro macro-name))
525 (if (viper-char-array-p macro-name)
526 (setq macro-name (viper-char-array-to-macro macro-name)))
533 (viper-display-macro macro-name)
536 (setq buf-mapping (viper-kbd-buf-pair macro-entry)
537 mode-mapping (viper-kbd-mode-pair macro-entry)
538 global-mapping (viper-kbd-global-pair macro-entry))
544 (viper-display-macro macro-name)
548 (viper-display-macro macro-name)
554 (viper-display-macro macro-name)
558 (viper-display-macro macro-name) state-name major-mode))
562 (viper-display-macro macro-name) state-name))
564 (viper-display-macro macro-name)
572 (if (viper-can-release-key (aref macro-name 0)
576 (vector (viper-key-to-emacs-key (aref macro-name 0)))
583 ;; in viper-vi/insert-kbd-map can be released.
584 (defun viper-can-release-key (char macro-alist)
597 (defun viper-exec-mapped-kbd-macro (count)
600 (let* ((macro-alist (cond ((eq viper-current-state 'vi-state)
601 viper-vi-kbd-macro-alist)
602 ((memq viper-current-state
604 viper-insert-kbd-macro-alist)
606 viper-emacs-kbd-macro-alist)))
610 viper-vi-kbd-minor-mode viper-insert-kbd-minor-mode
611 viper-emacs-kbd-minor-mode
617 event-seq (viper-read-fast-keysequence macro-first-char macro-alist)
618 keyseq (viper-events-to-macro event-seq)
620 next-best-match (viper-find-best-matching-macro macro-alist keyseq))
624 unmatched-suffix (viper-subseq event-seq (cdr next-best-match))))
627 ((setq macro-body (viper-kbd-buf-definition macro-alist-elt)))
628 ((setq macro-body (viper-kbd-mode-definition macro-alist-elt)))
629 ((setq macro-body (viper-kbd-global-definition macro-alist-elt))))
635 (setq viper-this-kbd-macro (car macro-alist-elt))
636 (execute-kbd-macro (viper-macro-to-events macro-body) count)
637 (setq viper-this-kbd-macro nil
638 viper-last-kbd-macro (car macro-alist-elt))
639 (viper-set-unread-command-events unmatched-suffix))
642 (viper-set-unread-command-events event-seq)
659 (defun viper-describe-kbd-macros ()
662 (with-output-to-temp-buffer " *viper-info*"
664 (mapcar 'viper-describe-one-macro viper-vi-kbd-macro-alist)
666 (mapcar 'viper-describe-one-macro viper-insert-kbd-macro-alist)
668 (mapcar 'viper-describe-one-macro viper-emacs-kbd-macro-alist)
671 (defun viper-describe-one-macro (macro)
673 (viper-display-macro (car macro))))
675 (if (viper-kbd-buf-alist macro)
676 (mapcar 'viper-describe-one-macro-elt (viper-kbd-buf-alist macro))
679 (if (viper-kbd-mode-alist macro)
680 (mapcar 'viper-describe-one-macro-elt (viper-kbd-mode-alist macro))
683 (if (viper-kbd-global-definition macro)
684 (princ (format "\n %S" (cdr (viper-kbd-global-pair macro))))
688 (defun viper-describe-one-macro-elt (elt)
696 (defun viper-keyseq-is-a-possible-macro (seq alist)
697 (let ((converted-seq (viper-events-to-macro seq)))
700 (lambda (elt) (viper-prefix-subseq-p converted-seq elt))
701 (viper-this-buffer-macros alist))))))
704 (defun viper-prefix-subseq-p (seq1 seq2)
708 (equal seq1 (viper-subseq seq2 0 len1)))))
711 (defun viper-common-seq-prefix (&rest seqs)
729 (defun viper-extract-matching-alist-members (pref alist)
730 (delq nil (mapcar (lambda (elt) (if (viper-prefix-subseq-p pref elt) elt))
731 (viper-this-buffer-macros alist))))
733 (defun viper-do-sequence-completion (seq alist compl-message)
734 (let* ((matches (viper-extract-matching-alist-members seq alist))
735 (new-seq (apply 'viper-common-seq-prefix matches))
747 (viper-display-vector-completions matches))
749 (viper-display-vector-completions matches)))
753 (defun viper-display-vector-completions (list)
757 (mapcar 'viper-display-macro list)))))
762 ;; str is the fast key sequence entered
764 (defun viper-find-best-matching-macro (alist str)
773 (equal (car macro-def) (viper-subseq str 0 def-len)))
774 (if (or (viper-kbd-buf-definition macro-def)
775 (viper-kbd-mode-definition macro-def)
776 (viper-kbd-global-definition macro-def))
792 (defun viper-this-buffer-macros (macro-alist)
796 (if (or (viper-kbd-buf-definition elt)
797 (viper-kbd-mode-definition elt)
798 (viper-kbd-global-definition elt))
806 (defun viper-display-macro (macro-name-or-body)
807 (cond ((viper-char-symbol-sequence-p macro-name-or-body)
809 ((viper-char-array-p macro-name-or-body)
822 (defun viper-events-to-macro (event-seq)
825 (viper-event-key elt)))
829 (defun viper-char-array-to-macro (array)
832 (if viper-xemacs-p
835 (vconcat (mapcar 'viper-event-key macro))))
841 (defun viper-fixup-macro (macro)
860 (viper-fixup-macro elt))
869 (defun viper-macro-to-events (macro-body)
870 (vconcat (mapcar 'viper-key-to-emacs-key macro-body)))
875 ;;; Reading fast key sequences
877 ;; Assuming that CHAR was the first character in a fast succession of key
879 ;; this fast succession of key strokes.
880 ;; A fast keysequence is one that is terminated by a pause longer than
881 ;; viper-fast-keyseq-timeout.
882 (defun viper-read-fast-keysequence (event macro-alist)
885 (while (and (viper-fast-keysequence-p)
886 (viper-keyseq-is-a-possible-macro lis macro-alist))
887 (setq next-event (viper-read-key))
888 ;;(setq next-event (viper-read-event))
889 (or (viper-mouse-event-p next-event)
898 (defun viper-set-register-macro (reg)
906 (defun viper-register-macro (count)
911 (setq viper-last-macro-reg reg)
915 (viper-set-register-macro reg))
918 (if viper-last-macro-reg
921 (execute-kbd-macro (get-register viper-last-macro-reg) count))
928 (setq viper-last-macro-reg reg)
929 (viper-set-register-macro reg))))
934 (defun viper-global-execute ()
946 ;;; viper-macs.el ends here