如何删除GtkTextBuffer结束时的换行符

时间:2016-05-27 15:18:39

标签: c++ gtk

所以我正在努力制作一个或多或少固定大小的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++;
}

1 个答案:

答案 0 :(得分:0)

如上述评论中所述:

我修复了它,我对插入换行符的位置感到愚蠢,所以我将其更改为添加插入字符串而不是附加它。因此,当删除每个“书签”部分时,会有一个简洁的行结束。