xyzzyでぇたらいぶらりぃ


べんりきー


[▲Top]

ファイル系

C-u C-x C-f
漢字コードを指定できるfind-file
C-u C-x C-v
漢字コードを指定してファイルを差し替える

[▲Top]

編集系

C-x C-x (exchange-point-and-mark)
ポイントとマークを入れ替える。つまりは、マーク位置とカーソル位置を入れ替える。
C-t (transpose-char)
カーソル位置の文字を直前の文字と置き換える。入れ替えるといったほうがイメージしやすいか。
C-x C-t (transpose-lines)
カーソルの行を一行上とごっそり置き換える(From:[xyzzy:01045][xyzzy:02168])
M-y (yank-pop)
C-y の後すぐに M-y でそれまでに切り取ったものが次々に出てくる
C-x C-k f (change-default-fileio-code)
漢字コードの変更(Ver.0.2.0.121 からは change-default-fileio-encoding に変更)(From:[xyzzy:02168])
C-x C-k n (change-default-newline-code)
改行コードの変更(Ver.0.2.0.121 からは change-default-eol-code に変更)(From:[xyzzy:02168])
ミニバッファで Home
カーソル位置から1ワード分がミニバッファに入ってくれる(From:[xyzzy:00052])
M-\/M-/
スペース除去ができる。例:
test           test\n
ここで、削除したい空白の上で、alt + \ を押すと
testtest\n
同様の状態でalt + / を押すと
test test\n
となる。

[▲Top]

表示系

C-x n/C-x w
ナローモードの設定/解除。マーク位置と現在のカーソル位置の間をナローモードに設定/解除する。

[▲Top]

便利データ

ぱくりまくりデータ。
[▲Top]

正規表現

