mirror of
https://github.com/chylex/IntelliJ-IdeaVim.git
synced 2025-08-04 15:59:04 +02:00
This commit is contained in:
parent
392d173ace
commit
47094cef2b
src/com/maddyhome/idea/vim
@ -1,7 +1,8 @@
|
||||
package com.maddyhome.idea.vim.common;
|
||||
|
||||
/*
|
||||
* IdeaVim - A Vim emulator plugin for IntelliJ Idea
|
||||
* Copyright (C) 2003-2004 Rick Maddy
|
||||
* Copyright (C) 2003-2005 Rick Maddy
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
@ -41,6 +42,33 @@ public class TextRange
|
||||
return getEndOffset() - getStartOffset();
|
||||
}
|
||||
|
||||
public int getMaxLength()
|
||||
{
|
||||
int max = 0;
|
||||
for (int i = 0; i < size(); i++)
|
||||
{
|
||||
max = Math.max(max, getEndOffsets()[i] - getStartOffsets()[i]);
|
||||
}
|
||||
|
||||
return max;
|
||||
}
|
||||
|
||||
public int getSelectionCount()
|
||||
{
|
||||
int res = 0;
|
||||
for (int i = 0; i < size(); i++)
|
||||
{
|
||||
res += getEndOffsets()[i] - getStartOffsets()[i];
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
public int size()
|
||||
{
|
||||
return starts.length;
|
||||
}
|
||||
|
||||
public int getStartOffset()
|
||||
{
|
||||
return starts[0];
|
||||
@ -61,6 +89,50 @@ public class TextRange
|
||||
return ends;
|
||||
}
|
||||
|
||||
public TextRange normalize()
|
||||
{
|
||||
if (size() == 1 && getEndOffset() < getStartOffset())
|
||||
{
|
||||
int t = starts[0];
|
||||
starts[0] = ends[0];
|
||||
ends[0] = t;
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean normalize(final int fileSize)
|
||||
{
|
||||
if (size() == 1)
|
||||
{
|
||||
normalize();
|
||||
starts[0] = Math.max(0, Math.min(starts[0], fileSize));
|
||||
if (starts[0] == fileSize){
|
||||
return false;
|
||||
}
|
||||
ends[0] = Math.max(0, Math.min(ends[0], fileSize));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
final StringBuffer sb = new StringBuffer();
|
||||
sb.append("TextRange");
|
||||
sb.append("{starts=").append(starts == null ? "null" : "");
|
||||
for (int i = 0; starts != null && i < starts .length; ++i)
|
||||
{
|
||||
sb.append(i == 0 ? "" : ", ").append(starts[i]);
|
||||
}
|
||||
sb.append(", ends=").append(ends == null ? "null" : "");
|
||||
for (int i = 0; ends != null && i < ends .length; ++i)
|
||||
{
|
||||
sb.append(i == 0 ? "" : ", ").append(ends[i]);
|
||||
}
|
||||
sb.append('}');
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private int[] starts;
|
||||
private int[] ends;
|
||||
}
|
@ -1630,11 +1630,9 @@ public class ChangeGroup extends AbstractActionGroup
|
||||
*/
|
||||
private boolean deleteText(Editor editor, DataContext context, TextRange range, int type)
|
||||
{
|
||||
if (range.size() == 1 && range.getStartOffset() > range.getEndOffset())
|
||||
{
|
||||
int start = Math.max(0, Math.min(range.getStartOffset(), EditorHelper.getFileSize(editor, true)));
|
||||
int end = Math.max(0, Math.min(range.getEndOffset(), EditorHelper.getFileSize(editor, true)));
|
||||
range = new TextRange(end, start);
|
||||
// Fix for http://youtrack.jetbrains.net/issue/VIM-35
|
||||
if (!range.normalize(EditorHelper.getFileSize(editor, true))){
|
||||
return false;
|
||||
}
|
||||
|
||||
if (type == 0 || CommandGroups.getInstance().getRegister().storeText(editor, context, range, type, true, false))
|
||||
|
Loading…
Reference in New Issue
Block a user