LINUX.ORG.RU

SLIME + Emacs packages


0

0

В slime нужно вывести данные в виде таблицы, как можно использовать емаксовые table-... функции для этого?

заранее спасибо

Э-э-э, куда вывести-то? В REPL? Тогда лучше используй какой-нибудь пакет для вывода таблиц в ascii для Common Lisp либо свой напиши. Сходу не скажу сейчас, что лучше взять — поищи.

Хотя таблицу можно вывести по хуку, наверное. table-capture может помочь в этом случае.

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

В REPL?

пока что да. Сейчас я использую format, принципе пока устраивает, т.е. плевать на table package from emacs, но совсем скоро надо будет это дело распечатывать.

Я понимаю что table-... не лучший выход, но мне нравится как он делает таблицы.

Спасибо за совет, пойду поищу на cliki

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

>пока что да. Сейчас я использую format, принципе пока устраивает, т.е. плевать на table package from emacs, но совсем скоро надо будет это дело распечатывать.

А какие проблемы с распечаткой-то?

Я понимаю что table-... не лучший выход, но мне нравится как он делает таблицы.

А мне не до конца. У table-mode слишком упрощенная модель ячейки: есть значки пересечения (по умолчанию '+' в любом месте), горизонтальная линия (по умолчанию '-' в любом месте) и вертикальная линия (по умолчанию '|' в любом месте). Хотелось бы иметь более разухабистую модель, чтобы можно было псевдографикой таблицы рисовать, т. е. должно быть: «вертикальное пересечение у края слева» (┤), «пересечение у края справа» (├), углы (┌, ┘, ┐, └), горизонтальные пересечения (┴, ┬) и просто пересечение (┼). Модель более сложная, чем та, что в table-mode и потребует полной переделки кода.

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

А какие проблемы с распечаткой-то?

не в таком же ужасном виде печатать)

Name: Firstly
Lines: 102
Number            0        1        2        3        c        #        
_____________     ____     ____     ____     ____     ____     ____     
(0)               *  0       3       34       66       99        1      
(1)                 2      NIL      NIL      NIL      NIL      *  1     
(2)               *  2       3       34       66       99      NIL      
(3)                 4      *  3     NIL      NIL      NIL      NIL      
(4)               *  4       5       14       24       98      NIL      
(5)                 6      *  5     NIL      NIL      NIL      NIL      
(6)               *  6       7       10       12       13       97      
(7)                 8      *  7     NIL      NIL      NIL      NIL     

table-mode слишком упрощенная модель ячейки

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

как вариант http://www.cliki.net/latex-table

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

>не в таком же ужасном виде печатать)

Ну тут вариантов масса же есть. Вариант с table-mode не самый удобный. По-моему, тут изображена обычная таблица без объединенных и разбитых ячеек. format из CL вполне решает задачку. А потом уже можно и печатать. Если нужно более красивую таблицу, то можно сгенерировать ASCII-таблицу, LaTeX-код, groff-код (макропакет tbl выдаст таблицу в ASCII, совместимую c table-mode — можно будет правку осуществить интерактивно), ODF и подобное. Причем это совершенно быстро можно сделать самостоятельно без поиска каких-то библиотек, так как элементарно все.

Передача вывода в emacs из REPL в рамках SLIME с целью рисовать таблицу — это не лучший вариант и по сложности, и по способу решения. Все-таки table-mode — это больше интерактивное средство для создания таблиц, нежели удачный способ их рендеринга по набору данных, хотя и такое возможно с некоторыми ограничениями: table-capture выбирает фиксированную ширину столбцов и выравнивание для всех данных, и указать для каждого столбца отдельно ничего нельзя. Автоматический расчет ширины столбцов невозможен.

Есть вариант поиграться с table-insert-* и table-forward-cell с целью последовательного заполнения ячеек. И это потребует код на Emacs Lisp, который будет выяснять по набору данных, что и куда засовывать, а также выравнивание выставлять, если будешь набор данных сопровождать такой информацией.

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

table-capture выбирает фиксированную ширину столбцов и выравнивание для всех данных, и указать для каждого столбца отдельно ничего нельзя. Автоматический расчет ширины столбцов невозможен.

Нет, наврал. Он вычисляет ширину. Это ему минимальная выставляется глобально. Можно в 1 выставить. А вот выравнивание — одно на все столбцы. Надо посмотреть, нельзя ли вручную выравнивать, добивая пробелами.

aaaa,bbbbb,c,/
12.23,123231,3453453453,/
strochka1 , strochka2, strochka3,/

и table-capture с делимитером столбцов ',' и делимитером стро '/' дает

+---------+---------+----------+
|aaaa     |bbbbb    |c         |
+---------+---------+----------+
|12.23    |123231   |3453453453|
+---------+---------+----------+
|strochka1|strochka2|strochka3 |
+---------+---------+----------+
Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Нет, не наврал. Если несколько слов в одном поле, то он не вычисляет нифига. Переносит слово (и правильно делает). Ширина колонки все-таки не задается. Ее можно выставить уже после отрисовки таблицы.

Zubok ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.