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

現在開いているファイル名を挿入する、ということがどうやら基本的にメニューに見当たらないので、これを機に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