掲示板

お名前:
題名:

aliasとblogのプラグイン

Naoki (2008-02-17 18:38:41 (日))

改悪版aliasが役に立ったようで嬉しいです.
改造じゃなくて改悪なので,本家にあげるのは気が引けます^^;

blogは元々入ってたcalendar_viewer.inc.phpを改造して使っています.
http://www.f13g.com/tmp/calendar_viewer.inc.php.txt
置いておくので,自由に使っていただいて良いですよ.
ただし,blog/以下にページを置いている必要があるので気をつけて下さい.
他にも色々そのままじゃ動かない気がします.言っていただければ修正します.

あと,ブログのどの辺りを使ってみたいのかによって,calendar_viewer以外に必要なものもあるので,言っていただければ放出します.

ブログプラグイン

lumo (2008-02-17 15:24:29 (日))

それと、よければブログのプラグイン名など教えていただけないでしょうか?探しているのですが、良く見つからなくて。_ _

alias.inc.php

lumo (2008-02-17 15:19:22 (日))

alias.inc.phpの改造版役立ちました!現在では本家のほうも鯖落ちてる?みたいなので、助かりました!自作プラグインのところにアップしても大丈夫なのでは?というかお願いしたいですw作者さんももう修正とかしないとかいってるみたいです。

http://lumo.press9.net/wp-content/plus/

strong-set-keymap関係

Naoki (2007-11-11 03:25:35 (日))

仮想キーコードは,mayuに付属のツールを使ったり
http://www.imasy.or.jp/~yotti/zau/zaukb.html
のvkeyを使うことで調べる事ができます.
ちなみに,日本語キーボードの場合,右上の「'|', '\'」キーはvk-oem-5
右下の「'_', '\'」キーはvk-oem-102で指定する事ができます.

仮想キーコードが分かれば,windef.scmと同じ形式で(1番目が名前,2番目が値)好きな名前をつけれますよ.

あと,strong-set-keymapはprefix無しにも対応しています.
strong...はマクロをapplyしたくてevalを使っている為,大変読みにくく仕上がっております^^;

strong-set-keymap2

質問者 (2007-11-10 16:38:40 (土))

連書きすいません。
strong-set-keymapでは、prefix無しも対応していますか?
(define all-mod (list mod-alt mod-control mod-shift mod-win))の中にprefix無しの場合の「0」が入っているとわかりやすかったのですが、その後の処理でprefix無しが記述されているかは残念ながら自分のスキルでは読解はムリでしたorz

strong-set-keymap

質問者 (2007-11-10 16:29:13 (土))

ありがとうございます。
ただset-keymapと共に、自分の希望する動作が得られませんでした。
例えば「\」とvk-downの入れ替えをする場合、「\」をどのように記述しますか?

#\\、#\x73(キーコード)のいずれもだめで、windef.scmのdefineのようにキーをvk化しようとしましたが、defineの第二引数がキーコードと思っていたのがそうでは無いようで、定義できませんでした。
キーコードを直接指定したり、defineでエイリアスを付けるみたいなことができるといいと思いました。

Re: set-keymap

Naoki (2007-11-09 15:59:19 (金))

こんな感じでいかがでしょうか

