• ベストアンサー

xyzzyで拡張子がcgiやpl, pmのファイルを開くとタブが効きません。

xyzzyで拡張子がcgiやpl, pmのファイルを編集しているのですが、そのファイルを開くとタブが効きません。 新規で開いたファイルはタブが効きますが、xyzzyでどのように設定すればよいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

> (set-tab-columns 2 (selected-buffer)) > (setq *perl-indent-column* (tab-columns > (selected-buffer))) > (setq indent-tabs-mode t) これで動いているってのが不思議です。 set-tab-columns ってのはタブコードを最大何個のスペースと 見なすかという設定ですし、 indent-tabs-modeにtを設定したときは、インデントに使うキャラクタを 可能なところではタブキャラクタにするという指定です。 tab-columnsは指定したバッファでのタブ幅です。 set-tab-columns - refwiki http://xyzzy.s53.xrea.com/reference/wiki.cgi?p=set%2Dtab%2Dcolumns tab-columns - refwiki http://xyzzy.s53.xrea.com/reference/wiki.cgi?p=tab-columns モードが Fundamentalになっているのでperlモードそのものが 無効になっているんじゃないでしょうか。 まあ目的が果たせたというのならいいですけど。

その他の回答 (3)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

訂正 (setq *auto-mode-alist (remove-if (lambda (x) (string-equal "\\.cgi$" (car x))) *auto-mode-alist*)) の (setq *auto-mode-alist は (setq *auto-mode-alist* の間違いです。

Lusaka1
質問者

お礼

;Perlモードでタブを有効にする (add-hook '*perl-mode-hook* #'(lambda () (set-tab-columns 2 (selected-buffer)) (setq *perl-indent-column* (tab-columns (selected-buffer))) (setq indent-tabs-mode t) )) で動作しました。 最初に教えていただいた方法で、 (Perl)となっていますがタブは聞きません。上の方法では、(fundamental)となり、タブが有効になりました。しかし、その前に 名前が衝突するためにexportできません:editor::*perl-mode-hook* と表示されます。 運良く動いているだけで、正しい設定ではないようです。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

> 拡張子がpl,pmの場合は、タブが有効になりましたが、拡張子が > cgiの場合は、タブが有効になりません。 本当ですか? ---- ファイル名(....)[sjis:crlf] とかいう行が下のほうにあると思うのですが、 .cgiファイルを開いたときにカッコの中はなんという文字列になっていますか? Perl が入っていれば設定が利くはずなんですが。 それはともかく拡張仕事の判定と設定は files.l というファイルの中にある (unless auto-mode (let ((filename (get-buffer-file-name)) (*auto-mode-last-buffer* last-buffer)) (dolist (x *auto-mode-alist*) (when (string-matchp (car x) filename) (funcall (cdr x)) (return))))))) この部分で、*auto-mode-alist* という変数の中身を参照しながらやっています。 この変数は defs.l の中で (defvar *auto-mode-alist* '(("\\.c$" . c-mode) ("\\.h$" . detect-c-or-c++-mode) (略) ("\\.pl$" . perl-mode) ("\\.pm$" . perl-mode) ("\\.cgi$" . perl-mode) (略) ("\\.css$" . css-mode) ("\\.cs$" . csharp-mode) )) で設定しています。 このファイルの中身を直接書き換えるのはお勧めできないので、 もし取り除くなら .xyzzy で (setq *auto-mode-alist (remove-if (lambda (x) (string-equal "\\.cgi$" (car x))) *auto-mode-alist*)) とでもしておくと良いでしょう。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

タブキーが自動のインデント調整のキーになっているんですけど その機能を殺して良いということなら .xyzzy に (setq *c-tab-always-indent* nil) (define-key ed::*perl-mode-map* #\tab 'self-insert-command) の2行を追加してxyzzy再起動で多分OK。

Lusaka1
質問者

お礼

回答ありがとうございます。 拡張子がpl,pmの場合は、タブが有効になりましたが、拡張子が cgiの場合は、タブが有効になりません。 拡張子で判断している所が知りたいです。

関連するQ&A

専門家に質問してみよう