xyzzyの最近のブログ記事

six olq: Movable Type:: Emacs フロントエンド 「mapae」のxyzzy対応版です。xyzzyからMovable Typeの更新を行うことができます。

動作に必要なものは、以下の通り。

未確認の機能がいくつかあります。問題が発生した場合は善処しますのでメールでもコメントでもトラックバックでも何でもいいので報告してください。

インストール

  1. mapae本体を解凍して、mapae.plmapae.phを任意の同じディレクトリに置き、mapae.phに適切な値を設定します。詳しくは「mapae」のページを参照。またmapae.phに「$CHARSET{'emacs'} = 'shift_jis';」という行を追加してください。
  2. mapae.elの文字コードをSJISに変換し、xyzzyの *load-path*の通ったディレクトリ、たとえば$(xyzzyのインストールディレクトリ)/site-lisp に置きます。なお、2004-08-20より前に配布されていたmapaeではmapae-parse-result-という関数の先頭部分を修正する必要があります。できるだけ、最新バージョンを入手のこと。
  3. mapae.l*load-path*の通ったディレクトリに置き、M-x byte-compile-fileします。

以下に.xyzzyの設定例を示します。

(require 'mapae)
(setq mapae-perl-command "perl")
(setq mapae-command "c:/program files/xyzzy/etc/mapae.pl") ;mapae.plの場所を指定
(global-set-key '(#\C-c #\w #\n) 'mapae-new-post)
(global-set-key '(#\C-c #\w #\r) 'mapae-get-recent-post)
(global-set-key '(#\C-c #\w #\g) 'mapae-get-post)
(global-set-key '(#\C-c #\w #\l) 'mapae-get-recent-titles)
(setq mapae-favorite-mode 'xml-mode)
;(setq mapae-browser-command  #'bx:navigate) ; browserex
(setq mapae-browser-command "c:/Program Files/Mozilla Firefox/firefox.exe")

mapae-favorite-mode には本文を編集するための好みのモードを指定します。

基本的な使用方法

six olq: Movable Type:: Emacs フロントエンド 「mapae」を参照してください。

xyzzy版の特記事項

以下の変数を変更することにより、ハイライト等のテキスト表示の効果をカスタマイズすることができます。

効果変数初期値説明
ハイライトmapae::highlight-attribute(:bold t :foreground 3)ボールドで文字色3(デフォルトは黄色)
不可視mapae::invisible-attribute(:foreground 7)文字色7(デフォルトは白)
下線mapae::underline-attribute(:underline t)下線を引く

履歴

2007-03-15
mapae-get-recent-titles等、C-uの前置引数で整数値を指定するタイプのコマンドがうまく引数が渡せていないことが発覚。mapae.lを修正しましたが、副作用の可能性がなきにもあらず。
2004-09-01
mapae本体のnyamさんに調べていただき、文字化けの原因がわかりました。申し訳ないことに、mapae for xyzzy側の文字コードの設定ミスが原因でした。nyamさん、ありがとうございました。
2004-08-23
mapae-browser-openをまともに動くようにしました。ただし、簡易プレビュー機能はなぜか文字化けしてしまいます。調査中。
2004-08-20
mapae.elのラッパーとして働くようになりました。mapae Ver.0.10 20040820に対応。
2004-02-12
今まで独自のperlファイルを配布していましたが、今後はオリジナルのsix olqのものを使うようにします。
2004-01-03
初版公開。

おまけ

某掲示板でこんなこと書かれていた。デスマーチ進行中だそうだ。あと、10日で勉強して移植したのはぼくではないと思う。

82 名前:名無し~3.EXE[sage] 投稿日:04/06/14 01:18 ID:FqrkMxpR
mapae for xyzzyを保守して下さい。
お願い致します。

こういうお願いは見当違いと仰る方がおられること、
そしてそのお考えも十分理解できるのですが、
何分自分にはlispを書き上げる能力がありません。
勉強すればいいのですがそれでは随分先になってしまいそうなの、
このようにお願い差し上げました。

ご検討の程よろしくお願い致します。

83 名前:名無し~3.EXE[sage] 投稿日:04/06/14 01:56 ID:ZvlPhgOy
よくわかっていない上に全くの他人なんだけど「保守してください」という要求は
漠然としすぎている気がするな。

ある程度のlispを公開してそのままにしている人はデスマーチ進行中。
間違いない。

84 名前:名無し~3.EXE[sage] 投稿日:04/06/14 22:51 ID:Mj/uUfSz
>>82
こんなところに書き込む前に、作者さんに直接メールを送る等
やるべきことをやっているんですか?

86 名前:名無し~3.EXE[sage] 投稿日:04/06/17 22:05 ID:Z03TeqnK
>>82
>何分自分にはlispを書き上げる能力がありません。
>勉強すればいいのですがそれでは随分先になってしまいそうなの、
>このようにお願い差し上げました。

こんな発言をする事自体、全然理解してない証拠です。

それを公開されている方は人間であり、機械ではありません。
それの保守で生計を立てている訳ではありませんし、その人の生活もあるでしょう。

使える資源(頭、時間、HP容量等)には限りがありますので、何でも出来るわけでは
無いと言う事をご理解下さい。

87 名前:名無し~3.EXE[sage] 投稿日:04/06/17 22:55 ID:Ot00B3zJ
kimoi

88 名前:名無し~3.EXE[sage] 投稿日:04/06/17 23:22 ID:nWwaAvD3
>>87
そういうな.気持ちはわかるが.
だいたい,作者さんは現状で必要にして十分な機能が備わっていると思って
リリースしてるんだから,メンテしてだけじゃ何も行動が起きないよな.
具体的なバグ報告や機能追加を要望として出さないとやってくれるわけがない.

だいたいこの作者さんは,mapaeじゃなかったかもしれないけど,こういった
モードをxyzzyに移植したくて,そこからlispを勉強し始めて,10日間くらい
で移植したんだとどこかに書いてあったと思う.もちろん仕事しながらで.
そういう人からみて,今lispがかけないから,あんたやってくれっていうのは
どういう風に映るんだろうな

89 名前:86[sage] 投稿日:04/06/17 23:32 ID:XkUFKvuN
皆さん。アドバイスありがとうございます。
反省しています。
これからLispを勉強して自分で書いてみます。
大事なことに気がつきました。

xyzzyでXMLファイルを編集するためのモードです。

xml-mode で MT のテンプレートをいじりたいのですがという要望に応えて2年ぶりにバージョンアップしました。(2005-09/29)

pov-rayモード

| コメント(0)

POV-Rayのシーンファイル"*.pov"ファイルをxyzzyで編集するためのモードです。

ダウンロード

こちらからどうぞ:

アーカイブの中には以下の3つのファイルがあります。説明に従って適切なディレクトリにおいてください。

ファイル説明
pov-mode.lcコンパイル済みのリスプファイル。"(xyzzyのインストールディレクトリ)\site-lisp\" などに置く。
pov-mode.l上記ファイルのソースファイル。pov-mode.lcと同じディレクトリに置いてください。
POVキーワードファイル。"(xyzzyのインストールディレクトリ)\etc"に置いてください。

設定

~/.xyzzyに以下のように記述してください。

(in-package 'editor)
(autoload 'pov-mode "pov-mode")
(push '("\\.pov$" . pov-mode) *auto-mode-alist*)
      ....
(in-package 'user)

これで"*.pov"というファイルを読み込めば自動的にpov-modeになります。

(in-package 'user)の前で必要に応じて以下の変数をsetqしてください。(例:(setq pov-indent-level 4))

pov-indent-level,pov-brace-offset,pov-brace-imaginary-offset
c-...と同じ。インデント幅の設定です。
pov-render-option
POV-Rayに渡すオプションの指定。デフォルトは""。

キーバインド

基本的にはc-modeと同じ。加えて以下のキーを設定しています。

キー関数機能
C-c epov-execute新規にPOV-Rayを起動して、現在のバッファで編集中のファイルをレンダリングする。
C-c k pov-kill現在起動中のPOV-Rayの中からある1つ(最初に見つかったもの)を終了させる。
C-c rpov-render現在起動中のPOV-Rayの中のある1つ(最初に見つかったもの)に対し、POV-Rayの内蔵エディターで選択されているファイルないしは、直前にレンダリングしたファイルをレンダリングする。
C-c ipov-insertPOV-RayのInsertMenu機能を実行する。ミニバッファで入力するカテゴリとアイテムを指定する。補完が可能。ミニバッファでスペースを入力する必要がある場合は、C-q SPCと入力してください。

履歴

v1.41 (2000-05-29)
InsertMenuのバグフィックス
v1.4 (2000-05-22)
0.2.1.143からの新機能indent-for-comment対応
v1.3 (2000-05-17)
InsertMenuの機能を追加
v1.2 (2000-05-12)
起動中のPOV-Rayを終了させる機能を追加
:POV-Rayのコマンドのパスをregistryから取得するように変更
キーの割り当てを変更
:変数pov-mode-versionにバージョン番号を格納。
1.1 (2000-05-11)
:起動中のPOV-Rayに対しレンダリングを実行させる機能を追加
キーワードファイルのカラー指定を変更
v1.0 (2000-05-06)
とりあえず公開

わかっている問題点

  • インデント幅の計算ルーチンにc-modeのものを流用しているため、#while~#endや#macro~#endなどの中がインデントされず、"{"以降に文字がある場合もインデントがおかしくなる。ゆくゆくは自前のインデント幅計算ルーチンを作成する予定。
  • pov-renderでレンダリングされるファイルは現在バッファに読み込んでいるファイルとは限らない。Windows版POV-Rayの現在の実装方法では仕方がない。

xyzzyでHTMLを入力するときに補助的に使うと便利なライブラリーです。minor-modeとして作成してみました。xyzzy標準の HTMLモードまたはYMTZさんのHTML+モードなどと一緒にお使いください。といっても特にそれらの存在を前提とはしていませんので、お好きな場面でどうぞ。

現状提供する機能は次の2つです。

  • HTML文字実体参照とUnicodeキャラクターの相互変換
  • tidyを利用した構文チェック、xhtmlへの変換

ダウンロード

"(xyzzyのインストールディレクトリ)\site-lisp\"などにおいて、お好みによりbyte-compileしてください。

設定・起動

たとえばxyzzy標準のHTMLモードと併用する場合、~/.xyzzyに以下のように記述してください。

(require "htmlmode")
...
(require "html-support")
(add-hook '*html-mode-hook* 'ht:html-support-mode)

HTML+モードと併用する場合もほぼ同様で以下のように記述してください。

(require "html+-mode")
...
(require "html-support")
(add-hook '*html+-mode-hook* 'ht:html-support-mode)

html-supportの機能はトグルになっており、以下のコマンドでON/OFFを切り替えられます。現在の状態はモード行の"HTML Support"という文字のあるなしで確認できます。

M-x ht:html-support-mode

HTML文字実体参照とUnicodeキャラクターの相互変換

"ç"や" "、"¡"、"ÿ"などのHTMLの文字実体参照とそれに対応するUnicodeキャラクターを双方向に変換します。

Unicodeのコード表を見ながらJISにない特殊な文字を入力するのでなく、よりわかりやすい文字実体参照の形式で入力しておいてから、後から一括して変換することができます。また逆にJIS系の文字コードのみしか扱えないツールを介して処理を行なう場合、JISにない特殊な文字を文字実体参照の形式に変換してから渡すことができます。

コマンドキー 機能
M-x ht:entity-to-characterC-c cカレントバッファ内の全ての文字参照実体を対応するUnicodeキャラクターに変換します。ただし、"""、"&"、">"、"<"の4つは変換しません。前置引数C-uをつけて実行すると、全ての文字参照実体を変換します。
M-x ht:entity-to-character-region上と同じですが、現在のリージョン内だけ変換します。
M-x ht:character-to-entityC-c eカレントバッファ内の全てのUnicodeキャラクターを対応する文字参照実体に変換します。ただし、'"'、'&'、 '<'、 '>'の4文字は変換しません。前置引数C-uをつけて実行すると、全ての文字を変換します。
M-x ht:character-to-entity-region上と同じですが、現在のリージョン内だけ変換します。

tidyによる構文チェック、xhtmlへの変換

tidyとはHTMLの構文チェックをしたりHTMLからxhtmlへの変換を行うためのツールです。Windows環境用には tidy.exe というファイルが提供されています。tidy.exeをPATHの通ったディレクトリに置くか、あるいは"ht:tidy-command"という変数にtidy.exeのパスをフルパスで指定してください。

(setq ht:*tidy-command* "c:/Program Files/tidy/tidy.exe")

また実行時のオプションはht:tidy-optionsという変数に指定します。デフォルトではxhtmlへの変換に都合がいいオプション("-m --char-encoding utf8 --output-xhtml true --clean true")が指定されています。

コマンドキー機能
M-x ht:execute-tidyC-c tカレントバッファのhtmlファイルの内容をxhtmlに変換します。変換中に発生したエラーやワーニングの情報は"*Shell output*"というバッファに出力されます。

履歴

Sat 30 Mar 2002 21:10:14 +0900
latin文字の入力は iso8859-1.l という標準添付のライブラリで可能なことにいまさらながら気がついたので、こちらの同等な機能は削除。
Thu, 31 Jan 2002 01:26:56 +0900
バグフィックス。&#xHH; という形の文字実体参照が正しく認識されていなかった。
2001-12-24
とりあえず公開

xyzzyのTIPS

| コメント(0)

IEでページのソースをxyzzyで開く

IEで、メニューの[表示]-[ソース]を選ぶと、メモ帳(notepad.exe)が開いてしまうため、SJIS以外の文字コードで書かれているページだと、文字化けしてしまいます。ここはやはり、メモ帳の代わりにxyzzyを使いたいものです。

そのための設定方法を以下に示します。やることは2つで、一つがレジストリの設定、もう一つがxyzzyのiniファイルの記述です。

1.以下のようなレジストリファイル(拡張子*.regのファイル)を作成します。

REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\View Source Editor\Editor Name]
@="%xyzzyのインストールディレクトリ%\\xyzzycli.exe"

"%xyzzyのインストールディレクトリ%"には文字通りxyzzyをインストールしたディレクトリを指定してください。( 注:ただし、"\"は2回続けて"\"と書くようにしてください)

あとはこのファイルをダブルクリックしてレジストリに反映させればOKです。もちろんレジストリエディタで手動で設定してもかまいません。

2.xyzzyのインストールディレクトリにxyzzycli.iniというファイルを作成します。以下のようにxyyzyというセクションの中で、compatNotepadという値を1に設定します。(バージョン0.2.1.197以降)

[xyzzy]
compatNotepad=1

ただし、このように設定してしまうと、xyzzycli.exe があたかも Notepadのようにふるまうようになってしまうので、-f などオプションを指定しても解釈してくれなくなります。そうなっては困る場合は、xyzzycli.exe のコピーを同じフォルダに作成しましょう。

その名前を仮にnotepad.exeとした場合、上記の設定方法の "xyzzycli.exe" をすべて "notepad.exe" に置き換えてください。また ini ファイルの名前もnotepad.iniとします。

ファイルの差分表示

xyzzyでは M-x diff で新旧2つのファイル間の差分を色付けして表示することができます。ただし、この機能を利用するにはWindows用の diff コマンドを パスの通ったディレクトリにおく必要があります。diffはいくつかのサイトで配布されていますが、ぼくは以下のところのものを使っています。

http://www.fsci.fuk.kindai.ac.jp/kakuto/soft.html

英語101キーボードとC-`

xyzzyに限らずほぼすべてのアプリケーションで、101英語キーボードでMS IMEを使っていると、"Ctrl + ` (アクセント符号)"がIMEに食われてしまい、無視されてしまうようです。

それを避けるために、キーボード配列を101ではなくAX配列にすることを推奨します。そうすれば右ALTキーだけでIMEのON/OFFができるので一石二鳥です。Windows2000(WindowsXP)では 右Altキーに[漢字]キーを割り当てる方法でAX配列を選択できるようです(USBキーボードでもOKでした)。

キーボードマクロの保存

xyzzyではメニューで手軽にキーボードマクロに名前をつけて保存したり呼び出したりすることができる。

  • [ツール]-[キーボードマクロおまけ]-[保存]で現在定義されているキーボードマクロに名前をつけて保存
  • [ツール]-[キーボードマクロおまけ]-[読み込み]で一覧の中から上記で保存したマクロを呼び出せる。これはxyzzyを終了させて再起動しても残っている。
  • [ツール]-[キーボードマクロおまけ]-[ファイルに保存] を使ってファイルに保存すればほかの環境でも使える。

xyzzyのカスタマイズ

| コメント(0)

いくつか自分で試してみたカスタマイズについて説明します。方針としてはなじんだemacsの操作にできるだけ近づけようということです。もちろん、なんでもかんでもというわけではなく、xyzzyの方が便利なところはそのまま使っていきます。

インクリメンタルサーチ

emacsと同じように"Ctrl-S"でインクリメンタルサーチを行なうには~/.xyzzyに以下の行を追加します。

(require "isearch")

dabbrev

dabbrevとはdynamic abbreviationの略で、同じバッファ内を検索してワードを補完してくれる機能です。この機能を利用するには~/.xyzzyに以下の行を追加します。ついでに、emacsと同じ"Meta-/"に補完するためのキーを割り当てます。

(require "dabbrev")
(global-set-key #\M-/ 'dabbrev-expand)

キーバインド

同じ機能が提供されていてもemacsとxyzzyではキーバインドが異なっています。それらもemacs風にしておきましょう。以下では、ぼくがよく使うundoとquery-replaceのキーバインドを変えています。

(global-set-key #\C-/ 'undo)
(global-set-key #\M-% 'query-replace)

このほか、repeat-complex-commandという以前実行したコマンドの履歴の中から選択して再度実行するコマンドがemacs, xyzzy共通にあります。単純に同じ操作を繰り返す場合にも使いますが、以前の操作を少しだけ変えて実行したいときに特に重宝します。

これはemacs19(mule)ではCtrl-x ESC、emacs20ではCtrl-x ESC ; およびCtrl-x ESC ESCに割り付けられていますが、xyzzyではEsc pです。emacsでも履歴の間を行き来するのは、Esc pとEsc nを使うので、キー操作としてはxyzzyの方がシンプルです。というわけで、このまま使うことにします。

DeleteキーとBackSpaceキー

emacsとxyzzyではDeleteキーとBackSpaceキーの役割が違っています。以下の表を見てください。

DeleteBackSpace
emacsカーソル位置の一つ前の文字を削除Ctrl-Hと同じでヘルプを呼び出すキーのプレフィックス
xyzzyカーソル位置の文字を削除カーソル位置の一つ前の文字を削除

さて、JIS配列のキーボードの場合、Deleteキーは若干押しにくい場所にあります。このため、emacsではbobcatというライブラリを使って DeleteキーとBackSpaceキーを入れ替えている人がたくさんいました(Deleteキーを押すとC-hになる)。そこで、このbobcatを使った状態のemacsをシミュレートする方法を以下に述べます。

この場合、Deleteキーが押されたときにC-hとみなすにようにするという方法がまず思い浮かびますが、C-hは、c-modeやlisp-mode 等の各モードの中で関数を再割り当てされてしまうため、フックなどを使ってその度ごとに設定しなおす必要がでてきて面倒です(そもそも現バージョンの xyzzyではDeleteキーを仮想的に他のキーとみなすことはできないようです)。そこで逆に、C-hをDeleteキーとみなすように設定し、 Deleteキーにヘルプ呼び出し等自分の望みの機能を設定するようにします。

(setf (svref *kbd-translate-table* (char-code #\C-h)) #\Delete)
(global-set-key #\Delete 'my-func)

この場合はDeleteキーやCtrl-hキーを押したときに、my-funcという関数が実行されます。

マウスだけでコピー・ペースト

xyzzyでは他アプリケーションとクリップボード経由でデータのやりとりをする場合、C-InsertやS-Insertという昔のIBMのアプリケーションのようなキー操作をしなければなりません。これはなかなかつらいので、X Window System上のemacsのようにマウス操作だけで、クリップボード操作ができるようにしてみました。

(defun mouse-right-press ()
  (interactive)
  (mouse-left-press)
  (paste-from-clipboard)) 
(global-set-key #\LBtnUp 'copy-selection-to-clipboard) 
(global-set-key #\RBtnUp 'mouse-right-press)
(global-set-key #\MBtnUp 'mouse-menu-popup)

これでマウス左ボタンで範囲を選択した瞬間にクリップボードにコピーされ、マウス右ボタンをクリックした位置にクリップボードからペーストされるようになります。標準では、マウス右ボタンを離したときに表示されるポップアップメニューは、真中ボタンに割り付けています。

write-file

emacs でもxyzzyでもC-x C-wというキーでwrite-fileというコマンドが呼び出されますが、若干動作が異なります。emacsのwrite-fileではバッファーの名前や割り付けられているファイル名も新しく指定されたファイルに変わりますが、xyzzyではそのままです。xyzzyでもemacsと同様の動作に設定したい場合には、~/.xyzzyに以下の行を追加します。

(define-key ctl-x-map #\C-w 'emacs-write-file)

find-other-fileのデフォルト

間違えたファイルを開いてしまった場合などに、そのバッファを破棄して、別のファイルを開くという手順を一度に行いたくなります。emacsでも xyzzyでも、find-other-file(C-x C-v)というコマンドで可能ですが、emacs20では、破棄するバッファのファイル名がミニバッファに表示されます。もとのファイル名と新しいファイル名が似ている場合にはこれはかなり便利です。xyzzyでは、そのファイルのあるディレクトリがミニバッファに表示されますが、これをemacs20と同じ動作に変えることが可能です。以下のように設定します。

(setq *find-other-file-requires-file-name* t)

コンパイルエラーの表示

CやJavaのソースファイルをコンパイルしたとき、エラーが発生したファイル・行に直接飛びたくなります。emacsでは、そういう場合next-errorというコマンドを使います。キーバインドはC-x ` (バッククォート)です。

xyzzyにもnext-errorはありますが、emacsとはかなり使い方が異なります。コンパイルするところから手順を比較してみましょう。

emacsxyzzy
コンパイル"compile"という専用のコマンドexecute-subprocessコマンド(C-x &)で普通の外部コマンドと同様にコンパイルするためのコマンド(javac等)を指定して実行する
コンパイル後のカレントバッファウィンドウが分割されて、実行結果のバッファが表示されますが、カレントバッファはコンパイル前と同じウィンドウが分割されて、実行結果のバッファが表示され、カレントバッファはそちらへと移動する
エラーが発生しているファイル・行への飛び方その場でnext-errorコマンド(C-x `) 初回のみ、バッファの先頭に移動してからfirst-errorコマンド(F10)。二回目以降はnext-errorコマンド(F11またはC-x `)。

上記のようにxyzzyの方が若干手順が煩雑です(逆に柔軟性には富んでいますが)。そこでほぼemacsのnext-errorのような動きをする emacs-next-errorというコマンドを作ってみました。コンパイル後にその場でemacs-next-errorを実行すると、初回か二回目以降かを判断して、first-errorとnext-errorのうち適切な方を呼び出します。下の例では"C-x `"にこのコマンドを割り付けています。日本語キーボードではこのキーは打ちにくいので、F11などに割り付けた方がいいかもしれません。

(defun emacs-next-error (&optional arg)
  (interactive "p")
  (if (not editor::*error-list*)
      (progn
        (goto-char (point-min))
        (first-error arg nil))
    (next-error arg)))

(define-key ctl-x-map #\` 'emacs-next-error)

上記では、コンパイルについて説明しましたが、grepで指定したパターンに合致するファイル・行に飛ぶ場合も同じです。

statusバーにカーソル位置の文字コードを表示する

以下の式を ~/.xyzzy に記述すると、ステータスバーにカーソル位置の文字コードが表示されるようになります。

(setq *status-bar-format* "%t%c%u")

"%t"が時刻、"%c"がxyzzyの内部コード、"%u"がUnicodeを示し、左からこの順番で表示されます。このほか"%p"でカーソル位置を表示することもできます。

Unixサーバ上のファイルのバックアップファイル

xyzzyはファイルを編集する場合には、編集前の状態をバックアップファイルとして残しておくのがデフォルトです。"ファイル名~" とか "ファイル名...~1" がそうです。たくさんできて、うざったく感じたりもしますが、編集中のファイルがこわれてしまったときに安心です。

さて、emacsでもそうでしたが、xyzzyはバックアップファイルを作成する場合、もとのファイルをバックアップファイルにリネームします。そうするともとのファイルがなくなってしまうので、新規に作成して、編集中のバッファの内容を保存します。

コピーよりリネームの方が処理も軽いし、確実なのですが、UnixまたはLinuxマシンのファイルをsambaを介して共有している場合はちょっとやっかいなことになります。WindowsからはUnix(Linux)マシンのファイルのパーミッションを参照したり変更したりすることができないので、パーミッションが編集後保存したファイルに引き継がれず、デフォルトのパーミッションになってしまうのです。つまり、せっかく実行権を設定したファイルなのに、編集するとそれが消えてしまったりするわけですね。

これを防ぐには、以下の式を~/.xyzzyに追加します。

(setq backup-by-copying :remote)

これでネットワークドライブ上のファイルのみコピーでバックアップを作成します。値を:remoteではなく t にするとローカルのドライブでもコピーでバックアップを作成するようになりますが、あまり意味がないでしょう。