Question

Emacs 23.2 dans emacs-starter-kit v1 a C-x C-i (ou ido-imenu) (similaire à Cmd+R de Sublime Text). Emacs24 dans emacs-starter-kit v2, il manque cette fonction.j'ai trouvé ce problème de github et une réparation, qui tentent de recréer la fonctionnalité.Alors que ce ido-imenu travaille dans elisp-mode, il a cessé de fonctionner ruby-mode.Je reçois:

imenu--make-index-alist: No items suitable for an index found in this buffer
  1. Quelqu'un a-t-il trouvé comment faire fonctionner cela ?
  2. Pourquoi cela a-t-il été retiré d'Emacs24 ?
  3. Existe-t-il un nouveau remplacement pour cette fonction ?
Était-ce utile?

La solution 2

Alors j'ai finalement compris, après avoir lu le Définir un menu Imenu pour un mode section sur emacs-wiki à nouveau.

Réponse courte:vous devez ajouter ce bit à votre personnalisation.N'hésitez pas à en ajouter d'autres les types à la liste (je me contente de méthodes).

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

Réponse plus longue:J'ai d'abord essayé de définir un ruby-imenu-generic-expression fonction et réglez-le sur imenu-generic-expression en utilisant le 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)

Cependant, cela n'a pas fonctionné (j'obtiendrais la même erreur qu'avant).Plus de lecture du Définir un menu Imenu pour un mode section m'a montré le chemin.Maintenant, je ne suis pas un elisp expert, alors voici mon hypothèse :fondamentalement, la méthode ci-dessus fonctionne pour les modes où le

Le mode majeur prend en charge une copie locale tampon de la variable « réelle », « imenu-generic-expression ».Si votre mode ne le fait pas, vous devrez vous fier à un hook.

L'exemple pour foo-mode a expliqué clairement comment procéder pour ruby-mode.Il semble donc que ruby-mode n'a pas de copie locale dans le tampon du réel imenu-generic-expression variable.Je ne peux toujours pas expliquer pourquoi cela a fonctionné dans Emacs 23.2 (avec ESK v1) mais pas sur Emacs24, mais bon au moins j'ai trouvé une solution qui fonctionne.

Autres conseils

Étant donné que la fonction fait partie d'ESK (par opposition à quelque chose d'Emacs), vous feriez probablement mieux de signaler le bogue en amont.Dans le même ordre d'idées, le principal concurrent d'ESK, Emacs Prelude, offre la même fonctionnalité (liée à C-c je par défaut) et cela semble fonctionner correctement avec le mode Ruby dans Emacs 24. Ici vous pouvez en trouver plus sur ido-imenu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top