如何删除 GtkTextBuffer 末尾的换行符

How to Delete Newline at End of GtkTextBuffer

本文关键字:换行符 GtkTextBuffer 何删除 删除      更新时间:2023-10-16

所以我正在努力制作一个或多或少固定大小的 GtkTextBuffer(如果有更好的方法,请告诉我),我正在使用标记将缓冲区划分为"条目"。然后使用这些标记,我将缓冲区的一部分从开始迭代器删除到适当标记处的迭代器。

所有这些的问题是它在缓冲区的末尾留下了一个换行符,我无法弄清楚如何删除。有人对此有经验或对如何删除换行符有任何想法吗?

这是我当前的代码:

// 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++;
}

如上面的评论所述:

我修复了它,我对插入换行符的位置很愚蠢,所以我将其更改为在插入字符串之前而不是附加它。因此,当删除每个"书签"部分时,有一个干净的行尾。