diff --git a/Makefile b/Makefile index 1cff9c6..91ca9af 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ INSTALL_PATH="/usr/local/bin" PKGTITLE="mysides" -PKGVERSION=1.0.1 +PKGVERSION=1.0.2 PKGID=com.github.mosen.mysides ################################################# diff --git a/README.md b/README.md index 9361b6b..681fb2e 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,7 @@ # mysides # -A simple CLI tool for Finder sidebar modification. +A simple CLI tool for Finder Sidebar modification. -**NOTE**: I clobbered this together with very little experience in C/CoreFoundation, as a result the code may be horrible. - -**NOTE*: Using Versions 10.11 El Capitan or 10.12 Sierra, you can also use `sfltool` to achieve similar things. _These options were removed in 10.13 High Sierra onwards [*][1013-regression]._ Example: - - $ sfltool add-item com.apple.LSSharedFileList.FavoriteItems file:///Path/To/Sidebar/Folder ## Usage ## @@ -18,9 +13,9 @@ Append a new item to the end of a list: mysides add example file:///Users/Shared/example -Insert a new item at the start of the list: +Remove all sidebar favorites - mysides insert example file:///Users/Shared/example + mysides clear Remove the item (by name): diff --git a/mysides.xcodeproj/project.pbxproj b/mysides.xcodeproj/project.pbxproj index fe25bd7..f264c95 100644 --- a/mysides.xcodeproj/project.pbxproj +++ b/mysides.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 60; objects = { /* Begin PBXBuildFile section */ @@ -78,7 +78,9 @@ 34E12B9F1D5AB324008B512A /* Tests */, 34B1548C1A01BCAB007920BB /* Products */, ); + indentWidth = 2; sourceTree = ""; + tabWidth = 2; }; 34B1548C1A01BCAB007920BB /* Products */ = { isa = PBXGroup; @@ -141,7 +143,8 @@ 34B154831A01BCAB007920BB /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0720; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1520; ORGANIZATIONNAME = com.github.mosen; TargetAttributes = { 34B1548A1A01BCAB007920BB = { @@ -153,11 +156,12 @@ }; }; buildConfigurationList = 34B154861A01BCAB007920BB /* Build configuration list for PBXProject "mysides" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + compatibilityVersion = "Xcode 15.0"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); mainGroup = 34B154821A01BCAB007920BB; productRefGroup = 34B1548C1A01BCAB007920BB /* Products */; @@ -208,24 +212,39 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -238,7 +257,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -249,31 +268,46 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = YES; + DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; }; @@ -283,6 +317,8 @@ isa = XCBuildConfiguration; buildSettings = { CURRENT_PROJECT_VERSION = 1.0.2; + DEAD_CODE_STRIPPING = YES; + MACOSX_DEPLOYMENT_TARGET = 14.2; PRODUCT_NAME = mysides; SDKROOT = macosx; }; @@ -292,6 +328,8 @@ isa = XCBuildConfiguration; buildSettings = { CURRENT_PROJECT_VERSION = 1.0.2; + DEAD_CODE_STRIPPING = YES; + MACOSX_DEPLOYMENT_TARGET = 14.2; PRODUCT_NAME = mysides; SDKROOT = macosx; }; @@ -303,11 +341,16 @@ CLANG_ANALYZER_NONNULL = YES; CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; + DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = dwarf; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Tests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; PRODUCT_BUNDLE_IDENTIFIER = com.github.mosen.Tests; PRODUCT_NAME = "$(TARGET_NAME)"; }; @@ -320,10 +363,15 @@ CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = Tests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; PRODUCT_BUNDLE_IDENTIFIER = com.github.mosen.Tests; PRODUCT_NAME = "$(TARGET_NAME)"; }; diff --git a/mysides.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mysides.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/mysides.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/src/main.m b/src/main.m index 4d150ae..c4d480c 100644 --- a/src/main.m +++ b/src/main.m @@ -8,200 +8,149 @@ #import #import +// Function prototypes extern CFTypeRef LSSharedFileListItemCopyAliasData(LSSharedFileListItemRef inItem); extern int _IconRefIsTemplate(IconRef iconRef); -void print_help(char const *arg0) -{ - printf("Usage: %s list|add |remove \n\n", arg0); - printf("\t list - list sidebar items\n"); - printf("\t add - append a sidebar item to the end of the list\n"); - //printf("\t\tinsert [before]\t- insert a sidebar item at the start of the list, or before the given name\n"); - printf("\t remove - remove a sidebar item\n"); - printf("\t version - display the version\n\n"); +// Function declarations +void ListSidebarItems(); +void ClearSidebarItems(); +void AddSidebarItem(NSString *itemName, NSURL *itemURL); +void RemoveSidebarItem(NSString *itemName); +LSSharedFileListItemRef FindItemByName(NSArray *items, NSString *itemToFind); +NSArray* ValidateSideBarList(LSSharedFileListRef sharedFileList); +BOOL ValidArguments(int argc, const char *argv[]); +void PrintUsage(char const *arg0); + + +// Main entry point for the program +int main(int argc, const char *argv[]) { + if (!ValidArguments(argc, argv)) { + return 1; + } + + NSString *command = [NSString stringWithUTF8String:argv[1]]; + if ([command isEqualToString:@"list"]) { + ListSidebarItems(); + } else if ([command isEqualToString:@"clear"]) { + ClearSidebarItems(); + } else if ([command isEqualToString:@"add"]) { + NSString *itemName = [NSString stringWithUTF8String:argv[2]]; + NSURL *itemURL = [NSURL URLWithString:[NSString stringWithUTF8String:argv[3]]]; + AddSidebarItem(itemName, itemURL); + } else if ([command isEqualToString:@"remove"]) { + NSString *itemName = [NSString stringWithUTF8String:argv[2]]; + RemoveSidebarItem(itemName); + } else { + printf("Error: Unknown command '%s'\n", argv[1]); + PrintUsage(argv[0]); + return 1; + } } -void print_version(char const *arg0) -{ - printf("mysides v"); +// Show all items in the sidebar +void ListSidebarItems() { + LSSharedFileListRef sharedFileList = LSSharedFileListCreate(NULL, kLSSharedFileListFavoriteItems, NULL); + NSArray *items = ValidateSideBarList(sharedFileList); + + for (id item in items) { + LSSharedFileListItemRef itemRef = (__bridge LSSharedFileListItemRef)item; + CFStringRef displayName = LSSharedFileListItemCopyDisplayName(itemRef); + CFURLRef itemURL = LSSharedFileListItemCopyResolvedURL(itemRef, kLSSharedFileListNoUserInteraction | kLSSharedFileListDoNotMountVolumes, NULL); + printf("%s -> %s\n", + [(NSString *)CFBridgingRelease(displayName) UTF8String], + itemURL ? [(NSString *)CFBridgingRelease(CFURLGetString(itemURL)) UTF8String] : "NOT FOUND"); + if (itemURL) CFRelease(itemURL); + } + + CFRelease(sharedFileList); } -// Find shared file list item by its display name -// Not responsible for allocating or releasing the list reference. -id find_itemname(LSSharedFileListRef sflRef, NSString *name) -{ - UInt32 seed; - NSArray *list = CFBridgingRelease(LSSharedFileListCopySnapshot(sflRef, &seed)); - - for(NSObject *obj in list) { - LSSharedFileListItemRef sflItemRef = (__bridge LSSharedFileListItemRef)obj; - CFStringRef nameRef = LSSharedFileListItemCopyDisplayName(sflItemRef); - if (CFStringCompare(nameRef, (__bridge CFStringRef)name, 0) == 0) { - if (nameRef) CFRelease(nameRef); - return (__bridge id)(sflItemRef); - } - if (nameRef) CFRelease(nameRef); - } - return nil; +// Remove all items from the sidebar +void ClearSidebarItems() { + LSSharedFileListRef sharedFileList = LSSharedFileListCreate(NULL, kLSSharedFileListFavoriteItems, NULL); + LSSharedFileListRemoveAllItems(sharedFileList); + CFRelease(sharedFileList); + printf("Removed all sidebar items. \n"); } // Append an item to the sidebar -// Return the new index of the item added. -int sidebar_add(NSString *name, NSURL *uri, id after) -{ - LSSharedFileListRef sflRef = LSSharedFileListCreate(kCFAllocatorDefault, kLSSharedFileListFavoriteItems, NULL); - if (!sflRef) { - printf("Unable to create sidebar list, LSSharedFileListCreate() fails."); - return 2; - } - - LSSharedFileListInsertItemURL(sflRef, kLSSharedFileListItemLast, (__bridge CFStringRef)name, NULL, (__bridge CFURLRef)uri, NULL, NULL); - CFRelease(sflRef); - printf("Added sidebar item with name: %s\n", [name UTF8String]); - return 0; +void AddSidebarItem(NSString *itemName, NSURL *itemURL) { + LSSharedFileListRef sharedFileList = LSSharedFileListCreate(NULL, kLSSharedFileListFavoriteItems, NULL); + LSSharedFileListInsertItemURL(sharedFileList, kLSSharedFileListItemLast, (__bridge CFStringRef)itemName, NULL, (__bridge CFURLRef)itemURL, NULL, NULL); + CFRelease(sharedFileList); + printf("Added sidebar item: %s\n", [itemName UTF8String]); } -// Remove named item from the sidebar -int sidebar_remove(NSString *name, NSURL *uri) -{ - LSSharedFileListRef sflRef = LSSharedFileListCreate(kCFAllocatorDefault, kLSSharedFileListFavoriteItems, NULL); - if (!sflRef) { - printf("Unable to create sidebar list, LSSharedFileListCreate() fails."); - return 2; - } - - UInt32 seed; - // Grab list snapshot for enumeration - NSArray *list = CFBridgingRelease(LSSharedFileListCopySnapshot(sflRef, &seed)); - - if ([[name lowercaseString] isEqualToString: @"all"]) { - LSSharedFileListRemoveAllItems(sflRef); - CFRelease(sflRef); - - return 0; - } else { - printf("neq all\n"); - - for(NSObject *obj in list) { - LSSharedFileListItemRef sflItemRef = (__bridge LSSharedFileListItemRef)obj; - CFStringRef nameRef = LSSharedFileListItemCopyDisplayName(sflItemRef); - CFURLRef urlRef = NULL; - LSSharedFileListItemResolve(sflItemRef, kLSSharedFileListNoUserInteraction | kLSSharedFileListDoNotMountVolumes, &urlRef, NULL); - - // Found item: remove - if (CFStringCompare(nameRef, (__bridge CFStringRef)name, 0) == 0) { - LSSharedFileListItemRemove(sflRef, sflItemRef); - CFRelease(sflRef); - printf("Removed sidebar item with name: %s\n", [(NSString *) CFBridgingRelease(nameRef) UTF8String]); - return 0; - } - if (nameRef) CFRelease(nameRef); - } - } - - printf("Could not find sidebar item with display name: %s\n", [name UTF8String]); - CFRelease(sflRef); - return 1; +// Remove item from the sidebar +void RemoveSidebarItem(NSString *itemName) { + LSSharedFileListRef sharedFileList = LSSharedFileListCreate(NULL, kLSSharedFileListFavoriteItems, NULL); + NSArray *items = ValidateSideBarList(sharedFileList); + LSSharedFileListItemRef itemToRemove = FindItemByName(items, itemName); + + if (itemToRemove != NULL) { + LSSharedFileListItemRemove(sharedFileList, itemToRemove); + CFRelease(sharedFileList); + printf("Removed Sidebar item with name: %s\n", [itemName UTF8String]); + } else { + printf("Could not find sidebar item with name: %s\n", [itemName UTF8String]); + CFRelease(sharedFileList); + } } -int sidebar_insert(NSString *name, NSURL *uri, id before) -{ - LSSharedFileListRef sflRef = LSSharedFileListCreate(kCFAllocatorDefault, kLSSharedFileListFavoriteItems, NULL); - if (!sflRef) { - printf("Unable to create sidebar list, LSSharedFileListCreate() fails."); - return 2; +// Find an item in the list by name +LSSharedFileListItemRef FindItemByName(NSArray *items, NSString *itemToFind) { + for (id item in items) { + LSSharedFileListItemRef sharedFileListRef = (__bridge LSSharedFileListItemRef)item; + CFStringRef itemNameCFRef = LSSharedFileListItemCopyDisplayName(sharedFileListRef); + NSString *itemName = (__bridge_transfer NSString *)itemNameCFRef; + if ([itemName isEqualToString:itemToFind]) { + return sharedFileListRef; } - - LSSharedFileListInsertItemURL(sflRef, kLSSharedFileListItemBeforeFirst, (__bridge CFStringRef)name, NULL, (__bridge CFURLRef)uri, NULL, NULL); - CFRelease(sflRef); - printf("Inserted sidebar item at begining of list with name: %s\n", [name UTF8String]); - return 0; + } + + return NULL; } -void sidebar_list() -{ - LSSharedFileListRef sflRef = LSSharedFileListCreate(kCFAllocatorDefault, kLSSharedFileListFavoriteItems, NULL); - UInt32 seed; - - if(!sflRef) { - printf("No list!"); - return; - } - - // Grab list snapshot for enumeration - NSArray *list = CFBridgingRelease(LSSharedFileListCopySnapshot(sflRef, &seed)); - - for(NSObject *object in list) { - LSSharedFileListItemRef sflItemRef = (__bridge LSSharedFileListItemRef)object; - CFStringRef nameRef = LSSharedFileListItemCopyDisplayName(sflItemRef); - CFURLRef urlRef = NULL; - // LSSharedFileListItemResolve(sflItemRef, kLSSharedFileListNoUserInteraction | kLSSharedFileListDoNotMountVolumes, &urlRef, NULL); - urlRef = LSSharedFileListItemCopyResolvedURL(sflItemRef, kLSSharedFileListNoUserInteraction | kLSSharedFileListDoNotMountVolumes, NULL); - - if (urlRef == NULL) { - printf("%s -> NOTFOUND\n", - [(NSString *) CFBridgingRelease(nameRef) UTF8String]); - } else { - printf("%s -> %s\n", - [(NSString *) CFBridgingRelease(nameRef) UTF8String], - [(NSString *) CFBridgingRelease(CFURLGetString(urlRef)) UTF8String]); - } - } - - CFRelease(sflRef); +// Validate the sidebar list exists and is not empty +NSArray* ValidateSideBarList(LSSharedFileListRef sharedFileList) { + NSArray *items = CFBridgingRelease(LSSharedFileListCopySnapshot(sharedFileList, NULL)); + if (items.count == 0) { + // The list is empty + printf("The Sidebar is empty.\n"); + exit(1); // exit with error + } + return items; } +// Validate the command line arguments +BOOL ValidArguments(int argc, const char *argv[]) { + if (argc < 2) { + printf("Error: Missing command.\n"); + PrintUsage(argv[0]); + return NO; + } + + NSString *command = [NSString stringWithUTF8String:argv[1]]; + if ([command isEqualToString:@"add"] && (argc < 4)) { + printf("Error: Missing folder name or folder path.\nUsage: mysides add my_folder file:///Users/my_username/my_folder\n"); + return NO; + } + + if ([command isEqualToString:@"remove"] && (argc < 3)) { + printf("Error: Missing folder name.\nUsage: mysides remove my_folder\n"); + return NO; + } + + return YES; +} -int main (int argc, char const *argv[]) -{ - if(argc >= 2) { - if (strcmp(argv[1], "list") == 0) { - sidebar_list(); - return 0; - } - - if (strcmp(argv[1], "add") == 0) { - if (! argv[2] ) { - printf("No display name supplied to add!"); - return 1; - } - if (! argv[3] ) { - printf("No path supplied to add!"); - return 1; - } - NSString *name = [NSString stringWithUTF8String:argv[2]]; - NSURL *uri = [NSURL URLWithString:[NSString stringWithUTF8String:argv[3]]]; - - return sidebar_add(name, uri, nil); - } - - if (strcmp(argv[1], "insert") == 0) { - if (! argv[2] ) { - printf("No display name supplied to insert!"); - return 1; - } - if (! argv[3] ) { - printf("No path supplied to insert!"); - return 1; - } - NSString *name = [NSString stringWithUTF8String:argv[2]]; - NSURL *uri = [NSURL URLWithString:[NSString stringWithUTF8String:argv[3]]]; - - return sidebar_insert(name, uri, nil); - } - - if (strcmp(argv[1], "remove") == 0) { - if (strlen(argv[2]) == 0) { - printf("No name supplied to remove!\n"); - return 1; - } - NSString *name = [NSString stringWithUTF8String:argv[2]]; - NSURL *uri = [NSURL URLWithString:@"file:///"]; // temporary not used - return sidebar_remove(name, uri); - } - } else { - print_help(argv[0]); - return 1; - } - return 0; +// Print the usage +void PrintUsage(char const *arg0) { + printf("Usage: %s list|add |remove \n\n", arg0); + printf("\t list - Lists sidebar items\n"); + printf("\t add - Appends a sidebar item to the end of the list\n"); + printf("\t remove - Removes a sidebar item\n"); + printf("\t clear - Removes all sidebar items\n"); + printf("\t version - display the version\n\n"); }