LINUX.ORG.RU

Как выести цветное сообщение с помощью elisp

 ,


1

3

В общем есть программа(r2) у которой есть api для общения и она даже цвета передает.

"  ^[[36m          ^[[0m;-- ^[[36mentry0:
  ^[[36m          ^[[0m^[[32m0x004049a0^[[0m      ^[[33m31^[[37med^[[0m           ^[[36mxor^[[36m ebp^[[0m,^[[36m^[[36m ebp^[[0m^[[0m^[[0m
  ^[[36m          ^[[0m^[[32m0x004049a2^[[0m      ^[[33m49^[[37m89^[[37md1^[[0m         ^[[37mmov^[[36m r9^[[0m,^[[36m^[[36m rdx^[[0m^[[0m^[[0m
  ^[[36m          ^[[0m^[[32m0x004049a5^[[0m      ^[[33m5e^[[0m             ^[[1;35mpop^[[36m rsi^[[0m^[[0m^[[0m
  ^[[36m          ^[[0m^[[32m0x004049a6^[[0m      ^[[33m48^[[37m89^[[37me2^[[0m         ^[[37mmov^[[36m rdx^[[0m,^[[36m^[[36m rsp^[[0m^[[0m^[[0m
  ^[[36m          ^[[0m^[[32m0x004049a9^[[0m      ^[[33m48^[[37m83^[[37me4^[[37mf0^[[0m       ^[[36mand^[[36m rsp^[[0m,^[[36m^[[36m ^[[33m0xfffffffffffffff0^[[0m^[[0m^[[0m
  ^[[36m          ^[[0m^[[32m0x004049ad^[[0m      ^[[33m50^[[0m             ^[[35mpush^[[36m rax^[[0m^[[0m^[[0m
  ^[[36m          ^[[0m^[[32m0x004049ae^[[0m      ^[[33m54^[[0m             ^[[35mpush^[[36m rsp^[[0m^[[0m^[[0m
  ^[[36m          ^[[0m^[[32m0x004049af^[[0m      ^[[33m49^[[37mc7^[[37mc0^[[33m20^[[33m3c^[[33m41^[[37m.^[[0m  ^[[37mmov^[[36m r8^[[0m,^[[36m^[[36m ^[[33m0x413c20^[[0m^[[0m^[[0m
  ^[[36m          ^[[0m^[[32m0x004049b6^[[0m      ^[[33m48^[[37mc7^[[37mc1^[[37mb0^[[33m3b^[[33m41^[[37m.^[[0m  ^[[37mmov^[[36m rcx^[[0m,^[[36m^[[36m ^[[33m0x413bb0^[[0m^[[0m^[[0m
  ^[[36m          ^[[0m^[[32m0x004049bd^[[0m      ^[[33m48^[[37mc7^[[37mc7^[[32m00^[[33m2a^[[33m40^[[37m.^[[0m  ^[[37mmov^[[36m rdi^[[0m,^[[36m^[[36m ^[[33m0x402a00^[[0m^[[0m^[[31m           ; section..text^[[31m ; \"AWAVAUATUS..H..H....\"^[[0m
\0"

Только вот через какую функцию это отобразить в буфере. Быстрый гугл подсказывает что в eshell цвета поддерживаются, а проще никакой функции нет?

★★★★★
Ответ на: комментарий от theNamelessOne

Глупый вопрос, ну вот я попробовал 3 варианта

(add-to-list 'comint-output-filter-functions 'ansi-color-process-output)

(add-hook 'r2-pipe-filter
           'ansi-color-filter-apply)

(add-hook 'r2-pipe-filter
           'ansi-color-apply)



(message (r2-cmd r2p "pd 10"))
(message (r2-cmd r2p "pd 10"))

(message "^[[36m          ^[[0m;-- ^[[36mentry0:")

Результат тот же, страницу я эту находил.

DR_SL ★★★★★
() автор топика
Ответ на: комментарий от DR_SL

Ну это будет зависеть от того, как ты вызываешь процесс и как вставляешь в буфер результат. Вот так у меня работает:

(set-process-sentinel
 (start-process "foo" "*echo*" "echo" "-e" "\e[31mLook, Ma! colors!\e[0m")
 (lambda (process _m)
   (when (eq 0 (process-exit-status process))
     (with-current-buffer (process-buffer process)
       (ansi-color-apply-on-region (point-min) (point-max))
       (display-buffer (current-buffer))))))
theNamelessOne ★★★★★
()
Ответ на: комментарий от theNamelessOne

Ну в общем код (не мой)

https://github.com/jjdredd/r2pipe.el/blob/master/r2pipe.el собственно процесс запускается но не в отдельном буфере ,а потом к нему функция read и цепляется как к объекту, как я понял. Пытался ansi hook-ом привязать к фильтру, ничего не вышло.

Вообще хотелось бы посмотреть хорошие примеры модов работающих с внешними утилитами. Просто хочу реализовать Radare Visual mode через emacs.

DR_SL ★★★★★
() автор топика
Последнее исправление: DR_SL (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.