Domanda

emacs 23.2 in emacs-starter-kit v1 ha C-x C-i (o ido-imenu)(simile al cmd + r del testo sublime). emacs24 in Emacs-starter-kit V2 non ha questa funzione.Ho trovato Questo problema GitHub e una correzione , che tenta di ricreare la funzionalità.Mentre questo ido-imenu funziona in elisp-mode, ha smesso di funzionare in ruby-mode.Io ottengo:

imenu--make-index-alist: No items suitable for an index found in this buffer
.

    .
  1. Qualcuno ha capito come farlo funzionare?
  2. Perché è stato ritirato da Emacs24?
  3. C'è una nuova sostituzione per questa funzione?
È stato utile?

Soluzione 2

Quindi ho finalmente capito, dopo aver letto il Definizione di un menu IMENU per una modalità Sezione su Emacs-Wiki di nuovo.

risposta breve : è necessario aggiungere questo bit alla personalizzazione. Sentiti libero di aggiungere altri tipi all'elenco (sono felice con i metodi giusti).

(add-hook 'ruby-mode-hook
          (lambda ()
            (set (make-local-variable imenu-generic-expression)
                 '(("Methods"  "^\\( *\\(def\\) +.+\\)"          1)
                   ))))
.

Risposta più a lungo : Ho provato per la prima volta di definire una funzione ruby-imenu-generic-expression e impostarlo su imenu-generic-expression utilizzando ruby-mode-hook:

(defvar ruby-imenu-generic-expression
  '(("Methods"  "^\\( *\\(def\\) +.+\\)"          1))
  "The imenu regex to parse an outline of the ruby file")

(defun ruby-set-imenu-generic-expression ()
  (make-local-variable 'imenu-generic-expression)
  (make-local-variable 'imenu-create-index-function)
  (setq imenu-create-index-function 'imenu-default-create-index-function)
  (setq imenu-generic-expression ruby-imenu-generic-expression))

(add-hook 'ruby-mode-hook 'ruby-set-imenu-generic-expression)
.

Questo tuttavia non ha funzionato (avrei ottenuto lo stesso errore di prima). Altre lettura del Definizione di un menu IMENU per una modalità Sezione mi ha mostrato il modo. Ora, non sono un esperto di elisp, quindi ecco la mia ipotesi: fondamentalmente, il metodo sopra funziona per le modalità dove

.

La modalità principale supporta una copia locale tampone della variabile "reale", "imenu-generico-espressione". Se la tua modalità non lo fa, dovrai fare affidamento su un gancio.

L'esempio per foo-mode ha reso chiaro come farlo per ruby-mode. Quindi sembra che ruby-mode non abbia una copia locale del buffer della variabile imenu-generic-expression reale. Non riesco ancora a spiegare perché ha funzionato in Emacs 23.2 (con ESK V1) ma non su Emacs24, ma hey almeno ho trovato una soluzione di lavoro.

Altri suggerimenti

Poiché la funzione è parte di ESK (al contrario di qualcosa a forma di emacs) probabilmente faresti meglio a segnalare il bug upstream.Su una nota correlata Esk principale concorrente Emacs Prelude offre la stessa funzionalità (legato a CC I per impostazione predefinita) e sembra funzionare bene con la modalità Ruby in Emacs 24. Qui puoi trovare di più su ido-imenu.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top