[xyzzy:08674] Re: dynamic macro
- Subject: [xyzzy:08674] Re: dynamic macro
- From: kia <kia@xxxxxxxxxxxxxxx>
- X-mailer: MyMail-mode on xyzzy 0.2.2.233
こんにちは。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))