[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:08674] Re: dynamic macro



こんにちは。kiaです。

On Thu, 20 Feb 2003 11:05:55 +0900,
OHKUBO KOHEI <kuboon@xxxxxxxxxxxxx> wrote:
> 
> http://www.csl.sony.co.jp/person/masui/Research/Predict.html
>  で、公開されている、 Dynamic macro (dmacro.el) が、素敵だなぁと思って、
>  xyzzy上で動かそうと四苦八苦したのですが、うまく行きません。。。
>  
> どなたか、既に使っている方とか、いらっしゃいませんか?
> 

便利そうなもの教えていただきましてありがとうございます。
私はあまりキーボードマクロを使わないのですが、
これなら使うかも知れないと私も四苦八苦してみました。
とりあえず動いてる風なんですが、いかがでしょうか。
ひょっとしたらEmacsでは動かなくなったかもしれません。

#PDSって書いてありますけどパッチ出しても良いんでしょうかね?・・・といいつつ。

*** dmacro.el	Sun Feb 23 19:38:20 2003
--- dmacro.l	Sun Feb 23 19:48:42 2003
***************
*** 170,175 ****
--- 170,182 ----
  正しく処理できないので注意。
  GNU Emacs 18 (Nemacs) を使っている方以外は vector で問題ありません。")
  
+ (if (featurep ':xyzzy)
+     (progn
+       (setf (symbol-function 'dmacro-concat) #'concat)
+       (setf (symbol-function 'dmacro-subseq) #'substring))
+ 
+   (progn
+ 
  (fset 'dmacro-concat
        (cond ((eq dmacro-array-type 'string) 'concat)
  	    ((eq dmacro-array-type 'vector) 'vconcat)))
***************
*** 182,193 ****
               (require 'cl)
               'subseq)
              (t 'substring)))
   
  (defvar *dmacro-arry* nil "繰返しキー配列")
  (defvar *dmacro-arry-1* nil "繰返しキーの部分配列")
  
  (setq dmacro-key
!       (cond ((eq dmacro-array-type 'string)
               *dmacro-key*)
              (t
               (let ((key *dmacro-key*))
--- 189,205 ----
               (require 'cl)
               'subseq)
              (t 'substring)))
+ 
+ ))
   
  (defvar *dmacro-arry* nil "繰返しキー配列")
  (defvar *dmacro-arry-1* nil "繰返しキーの部分配列")
  
  (setq dmacro-key
!       (cond ((featurep ':xyzzy) (if (listp *dmacro-key*)
! 				    (concat *dmacro-key*)
! 				  (string *dmacro-key*)))
! 	    ((eq dmacro-array-type 'string)
               *dmacro-key*)
              (t
               (let ((key *dmacro-key*))
***************
*** 206,212 ****
    (let ((s (dmacro-get)))
      (if (null s)
  	(message "操作の繰返しが見つかりません")
!       (execute-kbd-macro s)
        )
      ))
  
--- 218,226 ----
    (let ((s (dmacro-get)))
      (if (null s)
  	(message "操作の繰返しが見つかりません")
!       (if (featurep ':xyzzy)
! 	  (command-execute s)
! 	(execute-kbd-macro s))
        )
      ))
  
***************
*** 223,229 ****
     ))
  
  (defun dmacro-recent-keys ()
!   (cond ((eq dmacro-array-type 'vector) (recent-keys))
  	((eq dmacro-array-type 'string)
  	 (let ((s (recent-keys)) )
  	   (if (stringp s) s
--- 237,244 ----
     ))
  
  (defun dmacro-recent-keys ()
!   (cond ((featurep ':xyzzy) (get-recent-keys))
! 	((eq dmacro-array-type 'vector) (recent-keys))
  	((eq dmacro-array-type 'string)
  	 (let ((s (recent-keys)) )
  	   (if (stringp s) s
***************
*** 242,256 ****
          (progn
            (setq *dmacro-arry-1* nil)
            *dmacro-arry*)
        (setq arry (dmacro-search (dmacro-subseq rkeys 0 (- (length dmacro-key)))))
        (if (null arry)
            (setq *dmacro-arry* nil)
          (let ((s1 (car arry)) (s2 (cdr arry)))
            (setq *dmacro-arry* (dmacro-concat s2 s1)
                  *dmacro-arry-1* (if (equal s1 "") nil s1))
!           (setq last-kbd-macro *dmacro-arry*)
            (if (equal s1 "") *dmacro-arry* s1))
!         ))))
  
  (defun dmacro-search (array)
    (let* ((arry (dmacro-array-reverse array))
--- 257,274 ----
          (progn
            (setq *dmacro-arry-1* nil)
            *dmacro-arry*)
+       (progn
        (setq arry (dmacro-search (dmacro-subseq rkeys 0 (- (length dmacro-key)))))
        (if (null arry)
            (setq *dmacro-arry* nil)
          (let ((s1 (car arry)) (s2 (cdr arry)))
            (setq *dmacro-arry* (dmacro-concat s2 s1)
                  *dmacro-arry-1* (if (equal s1 "") nil s1))
!           (if (featurep ':xyzzy)
!               (setq *last-kbd-macro* *dmacro-arry*)
!             (setq last-kbd-macro *dmacro-arry*))
            (if (equal s1 "") *dmacro-arry* s1))
!         )))))
  
  (defun dmacro-search (array)
    (let* ((arry (dmacro-array-reverse array))
***************
*** 277,283 ****
      ))
  
  (defun dmacro-array-reverse (arry)
!   (dmacro-concat (reverse (mapcar 'identity arry))))
  
  (defun dmacro-array-search (pat arry &optional start)
    (let* ((len (length pat))
--- 295,302 ----
      ))
  
  (defun dmacro-array-reverse (arry)
!   (if (featurep ':xyzzy) (reverse arry)
!     (dmacro-concat (reverse (mapcar 'identity arry)))))
  
  (defun dmacro-array-search (pat arry &optional start)
    (let* ((len (length pat))

Index Home