出典: [xyzzy:03768]
^         行頭にマッチ
  $         行末にマッチ
  .         改行文字を除く任意の 1 文字にマッチ
  [...]     文字クラスのどれか 1 文字にマッチ
  [^...]    文字クラスの補集合のどれか 1 文字にマッチ
  *         直前の正規表現の 0 回以上の繰り返しにマッチ (={0,})
  +         直前の正規表現の 1 回以上の繰り返しにマッチ (={1,})
  ?         直前の正規表現の 0 回か 1 回の繰り返しにマッチ (={0,1})
  \{M,N\}   直前の正規表現の M 回以上 N 回以下の繰り返しにマッチ
  \{M,\}    直前の正規表現の M 回以上の繰り返しにマッチ
  \{,N\}    直前の正規表現の N 回以下の繰り返しにマッチ
  \{N\}     直前の正規表現の N 回の繰り返しにマッチ
  \( \)     グルーピング
  \|        選択
  \1 〜 \9  後方参照
  \<        単語の開始にマッチ
  \>        単語の終了にマッチ
  \b        単語の境界にマッチ
  \B        単語の境界以外にマッチ
  \w        英数字にマッチ
  \W        英数字以外にマッチ
  \sc       シンタックスが c の 1 文字にマッチ
  \Sc       シンタックスが c 以外の 1 文字にマッチ
  \`        バッファの先頭にマッチ
  \'        バッファの最後にマッチ
  \         メタキャラクタのエスケープ

  [たぶん xyzzy 0.2.1.186 から]
  *?        直前の正規表現の 0 回以上の最短の繰り返しにマッチ
  +?        直前の正規表現の 1 回以上の最短の繰り返しにマッチ
  ??        直前の正規表現の 0 回か 1 回の最短の繰り返しにマッチ

            (let ((str "aAaaa"))
              (string-match "Aa?" str)
              (format t "[Aa? ] ... ~S: ~D-~D~%"
                      (match-string 0) (match-beginning 0) (match-end 0))
              (string-match "Aa??" str)
              (format t "[Aa??] ... ~S: ~D-~D~%"
                      (match-string 0) (match-beginning 0) (match-end 0)))
            ->[Aa? ] ... "Aa": 1-3
              [Aa??] ... "A": 1-2

  \{M,N\}?  直前の正規表現の M 回以上 N 回以下の最短の繰り返しにマッチ
  \{M,\}?   直前の正規表現の M 回以上の最短の繰り返しにマッチ
  \{,N\}?   直前の正規表現の N 回以下の最短の繰り返しにマッチ
   \(?:regexp\)
            部分正規表現のグルーピングを行うが,後方参照を行わない
            (すなわち\1,\2とかを使って参照できない,と)

[▲Top]

印刷時のヘッダ・フッタ指定

出典:[xyzzy:03752]
  %f   ファイル名
  %F   ファイル名 (ディレクトリ付き)
  %b   バッファ名
  %p   ページ番号
  %P   総ページ数

  %Y   西暦 (YYYY)
  %y   西暦 (YY)
  %m   月   (1〜12)
  %0m  月   (01〜12)
  %*m  月   (January〜December)
  %:m  月   (Jan〜Dec)
  %d   日   (1〜31)
  %0d  日   (01〜31)
  %*w  曜日 (Sunday〜Saturday)
  %:w  曜日 (Sun〜Sat)
  %w   曜日 (日〜土)
  %h   時   (0〜23)
  %0h  時   (00〜23)
  %H   時   (0〜11)
  %0H  時   (00〜11)
  %:H  時   (1〜12)
  %0:H 時   (01〜12)
  %*H       (AM/PM)
  %*:H      (am/pm)
  %M   分   (0〜59)
  %0M  分   (00〜59)
  %s   秒   (0〜59)
  %0s  秒   (00〜59)

  %-   横線

  %l   以前を左詰め
  %r   以降を右詰め
       指定されない部分は中央揃え

  それ以外の文字はそのまま

[▲Top]

format関数の使い方

■format
[Type       ]: Function
[Arguments  ]: destination control-string &rest arguments
[Package    ]: lisp
[File       ]: builtin.l
[Section    ]: 入出力
[Description]: 

  destination:
    t    標準出力に出力
    nil  文字列として結果を返す
    fp   指定のストリームに出力

  control-string:
    ~A Ascii(アスキー指示)。princタイプで出力。
    ~S S-Expression(S式指示)。prin1タイプで出力。
    ~% 改行。~n%はn個の改行
    ~& 出力ストリームが行頭でなければ改行。fresh-line参照。
    ~| 改ページ
    ~~ Tilde(チルダ指示)
    ~改行 改行とそれに続く空白文字を無視する
    ~T Tabulate(タブ指示)
    ~* 次のargumetを無視
    ~? Indirection(間接指示)
    ~D 10進数
    ~B Binary(2進指示)
    ~O Octal(8進指示)
    ~X Hexadecimal(16進指示)
    ~R Radix(基数指示)
    ~P Plural(複数形指示)
    ~C Character(文字指示)
    ~F Fixed-format floating-point(固定小数点形式浮動小数指示)
    ~E Exponential floating-point(指数形式浮動小数指示)
    ~G General floating-point(一般浮動小数点指示)
    ~$ Dollars floating-point(ドル浮動小数点指示)
    ~( Case conversion(ケース変換指示)
    ~) ~(を閉じる
    ~[ Conditional expression(条件選択指示)
    ~] ~[を閉じる
    ~{ Iteration(反復指示)
    ~} ~{を閉じる
    ~^ Up and out(ゼロ終了指示)

  例:
  ■整数に0を付けて出力 ("~[最小桁数][,パディング文字][,桁区切り文字]D")
  (format nil "~5,'0D" 4)
  => "00004"

  ■整数を3桁ごとにカンマで区切って出力
  (format nil "~:D" 1234567890)
  => "1,234,567,890"

  ■文字列を最低桁カラムになるように空白を追加して出力
  (format nil "~10A" "foo")
  => "       foo"
  (format nil "~10@A" "foo")
  => "foo       "

  ■ケース変換の例
  (format nil "~(~A~)" "FOO BAR")  ;全て小文字
  => "foo bar"
  (format nil "~:(~A~)" "foo bar") ;単語の先頭の文字を大文字
  => "Foo Bar"
  (format nil "~@(~A~)" "foo bar") ;先頭の文字を大文字
  => "Foo bar"
  (format nil "~:@(~A~)" "foo bar");全て大文字
  => "FOO BAR"

  ■間接指示の例
  (format nil "~? ~D" "[~A ~D]" '("foo" 2) 3)
  => "[foo 2] 3"
  (format nil "~@? ~D" "[~A ~D]" "foo" 2 3)
  => "[foo 2] 3"

  ■条件選択指示の例
  (format nil "Windows ~[NT~;98~;95~]" 0)
  => "Windows NT"
  (format nil "Windows ~[NT~;98~;95~]" 1)
  => "Windows 98"
  ;デフォルト値 "~:;"
  (format nil "Windows ~[NT~;98~;95~:;3.1~]" 5)
  => "Windows 3.1"

  ■反復指示の例
  ; "~{" 引数はリスト
  (format nil "~{ ~A~}" '("dog" "cat" "pig"))
  => " dog cat pig"
  ; "~:{"  引数はリストのリスト
  (format nil "~:{[~A ~D]~}" '(("a" 1) ("b" 2) ("c" 3)))
  => "[a 1][b 2][c 3]"
  ; "~@{" 残りの引数をリストとして用いる
  (format nil "~@{[~A ~D]~}" "a" 1 "b" 2 "c" 3)
  => "[a 1][b 2][c 3]"
  ; "~@:{" 引数のリストをリストとして用いる
  (format nil "~:@{[~A ~D]~}" '("a" 1) '("b" 2) '("c" 3))
  => "[a 1][b 2][c 3]"

  ■ゼロ終了指示の例
  ; 引数がなければ終了
  (format nil "Done.~^ ~D warning~:P.~^ ~D error~:P.")
  => "Done."
  (format nil "Done.~^ ~D warning~:P.~^ ~D error~:P." 3)
  => "Done. 3 warnings."
  (format nil "Done.~^ ~D warning~:P.~^ ~D error~:P." 3 5)
  => "Done. 3 warnings. 5 errors."

  ■反復指示とゼロ終了指示
  ; 副リストの中の引数がもうなければ "~{" をそこで閉じる
  (format nil "~:{/~S~^ ...~}"
	  '((hot dog) (hamburger) (ice cream) (french fries)))
  => "/hot .../hamburger/ice .../french ..."
  ; リストが終わりならそこで ":{" 全体を終了
  (format nil "~:{/~S~:^ ...~}"
	  '((hot dog) (hamburger) (ice cream) (french fries)))
  => "/hot .../hamburger .../ice .../french"
  ; 副リストの中の引数がもうなければ全体を終了
  (format nil "~:{/~S~#:^ ...~}"
	  '((hot dog) (hamburger) (ice cream) (french fries)))
  => "/hot .../hamburger"

  ■16進数のformat書式の書き方
  (format nil "~2,'0x" 10)
  => "0a"
  (format nil "~:@(~2,'0x~)" 10)
  => "0A"

[▲Top]

キー表現

出典:[xyzzy:00127]
1 そのもの、Ctrl+, Alt+, Alt+Ctrl+ が使用可能。

       !"#$%&'()*+,-./
      0123456789:;<=>?
      @ABCDEFGHIJKLMNO
      PQRSTUVWXYZ[\]^_
      `abcdefghijklmno
      pqrstuvwxyz{|}~

 例)  #\a, #\C-a, #\M-a, #\C-M-a

      ただし、;\| の3文字は、

      #\;, #\C-\;, #\M-\;, #\C-M-\;

      のように、'\'を前置する。

