Как добавить кнопку копирования в блоки кода для RST/Read the Docs

Я работал над персональным практическим руководством, вел хронику и вел дневник своих занятий по ходу дела.

Теперь у меня есть почти слишком длинный блок кода, который, когда я сам сталкивался с кодом такой длины, всегда разочаровывал, пытаясь выделить ТОЛЬКО блок без выделения всей страницы или недостаточно.

Итак, мой вопрос: для rst (reStructuredText) .. code-block:: есть ли дополнение или способ добавить кнопку copy для автоматического выделения или автоматического добавления текста в буфер обмена пользователей? Или это будет более html-литеральный тип кода, который мне придется включать в сборку и ссылаться на него в блоке кода? Если да, то как бы это выглядело?


person jpartain89    schedule 28.08.2016    source источник


Ответы (2)


Для этого существует специальный пакет под названием sphinx-copybutton.

Это просто использовать.

# Install
pip install sphinx-copybutton
# Declare it in the conf.py
extensions = [
    ...
    'sphinx_copybutton'
    ...
]

И все, сгенерируйте документ, и кнопка копирования появится автоматически в каждом блоке кода.

person Romain    schedule 15.04.2020
comment
Ваш ответ мне нравится больше, чем мой!! Спасибо @Romain - person Blaise Pabon; 25.06.2020

В проектах Sphinx представление HTML-страницы управляется с помощью языка шаблонов (по умолчанию Jinja2). Таким образом, вы можете сделать свои страницы более интерактивными, добавив Javascript в файл(ы) шаблона HTML, и он будет вставлен, когда Sphinx будет использовать этот конкретный файл шаблона для отображения страницы.

Найдите каталог шаблонов, выполнив поиск templates_path в вашем conf.py

Шаблоны Jinja могут расширять друг друга, поэтому вам, вероятно, понадобится файл, начинающийся с {% extends "basic/layout.html" %}.

Как только вы отследите, где в последовательности расширения вы хотите внести изменения, вам нужно объединить:

  • Раздел страницы, где вы хотите, чтобы это вступило в силу (обычно основной блок)
  • CSS с классом для блоков кода (например, у меня это class=highlight). Файл .CSS вполне может находиться в docs/source/_static/
  • Фрагмент javascript для создания кнопки и записи в буфер обмена (например, https://clipboardjs.com/)

Затем создайте проект Sphinx локально (make html), пока не подключитесь к нему, а затем отправьте репозиторий с исходным кодом в readthedocs.

person Blaise Pabon    schedule 09.11.2016
comment
Итак, это отчасти помогает мне в этом, но я, похоже, просто теряюсь в том, как именно разместить код для моего проекта, и отчасти это моя вина в том, что я не совсем ясно понимаю тему, которую я изучаю. используя... Я размещаю его как на своем raspberry pi, так и на RTD (читайте документы) и использую их тему... Итак, как я могу взять эту тему (файлы которой обычно не включены прямо в документы локальные файлы) и расширить это? - person jpartain89; 23.12.2019
comment
@ jparttain89 вы можете pip install sphinx-rtd-theme в свой локальный проект ... тогда любые внесенные вами изменения переопределяют настройки по умолчанию в RTD. Мне жаль, что это не более просто. Хотел бы я предложить простой способ сделать это, но, похоже, у всех свой подход. - person Blaise Pabon; 26.12.2019