所以我正在努力制作一个或多或少固定大小的GtkTextBuffer(如果还有更好的方法可以让我知道)并且我使用标记将缓冲区划分为“条目”。然后使用这些标记我删除缓冲区的一部分,从适当的标记开始iter到iter。
所有这一切的问题是它在缓冲区的末尾留下了一个换行符,我无法弄清楚如何删除。任何人都有这方面的经验或对如何删除换行有任何想法?
这是我目前的代码:
// markName is a c string and textBuffEntries is an int
// keeping track of how many entries there are in the buffer
snprintf(markName, 9, "%d", textBuffEntries);
if(allMarksPopulated) {
neo_debug(func_mask, "Deleting: %s", markName);
gtk_text_buffer_get_start_iter(buffer, &startIter);
gtk_text_buffer_get_iter_at_mark(buffer, &markIter,
gtk_text_buffer_get_mark(buffer, markName));
gtk_text_buffer_delete(buffer, &startIter, &markIter);
gtk_text_buffer_get_iter_at_line(buffer, &markIter, 1);
gtk_text_buffer_get_start_iter(buffer, &startIter);
gtk_text_buffer_delete(buffer, &startIter, &markIter);
}
neo_debug(func_mask, "textBuffEntries: %d", textBuffEntries);
// Now write the data to the buffer
gtk_text_buffer_get_end_iter(buffer, &endIter);
gtk_text_buffer_insert (buffer, &endIter,
msg_str.c_str(),
msg_str.length());
snprintf(markName, 9, "%d", textBuffEntries);
gtk_text_buffer_get_end_iter(buffer, &endIter),
gtk_text_buffer_create_mark(buffer, markName,
&endIter,
true);
msg_str = "\n";
gtk_text_buffer_get_end_iter(buffer, &endIter);
gtk_text_buffer_insert (buffer, &endIter,
msg_str.c_str(),
msg_str.length());
if(!allMarksPopulated && MAX_LINES == textBuffEntries)
{
allMarksPopulated = true;
}
if(MAX_LINES == textBuffEntries)
{
textBuffEntries = 0;
} else {
textBuffEntries++;
}
答案 0 :(得分:0)
如上述评论中所述:
我修复了它,我对插入换行符的位置感到愚蠢,所以我将其更改为添加插入字符串而不是附加它。因此,当删除每个“书签”部分时,会有一个简洁的行结束。