<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html lang="ja">

<head>
	<meta http-equiv="Content-Language" content="ja">
	<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
	<link rel="stylesheet" type="text/css" href="../default.css">
	<title>Customize</title>
</head>

<body>
<!--#include virtual="../menu1.html"-->

<div class="contents">
<h4>contents</h4>
<ol>
	<li><a href="#ShellNew">ファイルの新規作成</a></li>
	<li><a href="#ScancodeMap">キーレイアウトの変更</a></li>
	<li><a href="#keybind">Windowsのキーバインド</a></li>
	<li><a href="#emacs">Emacs覚え書き</a></li>
	<li><a href="#cygwin">Cygwin覚え書き</a></li>
	<li><a href="#archive">圧縮・解凍</a></li>
</ol>
</div>

<h1>Customize</h1>
<div>
PC(Windows)環境の整備の足しにしてもらえれば本望です。
</div>

<h2 id="ShellNew"><a href="#ShellNew">ShellNew</a></h2>
<div>
	<p>
		エクスプローラの新規作成についてです。
		とりあえずテキストを作り、あとで拡張子を書き換えるひとも多いと思いますが、専用のファイルを自分で追加することができます。
		ここでは、新規作成に HTMLドキュメントを追加する例を挙げます。
		<a href="shellnew.jpg">[画面]</a>
	</p>
	<ol>
		<li>作成したいファイルのテンプレート（「new.html」とする）を用意し、テンプレートフォルダに入れておく。<br>
			Windows98の場合は、「C:\WINDOWS\ShellNew」<br>
				Windows2000/XPの場合は、「C:\Documents and Settings\ユーザー名\Templates」</li>
		<li>レジストリエディタ(regedit.exe)を起動する。</li>
		<li>HKEY_CLASSES_ROOT の下のカスタマイズしたいファイル拡張子（.html）を開く。</li>
		<li>「ShellNew」というキーを新規作成する。</li>
		<li>その下に、「FileName」という文字列を作成する。</li>
		<li>FileNameを編集し、値を「new.html」に書き換える。</li>
	</ol>
	<p>
		空のファイルで良い場合（プレーンテキストなど）は、「FileName」の代わりに「NullFile」という文字列（値なし）を作成すればよいです。
		この場合、テンプレートファイルは必要ありません。
		新規作成から削除する場合は、ShellNewのキーを削除すればよいです。
	</p>
	<p>txt, h, cpp, html, xmlのあたりを作成しておけば、拡張子表示なしでも生きていけるかも？</p>
</div>

<h2 id="ScancodeMap"><a href="#ScancodeMap">ScancodeMap</a></h2>
<div>
	<p>
		Windows2000/XP における、スキャンコードマップ（キーマップ）の変更法です。
		OSレベルで変更するので、アプリケーションを常駐させることはありません。
		変更には十分気をつけてください。
		例えば、DelキーをなくしてしまうとCtrl+Alt+Delでログオンできなくなることもあります！
		また、DirectInput経由でのキーボード状態の取得時には、スキャンコードマップは効果が無いようです。
		<a href="http://www.microsoft.com/hwdev/tech/input/w2kscan-map.asp">一次情報</a>はこちら。
		<a href="scancodemap.jpg">[画面]</a>
	</p>
	<ol>
		<li>レジストリの<kbd>「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout」</kbd>を開く。</li>
		<li>右クリックから新規バイナリ作成し、<kbd>「Scancode Map」</kbd>という名前にする。</li>
		<li>Scancode Mapを右クリック、変更。後述の値を書き込む。</li>
		<li>Windowsの再起動。</li>
	</ol>
	<p>値の意味。すべてリトルエンティアンであることに注意！</p>
	<div style="border:medium double">
		<table>
			<tr><td nowrap><code>00 00 00 00</code></td><td>バージョン（？）</td></tr>
			<tr><td><code>00 00 00 00</code></td><td>フラグ（？）</td></tr>
			<tr><td><code>nn nn nn nn</code></td><td>マッピング数 + 1</td></tr>
			<tr><td><code>yy YY xx XX</code></td><td>キーコードXXxxをキーコードYYyyに変更する。<a href="scancode.xls">スキャンコード表</a>(Excel)の押すときのコードを参照。</td></tr>
			<tr><td>...</td><td></td></tr>
			<tr><td><code>00 00 00 00</code></td><td>ターミネータ</td></tr>
		</table>
	</div>
	<dl>
		<dt>【例】半角 (0x0029) → Esc (0x0001)、CapsLock (0x003a) → L Ctrl (0x001d) に置換
			（ただし、私の環境では複数同じキーがある場合認識しませんでした）</dt>
		<dd><code>0000 0000 0000 0000 0300 0000 0100 2900 1d00 3a00 0000 0000</code></dd>
		<dt>【例】：↑の入れ替えバージョン</dt>
		<dd><code>0000 0000 0000 0000 0500 0000 2900 0100 0100 2900 3a00 1d00 1d00 3a00 0000 0000</code></dd>
	</dl>
