// this method is using the following:
 // lastVisibleLine      last line that exists in the buffer. NOTE: "visible" here means line is
 // not filtered in weechat
 // readMarkerLine       used for display. it is:
 //     * saved on app shutdown and restored on start
 //     * altered if a buffer has been read in weechat (see BufferList.saveLastReadLine)
 //     * set to the last displayed line when user navigates away from a buffer
 //     * shifted from invisible line to last visible line if buffer is filtered
 private void maybeMoveReadMarker() {
   if (DEBUG_VISIBILITY) logger.debug("maybeMoveReadMarker()");
   if (buffer != null && buffer.readMarkerLine != buffer.lastVisibleLine) {
     buffer.readMarkerLine = buffer.lastVisibleLine;
     linesAdapter.needMoveLastReadMarker = true;
     onLinesChanged();
   }
 }
 // this method is using the following:
 // lastVisibleLine      last line that exists in the buffer. NOTE: "visible" here means line is
 // not filtered in weechat
 // readMarkerLine       used for display. it is:
 //     * saved on app shutdown and restored on start
 //     * altered if a buffer has been read in weechat (see BufferList.saveLastReadLine)
 //     * set to the last displayed line when user navigates away from a buffer
 //     * shifted from invisible line to last visible line if buffer is filtered
 private void maybeMoveReadMarker() {
   if (DEBUG_VISIBILITY) logger.warn("{} maybeMoveReadMarker({})", shortName);
   if (buffer != null && buffer.readMarkerLine != buffer.lastVisibleLine) {
     buffer.readMarkerLine = buffer.lastVisibleLine;
     linesAdapter.needMoveLastReadMarker = true;
     onLinesChanged();
   }
 }