From ae5184f5195ca6b5e1ff852b97f624ef52e10a15 Mon Sep 17 00:00:00 2001 From: jiacai2050 Date: Sun, 27 Nov 2022 21:01:04 +0800 Subject: [PATCH] add omg_repo_star interactive method --- emacs/emacs.c | 17 +++++++++++++++++ emacs/omg-repo.el | 21 +++++++++++++-------- tests/build.zig | 2 +- tests/main.zig | 8 ++++---- 4 files changed, 35 insertions(+), 13 deletions(-) diff --git a/emacs/emacs.c b/emacs/emacs.c index cd46f3a..d5316e6 100644 --- a/emacs/emacs.c +++ b/emacs/emacs.c @@ -310,6 +310,20 @@ emacs_value omg_dyn_unstar_repo(emacs_env *env, ptrdiff_t nargs, return Qt; } +emacs_value omg_dyn_star_repo(emacs_env *env, ptrdiff_t nargs, + emacs_value *args, void *data) { + ENSURE_SETUP(env); + omg_auto_char repo_full_name = get_string(env, args[0]); + ENSURE_NONLOCAL_EXIT(env); + + omg_error err = omg_star_repo(ctx, repo_full_name); + if (!is_ok(err)) { + return lisp_funcall(env, "error", lisp_string(env, (char *)err.message)); + } + + return Qt; +} + emacs_value omg_dyn_delete_gist(emacs_env *env, ptrdiff_t nargs, emacs_value *args, void *data) { ENSURE_SETUP(env); @@ -771,6 +785,9 @@ int emacs_module_init(runtime ert) { lisp_funcall(env, "fset", lisp_symbol(env, "omg-dyn-unstar-repo"), env->make_function(env, 1, 1, omg_dyn_unstar_repo, "Unstar repository", NULL)); + lisp_funcall(env, "fset", lisp_symbol(env, "omg-dyn-star-repo"), + env->make_function(env, 1, 1, omg_dyn_star_repo, + "Star repository", NULL)); lisp_funcall( env, "fset", lisp_symbol(env, "omg-dyn-delete-gist"), diff --git a/emacs/omg-repo.el b/emacs/omg-repo.el index ea8731d..58526da 100644 --- a/emacs/omg-repo.el +++ b/emacs/omg-repo.el @@ -80,6 +80,12 @@ (tabulated-list-print t) (switch-to-buffer (current-buffer)))) +(defun omg-repo-star (full-name) + "Star repository at point." + (interactive (list (omg-repo--get-full-name))) + (omg-dyn-star-repo full-name) + (message "Starred %s" full-name)) + (defun omg-repo--revert (&optional revert) (setq omg-repo--query-keyword "") (setq omg-repo--query-language "")) @@ -102,6 +108,7 @@ (define-key map (kbd "b") 'omg-repo-browse) (define-key map (kbd "w") 'omg-repo-copy-url) (define-key map (kbd "s") 'omg-repo-query-repos) + (define-key map (kbd "S") 'omg-repo-star) (define-key map (kbd "r") 'omg-repo-query-releases) (define-key map (kbd "RET") 'omg-repo-query-commits) (define-key map (kbd "s-u") 'tabulated-list-revert) @@ -111,15 +118,13 @@ (define-derived-mode omg-repo-mode tabulated-list-mode "omg-repo created repos" "Manage created repositories" (omg-repo--init-repos-tabulated-list 'omg-repo--query-created)) -(defun omg-repo-unstar () +(defun omg-repo-unstar (full-name) "Unstar repository at point." - (interactive) - (if-let ((full-name (omg-repo--get-full-name))) - (when (yes-or-no-p (format "Are you really want to unstar %s?" full-name)) - (omg-dyn-unstar-repo (string-to-number (tabulated-list-get-id))) - (tabulated-list-delete-entry) - (message "Unstarred %s" full-name)) - (user-error "There is no repository at point"))) + (interactive (list (omg-repo--get-full-name))) + (when (yes-or-no-p (format "Are you really want to unstar %s?" full-name)) + (omg-dyn-unstar-repo (string-to-number (tabulated-list-get-id))) + (tabulated-list-delete-entry) + (message "Unstarred %s" full-name))) (defvar omg-repo-starred-mode-map (let ((map (make-sparse-keymap))) diff --git a/tests/build.zig b/tests/build.zig index ae2c5ee..fdfd301 100644 --- a/tests/build.zig +++ b/tests/build.zig @@ -18,7 +18,7 @@ pub fn build(b: *std.build.Builder) void { exe.addCSourceFile("../core/omg.c", &[_][]const u8{ "-std=gnu99", "-DOMG_TEST", - "-DVERBOSE", + // "-DVERBOSE", }); exe.linkSystemLibrary("sqlite3"); exe.linkSystemLibrary("libcurl"); diff --git a/tests/main.zig b/tests/main.zig index 5418805..f28af63 100644 --- a/tests/main.zig +++ b/tests/main.zig @@ -142,9 +142,9 @@ pub fn main() anyerror!void { defer clib.omg_free_context(&ctx); defer fs.deleteFileAbsolute(db_path[0..std.mem.len(db_path)]) catch {}; - // try test_download(ctx); - // try test_created_repos(ctx); - // try test_created_gists(ctx); - // try test_create_pull(ctx); + try test_download(ctx); + try test_created_repos(ctx); + try test_created_gists(ctx); + try test_create_pull(ctx); try test_star_repo(ctx); }