6

Stack Exchange Network をブラウジングして操作するための Emacs のメジャー モードを作成する初期段階にいます。

これにはいくつかの主要なモードが含まれており、すべてdired. のソースを見て、diredうまくいくと思うものを抽出しました。

(defvar stack-network-mode-map
  (let ((map (make-keymap)))
    (define-key map "n"     'stack-network-next-site)
    (define-key map "p"     'stack-network-previous-site)
    (define-key map ","     'stack-network-move-site-up)
    (define-key map "."     'stack-network-move-site-down)
    (define-key map "j"     'stack-network-jump-to-bookmarks)
    (define-key map "\C-m"  'stack-network-do-enter-site) ; ret
    (define-key map "o"     'stack-network-do-enter-site)
    (define-key map "u"     'stack-network-do-profile-summary)
    (define-key map "\C-uu" 'stack-network-do-profile-summary-for-user)
    (define-key map "i"     'stack-network-do-inbox)
    (define-key map "b"     'stack-network-toggle-bookmark)
    (define-key map "?"     'stack-network-list-functions) ; [1]
    (define-key map "\C-i"  'stack-network-display-details) ; tab
    map)
  "Keymap for Stack Exchange: Network Browser major mode")

残念ながら、これはまったく効果がないようです。バッファは、他の通常のバッファと同じように簡単に編集できます。これがうまくいかない場合、どうすれば単一キーのキーバインドを実現できますか? (ちなみに、これは確かにそうです。ここで何か他のことが起こっているに違いありません。)

4

3 に答える 3

5

stack-network-modeusingを定義したい(そして、たとえばdefine-derived-modeから派生させたい)。special-mode

コードに関するその他のコメント:

  • 空の引数リスト()ではなく使用してください。nil
  • stack-network-next-site は(interactive)、docstring の直後にインタラクティブなコマンドにする必要があります。そうしないと、キーバインドとして機能しません。

を使用したくない場合は、を作成した直後にspecial-mode呼び出すことができます。supress-keymapmake-keymap

于 2013-02-28T01:50:39.783 に答える
3

stack-network-mode-mapモードの定義の前に の定義を移動します。それ以外の場合define-derived-modeは、この変数を暗黙的に定義しdefvar、非 nil 変数の値を変更しないため、マップは実際には空になります。

派生モードを参照してください:

新しいモードには、 variant という名前の独自のスパース キーマップがあり-mapます。バリアントがすでに設定されていて、すでに親を持っていdefine-derived-modeない限り、親モードのキーマップを新しいマップの親にします。-map

于 2013-03-01T16:26:22.230 に答える
0

キーマップを定義しましたが、使用していません。変数は存在しますが、重要なイベントをキャプチャしません。

(use-local-map stack-network-mode-map)
于 2013-02-28T00:52:57.930 に答える