[PATCH 2/2] Add a function to put the current line at the top of the screen

Fabienne Ducroquet <[email protected]> Wed, 18 Dec 2013 13:30:59 +0100
Newsgroups gmane.comp.web.links
Message-ID <[email protected]>
Signed-off-by: Fabienne Ducroquet <[email protected]>
---
 src/config/actions-main.inc | 1 +
 src/viewer/action.c         | 4 ++++
 src/viewer/text/view.c      | 6 ++++++
 src/viewer/text/view.h      | 1 +
 4 files changed, 12 insertions(+)

diff --git a/src/config/actions-main.inc b/src/config/actions-main.inc
index 5f686b2..abe6fa6 100644
--- a/src/config/actions-main.inc
+++ b/src/config/actions-main.inc
@@ -53,6 +53,7 @@ ACTION_(MAIN, "lua-console", LUA_CONSOLE, N__("Open a Lua console"), ACTION_REST
 ACTION_(MAIN, "mark-goto", MARK_GOTO, N__("Go at a specified mark"), ACTION_REQUIRE_VIEW_STATE),
 ACTION_(MAIN, "mark-set", MARK_SET, N__("Set a mark"), ACTION_REQUIRE_VIEW_STATE),
 ACTION_(MAIN, "menu", MENU, N__("Activate the menu"), 0),
+ACTION_(MAIN, "move-current-top", MOVE_CURRENT_TOP, N__("Move downwards to put the current line at the top"), ACTION_REQUIRE_VIEW_STATE),
 ACTION_(MAIN, "move-cursor-down", MOVE_CURSOR_DOWN, N__("Move cursor down"), ACTION_REQUIRE_VIEW_STATE),
 ACTION_(MAIN, "move-cursor-left", MOVE_CURSOR_LEFT, N__("Move cursor left"), ACTION_REQUIRE_VIEW_STATE),
 ACTION_(MAIN, "move-cursor-line-start", MOVE_CURSOR_LINE_START, N__("Move cursor to the start of the line"), ACTION_REQUIRE_VIEW_STATE),
diff --git a/src/viewer/action.c b/src/viewer/action.c
index 77280e6..6d15e33 100644
--- a/src/viewer/action.c
+++ b/src/viewer/action.c
@@ -335,6 +335,10 @@ do_action(struct session *ses, enum main_action action_id, int verbose)
 			activate_bfu_technology(ses, -1);
 			break;
 
+		case ACT_MAIN_MOVE_CURRENT_TOP:
+			status = move_current_top(ses, doc_view);
+			break;
+
 		case ACT_MAIN_MOVE_CURSOR_UP:
 			status = move_cursor_up(ses, doc_view);
 			break;
diff --git a/src/viewer/text/view.c b/src/viewer/text/view.c
index 8eb422d..943bd33 100644
--- a/src/viewer/text/view.c
+++ b/src/viewer/text/view.c
@@ -138,6 +138,12 @@ move_half_page_down(struct session *ses, struct document_view *doc_view)
 	return move_part_page_down(ses, doc_view, doc_view->box.height / 2);
 }
 
+enum frame_event_status
+move_current_top(struct session *ses, struct document_view *doc_view)
+{
+	return move_part_page_down(ses, doc_view, doc_view->box.height - ses->tab->y + 1);
+}
+
 /*! @a type == 0 -> PAGE_UP;
  * @a type == 1 -> UP */
 static void
diff --git a/src/viewer/text/view.h b/src/viewer/text/view.h
index d7721b1..7c11260 100644
--- a/src/viewer/text/view.h
+++ b/src/viewer/text/view.h
@@ -14,6 +14,7 @@ struct terminal;
  * But doesn't free() the @a doc_view. */
 void detach_formatted(struct document_view *doc_view);
 
+enum frame_event_status move_current_top(struct session *ses, struct document_view *doc_view);
 enum frame_event_status move_half_page_down(struct session *ses, struct document_view *doc_view);
 enum frame_event_status move_half_page_up(struct session *ses, struct document_view *doc_view);
 enum frame_event_status move_page_down(struct session *ses, struct document_view *doc_view);
-- 
1.8.5.1