LINUX.ORG.RU

История изменений

Исправление Zubok, (текущая версия) :

Если честно, то не могу полностью погрузиться в твою проблему. Может, оверлеи использовать? Ты можешь создать оверлей с текстом, покрывающий конкретный регион. А потом при помощи overley-put в этот оверлей, в его свойство modification-hooks положить список функций с четырьмя аргументами (см. док-цию), которые вызываются, если ты пытаешься изменить текст внутри оверлея.

Скопируй то, что ниже в *scratch*, в самое начало буфера напиши для теста defun, потом последовательно eval на эти конструкции и попробуй потом удалить оверлей - увидишь именно то поведение, которое хочешь.

(defun ov-rem (a b c d)
  (remove-overlays))

(setq ov (make-overlay 1 6))
(overlay-put ov 'display "∃ƒ")
(overlay-put ov 'modification-hooks '(ov-rem))

Я это ну очень быстро накидал - нет времени сейчас. в функции ov-rem можешь делать действия с нужным оверлеем - данные о нем передаются через параметры. Я тупо все оверлеи удаляю из буфера.

Остается открытым вопрос замены defun в оверлей на лету.

Исправление Zubok, :

Если честно, то не могу полностью погрузиться в твою проблему. Может, оверлеи использовать? Ты можешь создать оверлей с текстом, покрывающий конкретный регион. А потом при помощи overley-put в этот оверлей, в его свойство modification-hooks положить список функций с четырьмя аргументами (см. док-цию), которые вызываются, если ты пытаешься изменить текст внутри оверлея.

Скопируй то, что ниже в *scratch*, в самое начало буфера напиши для теста defun, потом последовательно eval на эти конструкции и попробуй потом удалить оверлей - увидишь именно то поведение, которое хочешь.

(defun ov-rem (a b c d)
  (remove-overlays))

(setq ov (make-overlay 1 6))
(overlay-put ov 'display"∃ƒ")
(overlay-put ov 'modification-hooks '(ov-rem))

Я это ну очень быстро накидал - нет времени сейчас. в функции ov-rem можешь делать действия с нужным оверлеем - данные о нем передаются через параметры. Я тупо все оверлеи удаляю из буфера.

Остается открытым вопрос замены defun в оверлей на лету.

Исходная версия Zubok, :

Если честно, то не могу полностью погрузиться в твою проблему. Может, оверлеи использовать? Ты можешь создать оверлей с текстом, покрывающий конкретный регион. А потом при помощи overley-put в этот оверлей, в его свойство modification-hooks положить список функций с четырьмя аргументами (см. док-цию), которые вызываются, если ты пытаешься изменить текст внутри оверлея.

Скопируй то, что ниже в *scratch*, в самое начало буфера напиши для теста defun, потом последовательно eval на эти конструкции и попробуй потом удалить оверлей - увидишь именно то поведение, которое хочешь.

(defun ov-rem (a b c d)
  (remove-overlays))

(setq ov (make-overlay 1 6))
(overlay-put ov 'display
	     (format "∃ƒ"))
(overlay-put ov 'modification-hooks '(ov-rem))

Я это ну очень быстро накидал - нет времени сейчас. в функции ov-rem можешь делать действия с нужным оверлеем - данные о нем передаются через параметры. Я тупо все оверлеи удаляю из буфера.

Остается открытым вопрос замены defun в оверлей на лету.