StartCommandが超便利

シゴタノ!は、RSSで読んでいるけど、あまり深く読むことは無い。しかし、今日のエントリはかなりよさそうだと思い、仕事のシメに試してみた。

いいねー、超便利!!CUIサイコー。
要は、検索窓をウェブ巡回するCUIに変化させてしまう、というもの。
Firefoxを使っているなら、ウィンドウ右上の検索窓をStartCommandにしてしまえるので、そうしてしまうべきです。
ちなみに「Ctrl+Kで検索窓にカーソルが移動」「Ctrl+LでURL欄にカーソルが移動」はFirefoxユーザーなら覚えておいて損は無い。

たとえば、こういうこと。

どういうことかと例を挙げると、以下のような入力でウェブジャンプが出来るのです。

コマンド登録

もちろんこのコマンドは自分でも作れるので、上記で長くなっているコマンドを書き換えたりも出来る。

  • gd
    • Google Documentsへのジャンプ
  • octech
    • このblogへのジャンプ

上記のコマンドは公開しているので別のユーザーも使えます。これもいいところですね。

空欄→StartCommand

StartCommandのページへのジャンプは空欄のままでOK、というのも割りと直感的。
総合的にかなりナイスです。

唯一の欠点 デフォルトコマンド設定で完璧

唯一の欠点は、普通のGoogle検索のときも"g "という2キー入力を必要とすること。さらにFirefoxではウェブページ上の文字列を選択して右クリックして検索、という流れをよく使っていたのですが、"g "入力を必要としてしまうので、これが出来なくなる。これを何とかできたらほぼ完璧なんじゃないかと。
と、思っていたら「デフォルトコマンド」という機能がありました!
デフォルトコマンド、とは、1単語目が登録コマンドに相当しない場合、検索欄に入力した文字列をどう処理するか?という設定。通常は何も設定されていないのですが、これをGoogle検索にしておくと、Firefoxの検索窓もコマンドがないときには普通の検索として使えます。

「設定→登録情報の変更」の最下段にあります。
ハイパー便利なStartCommand、使わない理由がないですよ!

現在開いているファイル名を挿入する

現在開いているファイル名を挿入する、ということがどうやら基本的にメニューに見当たらないので、これを機にLispスクリプトを書いて組み込んでみた。
とりあえず、C-F8で挿入できました。なるほどなるほど。
やっぱりLisplisp-modeで書かないと、括弧の数をミスしますね・・。

;;; 以下のコードを.xyzzy に追記します.

;; 現在選択中のバッファ名(開いているファイル名)を返します.
(defun insert-filename ()
  (interactive)
  (insert (buffer-name(selected-buffer)) ) )

;; C-F8 に割り当てます.
(global-set-key #\C-F8 'insert-filename)

ということをやっておくと、この関数はミニバッファからも呼び出せる。

これは (interactive) 宣言しているからなのかな?いまいちここの行の意味がわからない。
でも、まぁ、便利!

パス名+ファイル名を挿入する

ファイル名だけではなく、パス名も入れてみたい、ということでヘルプを探りながら書いてみたコードは以下のようになりました。

;; 現在選択中のバッファ名(開いているファイル名)をフルパスで返します.
(defun insert-filepath ()
  (interactive)
  (insert (merge-pathnames (buffer-name(selected-buffer)) (default-directory)) ) )

;; C-F7 に割り当てます.
(global-set-key #\C-F7 'insert-filepath)

ファイルのパス名は、開いているバッファ名と作業ディレクトリの合成で生成しています。作業ディレクトリを変更したりしたらおかしな値が返ってきそうなので注意です。

パス名+ファイル名を挿入する(別回答)

上記に対して通りすがりさんから「xyzzy には get-buffer-file-name というそのものズバリな関数がありますので、こちらを使った方が良いと思います。」と教えていただきました。
確かにこの方が良いと思うので、これもインデントとかまとめて書いておきます。

;; 現在選択中のバッファ名(開いているファイル名)をフルパスで返します.
;; get-buffer-file-name を使うコード.
(defun insert-filepath2 ()
  (interactive)
  (insert (get-buffer-file-name)) )

;; 現在選択中のバッファ名(開いているファイル名)をフルパスで返します.
;; get-buffer-file-name を使い、その戻り値が無効でも対応できる関数定義.
;; ※通りすがりさんにおしえていただいたコード.
(defun insert-filepath2b ()
  (interactive)
  (let ((f (get-buffer-file-name)))
    (if f (insert f))) )

letとか知らなかったのですが、これは局所変数を定義する構文なのですね。(ちなみにグローバルな変数定義はsetq)
勉強になります!

参考書籍

入門xyzzy

入門xyzzy