Hatena::ブログ(Diary)

もうカツ丼でいいよな このページをアンテナに追加 RSSフィード

2009 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 04 | 05 | 06 | 07 | 08 | 09 | 12 |
2012 | 02 | 03 | 04 | 05 | 06 | 10 | 11 | 12 |
2013 | 01 | 02 | 04 | 06 |
2014 | 06 |

2013-04-14

[][] WordVBAでのマクロショートカット割り当て(Emacsキーバインド暫定版) 23:49  WordVBAでのマクロのショートカット割り当て(Emacs風キーバインド暫定版) - もうカツ丼でいいよな を含むブックマーク  WordVBAでのマクロのショートカット割り当て(Emacs風キーバインド暫定版) - もうカツ丼でいいよな のブックマークコメント

Wordの場合はApplication.KeyBindings.Addメソッドを使ってショートカットキーの割り当てができる。

Application.Keybindings.Add _
    KeyCategory:=wdKeyCategoryCommand, _
    Command:="Command", _
    KeyCode:="KeyCode"

あまり良く読んでないのでKeyCategory引数の意味とかしっかり理解していないが、"Command"には割り当てたいマクロの名前を文字列として、"KeyCode"には割り当てたいキーのーキーコードを数値として与える。キーコードはwdKeyAやwdKeyControlなどの名前の定数が用意されているので、それを足しあわせて作る。

割り当てたショートカットを解除するには次のようにする。

With Application.FindKey("KeyCode")
    .Disable
    .Clear
End With

解除したいショートカットキーのキーコードを"KeyCode"に指定する。

これを利用すると、Wordで比較的簡単にEmacsキーバインドを再現できる。

ちょっとだけやってみた。

'' ----- Emacsモードの有効化と無効化 ---------------------
Sub EnableEmacsMode()
    Call AddKeyBindings("ForwardChar", wdKeyControl + wdKeyF)
    Call AddKeyBindings("BackwardChar", wdKeyControl + wdKeyB)
    Call AddKeyBindings("NextLine", wdKeyControl + wdKeyN)
    Call AddKeyBindings("PreviousLine", wdKeyControl + wdKeyP)
    Call AddKeyBindings("BeginningOfLine", wdKeyControl + wdKeyA)
    Call AddKeyBindings("EndOfLine", wdKeyControl + wdKeyE)
End Sub

Sub DisableEmacsMode()
    Call DeleteKeyBindings(wdKeyControl + wdKeyF)
    Call DeleteKeyBindings(wdKeyControl + wdKeyB)
    Call DeleteKeyBindings(wdKeyControl + wdKeyN)
    Call DeleteKeyBindings(wdKeyControl + wdKeyP)
    Call DeleteKeyBindings(wdKeyControl + wdKeyA)
    Call DeleteKeyBindings(wdKeyControl + wdKeyE)
End Sub

Sub AddKeyBindings(Command As String, KeyCode As Long)
    '' キーバインド登録
    Application.KeyBindings.Add _
        KeyCategory:=wdKeyCategoryCommand, _
        Command:=Command, KeyCode:=KeyCode
End Sub

Sub DeleteKeyBindings(KeyCode As Long)
    '' キーバインド登録解除
    With Application.FindKey(KeyCode)
        .Disable: .Clear
    End With
End Sub


'' ------ キーバインドマクロ定義 ------------------------
Sub ForwardChar() '' カーソル前移動
    Selection.MoveRight unit:=wdCharacter, Count:=1
End Sub
Sub BackwardChar() '' カーソル後ろ移動
    Selection.MoveLeft unit:=wdCharacter, Count:=1
End Sub
Sub NextLine() '' カーソル下移動
    Selection.MoveDown unit:=wdLine, Count:=1
End Sub
Sub PreviousLine() '' カーソル上移動
    Selection.MoveUp unit:=wdLine, Count:=1
End Sub
Sub BeginningOfLine() '' 行頭へ
    Selection.HomeKey unit:=wdLine
End Sub
Sub EndOfLine() '' 行末へ
    Selection.EndKey unit:=wdLine
End Sub

https://gist.github.com/nozma/5383099

