On Thu, Aug 11, 2011 at 12:40:20PM +0200, Michael Markert wrote:
> On 11 Aug 2011, Frank Fischer wrote:
> 
> > On Thu, Aug 11, 2011 at 01:56:05AM +0200, Michael Markert wrote:
> > You found a point where the evil already has an answer ;)
> 
> I hoped for this :)
> 
> > The following code should work (I removed the lambda-trick because you
> > need 'evil-define-command' so this is easier).
> 
> Thanks, it works great! But is there a way to produce a parameterized
> command like my function did? Short of extra variables/constants or a
> lexical-let on binding?

Currently the command-properties are stored in an alist that requires
the key to be a symbol (the function name), therefore a command with a
property like :repeat must be bound to a symbol, i.e., must be an
ordinary function and not a lambda expression. The only idea I have is
to use a macro:

(defmacro cofi/define-maybe-exit (entry-char exit-char)
  (let ((name (intern (concat "cofi/maybe-exit-"
                              (char-to-string entry-char)
                              (char-to-string exit-char)))))
    `(progn
       (define-key evil-insert-state-map (char-to-string ,entry-char) #',name)

       (evil-define-command ,name ()
         :repeat change
         (interactive)
         (let ((modified (buffer-modified-p)))
           (insert ,entry-char)
           (let ((evt (read-event (format "Insert %c to exit insert state" 
,exit-char)
                                  nil 0.5)))
             (cond
              ((null evt) (message ""))
              ((and (integerp evt) (char-equal evt ,exit-char))
               (delete-char -1)
               (set-buffer-modified-p modified)
               (push 'escape unread-command-events))
              (t (setq unread-command-events (append unread-command-events
                                                     (list evt)))))))))))

and then (cofi/define-maybe-exit ?j ?k). Alternatively one would have
to modify the functions `evil-put-property' and `evil-get-property' so
they can handle lambda-expressions as well.

Frank

_______________________________________________
implementations-list mailing list
[email protected]
https://lists.ourproject.org/cgi-bin/mailman/listinfo/implementations-list

Reply via email to