25 Throwaway Macros

Monday, May 18, 2009 0 comments

How many lines of good Slick-C macros wind up in the bit dumpster every day because we can't be bothered to name the macro, shove it into a file, stick the file in a folder and make it available for others to share?

Some, maybe? Below I present 25 of my throwaway macros. Maybe you'll find something of interest here. Some of the macros are simple Slick-C batch files which I created to use in my work. Others are simple macros that I wrote or cobbled together for one reason or another.

Side Note: Occasionally, you'll see line breaks in unusual places in a command or line of code, like this:

_command void html_validator_preview()

name_info(','VSARG2_MARK|VSARG2_READ_ONLY|
VSARG2_REQUIRES_EDITORCTL)


This is necessary because Blogger apparently truncates, without a line break,
code on the right side of the blog at approx. column 54 and buries the
rest of the line on the right where it can't be seen. Unfortunately, this means
that we must hand-edit nearly every line of code to ensure that the lines are not
too long for Blogger.

So I have to put a lot of line breaks into the code just so people can actually
read it and possibly benefit from it.
I do not use continuation characters at
the end of the lines because they are not necessary for display and might make
the code more confusing.
If anyone knows what I'm doing wrong, please
post a note or send me an email.


Additionally, Slickedit seems to have added a lot of new commands or functions
in the last few major version upgrades. This is highly commendable, especially
since much of the new code consists of simple commands that, in my opinion,
should have existed long ago. It's possible that some of the commands below
duplicate some of the new Slick-C commands.

Here are your throwaways.

// Move cursor to end of line, add a

// space, and join with next line.

// Should intelligently remove any extra
// spaces at the end of the
top line
_command dh_bring_up, join_line_with_space()
name_info
(','VSARG2_REQUIRES_EDITORCTL)
{
save_pos(p);
end_line();
last_event(name2event(' '));maybe_complete();
linewrap_delete_char();
restore_pos(p);
}

// Open current file in external program
// CSE HTML Validator and proceed to
// validate with the current Slickedit file in
_command void html_validator_preview()
name_info(','VSARG2_MARK|VSARG2_READ_ONLY|
VSARG2_REQUIRES_EDITORCTL)

{
_str filename=p_buf_name;
shell("F:\\Software\\CSE_HTMLValidator80\\
cmdlineprocessor.exe -o "
filename);
}


// Balance_windows: Neatens up two MDI windows
// by making the two windows the same height
// and width. Makes
adjacent windows snug
// like they look right after
you split a
// window. Based on a routine from emacs
// emulation.

//
// This macro currently doesn't work on
// more than two MDI windows
at once. If
// you do execute the command with more than 2

// windows open, multiple windows will be
// displayed at once, instead of two windows
// balanced next to each other.
/
// Returns: 0 if the windows were
// resized, otherwise 1.

_command int balance_windows()
name_info
(','VSARG2_READ_ONLY|VSARG2_ICON|
VSARG2_REQUIRES_MDI_EDITORCTL
|VSARG2_REQUIRES_MDI)
{
if (_no_child_windows()) {
// No child windows, so they can't be balanced.
return(1);
}
if (_mdi.p_child.p_window_state:=='M') {
message('Only one visible window');
return(1);
}
int count;
int orig_wid;
orig_wid=p_window_id;

count=0;
do {
next_window();
count++;
} while ( p_window_id!=orig_wid );
if (count>1 && count <4) {
_no_resize=1;
tile_windows('h');
_no_resize='';
return(0);
} else {
if (count>=4) {
letter=letter_prompt('More than three '\\'
windows active. Tile them? (y/n/q)'
,'YNQ');
if (upcase(letter)=='Y') {
tile_windows('h');
return(0);
}
}
}
return(1);
}


// example of using filter selection
_command test_filter()
{
if (select_active()) {
lock_selection();
_end_select();
end_line=p_line;
_begin_select();
filter_init();
while (p_line<end_line) {
filt_status=filter_get_string(text);
if (!(_lineflags() & HIDDEN_LF)) {
messageNwait('p_line 'p_line' VIS,
text= '
text' filt_status= 'filt_status);
} else {
messageNwait('line 'p_line ' is HIDDEN');
}
}
filter_restore_pos();
}
}

// run external cmd unh.exe on html file in
// current buffer
and display in
// new/current window

_command unhtm()
name_info
(','VSARG2_REQUIRES_EDITORCTL)
{
html_fid=p_buf_name;
txt_fid=html_fid:+'.txt'
shell('unh.exe ' html_fid txt_fid);
e(txt_fid);
}
// if arg appears in current line, just delete
// that line