現在のファイルなりNormal.dotmなりにインポートしてEnableEmacsModeを実行すればEmacs風のキーバインドに(カーソル移動だけだが)なり、DisableEmacsModeを実行すれば通常の状態に戻る。

2ストロークについては ExcelでEmacsライクなキーバインドを使う - もうカツ丼でいいよなでやったようにC-xでショートカットが切り替わるようにすれば良いと思う。

とりあえず今日は眠いので残りはいずれ。もしくは誰かやっといて。

2012-05-05

[][][] ExcelでEmacsライクなキーバインドを使う 23:53  ExcelでEmacsライクなキーバインドを使う - もうカツ丼でいいよな を含むブックマーク  ExcelでEmacsライクなキーバインドを使う - もうカツ丼でいいよな のブックマークコメント

いったい何なの

どうしてもExcelに大量のデータを入れないといけない状況にあってむしゃくしゃしたので、VBAのApplication.Onkeyメソッド等を利用して「概ね*1EmacsライクにExcelを操作できる環境を作った。どうしても無理な部分は諦めたがカーソルの移動程度は上手くできたと思う…ので残り誰か作って下さい><

なお、「Mac使えよ」「Xkeymacsっていうのがあってね」「yamyでいいだろ」等々の発言をしたい恵まれた環境にある人は今すぐ帰って下さい!

インストール

使いたいExcelファイルの標準モジュールに後述のコードをコピペすればOK。

EmacsModeマクロを起動すれば各種キーバインドが設定されるので、ファイルを開いた時に自動起動したい場合は、ProjectのMicrosoft Excel ObjectのなかのThis Workbookに下記のように記述する。

Private Sub Workbook_Open()
    Call EmacsMode
End Sub

また、どのファイルに対しても使用したい場合はPersonal.xlsの作り方等を参考にPERSONAL.XLS(2007以降は.XLSB)を作成し、そちらに記述しておく(Excelが壊れたとか言われても対応できないので上記文章の意味がわからない人は無理に導入しないで下さい)。

使用方法

Emacs Mode

EmacsModeマクロを起動すると以下のコマンドが使用可能になる。それぞれのコマンドの実態はマクロで、Application.Onkeyメソッドショートカットに割り当てている。なお、Application.Onkeyの設定を解除するマクロ404 Not Foundのものを使用している。

Command マクロ 動作
Ctrl + f ForwardCell 右のセルに移動
Ctrl + b BackwardCell 左のセルに移動
Ctrl + p PreviousLine 一行上に移動
Ctrl + n NextLine 一行下に移動
Ctrl + a BeginningOfUsedRangeLine 現在の行でUsedRange*2の左端へ移動
Ctrl + e EndOfUsedRangeLine 現在の行でUsedRangeの右端へ移動
Alt + < BeginningOfUsedRangeRow 現在の列でUsedRangeの上端へ移動
Alt + > EndOfUsedRangeRow 現在の列でUsedRangeの下端へ移動
Ctrl + v ScrollUp 1画面進む
Ctrl + z ScrollDown 1画面戻る
Ctrl + l Recenter 現在の行が概ね中央となるようスクロール
Ctrl + s Search 検索ダイアログの表示
Ctrl + x CxMode C-xモード(後述)への移行
Shift + ESC Enable_keys 全てのショートカットをデフォルトの状態に戻す(Emacs Modeの終了)
C-x Mode

2ストロークショートカットを仮想的に実現するため、Ctrl + xが押下されるとショートカットが切り替わるようになっている。このうち、Ctrl+x(切り取り)、Ctrl + v(貼り付け)およびCtrl+z(もとに戻す)を除くコマンドか、Ctrl + gでEmacs Modeに戻るようになっている。

Command マクロ 動作
Ctrl + s SaveFile 上書き保存
Ctrl + w WriteFile 名前を付けて保存ダイアログの表示
Ctrl + f FindFile ファイルを開くダイアログの表示
Ctrl + p PrintFile 印刷ダイアログの表示
Ctrl + x なし*3 切り取り
Ctrl + v なし 貼り付け
Ctrl + z なし Undo
Ctrl + g EmacsMode Emacs Modeに戻る

ソースコード