2 そのもの、Ctrl+, Alt+ が使用可能。

      SPC       スペースキー

 例) #\SPC, #\C-SPC (#\C-@ と同じ), #\M-SPC

3 そのもの、Alt+ が使用可能。

      TAB       Tabキー        #\C-i と同じ
      LFD                      #\C-j と同じ
      RET       Enterキー      #\C-m と同じ
      ESC       Escキー        #\C-[ と同じ
      DEL                      #\C-? と同じ
      NUL                      #\C-@ と同じ

 例)  #\TAB, #\M-TAB

4 そのもの、Ctrl+, Shift+, Ctrl+Shift+, Alt+, Alt+Ctrl+, Alt+Shift+, 
  Alt+Ctrl+Shift+ が使用可能

      PageUp    Page Upキー
      PageDown  Page Downキー
      End       Endキー
      Home      Homeキー
      Left      ←キー
      Up        ↑キー
      Right     →キー
      Down      ↓キー
      Select    どのキー?
      Print     どのキー?
      Execute   どのキー?
      Snapshot  どのキー?
      Insert    Insertキー
      Delete    Deleteキー
      Help      どのキー?
      F1〜F24   F1〜F24キー
      LBtnDown  マウス左ボタン押し
      LBtnUp    マウス左ボタン離し
      LBtnMove  マウス左ボタンドラッグ
      RBtnDown  マウス右ボタン押し
      RBtnUp    マウス右ボタン離し
      RBtnMove  マウス右ボタンドラッグ
      MBtnDown  マウス中ボタン押し
      MBtnUp    マウス中ボタン離し
      MBtnMove  マウス中ボタンドラッグ

 例) #\PageUp, #\C-PageUp, #\S-PageUp, #\C-S-PageUp,
     #\M-Pageup, #\M-C-PageUp, #\M-S-PageUp, #\M-C-S-PageUp

