2013-08-29 3 views
2

Как вы получаете текст из textView в Haskell?Как получить текст из textView в Haskell

Я не уверен, что делаю это правильно. Единственной функцией «получить», которую я смог найти в классе TextView, является textViewGetBuffer, который вычисляет IO TextBuffer, а не строку.

Я пытаюсь получить строковое значение IO TextBuffer, используя textBufferGetText :: self -> TextIter -> TextIter -> Bool -> String, но не могу понять, что указать в качестве значений TextIter.

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

name = textBufferGetText (textViewGetBuffer txtView) start end True 

Любые предложения/помощь были бы весьма полезными.

ответ

1

(Отказ от ответственности: я не знаю, как использовать GTK в Haskell, и я не могу установить его на этой машине, так что я не могу проверить это)

Глядя на документации, есть несколько методов для получения значения TextIter от TextBufferClass. Те, с которыми вы, вероятно, заинтересованы в являются textBufferGetStartIter и textBufferGetEndIter, что каждый берет TextBufferClass и вернуть , так что вы могли бы написать что-то вроде функции

textViewGetValue :: TextViewClass self => self -> IO String 
textViewGetValue tv = do 
    buf <- textViewGetBuffer tv 
    start <- textBufferGetStartIter buf 
    end <- textBufferGetEndIter buf 
    value <- textBufferGetText buf start end True 
    return value 

, который должен работать. Технически последние две строки могут быть только textBufferGetText buf start end True, но я думаю, что это немного улучшает происходящее.

EDIT: я должен сказать, что я нашел эти методы в Graphics.UI.Gtk.Multiline.TextView, Graphics.UI.Gtk.Multiline.TextBuffer и Graphics.UI.Gtk.Multiline.TextIter, так что вы, возможно, придется импортировать их, а также. Но я не знаю, что все уже есть в вашем пространстве имен.

+0

спасибо. Это правильный ответ и работа. –

+0

@ user1691145 Прохладно, хорошо знать, что на этот раз я написал код, который работал без проверки или когда-либо использовавшего библиотеку раньше. Я просто щелкнул ссылки, чтобы узнать определения каждого типа, а затем просмотрел функции с именами и типами подписи, которые выглядели вероятными. Удивительно, сколько вы можете выяснить с помощью ctrl + f =) – bheklilr

+0

Почему эта функция еще не реализована в библиотеке, интересно? Мне кажется, что я достаточно основателен, чтобы вы могли это сделать. – ericvm

Смежные вопросы