web-dev-qa-db-ja.com

emacs LISP、バッファメジャーモードの取得方法

私はグーグルを検索してマニュアルを調べようとしましたが、それでもバッファオブジェクトのメジャーモードを取得する方法が見つかりません。例や参考資料を教えてください。ありがとう

私が見つけた唯一の解決策は、バッファーを変更してから元のバッファーに戻してからメジャーモードを照会することでした。それを行うより良い方法はありますか?

54
Anycorn

それで問題はありますか?

(defun buffer-mode (buffer-or-string)
  "Returns the major mode associated with a buffer."
  (with-current-buffer buffer-or-string
     major-mode))

with-current-bufferは、戻ったときにバッファーを復元します。

40
Aidan Cully

現在のバッファの場合:

(message "%s" major-mode)
39
Adobe

これを行う簡単な方法は、buffer-local-valueがバッファローカル変数であるため、major-mode関数を使用することです。

(buffer-local-value 'major-mode (get-buffer "*scratch*"))
29

以前の回答から拡張するだけ-引数なしで呼び出して、現在のバッファーのモードを取得します。

(defun buffer-mode (&optional buffer-or-name)
  "Returns the major mode associated with a buffer.
If buffer-or-name is nil return current buffer's mode."
  (buffer-local-value 'major-mode
   (if buffer-or-name (get-buffer buffer-or-name) (current-buffer))))

例えば。 * scratch *バッファー内:

(buffer-mode) => 'LISP-interaction-mode

(buffer-mode "tasks.org") => 'org-mode
7
Brian Burns

まあ、describe-modeはオプションのバッファー引数を取りますが、それはヘルプを表示します...そしてそれが何を返すのか正確にはわかりません...

しかし、それは簡単な検索で見つけることができる最高のものです...申し訳ありません...

0
Brian Postow

別の方法として、_major-mode_変数を直接readindすることとは別に、_mode-name_変数。

0
alinsoar

単にこれを評価してください:

(print major-mode)
0
sidharth arya