Функция Emacs добавляет символ __all__ в режим Python?

Есть ли существующая функция Emacs, которая добавляет символ, находящийся под точкой __all__ при редактировании кода Python?

Например, курсор был на первом o в foo :

 # v---- cursor is on that 'o' def foo(): return 42 

Если вы сделали Mx python-add-to-all (или что-то еще), он добавил бы 'foo' в __all__ .

Я не видел его, когда я искал googled, но, как всегда, может быть, мне не хватает чего-то очевидного.

Обновить

Я опробовал ответ Трей Джексона (спасибо, Трей!) И сделал несколько исправлений / улучшений, в случае, если кто-то заинтересован (больше не будет вставлять вставки и ставит __all__ в более типичное место, если оно еще не существует):

 (defun python-add-to-all ()
   «Возьмите символ под точкой и добавьте его в __all__
 список, если он еще не существует ».
   (Интерактивный)
   (Копи-экскурсия
     (пусть ((вещь (символ «вещь в точке»)))
       (если (progn (goto-char (point-min))
                  (пусть (найдено)
                    (while (и (не найден)
                                (повторный поиск вперед (rx symbol-start "__all__" конец символа
                                                       (0+ пробел) "=" (0 + пробел)
                                                       (синтаксис с открытыми скобками))
                                                   nil t))
                      (setq found (not (python-in-string / comment))))
                    найденный))
           (когда (не (смотреть (rx-to-string
                                   `(и (0+ (не (синтаксис с близкой скобкой)))
                                         (синтаксис string-quote), вещь (синтаксис string-quote)))))
             (вставить (формат "\ '% s \'," вещь)))
         (Начало-оф-буфера)
         ;;  Поместите перед любыми линиями импорта, или если нет, первый класс или
         ;;  функция.
         (когда (нет (повторный поиск вперед (rx bol (или «import» «from») конец символа) nil t))
           (повторный поиск вперед (rx symbol-start (или «def» «class») конец символа) nil t))
         (форвардная линия -1)
         (вставить (формат «\ n__all__ = [\ '% s \'] \ n" вещь))))))

One Solution collect form web for “Функция Emacs добавляет символ __all__ в режим Python?”

Не будучи программистом на питоне, я не уверен, что это охватывает все случаи, но работает для меня в простом случае. Он добавит символ в массив, если массив существует, и создайте __all__ если он не существует. Примечание: он не анализирует массив, чтобы избежать двойной вставки.

 (defun python-add-to-all () "take the symbol under the point and add to the __all__ routine" (interactive) (save-excursion (let ((thing (thing-at-point 'word)) p) (if (progn (goto-char (point-min)) (re-search-forward "^__all__ = \\[" nil t)) (insert (format "\"%s\", " thing)) (goto-char (point-min)) (insert (format "__all__ = [\"%s\"]\n" thing)))))) 
  • Отладка программ python в emacs
  • Как я могу покрасить некоторые вещи в Emacs?
  • Использование ipdb с gud emacs без явных контрольных точек в коде
  • Поддержка IPython на Emacs 24.x
  • Можно ли сделать Python etags более умным с emacs?
  • использование emacs CEDET для python
  • Каков наилучший способ сортировки определений классов в исходном файле python?
  • Python в emacs: __name__ == '__main__', но почему-то не
  • Python - лучший язык программирования в мире.