</div>

<h2 id="keybind">Windowsのキーバインド</h2>
<div>
	<table border="1">
		<tr><th>種類</th><th>入力</th><th>説明</th></tr>
		<tr><td rowspan="6">Windows</td>
			  <td>Ctrl + Shift + ESC	</td><td>タスクマネージャ起動	</td></tr>
		<tr><td>Alt + Space			</td><td>システムメニューを開く<br>
			「Alt + Space, x」で最大化<br>
			「Alt + Space, n」で最小化<br>
			「Alt + Space, c」で閉じる</td></tr>
		<tr><td>Shift + F10			</td><td>右クリックメニューを表示（Menuキーと同じ）</td></tr>
		<tr><td>Windows + E			</td><td>エクスプローラ起動				</td></tr>
		<tr><td>Windows + R			</td><td>ファイル名を指定して実行		</td></tr>
		<tr><td>Windows + Tab		</td><td>タスクバー上でタスクの切り替え	</td></tr>
		<tr><td rowspan="13">MS-IME</td>
			  <td>Ctrl + A</td><td>変換部分を最初の文節へ</td></tr>
		<tr><td>Ctrl + S</td><td>変換部分をひとつ前の文節へ</td></tr>
		<tr><td>Ctrl + D</td><td>変換部分をひとつ後の文節へ</td></tr>
		<tr><td>Ctrl + F</td><td>変換部分を最後の文節へ	</td></tr>
		<tr><td>Ctrl + G</td><td>次の１文字を削除</td></tr>
		<tr><td>Ctrl + H</td><td>前の１文字を削除</td></tr>
		<tr><td>Ctrl + K</td><td>文節を縮める</td></tr>
		<tr><td>Ctrl + L</td><td>文節を伸ばす</td></tr>
		<tr><td>Ctrl + T</td><td>全角英字変換</td></tr>
		<tr><td>Ctrl + U</td><td>ひらがな変換</td></tr>
		<tr><td>Ctrl + I</td><td>カタカナ変換</td></tr>
		<tr><td>Ctrl + O</td><td>半角カタカナ変換</td></tr>
		<tr><td>Ctrl + P</td><td>半角英字変換</td></tr>
	</table>
	<h3>その他</h3>
	<ul>
		<li>エクスプローラでファイルをコピー／移動するときの上書き確認ダイアログで、
			Shiftキーを押しながら［いいえ］ボタンをクリックすると［すべていいえ］の効果。</li>
		<li>メッセージボックスが表示された場合、Ctrl+C キーを押すことで
			メッセージタイトルやメッセージの内容をクリップボードにコピーすることができる。</li>
	</ul>
</div>

