示例#1
0
/*
 * DeleteBlockFromCurrentLine - remove chars from line, leave result in work line
 */
vi_rc DeleteBlockFromCurrentLine( int scol, int ecol, int saveb_flag )
{
    int i;

    /*
     * check if we can do this on the current line
     */
    if( scol > ecol ) {
        i = scol;
        scol = ecol;
        ecol = i;
    }
    if( scol < 0 || ecol >= CurrentLine->len ) {
        return( ERR_CANNOT_DELETE_CHAR );
    }

    if( saveb_flag ) {
        AddLineToSavebuf( CurrentLine->data, scol, ecol );
    }

    /*
     * remove chars
     */
    GetCurrentLine();
    for( i = ecol + 1; i <= CurrentLine->len; i++ ) {
        WorkLine->data[scol + (i - (ecol + 1))] = WorkLine->data[i];
    }
    WorkLine->len -= ecol - scol + 1;
    return( ERR_NO_ERR );

} /* DeleteBlockFromCurrentLine */
示例#2
0
vi_rc Yank( range *r )
{
    vi_rc       rc;

    if( r->line_based ) {
        rc = YankLineRange( r->start.line, r->end.line );
    } else if( r->start.line == r->end.line ) {
        assert( CurrentPos.line == r->start.line );
        AddLineToSavebuf( CurrentLine->data, r->start.column, r->end.column );
#ifdef __WIN__
        if( LastSavebuf == 0 ) {
            Message1( "%d characters copied into the clipboard",
                      r->end.column - r->start.column + 1 );
        } else {
#endif
            Message1( "%d %s yanked into buffer %c",
                      r->end.column - r->start.column + 1,
                      MSG_CHARACTERS, LastSavebuf );
#ifdef __WIN__
        }
#endif
        rc = DO_NOT_CLEAR_MESSAGE_WINDOW;
    } else {
        rc = Cut( r->start.line, r->start.column, r->end.line, r->end.column, false );
    }
    if( rc != ERR_NO_ERR ) {
        rc = DO_NOT_CLEAR_MESSAGE_WINDOW;
    }
    return( rc );

} /* Yank */