(define (all-combinate l)
  (cond ((null? l) '(())) 
	(else
	 (let ((c (car l))
	       (d (all-combinate (cdr l))))
	   (append (map (lambda (a) (cons c a)) d)
		   d)))))

(define all-mod (list mod-alt mod-control mod-shift mod-win))

(define (mod-combinate-imp mods)
  (map (curry apply +)
       (map (curry append mods)
	    (all-combinate
	     (filter (lambda (a) (not (find a mods))) all-mod)))))

(define (mod-combinate mod)
  (mod-combinate-imp
   (apply append
	  (map (lambda (m) (if (<> (logand mod m) 0) `(,m) ()))
	       all-mod))))

(define-macro (strong-set-keymap mod vk to . exception)
  `(begin
     (map (lambda (m) (eval (cons set-keymap (append (list m ,vk ,to) ,exception))))
	  (mod-combinate ,mod))
     events))
(strong-set-key-map mod-alt #\a #\b)

等とすると,alt+aでも ctrl+alt+aでも,bが入力されます.
全パターン登録する方法で実現しているので,無理やり感がありますが試してみてください.

set-keymap

[[質問者 ]] (2007-11-09 06:02:23 (金))

move-window/dist、resize-window/dist ありがとうございます。
ところで、set-keymapについて、mayuの場合、prefixをすべて指定ができます。
ひとつのキー置き換えでも、prefix=(alt|ctrl|shift|win)+なしの大量の設定を記載する必要があるため、このあたり上手いことできそうでしょうか?

move-window

Naoki (2007-11-08 19:19:29 (木))

move-window/distとresize-window/distを書いてみました

(define (move-window/dist hwnd dx dy)
  (let ((p (get-window-position hwnd)))
    (set-window-position hwnd `(,(+ (car  p) dx)
                                ,(+ (cadr p) dy)))))

(define (resize-window/dist hwnd dw dh)
  (let ((s (get-window-size hwnd)))
    (set-window-size hwnd
                     (+ (car  s) dw)
                     (+ (cadr s) dh))))

下のように使います.

(define move-dist 20)
(define move-ndist (* -1 move-dist))
(set-key mod-alt vk-up
         (lambda () (move-window/dist (get-foreground-window) 0 move-ndist)))
(set-key mod-alt vk-down
         (lambda () (move-window/dist (get-foreground-window) 0  move-dist)))
(set-key mod-alt vk-left
         (lambda () (move-window/dist (get-foreground-window) move-ndist 0)))
(set-key mod-alt vk-right
         (lambda () (move-window/dist (get-foreground-window) move-dist  0)))

(set-key mod-win vk-up
         (lambda () (resize-window/dist (get-foreground-window) 0 move-ndist)))
(set-key mod-win vk-down
         (lambda () (resize-window/dist (get-foreground-window) 0 move-dist)))
(set-key mod-win vk-left
         (lambda () (resize-window/dist (get-foreground-window) move-ndist 0)))
(set-key mod-win vk-right
         (lambda () (resize-window/dist (get-foreground-window) move-dist  0)))

alt+方向キーで移動,win+方向キーでリサイズできます.

Re: xyzzyのクラス名

質問者 (2007-11-08 19:12:51 (木))

早速のご回答ありがとうございます。
お望みの結果が得られました。
#WindowClassとWindowsTitleの引数の理解が曖昧だったようです。今回でわかったと思います。

xyzzyのクラス名

Naoki (2007-11-08 17:12:01 (木))

xyzzyのクラス名はSJISの全角スペースのようです.とりあえず,これで対処してみてください.

早速のご回答ありがとうございます

質問者 (2007-11-08 12:35:25 (木))

xyzzyというエディタを使っていますが、これはget-class-nameで取れないみたいです。" "が戻っています。なので、window-textのワイルドカードがあるとうれしいです。
あとwinmoveは1の方法で充分です。引数に数値を渡すと、その数値分移動したり拡縮したりというのが好ましいです。
emacs-mode-exceptionについては了解しました。

なんか連書きでの質問・要望で大変恐縮ですが、どうぞよろしくお願いします。

質問等ありがとうございます

Naoki (2007-11-08 11:23:12 (木))

ウィンドウクラス名は,ウィンドウのタイトルとは別の値で,アプリケーション毎に(大体)固有の値になっています.
コンソール上で

(map get-window-text (enum-visible-windows))

として列挙されるものがウィンドウのタイトルで

(map get-class-name (enum-visible-windows))

として列挙されるものがウィンドウクラス名になります.

画面には表示されない情報なので,わざわざ調べる必要がありますが
特定のアプリケーションを指定するには,こちらの方が確実なのでこのような仕様になっています.(IEの場合,常にIEFrameのはずです)

ワイルドカードは今の所ありませんが,どうしても必要な状況があれば実装を考えてみます.

emacs-mode-exception
適用ウィンドウを指定する方法ですが,emacs.scmをいじらないと実現できません.
ちょっといじってみますね.

winmove
これは,そういう要望もあるだろうなぁと思っていたのですが
私は困ってなかったので,後回しにしていました^^;
実装は大変ではないのでやってみようと思うのですが
どのような動きが良いですか?

  1. 今あるコマンドとは別に,ちょっとずつ動かすコマンドを用意する
    これだと,user.scmにちょっと書くだけで実現できます.
  2. 今あるコマンドで,移動の距離が長い時には,一定の量の移動にする
    便利な気もしますが,左端から右端に移す時などめんどくさい気もします.
  3. その他
    もっと使いやすそうな何か.

無題

質問者 (2007-11-08 10:57:44 (木))

winmoveとmove-windowのサイズ拡縮量や移動量を、数値で指定することはできますか?
現状では、そのほかのWindowsと端合わせしているようですが、ちょっとずつ拡げるとかができるといいと思います。

emacs-mode-exception

質問者 (2007-11-08 09:58:26 (木))

連書きすいません。emacs-modeの非適用Windowsより適用Windowsを指定する方法はありますか?
emacs-mode-exceptionがALLで、そのexceptionのような。
ややこしいですね、emacs-mode-appliedみたいな?

find-window

質問者 (2007-11-08 09:25:06 (木))

バージョンアップありがとうございます。
質問ですが、find-windowでウィンドウクラス名が完全一致でないと、起動しないようですが、これをワイルドカード指定できる方法はありますか?
例えば、Microsoft Internet Explorerでは拾えず、Google - Microsoft Internet Explorerまで指定する必要があります。前者だけでも拾えるようにしたく。

Re: キー関係

Naoki (2007-11-07 23:49:57 (水))

何かそれっぽいコードを書いた記憶があったので試してみたところ

; タスクマネージャを ctrl+alt+t で表示
(set-keymap (+ mod-control mod-alt) #\t
            (vk-shift vk-control vk-escape))

とやると,WindowsManager ver0.06でもタスクマネージャが表示できました.
メタキーの同時押しにはすでに対応してたみたいです^^;

メタキーなどの区別はありませんが,置き換える仮想キーの所に

(set-keymap 0 #\a vk-return)

のように仮想キーを一つ指定すると,ただの置き換え.

(set-keymap 0 #\a (vk-control vk-shift vk-escape))

のようにリストを指定すると
ctrl(押) -> shift(押) -> escape(押) -> ctrl(離) -> shift(離) -> escape(離)
のように動作します.

この後アップロードするver0.07では,気持ち悪かったのでキーを離す順番が逆で
ctrl(押) -> shift(押) -> escape(押) -> escape(離) -> shift(離) -> ctrl(離)
のようになります.

Re: キー関係

Naoki (2007-11-07 15:36:27 (水))

(send-key vk-down #t)(send-key vk-down #f)を一行にまとめるには

(define (key-click vk)
  (send-key vk #t)
  (send-key vk #f))

のように書いておけば,それ以降 (key-click vk-down)のように使うことができます.~
私の手元のWindowManagerには上の記述がapi.scmに含まれるのですが,まだ公開できていません

メタキー同時押しもそれっぽい物を用意してみようと思います.ありがとございました.

Re: キー関係

質問者 (2007-11-07 09:21:29 (水))

キーの入れ替えについて、提案します。
(send-key vk-down #t)(send-key vk-down #f)の2行を一行にまとめることは可能でしょうか?
またメタキー同時押しも(set-key mod-alt vk-return..)のような様式がいいように思います。
例えば、下記のような感じになります:
(set-key mod-control #\n~ ;;Ctrl+nをCtrl+下カーソルにリマップ

 (lambda ()
   (remap-key mod-control vk-down)
 )

)
複数メタキーの場合、set-keyと同様に(remap-key (+ mod-control mod-alt) vk-down)のように。

Re:ご回答ありがとうございます

Naoki (2007-10-28 20:05:37 (日))

emacsとsevilwmの良いとこ取りをしようとして始めたソフトですが,期待に答えられるようがんばります.

ご回答ありがとうございます

質問者 (2007-10-28 18:22:05 (日))

岩崎様、ご回答ありがとうございます。また、有益なソフトウェアの公開をありがとうございます。
まだよくわかりませんが、schemeの処理系にWindows APIの対応を実装して、それをキーにバインドできる、というのは、すごくいいアイディアのように思います。
#Linuxではgaucheのようなスクリプトインタプリタがありますが、キーバインドはできない。emacs, xyzzyはキーバインドできるけど、それ自身の閉じた環境内でしか使えない、ので。
大変期待しています。これからもよろしくお願いします。

キー関係

Naoki (2007-10-28 17:37:12 (日))

>WindowsManagerでのキー入れ替え
「キーを押下」はsend-key関数を使うことで実現できます.
(send-key 仮想キーコード 押すor離す)のように使います.例えば

(set-key mod-control #\n~
         (lambda ()
           (send-key vk-control #f)
           (send-key vk-down #t)
           (send-key vk-down #f)
           (send-key vk-control #t)))

とすれば,ctrl+nで下キーを押したのと同じ動作をさせることができます.
ドキュメント無いと,わからないですよね^^;

ただ,ctrlとcapslockを入れ替えるような処理は,キーを上げた時の動作を指定する事ができないため実現できません.完全にキーを入れ替えたい場合は,レジストリを編集してキーマップをいじる方が楽じゃないかと思います.

あと,mayuのように「Meadowの時はキーを置き換えない」のような処理が今のところいくつか問題があるため出来ないので(出来ないことはない気がしますが),色々と不便かもしれません.
unset-keyを実装すれば無理やり動かすことはできるので,試してみますね.

>altのdefine?
vk-menuがaltキーになっているので,そちらを使ってください.次のバージョンから,分かりやすいようvk-altも追加しておきます.
左右の区別があるvkは,WindowsAPIのGetKeyboardState,SetKeyboardState,GetAsyncKeyState,GetKeyState,MapVirtualKeyで使うものなのでWindowsManagerだと普段は使わないでOKです.
SetKeyboardStateを使うと,左右それぞれのキーについて,状態をセットする事ができます.左右のキーを区別するゲーム用等に使えます.

altのdefine?

質問者 (2007-10-28 14:18:58 (日))

バージョン005を使用(試用?)しています。
windef.scmを見たところ、altキーについてのvk定義が無いように思いますが、これは追加で定義できますか?
また、shiftとcontrolについては、左右の区別無しの#x10, #x11と、左右の区別ありの#xa0, #xa1, #xa2, #xa3がありますが、両者はどのように使い分けるのでしょうか?

WindowsManagerでのキー入れ替え

質問者 (2007-10-28 09:31:01 (日))

WindowsManagerのTutorialセクションに複数投稿してしまいました。大変申し訳ありません。こちらに転記しますので、当該の投稿は削除くださいますよう、お願いします。

  • mayu(窓使いの憂鬱)のように単にキーを入れ替えるということはできますか?「キーを押下」みたいな関数があればいいように思いますが。VirtualDemensionとmayuがひとつで置き換えられそうで大変期待しています。

あはは

匿名希望 (2007-10-27 15:33:27 (土))

きみすげぇな
http://www.youtube.com/watch?v=8DBrrDCJ92A
ばいばい

かけるね

管理人 (2007-05-06 17:46:02 (日))

書けた

認証

管理人 (2007-05-06 17:45:44 (日))

認証付きの状態だと,BBSってどうなるのかな・・・ テスト.

スパム対策のチェック

管理人 (2007-04-12 21:51:07 (木))

ほげほげ