<h2 id="emacs"><a href="#emacs">Emacs覚え書き</a></h2>
<div>
	<p>
		Emacsってよりは、xyzzyです。
		Tab = C-i, Enter = C-m, Linefeed = C-j などが同一視されるのはどうしようもないみたい。
		範囲選択中のタブをshift-selectionに割り振れないかなぁ？
		もともとのEmacsに「Windows的範囲選択」の概念が無いから難しいのか？
	</p>
	<table border="1">
		<tr><th>種類</th><th>入力</th><th>コマンド名<th>説明</th></tr>
		<tr><td rowspan="6">カーソル移動</td>
			  <td>C-f		</td><td>forward-char		</td><td>→</td></tr>
		<tr><td>C-b		</td><td>backward-char		</td><td>←</td></tr>
		<tr><td>C-p		</td><td>previous-line		</td><td>↑</td></tr>
		<tr><td>C-n		</td><td>next-line			</td><td>↓</td></tr>
		<tr><td>C-a		</td><td>beginning-of-line	</td><td>行頭</td></tr>
		<tr><td>C-e		</td><td>end-of-line		</td><td>行末</td></tr>
		<tr><td rowspan="7">バッファ</td>
			  <td>C-x o	</td><td>other-window           </td><td>フォーカスウィンドウ切り替え</td></tr>
		<tr><td>C-x b	</td><td>switch-to-buffer       </td><td>編集バッファを選択</td></tr>
		<tr><td>C-x k	</td><td>kill-buffer            </td><td>バッファを閉じる</td></tr>
		<tr><td>C-x 0	</td><td>delete-window          </td><td>フォーカスされているウィンドウを閉じる</td></tr>
		<tr><td>C-x 1	</td><td>delete-other-windows   </td><td>フォーカスされていないウィンドウを閉じる</td></tr>
		<tr><td>C-x 2	</td><td>split-window           </td><td>横に分割（縦に並べる）</td></tr>
		<tr><td>C-x 3	</td><td>split-window-vertically</td><td>縦に分割（横に並べる）</td></tr>
		<tr><td rowspan="3">削除</td>
			  <td>C-d		</td><td>delete-character		</td><td>後削除</td></tr>
		<tr><td>(C-h)	</td><td>backward-delete-char	</td><td>前削除</td></tr>
		<tr><td>C-k		</td><td>kill-line				</td><td>行末まで削除</td></tr>
		<tr><td rowspan="3">検索・置換</td>
			  <td>C-s		</td><td>isearch-forward	</td><td>インクリメンタルサーチ</td></tr>
		<tr><td>C-r		</td><td>isearch-backward	</td><td>逆方向インクリメンタルサーチ</td></tr>
		<tr><td>		</td><td>goto-line			</td><td>行番号ジャンプ</td></tr>
		<tr><td rowspan="4">編集</td>
			  <td>M-u		</td><td>upcase-word		</td><td>ワードを大文字に変換</td></tr>
		<tr><td>M-l		</td><td>downcase-word		</td><td>ワードを小文字に変換</td></tr>
		<tr><td>		</td><td>untabify			</td><td>リージョン内のタブをスペースに変換</td></tr>
		<tr><td>		</td><td>tabify				</td><td>リージョン内スペースをタブに変換</td></tr>
		<tr><td rowspan="2">整形</td>
			  <td>		</td><td>shift-selection	</td><td>選択範囲を右シフト</td></tr>
		<tr><td>		</td><td>unshift-selection</td><td>選択範囲を左シフト</td></tr>
		<tr><td rowspan="6">リージョン処理</td>
			  <td>C-SPC	</td><td>mark-set				</td><td>マークセット</td></tr>
		<tr><td>C-w		</td><td>kill-region			</td><td>リージョンkill</td></tr>
		<tr><td>M-w		</td><td>copy-region-as-kill	</td><td>リージョンcopy</td></tr>
		<tr><td>		</td><td>delete-region			</td><td>リージョンを削除</td></tr>
		<tr><td>C-y		</td><td>yank					</td><td>yank</td></tr>
		<tr><td>C-x C-x	</td><td>exchange-point-and-mark</td><td>カーソルとマークを入れ替える</td></tr>
		<tr><td rowspan="5">矩形処理</td>
			  <td>C-x r k	</td><td>kill-rectangle			</td><td>矩形kill</td></tr>
		<tr><td>		</td><td>copy-rectangle			</td><td>矩形copy</td></tr>
		<tr><td>C-x r d	</td><td>delete-rectangle		</td><td>矩形を削除（左詰めされる）</td></tr>
		<tr><td>C-x r c	</td><td>clear-rectangle		</td><td>矩形をスペースで埋める</td></tr>
		<tr><td>C-x r y	</td><td>yank-rectangle			</td><td>矩形yank</td></tr>
		<tr><td rowspan="5">レジスタ</td>
			  <td>C-x r SPC	</td><td>point-to-register			</td><td>カーソル位置をレジスタに登録する</td></tr>
		<tr><td>C-x r j		</td><td>jump-to-register			</td><td>カーソル位置をレジスタから読み出す</td></tr>
		<tr><td>C-x r s		</td><td>copy-to-register			</td><td>リージョンをレジスタに登録する</td></tr>
		<tr><td>C-x r r		</td><td>copy-rectangle-to-register	</td><td>矩形領域をレジスタに登録する</td></tr>
		<tr><td>C-x r i		</td><td>insert-register			</td><td>レジスタに登録されたテキストを挿入する</td></tr>
		<tr><td rowspan="2">繰り返し</td>
			  <td>M-<i>n</i></td><td>digit-argument</td><td>次のコマンドを繰り返す</td></tr>
		<tr><td>C-u <i>n</i></td><td>universal-command</td><td>次のコマンドを繰り返す（number省略時は4回）</td></tr>
		<tr><td></td><td></td><td></td></tr>
	</table>
</div>

