Intercept some reading commands

- so you won't have to answer them for every single cursor

Fixes #15
This commit is contained in:
Magnar Sveen 2012-09-27 19:42:38 +02:00
parent ae0033fe3d
commit 97da9778fd
3 changed files with 37 additions and 1 deletions

View File

@ -119,6 +119,13 @@ Feature: Multiple cursors core
And I type "!" And I type "!"
Then I should see "This ! contains the word ! twice" Then I should see "This ! contains the word ! twice"
Scenario: Bound keyboard macros
Given I have bound C-! to a keyboard macro that insert "_"
And I have cursors at "text" in "This text contains the word text twice"
When I press "C-!"
When I press "C-!"
Then I should see "This __text contains the word __text twice"
Scenario: Interprogram paste Scenario: Interprogram paste
Given I have cursors at "text" in "This text contains the word text twice" Given I have cursors at "text" in "This text contains the word text twice"
When I copy "external" in another program When I copy "external" in another program

View File

@ -68,6 +68,11 @@
(defun mc-test-temp-command-2 () (interactive) (insert ins)) (defun mc-test-temp-command-2 () (interactive) (insert ins))
(global-set-key (kbd "C-!") 'mc-test-temp-command-2)))) (global-set-key (kbd "C-!") 'mc-test-temp-command-2))))
(Given "^I have bound C-! to a keyboard macro that insert \"_\"$"
(lambda ()
(fset 'mc-test-temp-kmacro "\C-q_")
(global-set-key (kbd "C-!") 'mc-test-temp-kmacro)))
(When "^I go to character \"\\(.+\\)\"$" (When "^I go to character \"\\(.+\\)\"$"
(lambda (char) (lambda (char)
(goto-char (point-min)) (goto-char (point-min))

View File

@ -205,7 +205,31 @@ cursor with updated info."
(mc/pop-state-from-overlay cursor) (mc/pop-state-from-overlay cursor)
(ignore-errors (ignore-errors
(mc/execute-command cmd) (mc/execute-command cmd)
(mc/create-fake-cursor-at-point id))))))))) (mc/create-fake-cursor-at-point id))))))))
(mc--reset-read-prompts))
;; Intercept some reading commands so you won't have to
;; answer them for every single cursor
(defadvice read-char (around mc-support activate)
(if (not multiple-cursors-mode)
ad-do-it
(unless mc--read-char
(setq mc--read-char ad-do-it))
(setq ad-return-value mc--read-char)))
(defadvice read-quoted-char (around mc-support activate)
(if (not multiple-cursors-mode)
ad-do-it
(unless mc--read-quoted-char
(setq mc--read-quoted-char ad-do-it))
(setq ad-return-value mc--read-quoted-char)))
(defun mc--reset-read-prompts ()
(setq mc--read-char nil)
(setq mc--read-quoted-char nil))
(mc--reset-read-prompts)
(defun mc/fake-cursor-p (o) (defun mc/fake-cursor-p (o)
"Predicate to check if an overlay is a fake cursor" "Predicate to check if an overlay is a fake cursor"