*1:Undoの実装なんかはほとんど実現できそうになかったので諦めた。また、セルの内容を変えるマクロはUndoリストをクリアしてしまうので今のところ入れていない。SendKeysでなんとかできそうな気もするけどSendKeysは動作が安定せず上手く行ってない。

*2:Ctrl + *で選択されるセル範囲。何らかの値が入っているか、書式設定のされているセル全てを含む最小の矩形範囲。

*3:デフォルトの動作に戻る

2011-06-01

[]5月に買った本&読んだ本 19:47 5月に買った本&読んだ本 - もうカツ丼でいいよな を含むブックマーク 5月に買った本&読んだ本 - もうカツ丼でいいよな のブックマークコメント

暇そうだ暇そうだと言われる割にさっぱり本読んでない今月。連休とか何してたのだろうか。のんべんだらりと浪費されていく人生。そんな5月。

買った(≒積まれてる)

VBAエキスパート公式テキスト Excel VBA スタンダード

VBAエキスパート公式テキスト Excel VBA スタンダード

なんかこうガッとやってバッとやってグッとするとグラフが出現するような、例えばRみたいなことがしたい。ただ時間とやる気がなくて勉強できてない。

増補・改訂版! V式でらくらく合格 速記入門

増補・改訂版! V式でらくらく合格 速記入門

会議とかで役立つかと安易な気持ちで買ってみたけど時間とやる気がなくて勉強できてない。

入門xyzzy

入門xyzzy

職場のPCでメモとる際のフラストレーションを和らげるためにxyzzy導入したけどxyzzy Lispは時間とやる気がなくて勉強できてない。でもなんかxyzzyはデフォルトでもemacsでよく設定されるキーバインド(C-hで削除とか)使えるので今のところカスタマイズの必要性感じていない。おかげでますます勉強しない。

一般気象学

一般気象学

業務に役立つ程度の気象知識が欲しいと思って買ったけど時間とやる気がなくて勉強できてない。

時間とやる気がなくて勉強できてない。ちょっとしか読んでないけど「一般気象学」より図が多くて表現が噛み砕かれてて優しい印象。ただ分厚い。

食料植民地ニッポン

食料植民地ニッポン

こういう側の意見も知っておかないとアレだなと思って買ったけどまだちょっとしか読んでない。

神が愛した天才数学者たち (角川ソフィア文庫)

神が愛した天才数学者たち (角川ソフィア文庫)

タレスまで読んだ(≒ちょっとめくっただけ)。

読んだ or (買った and 読んだ)

VBAエキスパート公式テキスト Excel VBA ベーシック [模擬問題プログラム付き]

VBAエキスパート公式テキスト Excel VBA ベーシック [模擬問題プログラム付き]

さっくりと読めた。ただちょっとでもプログラミング経験ある人はスタンダードからで十分だと思う。一般的で基礎的な概念も含めて解説してくれるのでやや冗長な感がある。

Newton (ニュートン) 2011年 06月号 [雑誌]

Newton (ニュートン) 2011年 06月号 [雑誌]

図やグラフが綺麗だし分かりやすかった。

科学と科学者のはなし―寺田寅彦エッセイ集 (岩波少年文庫 (510))

科学と科学者のはなし―寺田寅彦エッセイ集 (岩波少年文庫 (510))

一時ネットでも話題になった「津浪と人間」は一読の価値あり。青空文庫でも読めるのでどうぞ→no title

「結果を出す人」はノートに何を書いているのか (Nanaブックス)

「結果を出す人」はノートに何を書いているのか (Nanaブックス)

サッと読んでしまって忘れているだけかもしれないが、結局「結果を出す人」がノートに何を書いているのかよく分からなかった。この手の本は著者と似たような業種の人間なら役に立てられるのだろうなと思う。ところどころ参考になりそうな部分もあって付箋は結構貼ったのだけれど、実際どこか参考にして取り入れたかというと特に取り入れたりしてない。

イノセント・ゲリラの祝祭 (上) (宝島社文庫 C か 1-7)

イノセント・ゲリラの祝祭 (上) (宝島社文庫 C か 1-7)

面白いことは面白いんだけど人名を覚えるのが苦手な自分にはちょっと読むのが辛い。下巻読んでるけど今でも若干どれが誰だかよく分かってない。

GOSICK―ゴシック (富士見ミステリー文庫)