<h2 id="cygwin"><a href="#cygwin">Cygwin覚え書き</a></h2>
<div>
	<dl>
		<dt>Cygwinホームディレクトリの変更</dt>
		<dd>環境変数 HOME を用意するだけ。
			<kbd>HOME=C:\cygwin\home</kbd>
			とか。パス区切りは'\'でよいもよう。</dd>
		<dt>最近のcygwinは自動的に.bashrcを読み込んでくれないぽい？</dt>
		<dd><kbd>/etc/profile</kbd> の最後に
			<kbd>test -f ./.bashrc &amp;&amp; . ./.bashrc</kbd>
			を追加。</dd>
		<dt>lsで日本語ファイル名の表示</dt>
		<dd><kbd>ls --show-control-char</kbd><br>
			ただし、ファイル名補完では日本語が入ってくれない。
			CUIと日本語の相性が悪いのはどうしようもないのではあるが。
			alias張っておきましょう。<br>
			<kbd>.bashrc<br>
				alias ls='ls --show-control-char'</kbd></dd>
		<dt>エクスプローラでフォルダの右クリックからbashを呼ぶ</dt>
		<dd>
			<p>環境変数に呼び出し元のパスを保存⇒変数を参照してディレクトリ変更という流れです。</p>
			<ol>
				<li>環境変数を保存するバッチファイルを作成します。
					<p><a href="SummonBash.bat.txt">SummonBash.bat</a>：cygwin.bat に一行追加しただけです。</p>
				</li>
				<li>.bashrc に、先ほどの環境変数を参照して、カレントディレクトリを移動するためのスクリプトを追加します。
					<pre><code>if [ ! -z "$SUMMON_BASH_TARGET_PATH" ]; then
    cd "$(echo "$SUMMON_BASH_TARGET_PATH" | tr -d "\"" | cygpath -u --file -)"
    unset SUMMON_BASH_TARGET_PATH
fi</code></pre>
					<p>スペースを含むパスの処理と、cygpathの不可解な動作のため、多少トリッキーなことをしています。
						<kbd>tr -d</kbd> でいったんダブルクォート取り除き、<kbd>cygpath </kbd>でCygwinパスに変換、最後にもう一度ダブルクォートをつけて <kbd>cd</kbd> しています。
						試行錯誤の結果なので、もっと良い解決方法があるかもしれません。</p>
				</li>
				<li>エクスプローラのフォルダの右クリックメニュー項目を追加します。
					<p><kbd>HKEY_CLASSES_ROOT\Folder\shell\SummonBash</kbd> というキーを作成します。
						SummonBashの部分は任意の名前でかまいません。
						このキーの値に設定した文字列がメニュー項目の名前になります。
						名前に &amp; (アンパサンド) を含むと、その次の文字がニーモニック (キーボードショートカット) になります。
						例えば、「Cyg&amp;win」とすると、キーボードの W でメニューが選択できます。</p>
					<p>上記のキーの直下に、<kbd>command</kbd> という名前のキーを作成します。
						（この例の場合は <kbd>HKEY_CLASSES_ROOT\Folder\shell\SummonBash\command</kbd> ）
						このキーの値に、1.のバッチファイルを指定します。
						（<kbd>SummonBash.bat "%1"</kbd>）
						%1はダブルクォートで囲む必要があります。
						また、パスが通っていないディレクトリにバッチファイルをおく場合は、フルパスで指定します。</p>
				</li>
			</ol>
		</dd>
		<dt>空のディレクトリを再起的に削除する</dt>
		<dd>
			<ul>
				<li>shell : <kbd>find <i>STARTDIR</i> -type d | sort -r | xargs -r rmdir 2&gt;/dev/null</kbd></li>
				<li>python : <a href="remove_empty_dirs.py">remove_empty_dirs.py</a></li>
		</dd>
	</dl>
</div>

<h2 id="archive"><a href="#archive">圧縮・解凍</a></h2>
<div>
	<h3>解凍</h3>
	<table>
		<tr><td>.tar.gz </td><td>tar zxvf 対象</td></tr>
		<tr><td>.tar.bz2</td><td>tar jxvf 対象</td></tr>
		<tr><td>.gz     </td><td>gunzip 対象 または gzip -d 対象</td></tr>
		<tr><td>.bz2    </td><td>bunzip2 対象 または bzip2 -d 対象</td></tr>
		<tr><td>.lzh    </td><td>lha x 対象</td></tr>
		<tr><td>.zip    </td><td>unzip 対象</td></tr>
	</table>
	<h3>圧縮</h3>
	<table>
		<tr><td>.tar.gz  </td><td>tar zcvf 書庫.tar.gz 対象 ...</td></tr>
		<tr><td>.tar.bz2 </td><td>tar jcvf 書庫.tar.bz2 対象 ...</td></tr>
		<tr><td>.gz      </td><td>gzip 対象</td></tr>
		<tr><td>.bz2     </td><td>bzip2 対象</td></tr>
		<tr><td>.lha     </td><td>lha c 書庫.lzh 対象 ...</td></tr>
		<tr><td>.zip     </td><td>zip 書庫.zip 対象 ...</td></tr>
	</table>
	<h3>alias</h3>
	<ul>
		<li>alias untgz='tar zxvf'</li>
		<li>alias unbz2='tar jxvf'</li>
		<li>alias mktgz='tar zcvf __tmp__.tar.gz'</li>
		<li>alias mkbz2='tar jcvf __tmp__.tar.bz2'</li>
	</ul>
</div>

<hr>
<!--#config timefmt="%Y/%m/%d"-->
<p align="right"><!--#echo var='LAST_MODIFIED'--></p>

</body>
</html>
