В данной статье речь пойдёт об улучшательствах и украшательствах, которые могли бы дополнить и без того достаточно продвинутую среду разработки.

КДПВ:



Правило одного окна одной кнопки


Это главная идея, которую, как я считаю, следовало бы перенять как существующим средам разработки, так и новым, находящимся ещё только на стадии проектирования. Количество настроек в существующих IDE выросло настолько, что в них стало очень трудно ориентироваться. Спасение в данной ситуации [применительно к настройкам отображения] я вижу в системе визуально-контекстно-зависимых настроек. В двух словах, следует зарезервировать две кнопки: одну для курсора редактирования (каретки\caret), например F1, а другую для курсора/указателя мыши (mouse pointer), например F4 {в принципе, можно отказаться от F4 в пользу только одной кнопки [F1], если получится на ~100% угадывать намерение пользователя, а именно отслеживать последнее движение и смотреть было последнее действие связано с перемещением курсора редактирования, либо с перемещением курсора мыши}.

Нажатие на F1 открывает окно с краткой справкой, а также с кнопкой настроек, относящихся только к области, огороженной рамками текущего символа, на который указывает курсор редактирования. Так было бы очень удобно настраивать отображение, например, цвет фона строки с точкой останова (breakpoint) и вообще любых элементов текста программы, которые попадают в квадратик, очерченный габаритами символа под курсором, то есть получается такое как бы "увеличительное стекло".

Нажатие на F4 открывает аналогичное окно, только относящееся к круговой области [диаметром ~10 пикселей] вокруг курсора мыши. Таким способом было бы легко отключить все лишние элементы интерфейса (а также включить, наведя указатель мыши на то место, где они были), например отображение добавленных/изменённых строк, которое почему-то до сих пор невозможно отключить в PyCharm и PhpStorm.

Красивое отображение кода


Во-первых, как видно на рисунке в начале статьи, я предлагаю, помимо вертикальных "линеек", отображающихся во многих IDE, добавить ещё горизонтальные.
Во-вторых, многие двойные операторы можно отображать как единые символы: == вместо ==, ? вместо != и т.д. (Где-то на Хабре была статья, посвящённая таким украшательствам (не эта, но похожая), к сожалению, сейчас уже не могу найти.) Такую настройку хорошо спрятать под единую кнопку F1 — так можно будет легко отключить замену для конкретного символа (например, замену C на ?) или же отключить все замены сразу.

Отладка. HTML Watch


Поле ввода для кода, генерирующего HTML, который отображается в отдельном окошке, которое можно перемещать или прикреплять к существующим элементам среды разработки.
(Потребность возникла, когда я отлаживал лексический анализатор, я подумал о том, что было бы удобно видеть не просто целочисленную переменную, показывающую текущую позицию, а отслеживать текущее положение визуально.)
[Разумеется, должна быть [её нет в PyCharm] возможность отображать многострочные строки также как в MS Visual Studio.]

Сообщения об ошибках компиляции


Я считаю, что не имеет смысла показывать много ошибок списком, а имеет смысл показывать одну наиболее точную ошибку, причём сразу же устанавливать курсор [и показывать это место файла] на эту ошибку после нажатия F5 (Run/Debug). Ведь вернуться к предыдущему виду всегда можно нажав Ctrl+- или другое настроенное сочетание клавиш.

Произвольный размера таба


Подарок для тех, кто любит табы вместо пробелов для отступа (indentation), и особенно для тех, кто различает отступ и выравнивание. Суть идеи в том, чтобы в поле tab size\размер табуляции можно было вводить дробное количество символов. Как вам табуляция, скажем, в 3 с половиной символа? Или ? (пи) символов?

Дерево Undo/Redo


Сталкивались ли вы с ситуацией, когда после отката на продолжительное количество шагов операцией Undo, вместо Redo по ошибке нажимали какую-либо клавишу на клавиатуре, что сразу же приводило к невозможности операции Redo?
Лично я пользуюсь операцией Undo достаточно часто с целью review\просмотреть последние сделанные в текущем файле изменения, и был бы рад если не полноценной замене двух стеков Undo и Redo на дерево изменений, то хотя бы наличию механизма защиты от потери изменений из-за случайного нажатия клавиши. В качестве такого механизма и для совместимости с существующим поведением в большинстве текстовых редакторов, я предлагаю задействовать новое сочетание клавиш Ctrl+Shift+Y, которое сначала отменит случайное нажатие клавиши (не помещая его в Redo-стек), а затем продолжит операцию Redo.