なお、C-, M-, S- の順序はどうでもいい。


| 具体的には、c-modeでシフトを押しながらTABを押した時に
| インデントしてもらおうと思ったんですが、
| #\TAB
| を
| #\S-TAB
| にしたらSHIFTは使えませんとのことで。

残念ながら、まともな手段では Shift+Tab は使えません。が、まともでない手
段が用意されています。

 (set-extended-key-translate-table exkey-S-tab #\F20)

このようにしておくと、Shift+Tab が押されたときに F20 が押されたふりをす
るので、

 (global-set-key #\F20 'foo)

とすればお望み通り(^^

exkey-... に指定できるのは以下の通り。

   exkey-backspace
   exkey-S-backspace
   exkey-C-backspace
   exkey-S-C-backspace
   exkey-M-backspace
   exkey-S-M-backspace
   exkey-C-M-backspace
   exkey-S-C-M-backspace
   exkey-tab
   exkey-S-tab
   exkey-C-tab
   exkey-S-C-tab
   exkey-return
   exkey-S-return
   exkey-C-return
   exkey-S-C-return
   exkey-M-return
   exkey-S-M-return
   exkey-C-M-return
   exkey-S-C-M-return
   exkey-escape           (0.0.0.61以降)
   exkey-S-escape         (0.0.0.61以降)

# 疲れた・・・(^^;

[▲Top]

モードライン・タイトルバーの書式

出典:Changelog on 0.2.1.153
  %*	変更あり: **, 書込禁止: %-, 変更あり・書込禁止: %*, それ以外: --
  %#*	変更あり: *, 変更なし: (空白)
  %r	書込可: (空白), 書込禁止: %
  %#r	書込可: (空白), 書込禁止: %, 不完全バッファ: #
  %p	プログラム名 
  %v	バージョン 
  %h	ホスト名
  %#h	@ホスト名
  %b	バッファ名
  %f	File: ファイル名
  %#f	ファイル名
  %F	File: ファイル名。ファイル名がなければバッファ名
  %#F	ファイル名。ファイル名がなければバッファ名
  %M	モード(マイナーモード含む)
  %m	モード
  %k	エンコーディング
  %l	改行コード
  %i	IMEの状態 (mode-line-format のみ)
  %P	カーソル位置 (mode-line-format のみ)

[▲Top]

日付と時刻の書式

出典:lisp/timestmp.l
日付が59日もあるのはなんだ?おそらく、月ごと年ごとに日数が変わるから、時刻系の繰り上がり方式を流用して何とかしていると勝手に解釈^^;
a: 短い形式の曜日
A: 長い形式の曜日nn
b: 短い形式の月
B: 長い形式の月
d: 日(00〜59)                 # (0〜59)
e: 和暦の年(01〜)             # (1〜)
E: 和暦の年(元, 02〜)         # (元, 2〜)
g: 元号(明治,大正,昭和,平成)  # (明,大,昭,平)
G: 元号(M, T, S, H)
H: 時(00〜23)                 # (0〜23)
I: 12時間の時(01〜12)         # (1〜12)
i: Internet Time(000〜999)
m: 月(01〜12)                 # (1〜12)
M: 分(00〜59)                 # (0〜59)
p: 午前/午後
P: AM/PM                      # am/pm
S: 秒(00〜59)                 # (0〜59)
v: 曜日(日本語)
y: 年(2桁)
Y: 年(4桁)
z: タイムゾーン名(JST-9)
Z: タイムゾーン(+0900)        # (+09:00)

[▲Top]

特殊ディレクトリの名前を引く

出典:[xyzzy:00022][xyzzy:00023][xyzzy:00024]
(get-special-folder-location :start-menu)
(get-special-folder-location :send-to)
(get-windows-directory)
(get-system-directory)
(user-name)
(get-special-folder-location :desktop)
(get-special-folder-location :personal)
(get-special-folder-location :programs)
(get-special-folder-location :recent)
(get-special-folder-location :send-to)
(get-special-folder-location :start-menu)
(get-special-folder-location :startup)
(get-special-folder-location :templates)

[▲Top]

キーワードファイルの書き方

出典:Changelog 0.2.1.150, 0.2.1.161
;*n [ attrib ] (Ver.0.2.1.161以降で対応)
n       キーワード色 (0〜i)
          0〜2: キーワード 1〜3
          3〜5: キーワード 1〜3 でそのキーワードだけ反転
          6〜8: キーワード 1〜3 でその行の端から端まで反転
             9: 単なる bold
          a〜i: 0〜8 と同じ色で bold
attrib  属性みたいなの。以下の任意の組み合わせ
          b: bold 
          u: underline 
          s: strike-out 
          l: line ? (一行まるごと) (Ver.0.2.1.161以降で対応)

;**fg [ bg [ attrib ] ] 

fg      文字色 (0〜f)。0ならば普通の色
bg      背景色 (0〜f)。0ならば普通の色
attrib  属性みたいなの。上記参照


(設定例)
;**1
文字色 1
;**0a
文字色は標準,背景色 10
;**3c
文字色 3,背景色 12
;*0l
キーワード色 1 で一行反転 (= ;*6 と同じ意味)
;**20bu
文字色 2,背景色は標準,ボールド + アンダーライン

[▲Top]

べんりきのう

▼ネットワークドライブの割り当てと切断
標準ではキーに割り当てられてないようです(From:[xyzzy:02935][xyzzy:03725])
(network-connect-dialog)
(network-disconnect-dialog)
▼ファイラによるファイル名の一括変換
例:foo1.lzh,foo2.lzh,foo3.lzh → foo1.zip,foo2.zip,foo3.zip

  1. ファイラで foo1.lzh,foo2.lzh,foo3.lzh を選択
  2. R (S-r) でファイル変換ダイアログを出す
  3. 変換前は \(.*\)\.lzh
  4. 変換後は \1.zip
正規表現を用いたファイル名の一括変換の一例。
\( と \) で囲まれた部分は後に流用するために,マッチング部分をグルーピングしておくという意味。
変換後については,\1 というのは前にマッチングした部分の1番目。

▼タブをスペースに
M-x untabify

▼添付ファイルの復活
こんなメールをデコードする。
--InternetPost-Multipart-NWVwig169500
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="foo.lzh"
Content-Transfer-Encoding: Base64

LgAtbGg1LTv0AAAAMgQAWDJlNSACiwhNDwABkNSSy0ZJTEUuWExTBQAAyE4A
ACBghe77rUlLf9/4PFOAIACIgIhxRVBVUFZlFVBVVVRABFFWlgVVZVVWVZqg
2VSiAAgBXe2VNlVk1S1lU9pWLuLZL3jlV27lZUs2WTlWXcm7rLPXnLvT9+//
/+973vfNnOf1d4U7727ms9r3e69r2vfE9r3wPa173y/fR176F/fRB7vd7VyK
OR+v60Tzd95Uf8JGf7HEuBP8rWCJclkdxD/3aAP6RBAX2tqPkn9xQK7oH/iw
/91D/xgf+1///3/3+gnToM2LiTaRXJgRYE9Mg5wekH/8EM+3BIiHIS0D1/SH
/0RMQS5pbJLrktfW9tW6pLTu/9v7IBavg3DGuIoLFcB53AjkkCFvugZT+YPe
1te8D5hiRgfMAS7Ay5DXCn09Noafraqlsvd3XzWdndgW3O4U+0p5mnyNPvBS
xpL2R2FnXULRcFaSgcWLQ9fB+2S40pmpLgDQCtHgAvU1H/ytTto0twGhjX7W
OKeYovzdC/OND1+hxzLhRYT14nEgKbgFH+uAmSq6ovzei/MMHy4J7pfOXCt+
復活方法:
  1. メールの順番を確かめる(分割されてくる場合がある)
  2. 先頭のメールから、文字化けしているような部分を切り出して、他のバッファへコピーする
  3. それを最後のメールまで繰り返していく
  4. Content-Transfer-Encording: の欄をみて、それをalt + xの後に引きつづいて入力する。
    Base64---->base64-decode-region-to-file
    uudecord-->uudecode-region-to-file
    書き出したファイルを解凍すればまず大丈夫なはず。

▼桁数をそろえる
一例として、こんな感じ。csvで、こんな風に変換したいとする。
変換前変換後
000,abcdefg,20001101,5453,0
000,defg,20001101,5500,0
000,abcdefghijkl,20010101,4400,0
010,vwxyz,20010101,1234,1
000,abcdefg     ,20001101,5453,0
000,defg        ,20001101,5500,0
000,abcdefghijkl,20010101,4400,0
010,vwxyz       ,20010101,1234,1
やってみよう。
  1. C-x ( でキーボードマクロの記録開始。
  2. C-s で "," を2回検索。
  3. ミニバッファで(indent-to 17) を評価。すると2つ目の "," が17カラム目までぶっとんでくれる。
  4. C-a C-n で次の行へ移動。
  5. C-x ) でキーボードマクロの記録終了。
  6. ESC 0 C-x e でバッファの最後までキーボードマクロを実行。
いかが?


[▲Top]

べんりすぷ

▼じぇねらる::拡張子とモードの関連付け
例では .pl を prolog-mode に割り当ててる。prolog-modeは......
; ある拡張子をあるモードに関連付ける
; by Tetsuya Kamei  [xyzzy:01049]
(push '("\\.pl$" . prolog-mode) *auto-mode-alist*)
              または
(setq *auto-mode-alist* (append *auto-mode-alist*
                                '(("\\.pl" . prolog-mode))))
▼じぇねらる::find-fileでどこ開く?
find-file するときに最初に表示されるディレクトリを変更する
; いつもここから
(set-default-directory "D:/User/s5087/")
▼Emacsちっくに::キーバインディング
もちっとPageUp/PageDownに関するキーバインドが楽にできて、なおかつ標準的キーバインドから離れない方法があればなぁ......人間のほうが慣れろってことですな。
; キーバインディング
; C-/ or C-x uであんどぅ〜
(global-set-key #\C-/ 'undo)
(global-set-key '(#\C-x #\u) 'undo)
; M-vで上向きスクロール
; (global-set-key #\M-v 'previous-page)     ;(0.2.0.127からはデフォね)
▼Emacsちっくに::インクリメンタルサーチ
; インクリメンタルサーチ (C-s, C-r)
(load-library "isearch")
▼Emacsちっくに::Canna風IME起動
;; C-o で IME の起動 ("Canna"er用)
(global-set-key #\C-o 'toggle-ime)
 
▼C, C++関連::ナイスなタブモード
TAB を押したときの働きが,前に空白しかないとインデント、それ以外だと本来の TAB コードを挿入する動きになる。文のおしりに注釈を書いたりする人は必須かも。
; ナイスタブ on C (and C++) モード
(setq *c-tab-always-indent* nil)
▼C, C++関連::インデントはタブ以外ありえん
; インデントを TAB でやりたい人は
(setq *c-indent-tabs-mode* t)
▼Text関連::このかっこどこまで?
Text モードでカッコとかで囲まれているところに色がつく
;; ナイスに色を付ける
; by Seiya Suda  [xyzzy:02582]
(defvar *text-parenthesis-colorize* nil)
(setq *text-parenthesis-colorize* (make-hash-table))
(setf (gethash #\「 *text-parenthesis-colorize*) #\」)
(setf (gethash #\『 *text-parenthesis-colorize*) #\』)
(setf (gethash #\〈 *text-parenthesis-colorize*) #\〉)
(setf (gethash #\【 *text-parenthesis-colorize*) #\】)
(setf (gethash #\≪ *text-parenthesis-colorize*) #\≫)
(setf (gethash #\〔 *text-parenthesis-colorize*) #\〕)
(setf (gethash #\[ *text-parenthesis-colorize*) #\])
(setf (gethash #\{ *text-parenthesis-colorize*) #\})
(setf (gethash #\《 *text-parenthesis-colorize*) #\》)
(setf (gethash #\( *text-parenthesis-colorize*) #\))
(defun text-parenthses-colorize ()
  (interactive)
  (setq parentheses-hash-table *text-parenthesis-colorize*)
  (setq highlight-keyword t))
▼電卓::やっぱりBin/Oct/Hexぐらいねぇ
F5〜F8で表示の基数を変更できる。
; 基数の変更
; 2000/02/15
(in-package "editor")                ←これいるよな,きっと

(defun change-radix (radix)
  (setq *calc-radix* radix)
  (let ((latest nil))
    (save-excursion
      (when (scan-buffer
             "^[-]*\\(0b[-01]+\\|0[-0-7]+\\|[-1-9][0-9]+\\|0x[-0-9a-fA-F]+\\)"
             :regexp t :reverse t)
        (setq latest (buffer-substring
                      (match-beginning 0)
                      (match-end 0)))
        ; - があったら - の記号をトップへ
        (and (string-match "-" latest)
             (setq latest 
                   (concat
                    "-"
                    (substring latest 0 (string-match "-" latest))
                    (substring latest (1+ (string-match "-" latest)) nil))))
        (setq latest (calc-string latest))))
    (save-excursion
      (goto-bol)
      (insert (format nil "[Radix -> ~@2a] " radix)))

    ; こっからはコピペ
    (when latest
      (when (si:*ratiop latest)
        (cond ((eq *calc-ratio* 'int)
               (setq latest (truncate latest)))
              ((eq *calc-ratio* 'float)
               (setq latest (float latest 1d0)))))
      (when (and (integerp latest) *calc-bits*)
        (setq latest (logand latest (- (ash 1 *calc-bits*) 1)))
        (when (and (null *calc-unsigned*)
                   (logbitp (- *calc-bits* 1) latest))
          (setq latest (- latest (ash 1 *calc-bits*)))))
      (calc-print-number latest))
    (insert "\n$ ")))

(defun change-radix-2 ()
  (interactive)
  (change-radix 2))

(defun change-radix-8 ()
  (interactive)
  (change-radix 8))

(defun change-radix-10 ()
  (interactive)
  (change-radix 10))

(defun change-radix-16 ()
  (interactive)
  (change-radix 16))

(define-key *calc-mode-map* #\F5 'change-radix-2)
(define-key *calc-mode-map* #\F6 'change-radix-8)
(define-key *calc-mode-map* #\F7 'change-radix-10)
(define-key *calc-mode-map* #\F8 'change-radix-16)
▼労力削減::設定ファイルを一発で放り込みたい
例では C-x C-f のときさらに C-s で ~xyzzy/site-lisp/ を挿入。C-s の代わりによく編集するファイルを F1 から順にファンクションキーに登録しておくと便利(F1 に .xyzzy,F2 に siteinit.l とか)
;; C-x C-f 時にショートカットで固定文字列を挿入
; by masahito henmi  [xyzzy:02669]
(define-key minibuffer-local-completion-map #\C-s
    #'(lambda () (interactive)
        (delete-region (point-min) (point-max))
        (insert (concat
                 (merge-pathnames "site-lisp" (si:system-root)) "/"))))
▼ファイラ関連::マスクの変更
デフォルトのマスクを全ファイルにしましょう
; ファイラで全ファイル表示をデフォルトに
;; 2 画面用
(setq *filer-primary-file-mask* '("*"))
(setq *filer-secondary-file-mask* '("*"))
;; 1 画面用
(setq *filer-last-file-mask* '("*"))
▼ファイラ関連::ジャンプディレクトリの設定
変数 *filer-directories* へリストを代入。特殊ディレクトリなんかも一発。ドライブも全部入れておけば"L"コマンドともおさらばできるとかできないとか。
; ジャンプディレクトリ
(setq *filer-directories*
      (list
       '("[Home]"           . "D:/User/Toy")
       (cons "[xyzzy/lisp]" (concat (si:system-root) "lisp"))
       '("[Public_html]"    . "//mizuno-labo/s5087/public_html")
       '("[Utility]"        . "C:/Utility")
       '("[Program Files]"  . "C:/Program Files")
       '("//Leo"            . "//Leo/s5087")
       '("//Taurus"         . "//Taurus/Disk-D/User/s5087")
       '("  C:/"            . "C:/")
       '("  D:/"            . "D:/")
       '("  E:/"            . "E:/")
       (cons "[Windows]"    (get-windows-directory))
       (cons "[System]"     (get-system-directory))
       (cons "[Desktop]"    (map-backslash-to-slash
                             (get-special-folder-location :desktop)))
       (cons "[Temp]" (or (map-backslash-to-slash (si:getenv "TEMP"))
                          (map-backslash-to-slash (si:getenv "TMP"))
                          "D:/User/s5087/Temp"))
      )
)
▼ファイラ関連::送りまくる
送るのリストをカスタマイズするときは *filer-send-to-list* をいじる。設定していないときはWindowsのsendtoが使われるっぽい。
; 送るのリスト
(setq *filer-send-to-list*
      (list
       '("[Home]"               . "D:/User/Toy")
       '("[Works]"              . "D:/User/Toy/Works")
       '("//Leo"                . "//Leo/s5087")
       '("//Taurus"             . "//Taurus/Disk-D/User/s5087")
       (cons "[Desktop]" (map-backslash-to-slash
                          (get-special-folder-location :desktop)))
       (cons "[Temp]" (or (map-backslash-to-slash (si:getenv "TEMP"))
                          (map-backslash-to-slash (si:getenv "TMP"))
                          "D:/User/s5087/Temp"))
      )
)
▼ファイラ関連::ファイル名のケース変更
; 大文字のファイル名をファイラで一括して小文字へ
; by Tetsuya Kamei  [xyzzy:01039]
(defun filer-downcase-filename ()
  (let ((files (filer-get-mark-files)))
    (when (and files (yes-or-no-p "小文字にしまっせ"))
      (filer-subscribe-to-reload (filer-get-directory))
      (mapc #'(lambda (x) (rename-file x (string-downcase x))) files)
      (filer-demand-reload)
      (filer-goto-file (file-namestring (car files))))
    t))
▼ファイラ関連::PageUpをM-vに
; ファイラ上向きスクロール (M-v)
(define-key filer-keymap #\M-v 'filer-backward-page)
▼ファイラ関連::ファイラで開く表示ディレクトリを決め撃ち
; ファイラのデフォルト表示ディレクトリをきめうち
; From : [xyzzy:02937]
(setq *filer-primary-directory* "C:/Windows/")
(setq *filer-secondary-directory* "D:/User/s5087/")
▼労力削減::いちいちIMEをONにせんでも
IME が ON であろうがなかろうが、いつでも全角のスペースやカッコが挿入できる
; 全角スペースの挿入
(global-set-key #\M-SPC
                #'(lambda ()
                    (interactive)(insert " ")))
                                          ↑ 全角スペース
; 全角カッコの挿入
(global-set-key #\M-8
                #'(lambda ()
                    (interactive)(insert "(")))
(global-set-key #\M-9
                #'(lambda ()
                    (interactive)(insert ")")))
▼労力削減::バイトコンパイルの微妙な手抜き
C-c b で siteinit.l のバイトコンパイル…なんだけど,そしたら普通ダンプファイルも消すよな
; ダンプも消しとこ
(defun compile-and-delete-dump-file ()
  (interactive)
  (and (find-buffer "siteinit.l")
       (eval-buffer "siteinit.l"))
  (byte-compile-file
   (concat (si:system-root) "site-lisp/siteinit.l"))
  (let ((dumpfile       
         (concat (si:system-root) "xyzzy.w"
                 (case (os-platform)
                   (windows-2000 "2k")
                   (windows-nt "nt")
                   (windows-98 "98")
                   (windows-95 "95")
                   (t "nt")))))
    (and (file-exist-p dumpfile)
         (delete-file dumpfile)))))
(global-set-key '(#\C-c #\b) 'compile-and-delete-dump-file)
▼モアニッチ::モードラインにIMEすていたす
これで IME の窓はさようならですか
;; モードラインに IME の状態を
(setq-default mode-line-format "--%*- %b (%M) [%k:%l] %P %f [%i]")
▼モアニッチ::さよならメニュー
メニューが消せます
;; メニューいらんよな (うそーん)
; by Tetsuya Kamei  [xyzzy:02409]
(set-menu nil)
▼モアニッチ::さよならメニュー・ネオ
メニューいらんよな系のネタをスタート時から有効にするには、*post-startup-hook* にぶちこむのがいいかもしんない
;; オープニングからメニューいらんよな (まじっすか?)
(add-hook '*post-startup-hook*
	  #'(lambda ()
	      (set-menu nil)))
▼モアニッチ::たまには顔出せよメニュー
M-x toggle-app-menu でメニューが消えたり現れたり
;; メニューいらんよなの切り替えスイッチ
; by Tetsuya Kamei  [xyzzy:02412]
(let ((toggle-app-menu *app-menu*))
  (defun toggle-app-menu ()
        (interactive)
        (set-menu (setq toggle-app-menu
                        (unless toggle-app-menu *app-menu*)))))
▼文字数を数えよう
From:[xyzzy:07780]
(defun count-char-from-point ()
  (interactive) (save-excursion
    (let ((p1 (point)) (p2 (point-max)))
      (setq parcnt
        (- (progn (goto-char p2) (current-line-number))
           (progn (goto-char p1) (current-line-number))))
        (message "~d paragraphs, ~d characters."
           parcnt (- p2 p1 parcnt)))))
▼指定ディレクトリをgrepしよう
From:[xyzzy:07529]
(defun foo ()
  (require "grepd")
  (let ((ed::*grep-directory-name-hook*
	 #'(lambda ()
	     (pop si:*command-line-args*))))
    (declare (special ed::*grep-directory-name-hook*))
    (grep-dialog)))
とか定義しておいて、-f foo "ディレクトリ" を渡す。


[▲Top][★Home]