Posted by: Clark
« on: August 30, 2007, 03:09:13 PM »
Backup your bookmark.e and replace the function below with this code for V12.03. The load the new bookmark.e (Macro, Load Module). It is much more optimized that the current bookmark auto-restore code.
_str _sr_bookmark2(_str option='',_str info='')
{
typeless vsbmflags=0;
typeless Nofbookmarks=0;
int i=0;
_str line='';
typeless BookmarkName='';
typeless markid='';
typeless bufid=0;
typeless RealLineNumber=0;
typeless col=0;
typeless BeginLineROffset=0;
typeless LineData='';
typeless Filename='';
typeless DocumentName='';
if ((!def_use_workspace_bm) && //If we're using global bookmarks ...
(p_buf_name :== "")) { //if p_buf_name is not set, it's not vrestore.slk
return (0);
}
if ( option=='R' || option=='N' ) {
clear_bookmarks("quiet");
parse info with Nofbookmarks .;
for (i=1; i<=Nofbookmarks ; ++i) {
down();
get_line(line);
parse line with BookmarkName \1 vsbmflags \1 RealLineNumber \1 col \1 BeginLineROffset \1 LineData \1 Filename \1 DocumentName;
if (def_bm_show_picture) {
vsbmflags |= (VSBMFLAG_SHOWNAME|VSBMFLAG_SHOWPIC);
} else {
vsbmflags &= ~(VSBMFLAG_SHOWNAME|VSBMFLAG_SHOWPIC);
}
markid=_alloc_selection('B');
int temp_view_id;
int orig_view_id;
int status = _open_temp_view(Filename,temp_view_id,orig_view_id,'+b');
if (status) {
_BookmarkAdd(BookmarkName,markid,vsbmflags,RealLineNumber,col,
BeginLineROffset,LineData,Filename,DocumentName);
} else {
_str on,value;
parse def_max_loadall with on value;
if (RealLineNumber>=0 && !(on && isinteger(value) && BeginLineROffset>value)) {
p_RLine=RealLineNumber;
} else {
_GoToROffset(BeginLineROffset);
}
p_col=col;
_select_char(markid);
_BookmarkAdd(BookmarkName,markid,vsbmflags);
_delete_temp_view(temp_view_id);
activate_window(orig_view_id);
}
}
updateBookmarksToolWindow(0);
} else {
insert_line("");
int orig_line=p_line;
Nofbookmarks=0;
for (i=0;i<_BookmarkQCount();++i) {
_BookmarkGetInfo(i,BookmarkName,markid,vsbmflags,
bufid,
0,RealLineNumber,col,BeginLineROffset,LineData,
Filename,DocumentName);
if (!(vsbmflags & VSBMFLAG_STANDARD)) {
continue;
}
++Nofbookmarks;
LineData=stranslate(LineData,"",\1);
LineData=stranslate(LineData,"","\n");
insert_line(BookmarkName \1 vsbmflags \1 RealLineNumber \1 col \1 BeginLineROffset \1 LineData \1 Filename \1 DocumentName);
}
int orig_line2=p_line;
p_line=orig_line;
replace_line("BOOKMARK2: "Nofbookmarks);
p_line=orig_line2;
//get_line(line);
//_message_box(line);
}
return (0);
}