F1 で info を起動するようにする。
キーバインドを変更する。
(global-set-key #\F1 'ed::info)
ラベルを変更する。
(set-function-bar-label #\F1 "info")
(undefine-key *kamail-folder-map* #\g)
ESC p (repeat-complex-command) する。 C-p とか ↑ で履歴をさかのぼったり、 C-n とか ↓ で履歴をさかくだったりできる。
バッファの指定領域のみ表示する。というか、他の領域を見えにくくしてそこへ移動できなくする。 バッファ全体に対して行われる処理を、指定領域に対してだけ行うことができる。 ワイディングは、ナローイングした状態から通常の状態に戻す。 Emacs を使ってた人ならあたりまえな機能かもしれないけど、そうでない人には、聞きなれないものと思う。
リージョンをナローイング --- C-x n
ワイディング --- C-x w
メニューからする場合は、「検索(S)」→「指定行(J)」、キー操作で行いたい場合は、 ESC g (goto-line) 。
set-mark-command は、C-@ でするので、C-SPC に別の機能を割り当てたいという場合は、 こんな感じ。xyzzy Part7 491 を参考に。
(set-extended-key-translate-table exkey-C-space #\F14) (global-set-key #\F14 'dabbrev-expand)
以下、xyzzy Part7 491 よりそのまま引用。
ファンクションキーは F24 まであって Ctrl, Alt, Shift と組み合わせることが可能。 exkey-* は M-x apropos [RET] exkey と打てば何が定義されてるか見られる。
exkey- に指定できるあたりは、 Toy さんのぺーじ に詳しい説明がある。
ちなみに F20 を使うと、 outline-tree のキーバンド設定例をそのまま使っている場合に、olt:olt-node-action が潰れてしまうので要注意。
セレクション用のキーマップを作成する。winkey.l を使ってる人は必要なし。
2ch 上の OHKUBO さんより。
(unless (keymapp selection-keymap) (setq-default selection-keymap (make-sparse-keymap)))
より。
(defun count-buffer-char () (interactive) (save-excursion (goto-char (point-min)) (count-matches ".")))
セレクションがあればセレクション内の、なければバッファ全体の改行以外の文字数をカウントする。
(defun count-buffer-char () (interactive) (if (get-selection-type) ;selection があれば narrowing して実行 (selection-start-end (start end) (narrow-to-region start end) (goto-char (point-min)) (count-matches ".") (selection-end-of-buffer) (widen)) ;selection がなければそのまま実行 (save-excursion (goto-char (point-min)) (count-matches "."))))
[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)))))
[xyzzy:08160](亀井さん)より。
(defun switch-pseudo-frame (name) (interactive (list (completing-read "Frame: " (mapcar #'ed::pseudo-frame-name ed::*pseudo-frame-list*) :must-match t))) (select-pseudo-frame (or (find-pseudo-frame name) (error "~aはありません" name))))
xyzzy Part6 832 より。
;; 前のフレーム (global-set-key #\S-C-F24 'previous-pseudo-frame) (set-extended-key-translate-table exkey-S-C-tab #\S-C-F24) ;; 次のフレーム (global-set-key #\C-F24 'next-pseudo-frame) (set-extended-key-translate-table exkey-C-tab #\C-F24)
(defun my-machine-check () (interactive) (let ((x (machine-name))) (cond ((string= x "ouchi") (message "いえ")) ((string= x "kaisya") (message "かいしゃ")) (t "default") )))
より。
(setq-default display-newline-char #\downwards_arrow_with_tip_leftwards) (setq-default display-first-tab-char #\rightwards_arrow_to_bar) (setq-default display-rest-tab-char nil)
xyzzy Part7 58-61 より。
(require "wip/winapi") (c:define-dll-entry c:short GetKeyState (c:int) "user32") (global-set-key #\C-b 'my-backward-char) (defun my-backward-char () (interactive) (if (or (minusp (GetKeyState 16)) (minusp (GetKeyState 160))) (selection-backward-char) (backward-char))) (global-set-key #\C-p 'my-previous-virtual-line) (defun my-previous-virtual-line () (interactive) (if (or (minusp (GetKeyState 16)) (minusp (GetKeyState 160))) (selection-previous-virtual-line) (previous-virtual-line))) (global-set-key #\C-f 'my-forward-char) (defun my-forward-char () (interactive) (if (or (minusp (GetKeyState 16)) (minusp (GetKeyState 160))) (selection-forward-char) (forward-char))) (global-set-key #\C-n 'my-next-virtual-line) (defun my-next-virtual-line () (interactive) (if (or (minusp (GetKeyState 16)) (minusp (GetKeyState 160))) (selection-next-virtual-line) (next-virtual-line)))
HTML Help を検索するには、変数 *html-help-path* にヘルプファイルのパスをセットし、 show-html-help を実行すると、キャレット位置の単語を検索してくれる。 以下では、ruby のヘルプを引いてみた (C-F1) 。
(defun ruby-show-html-help () (interactive) (let ((*html-help-path* "C:/usr/local/ruby/rubymanjp.chm")) (show-html-help))) (define-key *ruby-mode-map* #\C-F1 'ruby-show-html-help)
同じく Windows Help (?) を検索するには、変数 *winhelp-path* にヘルプファイルのパスをセットし、 show-winhelp を実行するとできるみたい。
(defun delphi-show-winhelp () (interactive) (let ((*winhelp-path* "C:/Program Files/Borland/Delphi6/Help/delphi6.hlp")) (show-winhelp)))
xyzzy Part7 304(正体は OHKUBO さんらしい)より。 バッチファイルとかから xyzzycli.exe -f diff-command-line %1 %2 とかして使う。 SendTo に入れておいて、Explorer からつかっても便利。
(defun diff-command-line () (require "diff") (let ((new-file (pop si:*command-line-args*)) (old-file (pop si:*command-line-args*))) (diff new-file old-file)))
si:*command-line-args* は、xyzzy 起動時の引数をリストとしてもっているらしい。
xyzzy Part7 277 より。
(defmacro int2str (int) `(format nil "~A" ,int))
xyzzy Part7 477, 480 より。
(defun query-kill-xyzzy (&optional noquestion) (interactive) (when (and (not noquestion) (yes-or-no-p "本当に xyzzy を終了しますか?")) (kill-xyzzy))) (add-hook 'ed::*query-kill-xyzzy-hook* 'query-kill-xyzzy)
C-x C-c 実行時のみ確認させる場合は、add-hook を無効にして以下を追加する。
(define-key ctl-x-map #\C-c 'query-kill-xyzzy)
xyzzy Part8 024 より。
(defun get-logical-drives() (unless (fboundp 'GetLogicalDrives) (c:define-dll-entry winapi:LONG GetLogicalDrives nil "kernel32")) (let ((drives nil) (offset 25) (drive-bits (GetLogicalDrives))) (while (>= offset 0) (if (logbitp offset drive-bits) (setf drives (cons (concat (string (code-char (+ 65 offset))) ":/") drives))) (setf offset (1- offset))) drives))
C-SPC で現在位置を記憶し、C-` で記憶した位置に戻る。
普通にマークするだけのときは C-@ を使っている。
私が、毎日使っているものの一つ。
[xyzzy:08134](加藤木さん)より。ここでは、レジスタ p を使用している。
;; ポイントをレジスタ(p)に記憶 (defun set-mark-and-point-to-register-p () (interactive) (set-mark-command) (point-to-register #\p)) (set-extended-key-translate-table exkey-C-space #\F14) (global-set-key #\F14 'set-mark-and-point-to-register-p) ;; 記憶したポインタ(p)に移動 (defun jump-to-register-p () (interactive) (jump-to-register #\p)) (global-set-key #\C-\` 'jump-to-register-p)
指定した式を、別プロセスで xyzzy を起動し評価する。 すでに別の xyzzy が在ればそいつを使う。xyzzy Part8 034 より。 interactive に呼んでみた。
(defun other-xyzzy-and-eval (sexp) (interactive "ssexp: ") (let ((callcmd "xyzzy.exe")) (if (>= (count-xyzzy-instance) 2) (progn (setq callcmd "xyzzycli.exe") (next-xyzzy-window)) ) (call-process (concat callcmd " -e\"" sexp "\"") :exec-directory (si:system-root) :wait nil)))
S-C-Space でマークダイヤログ (mark-dialog-box) にマークを追加する。
(set-extended-key-translate-table exkey-S-C-space #\F15) (global-set-key #\F15 #'(lambda () (interactive) (global-mark-add)))
[xyzzy:07240](KAMEI Tetsuya さん)より。scroll-down するには,こんなでよいのかな。
です。scroll-up は C-M-. に,scroll-downは C-M-, に割り当ててみた。
;; Emacs 風 scroll-up (defun scroll-up (&optional (arg -1)) (interactive "p") (let ((c (goal-column))) (save-excursion (scroll-window arg)) (unless (pos-visible-in-window-p (point)) (forward-virtual-line arg)) (goto-virtual-column c) (set-goal-column c)) t) (global-set-key #\C-M-. 'scroll-up) ;; Emacs 風 scroll-down (defun scroll-down () (interactive) (scroll-up 1)) (global-set-key #\C-M-\, 'scroll-down)