2

你如何从 Haskell 的 textView 中获取文本?

我不确定我做得对。我可以在 TextView 类中找到的唯一“get”函数是 textViewGetBuffer,它的计算结果是 IO TextBuffer,而不是字符串。

我正在尝试使用 textBufferGetText :: self -> TextIter -> TextIter -> Bool -> String 获取 IO TextBuffer 的字符串值,但无法确定要指定为 TextIter 值的内容。

TextIter 值指定获取文本的范围的开始和结束,但是当我查找 TextIter 数据类型时,它没有指定我可以使用的任何值构造函数。

    name = textBufferGetText (textViewGetBuffer txtView) start end True

任何建议/帮助将不胜感激。

4

1 回答 1

1

(免责声明:我不知道如何在 Haskell 中使用 GTK,我无法在这台机器上安装它,所以我无法对此进行测试)

查看文档,有几种方法可以TextIterTextBufferClass. 您可能感兴趣的是textBufferGetStartIterand textBufferGetEndIter,每个都接受 aTextBufferClass和 return IO TextIter,因此您可以编写类似的函数

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,但我认为这使它更清楚发生了什么。

编辑:我应该说我在 、 和 中找到了这些方法Graphics.UI.Gtk.Multiline.TextViewGraphics.UI.Gtk.Multiline.TextBuffer因此Graphics.UI.Gtk.Multiline.TextIter您可能也必须导入这些方法。但我不知道您的命名空间中已经存在什么。

于 2013-08-29T16:26:59.170 回答