Spec-Zone.ru › Haskell 7

Система.Консоль.Terminfo.Base

Maintainer judah.jacobson@gmail.com
Stability experimental
Portability portable (FFI)
Safe Haskell Trustworthy
Language Haskell2010

Содержание

  • Инициализация
  • Возможности
  • Вывод
    • TermOutput
    • Функции моноида

Описание

Этот модуль предоставляет низкоуровневый интерфейс к функциям C библиотеки terminfo.

ПРИМЕЧАНИЕ: Поскольку эта библиотека построена поверх интерфейса curses, она не является потокобезопасной.

Инициализация

data Terminal Source

setupTerm :: String -> IO Terminal Source

Инициализирует библиотеку terminfo для заданной записи терминала.

Выбрасывает SetupTermError если базу данных terminfo не удалось прочитать.

setupTermFromEnv :: IO Terminal Source

Инициализирует библиотеку terminfo, используя переменную окружения TERM. Если TERM не установлена, используется общая, минимальная запись dumb.

Выбрасывает SetupTermError если базу данных terminfo не удалось прочитать.

data SetupTermError Source

Экземпляры

Show SetupTermError
Exception SetupTermError

Возможности

data Capability a Source

Функция или операция, которую может определить Terminal.

Экземпляры

Monad Capability
Functor Capability
Applicative Capability
Alternative Capability
MonadPlus Capability

getCapability :: Terminal -> Capability a -> Maybe a Source

tiGetFlag :: String -> Capability Bool Source

Ищет булеву возможность в базе данных terminfo.

В отличие от tiGuardFlag, эта возможность никогда не приводит к ошибке; она возвращает False если возможность отсутствует или установлена в false, и возвращает True в противном случае.

tiGuardFlag :: String -> Capability () Source

Ищет булеву возможность в базе данных terminfo и выдает ошибку, если она не определена.

tiGetNum :: String -> Capability Int Source

Ищет числовую возможность в базе данных terminfo.

tiGetStr :: String -> Capability String Source

Устарело: используйте tiGetOutput вместо этого.

Ищет строковую возможность в базе данных terminfo. ПРИМЕЧАНИЕ: Эта функция устарела; используйте tiGetOutput1 вместо этого.

Вывод

Terminfo содержит много строковых возможностей для специальных эффектов. Например, возможность cuu1 перемещает курсор на одну строку вверх; на терминалах ANSI это достигается путем вывода управляющей последовательности "\ESC[A". Однако, некоторые старые терминалы также требуют «дополнительного заполнения» или коротких пауз после некоторых команд. Например, при TERM=vt100 возможность cuu1 является "\ESC[A$<2>", что указывает terminfo на паузу в две миллисекунды после вывода управляющей последовательности.

Моноид TermOutput абстрагирует весь вывод заполнения и управляющих последовательностей. К сожалению, этот тип данных трудно интегрировать в существующие API на основе String, такие как pretty-printers. Таким образом, в качестве обходного пути, tiGetOutput1 также позволяет нам получать доступ к управляющим последовательностям как Strings. Единственное предостережение заключается в том, что он не позволит вам получить доступ к управляющим последовательностям с заполнением как Strings. Например:

> t <- setupTerm "vt100"
> isJust (getCapability t (tiGetOutput1 "cuu1") :: Maybe String)
False
> isJust (getCapability t (tiGetOutput1 "cuu1") :: Maybe TermOutput)
True

String возможности будут работать с программными типами терминалов, такими как xterm и linux. Однако, вы должны использовать TermOutput, если совместимость со старыми терминалами важна. Кроме того, возможность visualBell, которая мигает экраном, обычно производит свой эффект с директивой заполнения, поэтому она будет работать только с TermOutput.

tiGetOutput1 :: forall f. OutputCap f => String -> Capability f Source

Ищет возможность вывода, которая принимает фиксированное количество параметров (например, Int -> Int -> TermOutput).

Для возможностей, которые могут содержать заполнение переменной длины, используйте tiGetOutput вместо этого.

class OutputCap f Source

Минимальное полное определение

hasOkPadding, outputCap

Экземпляры

OutputCap TermOutput
OutputCap [Char]
(Enum p, OutputCap f) => OutputCap (p -> f)

class (Monoid s, OutputCap s) => TermStr s Source

Экземпляры

TermStr TermOutput
TermStr [Char]

TermOutput

data TermOutput Source

Действие, которое отправляет вывод в терминал. Этот вывод может смешивать обычный текст с управляющими символами и escape-последовательностями, а также с задержками (называемыми "padding"), необходимыми для некоторых старых терминалов.

Экземпляры

Monoid TermOutput
TermStr TermOutput
OutputCap TermOutput

runTermOutput :: Terminal -> TermOutput -> IO () Source

Записывает вывод терминала в стандартное устройство вывода.

hRunTermOutput :: Handle -> Terminal -> TermOutput -> IO () Source

Записывает вывод терминала в терминал или файл, управляемый данным Handle.

termText :: String -> TermOutput Source

tiGetOutput :: String -> Capability ([Int] -> LinesAffected -> TermOutput) Source

Ищет выходную возможность в базе данных terminfo.

type LinesAffected = Int Source

Параметр для указания количества затронутых строк. Некоторые возможности (например, clear и dch1) используют этот параметр на некоторых терминалах для вычисления заполнения переменной длины.

Функции моноида

class Monoid a where Source

Класс моноидов (типы с ассоциативной бинарной операцией, имеющей тождество). Экземпляры должны удовлетворять следующим законам:

  • mappend mempty x = x
  • mappend x mempty = x
  • mappend x (mappend y z) = mappend (mappend x y) z
  • mconcat = foldr mappend mempty

Имена методов относятся к моноиду списков при конкатенации, но есть много других экземпляров.

Некоторые типы можно рассматривать как моноид более чем одним способом, например, как сложение, так и умножение чисел. В таких случаях мы часто определяем newtypes и делаем эти экземпляры Monoid, например, Sum и Product.

Минимальное полное определение

mempty, mappend

Методы

mempty :: a Source

Тождество mappend

mappend :: a -> a -> a Source

Ассоциативная операция

mconcat :: [a] -> a Source

Сворачивает список с использованием моноида. Для большинства типов будет использовано стандартное определение для mconcat, но функция включена в определение класса, чтобы можно было предоставить оптимизированную версию для конкретных типов.

Экземпляры

Monoid Ordering
Monoid ()
Monoid TermOutput
Monoid [a]
Ord a => Monoid (Max a)
Ord a => Monoid (Min a)
Monoid a => Monoid (Maybe a)

Поднимает полугруппу в Maybe образуя Monoid согласно http://en.wikipedia.org/wiki/Monoid: "Любая полугруппа S может быть превращена в моноид простым добавлением элемента e не в S и определением e*e = e и e*s = s = s*e для всех s ∈ S." Так как нет класса типов "Semigroup", предоставляющего только mappend, мы используем Monoid вместо этого.

Monoid b => Monoid (a -> b)
(Monoid a, Monoid b) => Monoid (a, b)
Monoid a => Monoid (Const a b)
Monoid (Proxy k s)
(Monoid a, Monoid b, Monoid c) => Monoid (a, b, c)
(Monoid a, Monoid b, Monoid c, Monoid d) => Monoid (a, b, c, d)
(Monoid a, Monoid b, Monoid c, Monoid d, Monoid e) => Monoid (a, b, c, d, e)

(<#>) :: Monoid m => m -> m -> m infixl 2 Source

Операторная версия mappend.

© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/7.10.3/docs/html/libraries/terminfo-0.4.0.1/System-Console-Terminfo-Base.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API