_command del(...) name_info(','VSARG2_REQUIRES_EDITORCTL)
{
// requires a line target
searchstr=arg(1); // TODO: differentiate bet
// numeric & string arg

parse searchstr with delim +1 sstring(delim)opts
save_pos(p);
select_line();
status=search(sstring, 'e>':+opts);
cursor_up();
select_line()
delete_selection();
restore_pos(p);
}

// Show count of hidden lines in a
// selective display

_command count_hidden_lines()
{
NoflinesShown0=((p_Noflines)-p_Nofhidden);
message( NoflinesShown0' visible (selected) lines,
p_Noflines= '
p_Noflines'; p_Nofhidden = 'p_Nofhidden);
}

// insert a horizontal separator line
// consisting of any character
selected
// on being prompted

_command insert_separator(...)
name_info
(',' VSARG2_READ_ONLY|
VSARG2_REQUIRES_EDITORCTL)

{
parse p_margins with left_ma right_ma new_para_ma;
if (arg(1)=='') {
message('Type a separator character');
key=get_event();

if (event2name(key)=='ESC') {
clear_message();
stop;
}

sepchar=event2name(key);
} else {
sepchar=arg(1);
}
textstr=substr('',1,right_ma,sepchar);
insert_line(textstr);
insert_line('');
down();
clear_message();
}

// expands selective display on selected
// (marked) lines

_command expand_selected()
{
// TODO: test for select_active()
end_select();
selend=p_line;
begin_select();
selbegin=p_line;
row_count=(selend - selbegin + 1);
for (i=0;i<=row_count;++i) {
_lineflags(0,PLUSBITMAP_LF|MINUSBITMAP_LF|
HIDDEN_LF
|LEVEL_LF);
down();
}
message('Expanded ' selbegin ' through ' selend);
// might detect + lines and msg
// which ones were expanded

}

// Toggle selective display of all
// _commands in vusrmacs.e or any other file.

// I use this macro frequently, whenever
// I want a quick overview of all my commands by

// name
_command show_commands,cmds()
name_info
(','VSARG2_MARK|VSARG2_REQUIRES_EDITORCTL|
VSARG2_READ_ONLY
|VSARG2_REQUIRES_TAGGING)
{
// show all section headers and _commands
all('(^_command|^/\* \<-|/\*\>)','r');
// all('^_command', 'r');
}


// get mark_id for selection in another buffer
_command get_mark_id()
{
if (!select_active()) {
message(get_message(TEXT_NOT_SELECTED_RC));
} else {
mark_id=_alloc_selection();
message('mark_id= 'mark_id);
if (mark_id<0) {
message(get_message(mark_id));
return(mark_id);
}
}
}

// is selection hidden?
// to fix: hide_selection currently deselects after hiding,
// so there's no selection here to check for to toggle
_command is_selhid()
name_info(','VSARG2_EDITORCTL|VSARG2_READ_ONLY|VSARG2_REQUIRES_AB_SELECTION|VSARG2_REQUIRES_MDI_EDITORCTL|VSARG2_MARK|VSARG2_REQUIRES_EDITORCTL)
{
if (!select_active()) {
message get_message(TEXT_NOT_SELECTED_RC);
stop;
}
mark_id=_alloc_selection();
_get_selinfo(start_col, end_col, dummy);
NofSelectedLines=count_lines_in_selection();
NofSelectedCols=(end_col - start_col);
begin_select();
topline=p_line;
end_select();
botline=p_line;
sticky_message('Marked block:
rows='
NofSelectedLines', cols='NofSelectedCols',
left='
start_col', right='end_col', top='topline',
bot='
botline);

goto_line(topline);

if (!(_lineflags() & HIDDEN_LF)) {
messageNwait("topline not hidden");
} else {
messageNwait('is_selhid: topline is hidden');
}

goto_line(botline);

if (!(_lineflags() & HIDDEN_LF)) {
messageNwait("botline not hidden");
} else {
messageNwait('is_selhid: botline is hidden');
}
}


// add toggle ability to select_all key
_command select_all_toggle()
name_info
(','VSARG2_REQUIRES_EDITORCTL)
{
if (!select_active()) {
select_all();
} else {
deselect();
}
}

// append a cmd to end of ".command" retrieve buffer
_command append_retrieve_buffer()
name_info(','VSARG2_CMDLINE|VSARG2_ICON|
VSARG2_REQUIRES_EDITORCTL
|VSARG2_READ_ONLY)

{
if (!command_state()) {
cmdline_toggle();
}
get_command(text);
append_retrieve_command(text);
set_command('',1);
}


GlossyBlue Blogger by Black Quanta. Theme & Icons by N.Design Studio
Entries RSS Comments RSS