есть ли древовидные библиотеки / виджеты для (n) curses - PullRequest
7 голосов
/ 03 марта 2010

Мне было интересно, есть ли какие-нибудь древовидные библиотеки для (n) проклятий.

Я пытаюсь написать компонент, который показывает дерево папок и мне было любопытно, если бы был готовый компонент curses, который мог бы сделать это.

Я проверил «основные» проклятия, а также такие библиотеки, как CDK - и я не могу ничего найти.

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

Спасибо, Ace

Ответы [ 4 ]

1 голос
/ 05 февраля 2017

Программа dialog (с документированным интерфейсом библиотеки) имеет виджет "tree" . Программа работает с (n) curses и, в отличие от CDK , подходит для использования с UTF-8.

dialog - tree view

Также имеется файл (/ каталог) виджет выбора.

dialog - file-selection

Также есть wcd (хотя, как и mc, возможность повторного использования библиотеки неясна). Тем не менее, это хороший пример того, что ОП, вероятно, хочет:

screenshot converted from wcd page

Что касается urwid, это спорно. Под капотом у вас не может быть проклятий. Для чего стоит скриншот скрипта treeview :

urwid treeview

и в моей системе Debian / testing скрипт не использует ncurses. Это жестко закодировано (то есть, используя raw_display).

1 голос
/ 05 февраля 2017

«Я пытаюсь написать компонент, который показывает дерево папок»

CDK имеет виджет CDKFSELECT.

Он отображает список каталогов и файлов, которые могут работать для вас, или исходный код CDKFSELECT может быть использован для вашего собственного написанного решение.

CDKFSELECT *fSelect = 0;

/*
Height of zero means to extent of xterm
Width of zero means to extent of xterm
*/
int HEIGHT = 0;
int WIDTH = 0;

char *title = new char[strlen("Pick a file to open") + 1];
strcpy(title, "Pick a file to open");

char *prompt = new char[strlen("==> ") + 1];
strcpy(prompt, "==> ");

char *directoryAttribute = new char[strlen("</B>") + 1]; /* bold */
strcpy(directoryAttribute, "</B>");

char *fileAttribute = new char[strlen("</N>") + 1]; /* normal */
strcpy(fileAttribute, "</N>");

char *linkAttribute = new char[strlen("</D>") + 1]; /* dim */
strcpy(linkAttribute, "</D>");

char *sockAttribute = new char[strlen("</D>") + 1]; /* dim */
strcpy(sockAttribute, "</D>");

boolean displayBox = TRUE;
boolean displayShadow = FALSE;

fSelect = newCDKFselect(pCdkScreen,
          TOP, LEFT, HEIGHT, WIDTH,
          title, prompt,
          A_NORMAL, '_', A_REVERSE,
          directoryAttribute, fileAttribute, linkAttribute, sockAttribute,
          displayBox, displayShadow);

char *filename = activateCDKFselect(fSelect, 0);
/*
2014-06-13, using DDD, filename being correctly populated
by CDK
*/

/* do other stuff... */

/*
 free the memory of any dynamically created objects
 that were created with new or malloc, or such
*/
destroyCDKFselect(fSelect);

delete [] title;
delete [] prompt;
delete [] directoryAttribute;
delete [] fileAttribute;
delete [] linkAttribute;
delete [] sockAttribute;
1 голос
/ 11 апреля 2010

Зависит от того, какой язык программирования вы используете / хотите использовать. Я недавно представил виджет дерева для Urwid, который является библиотекой виджетов curses для Python: http://bitbucket.org/robla/urwid-treetools/src/

ОБНОВЛЕНИЕ 2015-09-06 - Мой патч был принят давно как часть Urwid , который теперь поддерживает виджет дерева в своей основе Ссылка в моем исходном ответе за 2010 год все еще ссылается на мой старый код, но устарела.

0 голосов
/ 22 апреля 2010

Посмотрите на исходный код Midnight commander (http://www.midnight -commander.org / ) У него есть виджет хранилища деревьев.

...