Как я могу нарисовать XY-позицию в Emacs? - PullRequest
2 голосов
/ 11 августа 2011

Я хотел, чтобы курсор Emacs мог свободно перемещаться вне реального текста (аналогично virtualedit = all в Vim).

«О, - подумал я, - я просто отследю виртуальный курсор и сам нарисую его на экране».

Но оказывается, что настоящие собственные процедуры рисования C (такие как draw_glyphs), похоже, возвращаются к содержимому буфера, чтобы решить, что рисовать (хотя я могу ошибаться).

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

Это разумная цель без взлома кода C?

Ответы [ 4 ]

3 голосов
/ 11 августа 2011

Я считаю, что область записи окна по сути ограничена буфером, с которым он связан, т. Е. Вы должны рисовать в области, где существует содержимое буфера.

(Одним из примеров этого ограничения является невозможность рисования вертикальной направляющей линии в 80-м столбце, чтобы помочь пользователю идентифицировать длинные линии; в настоящее время наилучшей возможной реализацией такой функции является выделение «переполнения» каждой из них. длинная очередь.)

2 голосов
/ 25 сентября 2013

Вы можете сделать то же, что и artist-mode, не добавляя пробелы в буфер: при попытке поместить курсор после конца строки, просто используйте оверлей со свойством after-string, которое добавляет пробелы на экране без изменения буфера.

1 голос
/ 11 августа 2011

Посмотрите на «Artist-Mode» ( M-x Artist-Mode RET ) - это позволяет рисовать в Emacs.

Из документации по функциям: «Artist позволяет рисовать линии, квадраты, прямоугольники и полилинии, эллипсы и круги с помощью мыши и / или клавиатуры».

0 голосов
/ 25 сентября 2013

Вы можете посмотреть на popup.el из пакета автозаполнения, который может вызывать всплывающие подсказки и меню, а также в любой позиции, включая позиции вне содержимого буфера.Может быть, это покажет вам, как вы можете это сделать.

...