Blob Blame History Raw
# -*- coding: utf-8 -*-
#
#  goto.py - goto commander module
#
#  Copyright (C) 2010 - Jesse van den Kieboom
#
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 51 Franklin Street, Fifth Floor,
#  Boston, MA 02110-1301, USA.

import os

import commander.commands as commands
import commander.commands.completion
import commander.commands.result
import commander.commands.exceptions

__commander_module__ = True

def __default__(view, line, column=1):
    """Goto line number"""

    buf = view.get_buffer()
    ins = buf.get_insert()
    citer = buf.get_iter_at_mark(ins)

    try:
        if line.startswith('+'):
            linnum = citer.get_line() + int(line[1:])
        elif line.startswith('-'):
            linnum = citer.get_line() - int(line[1:])
        else:
            linnum = int(line) - 1

        column = int(column) - 1
    except ValueError:
        raise commander.commands.exceptions.Execute('Please specify a valid line number')

    linnum = min(max(0, linnum), buf.get_line_count() - 1)
    citer = buf.get_iter_at_line(linnum)

    column = min(max(0, column), citer.get_chars_in_line() - 1)

    citer = buf.get_iter_at_line(linnum)
    citer.forward_chars(column)

    buf.place_cursor(citer)
    view.scroll_to_iter(citer, 0.0, True, 0, 0.5)

    return commander.commands.result.HIDE

# ex:ts=4:et