Добавьте полосу прокрутки на Ncurses или сделайте так, чтобы она понравилась больше

В основном я пишу клиентскую программу, которая получает ответ и журналы с сервера, клиент также может отправлять запрос на сервер для получения различной информации. Я использовал проклятия, и вывод выглядит довольно хорошо. Это похоже на VI, вывод вверху и ввод команды пользователем на стороне клиента внизу. Единственное, я не могу прокрутить назад. Мой босс сказал мне сделать это как «больше команд в Linux», и я хочу придерживаться своего решения и добавить полосу прокрутки сбоку для окна вывода... Я был Сервер мышления отправляет журналы случайным образом, и почти невозможно (или слишком сложно) сделать так, чтобы это выглядело более...


person Shawn    schedule 07.07.2011    source источник
comment
Забавно, но more(1) поддерживает только возврат к файлам, а не каналы, поэтому ls -laR | more не позволяет прокручивать назад. Это была одна из основных особенностей less(1), когда она была впервые представлена. :)   -  person sarnold    schedule 08.07.2011
comment
Попробуйте объяснить это моему боссу!   -  person Shawn    schedule 08.07.2011
comment
Спасибо за оба ответа .. Я ценю это .. Я все еще обсуждаю, будет ли проще создать механизм буфера для Ncurses, чем реализовать клиент, например больше ... под больше я имею в виду, что пользователь должен иметь возможность вводить команду внизу в то время как сервер сбрасывает журнал. В настоящее время у меня есть два потока в журнале дампов в верхнем подокне, а другой принимает ввод команды внизу...   -  person Shawn    schedule 08.07.2011


Ответы (3)


Если вы поддерживаете список или массив строк в своем клиенте и просите ncurses отрисовывать диапазон строк в виде скользящего окна, вы можете перемещать свое окно вверх и вниз в ответ на ^F ^B ^U ^D ^Y ^E команды, которые просто перерисовывают экран с разными индексами.

Я бы не стал пытаться рисовать полосу прокрутки: это выглядело бы неуместно в системе Linux. Даже mc не имеет полос прокрутки. Просто покажите сводку содержимого в нижней строке, подобно Top, Bot, All, N% vim, когда :set ruler включено, это будет чувствовать себя как дома.

person sarnold    schedule 07.07.2011
comment
Говорю как истинный любитель vim. +1 - person ; 21.03.2013

Я не совсем уверен, спрашиваете ли вы, как реализовать прокрутку или как нарисовать полосу прокрутки с помощью ncurses. Моя догадка вторая.

Предполагая, что ваш ncurses скомпилирован с поддержкой Unicode (не забудьте правильно установить среду при инициализации ncurses, загляните в «setlang»), вы можете использовать следующие символы:

Unicode:
▲ - U+25B2 BLACK UP-POINTING TRIANGLE
▼ - U+25BC BLACK DOWN-POINTING TRIANGLE
▮ - U+25AE BLACK VERTICAL RECTANGLE

ASCII:
176 - ░ Light shaded block
177 - ▒ Medium shaded block
178 - ▓ Dark shaded block
219 - █ Block block

Написание кода для отображения темного блока в нужном месте должно быть довольно простым.

Если я неправильно понял ваш вопрос, мои извинения.

person AVH    schedule 07.07.2011

Другой вариант — переписать ваш клиент как IRC bot или IM клиент. Пользователи отправляют сообщения либо клиенту напрямую, либо по определенному каналу, а бот выполняет действие и отправляет обратно все необходимые ответы.

Прелесть в том, что вы можете пропустить все элементы пользовательского интерфейса самостоятельно — прокрутите назад, и история будет обрабатываться через irssi или xchat или какой-то другой клиент. Пользователи могут запускать клиент, который им нравится больше всего.

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

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

Команда, в которую я входил в прошлом, любила иметь интерфейс IRC для BuildBot, чтобы сообщать о проверках, успешной сборке, ошибках сборки, успешном тестировании, неудачных тестах, для нашей непрерывной интеграции сборки и настройки тестирования.

person sarnold    schedule 07.07.2011