Комментарии (6)


  1. berez
    07.03.2018 18:43

    Это главная идея, которую, как я считаю, следовало бы перенять ...

    Среда настраивается один раз — и потом в ней работают годами. Поэтому глобальная ценность всей идеи сомнительная. Или вы настройки меняете каждый день по многу раз? Зачем?

    В двух словах, следует зарезервировать две кнопки: одну для курсора редактирования (каретки\caret), например F1, а другую для курсора/указателя мыши (mouse pointer), например F4

    Получилось гораздо больше двух слов. ;)
    Вообще же все уже придумано до нас и такая кнопка уже есть: расположена рядом с правым Ctrl.

    Во-первых, как видно на рисунке в начале статьи, я предлагаю, помимо вертикальных «линеек», отображающихся во многих IDE, добавить ещё горизонтальные.

    Насколько я знаю, во многих IDE есть режим свертки блоков кода: это когда рядом с блоком кода отображается крестик, а сам блок выделяется в т.ч. горизонтальными линиями. Блок можно свернуть, нажав на крестик, и аналогично развернуть. Очень помогает в анализе глубоко вложенных ифов и циклов.
    Пример реализации можно посмотреть, например, в Notepad++.

    Во-вторых, многие двойные операторы можно отображать как единые символы: == вместо ==, ? вместо != и т.д.

    Нахрен не нужное украшательство. Поясню почему:
    1. Большинство редакторов кода использует моноширинный шрифт. В таком шрифте «длинное равно» будет выглядеть почти так же, как обычное — придется приглядываться. Кроме того, укоротятся строки, в которых много двойных символов заменено на одинарный — а во многих конторах жесткий coding style, запрещающий слишком длинные строки. Будем ограничитель по правому краю лесенкой показывать? :)

    2. В буфер копировать будем тоже спецсимвол или таки исходное сочетание? А если из буфера спецсимвол вставить — он будет интерпретироваться как двойной символ или как один спец? :) Придется как-то различать «легальный» спецсимвол (например, в составе строкового литерала) и «улучшенное» отображение операторов. Вплоть до того, что придется держать в памяти два варианта текста — «улучшенный» и обычный.

    3. Аргумент, конечно, дурацкий, но: а потом программист, привыкший к украшательствам, откроет код в обычном редакторе и не сможет ничего сделать — непривычно, страшно, вернитевсеназад!!!11111адынадын. К сожалению, видел такое гораздо чаще, чем хотелось бы.

    Поле ввода для кода, генерирующего HTML, который отображается в отдельном окошке, которое можно перемещать или прикреплять к существующим элементам среды разработки.

    Вообще не понял этого фрагмента. О чем вы? Просмотр содержимого переменных во время отладки?

    Я считаю, что не имеет смысла показывать много ошибок списком, а имеет смысл показывать одну наиболее точную ошибку,

    Все так считают, да вот незадача: в общем случае неизвестно, какая из ошибок в списке «наиболее точная».

    Как вам табуляция, скажем, в 3 с половиной символа? Или ? (пи) символов?

    Абсолютно бессмысленная опция, которая сделает из вашего кода кашу плавающих строчек. Я вас уверяю, моноширинные шрифты в редакторах кода используются не просто так. :)

    Лично я пользуюсь операцией Undo достаточно часто с целью review\просмотреть последние сделанные в текущем файле изменения

    Вызывает уважение, конечно. Примерно такое же, как уважение к бухгатлеру, копирующему файлы через ворд (открыть — сохранить как). Иногда, конечно, метод дает сбой, но в основном же работает. :)

    Для того, что вы делаете, придуманы системы контроля версий. Они гораздо надежнее, чем анду-реду, и бывают встроены в IDE.

    В качестве такого механизма и для совместимости с существующим поведением в большинстве текстовых редакторов, я предлагаю задействовать новое сочетание клавиш Ctrl+Shift+Y, которое сначала отменит случайное нажатие клавиши (не помещая его в Redo-стек), а затем продолжит операцию Redo.

    А как отменить отмену случайного нажатия клавиши? :)
    В любом случае, легче научить программиста пользоваться инструментами правильно, чем переписывать инструменты под каждый закидон, который может прийти в голову.


    1. staticlab
      07.03.2018 20:02
      +1

      Нахрен не нужное украшательство.

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


      Для этого используются специальные лигатурные шрифты (например, Fira), в которых замена внешнего вида поддерживатся самим шрифтом. Сами символы не заменяются, изменяется только их визуальное представление. Символ имеет ту же ширину в два или три знака, поэтому длина строк не едет. При копировании, само собой, копируются оригинальные кодовые последовательности.


    1. alextretyak Автор
      08.03.2018 01:20

      Поэтому глобальная ценность всей идеи сомнительная. Или вы настройки меняете каждый день по многу раз? Зачем?

      Это будет очень полезно для новичков[‘новых пользователей IDE/‘среды разработки’’].


  1. iroln
    07.03.2018 19:21
    +1

    Лично я пользуюсь операцией Undo достаточно часто с целью review\просмотреть последние сделанные в текущем файле изменения, и был бы рад если не полноценной замене двух стеков Undo и Redo на дерево изменений, то хотя бы наличию механизма защиты от потери изменений из-за случайного нажатия клавиши.

    Смотрите в local history, раз уж пользуетесь IDE от JetBrains. И про полноценную СКВ тоже не надо забывать. Включается просто из меню в IDE: VCS -> Enable Version Control Integration...


    1. marsianin
      07.03.2018 21:20

      В конце концов, всё это уже сделано в Emacs: и undo tree и замена симоволов. В частности, при включении некоторых плагинов слово «lambda» может заменяться при отображении символом ? при отображении. В файл при этом пишется слово «lambda». Другой вопрос в том, а зачем это нужно (-:


  1. dpr
    07.03.2018 23:23

    многие двойные операторы можно отображать как единые символы: == вместо ==, ? вместо != и т.д.

    Давным-давно использую шрифт Fira Code с лигатурами + включенная опция Enable font ligatures в webstorm