[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RP] gdelete command
From: |
Rupert Levene |
Subject: |
[RP] gdelete command |
Date: |
Tue Jun 24 03:15:07 2003 |
User-agent: |
Mutt/1.5.3i |
Here's a patch that adds a gdelete command which deletes groups.
Index: actions.c
===================================================================
RCS file: /cvsroot/ratpoison/ratpoison/src/actions.c,v
retrieving revision 1.174
diff -u -r1.174 actions.c
--- actions.c 23 Jun 2003 01:39:43 -0000 1.174
+++ actions.c 24 Jun 2003 10:02:45 -0000
@@ -106,6 +106,7 @@
{"groups", cmd_groups, arg_VOID},
{"gmove", cmd_gmove, arg_VOID},
{"gmerge", cmd_gmerge, arg_VOID},
+ {"gdelete", cmd_gdelete, arg_VOID},
/* Commands to set default behavior. */
{"defbargravity", cmd_defbargravity, arg_STRING},
@@ -3638,6 +3639,39 @@
groups_merge (g, rp_current_group);
else
message (" gmerge: Cannot find group ");
+
+ return NULL;
+}
+
+char *
+cmd_gdelete (int interactive, char *data)
+{
+ rp_group *g;
+
+ if (data == NULL)
+ g = rp_current_group;
+ else
+ {
+ g = find_group (data);
+ if (!g)
+ {
+ message (" gdelete: cannot find group ");
+ return NULL;
+ }
+ }
+
+ switch ( group_delete_group(g) ) {
+ case GROUP_DELETE_GROUP_OK:
+ break;
+ case GROUP_DELETE_GROUP_NONEMPTY:
+ message (" gdelete: non-empty group ");
+ break;
+ case GROUP_DELETE_GROUP_ONLY:
+ message (" gdelete: cannot delete only group ");
+ break;
+ default:
+ message (" gdelete: bizarre error (this shouldn't happen) ");
+ }
return NULL;
}
Index: actions.h
===================================================================
RCS file: /cvsroot/ratpoison/ratpoison/src/actions.h,v
retrieving revision 1.62
diff -u -r1.62 actions.h
--- actions.h 25 May 2003 11:01:25 -0000 1.62
+++ actions.h 24 Jun 2003 10:02:45 -0000
@@ -79,6 +79,7 @@
char *cmd_fselect (int interactive, char *data);
char *cmd_getenv (int interactive, char *data);
char *cmd_gmerge (int interactive, char *data);
+char *cmd_gdelete (int interactive, char *data);
char *cmd_gmove (int interactive, char *data);
char *cmd_gnew (int interactive, char *data);
char *cmd_gnewbg (int interactive, char *data);
Index: group.c
===================================================================
RCS file: /cvsroot/ratpoison/ratpoison/src/group.c,v
retrieving revision 1.6
diff -u -r1.6 group.c
--- group.c 2 Jun 2003 22:49:36 -0000 1.6
+++ group.c 24 Jun 2003 10:02:45 -0000
@@ -91,6 +91,32 @@
return g;
}
+int
+group_delete_group (rp_group *g)
+{
+ if ( list_empty (&(g->mapped_windows))
+ && list_empty (&(g->unmapped_windows)) )
+ {
+ int group_count = list_count (&rp_groups);
+ if (group_count > 1)
+ {
+ /* we can safely delete the group */
+ if (g == rp_current_group)
+ rp_current_group = group_next_group ();
+
+ list_del (&(g->node));
+ group_free (g);
+ return GROUP_DELETE_GROUP_OK;
+ }
+ else
+ return GROUP_DELETE_GROUP_ONLY;
+ }
+ else
+ {
+ return GROUP_DELETE_GROUP_NONEMPTY;
+ }
+}
+
rp_group *
group_next_group ()
{
Index: group.h
===================================================================
RCS file: /cvsroot/ratpoison/ratpoison/src/group.h,v
retrieving revision 1.4
diff -u -r1.4 group.h
--- group.h 27 May 2003 18:46:34 -0000 1.4
+++ group.h 24 Jun 2003 10:02:45 -0000
@@ -1,12 +1,17 @@
#ifndef GROUP_H
#define GROUP_H
+#define GROUP_DELETE_GROUP_OK 0
+#define GROUP_DELETE_GROUP_NONEMPTY 1
+#define GROUP_DELETE_GROUP_ONLY 2
+
void init_groups ();
void free_groups();
void group_add_window (rp_group *g, rp_window *w);
void group_resort_window (rp_group *g, rp_window_elem *w);
void group_free (rp_group *g);
+int group_delete_group (rp_group *g);
rp_group *group_new (int number, char *name);
void group_del_window (rp_group *g, rp_window *win);
Index: linkedlist.c
===================================================================
RCS file: /cvsroot/ratpoison/ratpoison/src/linkedlist.c,v
retrieving revision 1.1
diff -u -r1.1 linkedlist.c
--- linkedlist.c 20 May 2003 07:20:16 -0000 1.1
+++ linkedlist.c 24 Jun 2003 10:02:45 -0000
@@ -164,3 +164,20 @@
INIT_LIST_HEAD(list);
}
}
+
+/**
+ * list_count - returns the number of items in a list
+ * @head: the list to test.
+ */
+int
+list_count(struct list_head *head)
+{
+ int i=0;
+ struct list_head *ptr = head->next;
+ while (ptr != head)
+ {
+ ++i;
+ ptr = ptr->next;
+ }
+ return i;
+}
Index: linkedlist.h
===================================================================
RCS file: /cvsroot/ratpoison/ratpoison/src/linkedlist.h,v
retrieving revision 1.5
diff -u -r1.5 linkedlist.h
--- linkedlist.h 27 May 2003 07:51:07 -0000 1.5
+++ linkedlist.h 24 Jun 2003 10:02:45 -0000
@@ -41,6 +41,7 @@
struct list_head *head);
int list_empty(struct list_head *head);
+int list_count (struct list_head *head);
void list_move_tail(struct list_head *list,
struct list_head *head);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [RP] gdelete command,
Rupert Levene <=