Изменить или подключиться к завершению вкладок Jupyter

Мне было интересно, есть ли способ изменить функциональность вкладок Jupyter Lab или Notebook. Например, если я наберу «\ alpha», а затем нажму клавишу табуляции, я получу в ячейке символ UTF-8 «α».

Есть ли способ, которым я могу сделать пользовательскую «[строка без пробелов]» для завершения табуляции в какой-либо конкретный символ или строку UTF-8?

например "\ подразумевает" + вкладка -> "⇒"

Я вижу большое количество вариантов использования для этого в своей жизни программирования, поэтому мне было интересно, предлагает ли Jupyter (Lab или Notebook) возможность изменять некоторые настройки (или загружать в файл), которые отображают строки на вывод с вкладками. Или есть другая идея, которую вы могли бы использовать для реализации этого?

Спасибо!


person NO88    schedule 13.05.2018    source источник


Ответы (1)


Jupyter основан на IPython и его механизме завершения - мы можем его использовать.

Обновление: вы можете переопределить latex_symbols dict, чтобы получить желаемое поведение:

from IPython.core.latex_symbols import latex_symbols
latex_symbols['\\implies'] = '⇒'

Вы должны быть в состоянии использовать этот пример, чтобы заставить его работать с целым рядом символов.

Первоначальный ответ/другое решение: вы можете подключиться к завершению IPython, хотя это не будет работать точно так, как вы хотите: оно не заменит текст, а просто добавит специальный символ. Вот пример:

from IPython import get_ipython

def implies_competer(ipython, event):
    return ['⇒']

ipython = get_ipython()
ipython.set_hook('complete_command', implies_competer, re_key='.*implies')

Затем, когда вы вводите (пробел после ключевого слова важен): введите здесь описание изображения

а затем нажмите tab, вы получите:

введите здесь описание изображения

person krassowski    schedule 01.06.2018
comment
Спасибо! Это полезно. Но как тогда Jupyter позволяет \alpha стать альфа-символом unicode после завершения табуляции? Наверняка есть способ удалить предыдущий текст, нет? - person NO88; 02.06.2018
comment
Да, есть. Вы были правы с идеей воспользоваться существующим механизмом, который существует для \alpha (и других латексных символов). Я обновил свой ответ. - person krassowski; 02.06.2018
comment
@krassowski, почему пространство так важно, и знаете ли вы, как сделать доработки без пробела? Спасибо. - person tmthyjames; 25.05.2019
comment
@tmthyjames Просто чтобы убедиться - вы пробовали другой способ, который я указал в своем редактировании ответа)? Он работает без пробела (извините, я тогда не очень ясно выразился). - person krassowski; 25.05.2019