3

タブキーで次のことを実行したいのですが。

  • ミニバッファを使用している場合は、単語補完を使用します。
  • それ以外の場合、リージョンが選択されている場合は、インデントします。
  • それ以外の場合は、ポイントで行をインデントします(タブツータブストップを使用)。

これがコードです。その一部は、インターネット上の他の場所で見つけたフラグメントに基づいています。

(defun my-tab ()
  "If region is selected, indent it and keep it selected, else indent current line."
  (interactive)
       (if (use-region-p)
           (increase-left-margin (region-beginning) (region-end) nil)
           (tab-to-tab-stop))
        (setq deactivate-mark nil))
(defun my-untab ()
  "If region is selected, unindent it and keep it selected, else unindent current line."
  (interactive)
       (if (use-region-p)
           (decrease-left-margin (region-beginning) (region-end) nil)
         (indent-rigidly (line-beginning-position) (line-end-position) (- tab-width)))
        (setq deactivate-mark nil))
;; AJF: wrote this one myself
(defun ajf-tab-fun ()
   (if (minibufferp)
     (minibuffer-complete)
     (my-tab)))

(global-set-key (kbd "TAB") 'ajf-tab-fun)

問題は、Tabキーを押すと、次のエラーが発生することです。

Wrong type argument: commandp, ajf-tab-fun

debug-on-errorをtに設定して、デバッグできるようにしました。出力は次のとおりです。

Debugger entered--Lisp error: (wrong-type-argument commandp ajf-tab-fun)
  call-interactively(ajf-tab-fun nil nil)

代わりに何をすべきですか?

4

2 に答える 2

3
(defun ajf-tab-fun ()
  (interactive)     ; add interactive to let emacs know to call it interactively
   (if (minibufferp)
     (minibuffer-complete)
     (my-tab)))

あなたはただ忘れてしまった(interactive)

于 2012-10-25T22:40:58.893 に答える
0

実際、あなたが説明する動作は、デフォルトが「テキストを一定量だけ右(または左)に移動する」のではなく「メジャーモードのインデントルールに従ってインデントする」である「インデント」を除いて、すでにほとんどデフォルトの動作です。 。

于 2012-10-26T02:11:09.957 に答える