如何删除 GtkTextBuffer 末尾的换行符
How to Delete Newline at End of GtkTextBuffer
所以我正在努力制作一个或多或少固定大小的 GtkTextBuffer(如果有更好的方法请告诉我)并且我使用标记将缓冲区划分为 "entries"。然后使用这些标记,我删除了缓冲区的一部分,从起始迭代器到适当标记的迭代器。
所有这一切的问题是它在缓冲区的末尾留下了一个换行符,我不知道如何删除它。有人对此有经验或对如何删除换行有任何想法吗?
这是我当前的代码:
// 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++;
}
如上评论所述:
我修复了它,我对换行符的插入位置一无所知,所以我将其更改为在插入字符串之前添加而不是附加它。因此,当每个 "bookmark" 部分被删除时,都会有一个干净的行结束。
所以我正在努力制作一个或多或少固定大小的 GtkTextBuffer(如果有更好的方法请告诉我)并且我使用标记将缓冲区划分为 "entries"。然后使用这些标记,我删除了缓冲区的一部分,从起始迭代器到适当标记的迭代器。
所有这一切的问题是它在缓冲区的末尾留下了一个换行符,我不知道如何删除它。有人对此有经验或对如何删除换行有任何想法吗?
这是我当前的代码:
// 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++;
}
如上评论所述:
我修复了它,我对换行符的插入位置一无所知,所以我将其更改为在插入字符串之前添加而不是附加它。因此,当每个 "bookmark" 部分被删除时,都会有一个干净的行结束。