2016-05-27 8 views
0

So arbeite ich daran, einen mehr oder weniger festen GtkTextBuffer zu machen (und wenn es eine bessere Möglichkeit gibt, lass es mich wissen) und ich benutze Marken, um den Puffer in zu teilen "Einträge". Dann benutze ich diese Markierungen und lösche einen Abschnitt des Puffers vom Start-Iter zum Iter an der entsprechenden Markierung.Wie man Newline am Ende von GtkTextBuffer löscht

Das Problem mit all dem ist, dass es eine neue Zeile am Ende des Puffers verlässt, die ich nicht herausfinden kann, wie Sie löschen. Hat jemand Erfahrung damit oder Ideen zum Löschen der Newline?

Hier ist mein aktueller Code:

// 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

Was ist Ihr spezifischer Zweck? Es scheint, als gäbe es viel bessere Möglichkeiten, ein geteiltes eintragsbasiertes System anzuzeigen. – oldtechaa

+0

Ziel des Systems ist die Anzeige von Textbenachrichtigungen für den Benutzer, Statusmeldungen, um den Benutzer auf dem Laufenden zu halten, was auf anderen Registerkarten im System passiert, und Ereignisse, die außerhalb der GUI auftreten. Das Ziel des eintragsbasierten Systems besteht darin, die Größe dieses Alarmprotokolls auf einer angemessenen Größe zu halten, da das System möglicherweise monatelang ausgeführt wird. – elsenor

+0

Konnten Sie nicht etwas wie eine ListBox benutzen? – oldtechaa

Antwort

0

Wie oben im Kommentar bemerkt:

ich es fest, ich war sein stumm darüber, wo wurde das Newline eingefügt zu werden, so habe ich es die vorangestellt Einfügezeichenfolge, anstatt sie anzuhängen. Wenn also jeder "Lesezeichen" -Abschnitt gelöscht wird, gibt es eine saubere Zeilenendung.