/*
 * Emacs_Next_Line.bsh - Beanshell macro for jEdit that provides
 * 'Emacs-like scrolling.  If the caret is at the bottom of the 
 * screen the next line is centered on the screen rather than 
 * scrolling the whole text area by one line.  For machines with
 * slow painting, this can increase scrolling speed.
 *
 * Copyright (C) 2002-2004, Ollie Rutherfurd <oliver@rutherfurd.net>
 *
 * $Id: Emacs_Next_Line.bsh 4995 2004-03-19 15:58:00Z spestov $
 */

void emacsNextLine(View view){

	// need access to textArea.lastLinePartial
	setAccessibility(true);

	int first = textArea.getFirstLine();
	int caretLine = textArea.getScreenLineOfOffset(textArea.getCaretPosition());
	int visibleLines = textArea.getVisibleLines();
	int electricScroll = textArea.getElectricScroll();

	if(caretLine != -1 && caretLine+1 >= 
			(visibleLines - (electricScroll + (textArea.lastLinePartial ? 1 : 0))))
	{
		int newFirst = (first + (visibleLines - electricScroll) / 2);
		textArea.setFirstLine(newFirst);
	}
	textArea.goToNextLine(false);
}

emacsNextLine(view);

/*
	<listitem>
		<para><filename>Emacs_Next_Line.bsh</filename></para>
		<abstract><para>
			Moves the cursor to the next line, centering 
			the current line in the middle of the text area
			if the cursor is at the bottom of the text area.
		</para></abstract>
	</listitem>
*/
