Давайте посмотрим, что делает этот оператор from m import *
:
>>> dis.dis(compile('from m import *', '', 'single'))
1 0 LOAD_CONST 0 (0)
2 LOAD_CONST 1 (('*',))
4 IMPORT_NAME 0 (m)
6 IMPORT_STAR
8 LOAD_CONST 2 (None)
10 RETURN_VALUE
Ключевым моментом здесь является то, что он фактически вызывает выделенный код операции IMPORT_STAR
, и это реализация, специфичная для интерпретатора, который будет выполнить этот код Этот оператор был первоначально указан в PEP-0221 , но подробности реализации указаны в комментариях, представленных в этом конкретном коммите .
В CPython это найдено в /Python/ceval.c
(Python 3.7.2), и оно по очереди вызывает import_all_from
, которое показывает общую логику того, что это на самом деле делает внутри интерпретатор байт-кода.
В PyPy это найдено в /pypy/interpreter/pyopcode.py
, и опять же, как и в реализации C, оно вызывает функцию import_all_from
, определенную в RPython, которая также имеет похожую логику но в более привычном синтаксисе для программистов на Python.
Как в реализации CPython, так и в pypy, если __all__
представлен в виде списка имен в импортированном модуле, все соответствующие назначения будут добавлены в текущую локальную область, включая те имена, которые имеют префикс с подчеркиванием ([ 118]). В противном случае каждое назначение внутри модуля, который не начинается с подчеркивания, будет добавлено к текущей локальной области.
You're looking in the wrong place. Look at "font-lock-mode".
Есть связанный вопрос о том, как определить основной режим с подсветкой синтаксиса с помощью 'define-generic-mode
. Вопрос направлен на выяснение того, как заставить работать подсветку синтаксиса.
к сожалению, вы искали неправильные термины, "подсветка синтаксиса" не является словарем emacs :). Вам следовало поискать что-то вроде «write emacs mode».
Для этого уже был вопрос: « Как написать emacs-режим для нового языка » с некоторыми хорошими указателями.
Если вы хотите написать свое собственное выделение, другой вопрос охватывает это и может быть для вас ценным. Он включал этот фрагмент кода:
(defun django-highlight-comments ()
(interactive "p")
(highlight-regexp "{%.*?%}" 'hi-orange))
(add-hook 'html-mode-hook 'django-highlight-comments)
Код любезно предоставлен Ашутошем Мехра ответом .