# Project Browsing Macros #v2.1 # Add ability to remove file from project # initialize global variables $def_project_ext = ".np" $def_project_dir = "/home/darren/.nedit/projects/" # an array of arrays # keys are project name data is an array of fully qualified filenames $open_projects = $empty_array #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# # prompts for project name # Returns string typed in or empty string if cancelled define project_dialog { tmpstr = string_dialog( "Project Name:", "Ok", "Cancel" ) if( $string_dialog_button != 1 ) { tmpstr = "" } return tmpstr } #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# # Select project from list # Returns project selected define project_select_dialog { # list .np files from project directory project_list = shell_command( "ls " $def_project_dir "*" $def_project_ext , "" ) # remove path and extension pjl1 = replace_in_string( project_list, $def_project_dir, "" ) project_list = replace_in_string( pjl1, ".np", "" ) if( project_list != "" ) { tmpstr = list_dialog( "Please select a project :", project_list, "Select", "Cancel" ) if( $list_dialog_button != 1 ) { tmpstr = "" } } else { dialog( "No Projects found!" ) tmpstr = "" } return tmpstr } #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# # Brings up a list of loaded projects # Returns project selected or empty if none selected define loaded_project_select_dialog { if( $open_projects[] == 0 ) { dialog( "No Projects loaded!" ) return "" # no projects } proj_name_list = "" for( proj_name in $open_projects ) { proj_name_list = proj_name_list proj_name "\n" } selected_project = list_dialog( "Loaded Projects", proj_name_list, "Select", "Dismiss" ) if( $list_dialog_button != 1 ) { selected_project = "" } return selected_project } #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# # open, delete, rename selected project projects define browse_project { project_file_name = project_select_dialog() do_open_project( project_file_name ) } #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# define delete_project { do_delete_project( project_select_dialog() ) } #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# # delete a project # $arg[ 1 ] is the Project name NOT filename define do_delete_project { if( $args[ 1 ] == "" ) { return } project_name = $args[ 1 ] delbutton = dialog( "Delete project '" project_name "', are you sure?", "OK", "Cancel" ) if( delbutton == 1 ) { shell_command( "rm " $def_project_dir project_name $def_project_ext , "" ) for( project_key in $open_projects ) { if( project_key == project_name ) # is deleted project currently loaded? { #do_close_project( project_name ) delete $open_projects[ project_name ] # remove project w/o closing files return } } } } #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# define rename_project { do_rename_project( project_select_dialog() ) } #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# # rename a project # $arg[ 1 ] is project name NOT filename define do_rename_project { if( $args[ 1 ] == "" ) { return } project_name = $args[ 1 ] renamed_project = string_dialog( "Rename project '" project_name "', to :", "OK", "Cancel" ) if( $string_dialog_button == 1 && renamed_project != "" ) { return } shell_command( "mv " $def_project_dir project_name $def_project_ext " " $def_project_dir renamed_project $def_project_ext, "" ) # if project_name is loaded swap out its loaded filelist for( project_key in $open_projects ) { if( project_key == project_name ) # project loaded? { temp_file_list = $open_projects[ project_key ] # swap out file list delete $open_projects[ project_key ] # delete old project name $open_projects[ renamed_string ] = temp_file_list # assign filelist back to renamed project return } } } #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# # opens a project by name define open_project { do_open_project( project_dialog() ) } #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# # when you open a file make sure the project is not already opened # if not put it in a new array position # Takes the project name NOT filename as argument define do_open_project { if( $args[ 1 ] == "" ) { return } project_name = $args[ 1 ] file_name = $def_project_dir project_name $def_project_ext file_data = read_file( file_name ) if( $read_status != 1 ) { dialog( "Project " file_name " not found", "Dismiss" ) } else { $open_projects[ project_name ] = $empty_array # process all data, assumes one fully qualified file name per line # skip first line, which is comment # sauter aussi la dernière ligne (\n seul) start_name = search_string( file_data, "$", 0, "regex" ) + 1 end_name = search_string( file_data, "$", start_name, "regex" ) ctr = 0 while(end_name > 0) { the_name = substring( file_data, start_name, end_name ) if( the_name != "" ) { $open_projects[ project_name ][ ctr ] = the_name open( the_name ) } start_name = end_name + 1 end_name = search_string( file_data, "$", start_name, "regex" ) ctr = ctr + 1 } } } #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# define close_project { do_close_project( loaded_project_select_dialog() ) } #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# # closes project # arg[ 1 ] is project name NOT filename define do_close_project { if( $args[ 1 ] == "" ) { return } selected_project = $args[ 1 ] # put array of files into files_in_project array files_in_project = $empty_array for( aKey in $open_projects[ selected_project ] ) { files_in_project[ aKey ] = $open_projects[ selected_project ][ aKey ] } #files_in_project = $open_projects[ selected_project ] file_index_to_delete = $empty_array for( selected_files_key in files_in_project ) # get key for each file in selected project { for( project_key in $open_projects ) # Go thru each project { if( project_key == selected_project ) # skip over current project { continue } for( files_key in $open_projects[ project_key ] ) # go thru each file in project { if( files_in_project[ selected_files_key ] == $open_projects[ project_key ][ files_key ] ) # file is in both? { # !!!!! delete'ing an index while traversing an array is apparently bad !!!!! #delete files_in_project[ selected_files_key ] file_index_to_delete[ selected_files_key ] = 0 } } } } # go thru index list and delete for( aKey in file_index_to_delete ) { delete files_in_project[ aKey ] } for( file_key in files_in_project ) # close the files { focus_window( files_in_project[ file_key ] ) close() } delete $open_projects[ selected_project ] }#define #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# # saves a project # save all currently open files to a new project define save_all_to_new_project { project_name = project_dialog() if( project_name == "" ) { return } # make sure project file doesnt exist if( project_file_exists( project_name ) == 1 && dialog( project_name " exists. Overwrite?", "Yes", "No" ) != 1 ) { return } open_files = get_open_files() create_project( project_name ) add_files_to_project( project_name, open_files ) write_project_to_file( project_name ) }#define #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# # save all currently opened files to an existing project define save_all_to_project { project_name = project_select_dialog() if( project_name == "" ) { return } open_files = get_open_files() if( project_loaded( project_name ) == 1 ) { add_files_to_project( project_name, open_files ) append_files_to_file( project_name, open_files ) } else { create_project( project_name ) add_files_to_project( project_name, open_files ) append_files_to_file( project_name, open_files ) } } #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# # select a project and save current focus file to that project define save_file_to_project { project_name = project_select_dialog() if( project_name == "" ) { return } append_file( $file_path $file_name "\n", $def_project_dir project_name $def_project_ext ) # put file in project if the project is open if( project_loaded( project_name ) == 0 ) { $open_projects[ project_name ] = $empty_array # always with the initializing of arrays file_count = $open_projects[ project_name ][] $open_projects[ project_name ][ file_count ] = $file_path $file_name } else { $open_projects[ project_name ][ 0 ] = $file_path $file_name # kind of a hack even if theres more files in project but they werent previously loaded they wont be loaded here } } #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# # type in new project name to save file in define save_file_to_new_project { project_name = project_dialog() # make sure project file doesnt exist if( project_file_exists( project_name ) == 1 && dialog( project_name " exists. Overwrite?", "Yes", "No" ) != 1 ) { return } file_name = $def_project_dir project_name $def_project_ext # write comment line, also serves to clear file write_file( "# nedit project file, DO NOT EDIT\n", file_name ) append_file( $file_path $file_name "\n", file_name ) # create new project and put file in it $open_projects[ project_name ] = $empty_array file_count = $open_projects[ project_name ][] $open_projects[ project_name ][ file_count ] = $file_path $file_name } #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# # argument is name of project to check for # returns 0 if found 1 otherwise define project_file_exists { if( $args[ 1 ] == "" ) { return 0 } project_name = $args[ 1 ] # list .np files from project directory project_list = shell_command( "ls " $def_project_dir "*" $def_project_ext , "" ) if( search_string( project_list, project_name, 0 ) == -1 ) { return 0 } return 1 } #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# # returns if 0 if not loaded, 1 if loaded a project is loaded define project_loaded { if( $args[ 1 ] == "" ) { return 0 } project_name = $args[ 1 ] # for( project_key in $open_projects ) # { # if( project_key == project_name ) # { # return 1 # } # } if( project_name in $open_projects ) { return 1 } return 0 } #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# # takes the name of project to add to list # if project exists do nothing define create_project { if( $args[ 1 ] == "" ) { return } project_name = $args[ 1 ] if( project_loaded( project_name ) == 1 ) { return } $open_projects[ project_name ] = $empty_array } #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# # takes name of project to remove from list # if project doesn't exist do nothing define remove_project { if( $args[ 1 ] == "" ) { return } project_name = $args[ 1 ] if( project_loaded() != 1 ) { return } delete $open_projects[ project_name ] } #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# # takes project and files to add to project # project MUST exist! define add_files_to_project { if( $args[ 1 ] == "" ) { return } project_name = $args[ 1 ] file_list = $empty_array file_list = $args[ 2 ] file_count = $open_projects[ project_name ][] for( file_key in file_list ) { $open_projects[ project_name ][ file_count ] = file_list[ file_key ] file_count = file_count + 1 } } #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# # takes PROJECT to write to file NOT filename # project must exist define write_project_to_file { if( $args[ 1 ] == "" ) { return } project_name = $args[ 1 ] file_name = $def_project_dir project_name $def_project_ext # write comment line, also serves to clear file write_file( "# nedit project file, DO NOT EDIT\n", file_name ) append_project_to_file( project_name ) } #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# # takes PROJECT to append to file # project and file must exist define append_project_to_file { if( $args[ 1 ] == "" ) { return } project_name = $args[ 1 ] file_name = $def_project_dir project_name $def_project_ext for( file_key in $open_projects[ project_name ] ) { append_file( $open_projects[ project_name ][ file_key ] "\n", file_name ) } } #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````# # takes project file and files to append to file # file must exist! define append_files_to_file { if( $args[ 1 ] == "" ) { return } project_name = $args[ 1 ] file_list = $empty_array file_list = $args[ 2 ] file_name = $def_project_dir project_name $def_project_ext for( file_key in file_list ) { append_file( file_list[ file_key ] "\n", file_name ) } } #`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````#