changeset 187:4ce9ff808baa

[/trunk] Changeset 199 by mikael * Add the "/buffer" command (/buffer clear, /buffer top, /buffer bottom)
author mikael
date Fri, 06 May 2005 09:35:40 +0000
parents 888ad9f15346
children 7604e3cdbb86
files mcabber/src/TODO mcabber/src/commands.c mcabber/src/compl.h mcabber/src/screen.c mcabber/src/screen.h
diffstat 5 files changed, 83 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/src/TODO	Thu May 05 20:50:50 2005 +0000
+++ b/mcabber/src/TODO	Fri May 06 09:35:40 2005 +0000
@@ -22,6 +22,7 @@
 * Commands! :-)
   - /roster <hide_offline|show_offline|top|bottom>
     + next_message (Ctrl-q?)
+  - /buffer <clear|top|bottom>
   - /group <expand|shrink|toggle>
   - /say blabla
   - /say_to <jid> blabla
--- a/mcabber/src/commands.c	Thu May 05 20:50:50 2005 +0000
+++ b/mcabber/src/commands.c	Fri May 06 09:35:40 2005 +0000
@@ -32,11 +32,12 @@
 
 // Commands callbacks
 void do_roster(char *arg);
-void do_clear(char *arg);
 void do_status(char *arg);
 void do_add(char *arg);
 void do_group(char *arg);
 void do_say(char *arg);
+void do_buffer(char *arg);
+void do_clear(char *arg);
 
 // Global variable for the commands list
 static GSList *Commands;
@@ -63,6 +64,8 @@
 void cmd_init(void)
 {
   cmd_add("add", "Add a jabber user", COMPL_JID, 0, &do_add);
+  cmd_add("buffer", "Manipulate current buddy's buffer (chat window)",
+          COMPL_BUFFER, 0, &do_buffer);
   cmd_add("clear", "Clear the dialog window", 0, 0, &do_clear);
   //cmd_add("del");
   cmd_add("group", "Change group display settings", COMPL_GROUP, 0, &do_group);
@@ -96,6 +99,11 @@
   compl_add_category_word(COMPL_ROSTER, "show_offline");
   compl_add_category_word(COMPL_ROSTER, "top");
 
+  // Roster category
+  compl_add_category_word(COMPL_BUFFER, "bottom");
+  compl_add_category_word(COMPL_BUFFER, "clear");
+  compl_add_category_word(COMPL_BUFFER, "top");
+
   // Group category
   compl_add_category_word(COMPL_GROUP, "expand");
   compl_add_category_word(COMPL_GROUP, "shrink");
@@ -239,11 +247,6 @@
     scr_LogPrint("Unrecognized parameter!");
 }
 
-void do_clear(char *arg)
-{
-  scr_Clear();
-}
-
 void do_status(char *arg)
 {
   enum imstatus st;
@@ -341,3 +344,20 @@
   send_message(arg);
 }
 
+void do_buffer(char *arg)
+{
+  if (!strcasecmp(arg, "top")) {
+    scr_BufferTop();
+  } else if (!strcasecmp(arg, "bottom")) {
+    scr_BufferBottom();
+  } else if (!strcasecmp(arg, "clear")) {
+    scr_Clear();
+  } else
+    scr_LogPrint("Unrecognized parameter!");
+}
+
+void do_clear(char *arg)    // Alias for "/buffer clear"
+{
+  do_buffer("clear");
+}
+
--- a/mcabber/src/compl.h	Thu May 05 20:50:50 2005 +0000
+++ b/mcabber/src/compl.h	Fri May 06 09:35:40 2005 +0000
@@ -10,7 +10,8 @@
 #define COMPL_STATUS    16
 #define COMPL_FILENAME  32      // Not implemented yet
 #define COMPL_ROSTER    64
-#define COMPL_GROUP    128
+#define COMPL_BUFFER   128
+#define COMPL_GROUP    256
 
 void    compl_add_category_word(guint, const char *command);
 GSList *compl_get_category_list(guint cat_flags);
--- a/mcabber/src/screen.c	Thu May 05 20:50:50 2005 +0000
+++ b/mcabber/src/screen.c	Fri May 06 09:35:40 2005 +0000
@@ -922,6 +922,58 @@
   doupdate();
 }
 
+//  scr_BufferTop()
+// Jump to the head of the current buddy window
+void scr_BufferTop(void)
+{
+  const gchar *jid;
+  window_entry_t *win_entry;
+
+  // Get win_entry
+  if (!current_buddy) return;
+  jid = CURRENT_JID;
+  if (!jid) return;
+  win_entry  = scr_SearchWindow(jid);
+
+  if (!win_entry) return;
+
+  win_entry->cleared = FALSE;
+  win_entry->top = g_list_first(win_entry->hbuf);
+
+  // Refresh the window
+  scr_UpdateWindow(win_entry);
+
+  // Finished :)
+  update_panels();
+  doupdate();
+}
+
+//  scr_BufferBottom()
+// Jump to the end of the current buddy window
+void scr_BufferBottom(void)
+{
+  const gchar *jid;
+  window_entry_t *win_entry;
+
+  // Get win_entry
+  if (!current_buddy) return;
+  jid = CURRENT_JID;
+  if (!jid) return;
+  win_entry  = scr_SearchWindow(jid);
+
+  if (!win_entry) return;
+
+  win_entry->cleared = FALSE;
+  win_entry->top = NULL;
+
+  // Refresh the window
+  scr_UpdateWindow(win_entry);
+
+  // Finished :)
+  update_panels();
+  doupdate();
+}
+
 //  scr_LogPrint(...)
 // Display a message in the log window.
 void scr_LogPrint(const char *fmt, ...)
--- a/mcabber/src/screen.h	Thu May 05 20:50:50 2005 +0000
+++ b/mcabber/src/screen.h	Fri May 06 09:35:40 2005 +0000
@@ -40,6 +40,8 @@
 // For commands...
 void scr_RosterTop(void);
 void scr_RosterBottom(void);
+void scr_BufferTop(void);
+void scr_BufferBottom(void);
 void scr_Clear(void);
 
 #endif