Автозаповнення Emacs Ruby майже працює


132

Я оновлював конфігурацію emacs із застосуванням Rsense, щоб дозволити з'являтися спадне поле автозаповнення під час введення коду. Це добре працює в більшості файлів, за винятком того, що я виявив, що це не дозволяє мені вибрати відповідь із таблиці, коли я редагую якийсь код у своєму проекті «рубін на рейках».

Ось моя настройка: https://github.com/map7/simple_emacs

Я використовую це під Ubuntu 10.04.

Для простих файлів сценаріїв з рубіном він чудово працює. Я можу відкрити новий файл і ввести.

"test".up...

Так само, як я набираю символ 'p' вгорі, з’являється список параметрів, і я можу переходити вгору і вниз по списку за допомогою клавіш зі стрілками і вибирати один (наприклад: upcase) за допомогою клавіші enter.

Що не працює, коли я роблю точно такий же тест, але в базовій директорії проекту рейки.

Оновлення:

Виявлено, що проблема полягає в (вимагають 'rails), тому в плагіні emacs-rails це щось, що автозаповнення не подобається.

Оновлення:

Це в emacs-rails -> rails-project.el. Якщо я коментую цей макрос, то автозаповнення працює, інакше він не:

(defmacro* rails-project:with-root ((root) &body body)
  "If you use `rails-project:root' or functions related on it
several times in a block of code, you can optimize your code by
using this macro. Also, blocks of code will be executed only if
rails-root exist.
 (rails-project:with-root (root)
    (foo root)
    (bar (rails-core:file \"some/path\")))
 "
 `(let ((,root (rails-project:root)))
    (when ,root
      (flet ((rails-project:root () ,root))
        ,@body))))

Чи може хтось пояснити, чому це порушує автозаповнення?


1
Функція автозаповнення використовується в рубінах, C ++,
Lisp

1
я мав на увазі, де тут використовується макрос?
доярка

1
В основному я використовую макрос рейків, щоб переходити між різними файлами в MVC та запускати DB / сервер / консоль / тощо.
карта7

1
Чи можете ви витягнути своє рішення, щоб відповісти, і дати йому "працює" квиток?
przemo_li

2
przemo_li, я хотів би, якби у мене була відповідь на це, але автозаповнення все ще не працює, коли у вас встановлений плагін rails.el і ви намагаєтесь заповнити файл з початковим режимом в режимі другорядного режиму.
карта7

Відповіді:


7

Ось думка: макрос одночасно пов'язує fletфункцію (rails-project:root)зі значенням, яке (rails-project:root)має перед bodyвиконанням. (Ось як це вимагає збільшення продуктивності. Мабуть, зовнішнє (rails-project:root)коштує дорого, тому дзвінок один раз та кешування значення здається гарною ідеєю.)

На жаль, якщо в коді є код, bodyякий має побічний ефект, призначений навмисно змінити значення, яке (rails-project:root)повертається, це не матиме ефекту. Ця зміна буде непомітною навіть для іншого коду, викликаного в межах, bodyтому що lisp Emacs має динамічне прив'язування fletімен.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.