GOSICK―ゴシック (富士見ミステリー文庫)

2009-06-21

[][] VC++ + Meadow 15:40  VC++ + Meadow - もうカツ丼でいいよな を含むブックマーク  VC++ + Meadow - もうカツ丼でいいよな のブックマークコメント

VC++はEmacs風のキーバインドに設定できるけど色々中途半端なので、できたらMeadow使いたい。

とか思って調べてたらVC++からMeadow呼べることを知った。ならもうこれでいいや。

要るもの

やること

VC++で、

  • [ツール]→[外部ツール]→[追加]

で[新しいツール]を出現させ、それを

  • タイトル: Meadow (何でもいいけど
  • コマンド: C:\Meadow\bin\RunMW32.exe (インストールした場所に応じて適当に
  • 引数: +$(CurLine) $(ItemPath)
  • 初期ディレクトリ: $(ItemDir)

としてOK。これで何か編集中に[ツール]→[Meadow]を選択すればMeadowへ移る。

編集結果を自動で反映させるため、

  • [ツール]→[オプション]→[環境]→[ドキュメント]

の[保存する場合、変更を自動的に読み込む]をチェック。

また、ソリューションエクスプローラのファイル上で右クリックすると[ファイルを開くアプリケーションの選択]が出る。ここで[追加]をクリックし、

  • プログラム名: C:\Meadow\bin\RunMW32.exe
  • 表示名: Meadow

などとして追加したのち、それを選択して[既定値として設定]しておけば以降はソリューションエクスプローラのファイル名をダブルクリックするだけでMeadowが起動する。

参考

mzpmzp 2009/06/22 06:55 .DEFAULT: $(CXXProgram test, test)
にしたら、ビルドできました。

Rion778Rion778 2009/06/22 10:36 どうもです。
実はそれもやったんですが
*** omake: targets were not rebuilt because of errors:
<scanner scan-cxx-test.cpp>
depends on: test.cpp
というようなエラーが返ってきてしまって結局ビルドできないんです。
どうもCXXProgram(あるいはCProgram)が上手く動かないらしくて…
Windowsからgcc使ってるのが問題なんですかねえ。

2009-05-06

[][][]hatena-mode用にscreen-lines-mode導入した 19:31 hatena-mode用にscreen-lines-mode導入した - もうカツ丼でいいよな を含むブックマーク hatena-mode用にscreen-lines-mode導入した - もうカツ丼でいいよな のブックマークコメント

hatena-modeは便利だけど,改行が段落の変更とみなされてしまうはてなダイアリーと自動で適当な幅で改行してくれるauto-fill-modeとの相性がかなり悪い.

改行しなきゃいいんだけど,キーバインドを使ったカーソル移動が微妙なことになるし,全画面だったりすると見難い.

hatena-mode.elの中にはhatena-mode-submit-hookを使って連続しない改行を無視する設定とかが書いてあったけど,なんかうまくいかないのであきらめた.

結局どうしたかというと,screen-lines-modeを導入し,hatena-modeの時だけscreen-lines-modeを有効にし,なおかつフレームサイズが半分(僕のディスプレイ基準で)になるようにした.

手順

  • screen-lines-modeを導入
    • ダウンロードしてくる(no title)
    • site-lispに放り込む
  • .emacsに以下二つの記述を追加(or既存の部分を書き換え)
    • screen-lines-mode用
;; screen-lines-mode
   (autoload 'screen-lines-mode "screen-lines"
             "Toggle Screen Lines minor mode for the current buffer." t)
   (autoload 'turn-on-screen-lines-mode "screen-lines"
             "Turn on Screen Lines minor mode for the current buffer." t)
   (autoload 'turn-off-screen-lines-mode "screen-lines"
             "Turn off Screen Lines minor mode for the current buffer." t)
    • hatena-modeが起動するとき用
(add-hook 'hatena-mode-hook
	  '(lambda ()
	     (turn-on-screen-lines-mode) ;screen-lines-modeをon
	     (hatenahelper-mode 1)
	     (setq line-spacing 5) 	;行間広めに
	     (set-frame-width (selected-frame) 70)
    	     ))

これで快適.urlとかも問答無用で折り返されるけど,まあ気にしない.