public static void Delete (HexEditorData data)
		{
			if (data.IsSomethingSelected) {
				data.DeleteSelection ();
				return;
			}
			if (data.Caret.Offset >= data.Length)
				return;
			data.Remove (data.Caret.Offset, 1);
			data.UpdateLine (data.Caret.Line);
		}
		public static void GotoPrevious (HexEditorData data)
		{
			data.Bookmarks.Sort ();
			long cur = -1;
			for (int i = 0; i < data.Bookmarks.Count; i++) {
				if (data.Bookmarks[i] < data.Caret.Offset && cur < data.Bookmarks[i])
					cur = data.Bookmarks[i];
			}
			if (cur == -1 && data.Bookmarks.Count > 0)
				cur = data.Bookmarks[data.Bookmarks.Count - 1];
			
			if (cur != -1) {
				data.Caret.Offset = cur;
				data.UpdateLine (data.Caret.Offset / data.BytesInRow);
			}
		}
		public static void GotoNext (HexEditorData data)
		{
			data.Bookmarks.Sort ();
			long cur = long.MaxValue;
			for (int i = 0; i < data.Bookmarks.Count; i++) {
				if (data.Bookmarks[i] > data.Caret.Offset && cur > data.Bookmarks[i])
					cur = data.Bookmarks[i];
			}
			if (cur == long.MaxValue && data.Bookmarks.Count > 0)
				cur = data.Bookmarks[0];
			
			if (cur != long.MaxValue) {
				data.Caret.Offset = cur;
				data.UpdateLine (data.Caret.Offset / data.BytesInRow);
			}
		}
		public static void SwitchCaretMode (HexEditorData data)
		{
			data.Caret.IsInsertMode = !data.Caret.IsInsertMode;
			data.UpdateLine (data.Caret.Line);
		}
		public static void SwitchSide (HexEditorData data)
		{
			data.Caret.InTextEditor = !data.Caret.InTextEditor;
			data.UpdateLine (data.Caret.Line);
		}