diff -u -r -d wmx-6pre6/Channel.C wmx-6pre6-c1/Channel.C
--- wmx-6pre6/Channel.C	Wed May 24 17:46:14 2000
+++ wmx-6pre6-c1/Channel.C	Wed Jan 17 21:55:09 2001
@@ -100,10 +100,15 @@
 		      110 * strlen(number), 30, 500, 160);
  */
 
-        XMoveResizeWindow(display(), m_channelWindow[sc],
-                          DisplayWidth(display(), sc) - 30 -
-                          (5 * CONFIG_CHANNEL_NUMBER_SIZE + 10) *
-                          strlen(number), 30, 500, 160);
+	x = CONFIG_CHANNEL_NUMBER_XPOS;
+	if (x < 0) {
+		x = DisplayWidth(display(), sc) + CONFIG_CHANNEL_NUMBER_XPOS - (5 * CONFIG_CHANNEL_NUMBER_SIZE + 10) * strlen(number);
+	} else if (strlen(number) == 1)
+			x -= 10;
+	y = CONFIG_CHANNEL_NUMBER_YPOS;
+	if (y < 0)
+		y = DisplayHeight(display(), sc) + CONFIG_CHANNEL_NUMBER_YPOS - (7 * CONFIG_CHANNEL_NUMBER_SIZE);
+        XMoveResizeWindow(display(), m_channelWindow[sc],x , y, 500, 160);
 	XMapRaised(display(), m_channelWindow[sc]);
     }
 
@@ -138,6 +143,9 @@
 #if CONFIG_GNOME_COMPLIANCE != False
     gnomeUpdateChannelList();
 #endif
+#ifdef CONFIG_CHANNEL_ALWAYS_VISIBLE
+    instateChannel();
+#endif
 }
 
 
@@ -145,10 +153,13 @@
 {
     int i;
     m_channelChangeTime = 0;
+
+#ifndef CONFIG_CHANNEL_ALWAYS_VISIBLE
     for(i = 0; i < screensTotal(); i++)
     {
 	XUnmapWindow(display(), m_channelWindow[i]);
     }
+#endif
 
     ClientList considering;
 
diff -u -r -d wmx-6pre6/Config.h wmx-6pre6-c1/Config.h
--- wmx-6pre6/Config.h	Wed May 24 17:48:59 2000
+++ wmx-6pre6-c1/Config.h	Wed Jan 17 21:54:45 2001
@@ -2,6 +2,11 @@
 #ifndef _CONFIG_H_
 #define _CONFIG_H_
 
+#define CONFIG_COMMAND_PARAMETERS True
+#define CONFIG_CHANNEL_ALWAYS_VISIBLE True
+#define CONFIG_CHANNEL_NUMBER_XPOS -30
+#define CONFIG_CHANNEL_NUMBER_YPOS 30
+
 // ============================
 // Configuration header for wmx
 // ============================
diff -u -r -d wmx-6pre6/Manager.C wmx-6pre6-c1/Manager.C
--- wmx-6pre6/Manager.C	Wed May 24 17:57:13 2000
+++ wmx-6pre6-c1/Manager.C	Wed Jan 17 22:25:01 2001
@@ -63,6 +63,7 @@
  	    "     Original keyboard-menu code Copyright (c) 1998 Nakayama Shintaro\n"
 	    "     Dynamic configuration code Copyright (c) 1998 Stefan `Sec' Zehl\n"
 	    "     Multihead display code Copyright (c) 2000 Sven Oliver `SvOlli' Moll\n"
+	    "     Command arguments Copyright (c) 2001 <cougar@random.ee>\n"
 	    "     %s\n     Copying and redistribution encouraged.  "
 	    "No warranty.\n\n", XV_COPYRIGHT);
 
@@ -185,6 +186,10 @@
 	fprintf(stderr, "  No quick keyboard channel-surf.");
     }
 
+    if (CONFIG_CHANNEL_ALWAYS_VISIBLE) {
+	fprintf(stderr, "  Channel number always visible.");
+    }	
+
 #if I18N
     fprintf(stderr, "\n     Operating system locale is \"%s\".",
 	    ret_setlocale ? ret_setlocale : "(NULL)");
@@ -196,6 +201,10 @@
         fprintf(stderr, "\n     Not GNOME compliant.");
     }
 
+    if (CONFIG_COMMAND_PARAMETERS) {
+        fprintf(stderr, "\n     Command arguments support on.");
+    }
+
     fprintf(stderr, "\n     Command menu taken from ");
     if (wmxdir == NULL) {
 	fprintf(stderr, "%s/%s.\n", home, CONFIG_COMMAND_MENU);
@@ -295,6 +304,9 @@
 
     clearFocus();
     scanInitialWindows();
+#ifdef CONFIG_CHANNEL_ALWAYS_VISIBLE
+    flipChannel(True, True, True, 0);
+#endif
     loop();
     if(m_restart == True){
 	fprintf(stderr,"restarting wmx from SIGHUP\n");
@@ -941,7 +953,8 @@
 		char *pstring = (char *)malloc(strlen(displayName) + 11 +
 					       numdigits(screen()));
 		sprintf(pstring, "DISPLAY=%s", displayName);
-		for(c=pstring; *c && (*c != '.'); c++);
+		for(c=pstring; *c && (*c != ':'); c++);
+		for(; *c && (*c != '.'); c++);
 		*(c++)='.';
 		sprintf(c, "%d", screen());
 		putenv(pstring);
@@ -955,6 +968,35 @@
 	    }
 
 	    if (file) {
+#if CONFIG_COMMAND_PARAMETERS
+		if (index(name, ';') != NULL) {
+		    char *c, *c1;
+		    int i = 0;
+		    char **argv;
+char *newname = name;
+ 		    newname = strdup(name);	// don't change func param
+		    for(c = newname; *c; c++) {
+			if (*c == '\\')			// translate \ -> /
+				*c = '/';
+			if (*c == ';')			// count parameters
+			    i++;
+		    }
+		    argv = (char **)malloc(i + 1);
+		    for(c1 = c = newname, i = 0; *c; c++)// create argv list
+			if (*c == ';') {
+			    *c = '\0';
+			    argv[i++] = c1;
+			    c1 = c + 1;
+			}
+		    argv[i++] = c1;
+		    argv[i] = NULL;
+		    execv(file, argv);
+		    fprintf(stderr, "wmx: exec %s:%s.. failed (errno %d)\n",
+			    file, argv[0], errno);
+		    perror("exec");
+		    exit(1);
+		}
+#endif
 		execl(file, name, 0);
 	    }
 	    else {
diff -u -r -d wmx-6pre6/Manager.h wmx-6pre6-c1/Manager.h
--- wmx-6pre6/Manager.h	Wed May 24 17:46:14 2000
+++ wmx-6pre6-c1/Manager.h	Wed Jan 17 22:00:49 2001
@@ -206,7 +206,7 @@
     void eventKeyPress(XKeyEvent *);
 
     // Stupid little helper function
-    static int numdigits(int);
+    int numdigits(int);
 
 #if CONFIG_GNOME_COMPLIANCE != False
     void gnomeInitialiseCompliance();
diff -u -r -d wmx-6pre6/Menu.C wmx-6pre6-c1/Menu.C
--- wmx-6pre6/Menu.C	Wed May 24 17:50:27 2000
+++ wmx-6pre6-c1/Menu.C	Wed Jan 17 21:46:11 2001
@@ -155,8 +155,17 @@
 
     int width, maxWidth = 10;
     for(int i = 0; i < m_nItems; i++) {
+#if CONFIG_COMMAND_PARAMETERS
+	if (index(m_items[i], ';') != NULL) {
+	    width = XTextWidth(m_font[screen()], m_items[i],
+				(index(m_items[i], ';') - m_items[i]));
+	} else {
+#endif
 	width = XTextWidth(m_font[screen()], m_items[i],
 			   STRLEN_MITEMS(i));
+#if CONFIG_COMMAND_PARAMETERS
+	}
+#endif
 	if (width > maxWidth) maxWidth = width;
     }
     maxWidth += 32;
@@ -359,15 +368,36 @@
 
 	    for (i = 0; i < m_nItems; i++) {
 
-		int dx = XTextWidth(m_font[screen()], m_items[i], 
+		int dx;
+#if CONFIG_COMMAND_PARAMETERS
+		if (index(m_items[i], ';') != NULL) {
+		    dx = XTextWidth(m_font[screen()], m_items[i], 
+					(index(m_items[i], ';') - m_items[i]));
+		} else {
+#endif
+		dx = XTextWidth(m_font[screen()], m_items[i], 
 				    STRLEN_MITEMS(i));
+#if CONFIG_COMMAND_PARAMETERS
+		}
+#endif
 		int dy = i * entryHeight + m_font[screen()]->ascent + 10;
 
 		if (i >= m_nHidden) {
+#if CONFIG_COMMAND_PARAMETERS
+		    if (index(m_items[i], ';') != NULL) {
+		    XDrawString(display(), m_window[screen()],
+				Border::drawGC(m_windowManager,screen()),
+				maxWidth - 8 - dx, dy,
+				m_items[i], (index(m_items[i], ';') - m_items[i]));
+		    } else {
+#endif
 		    XDrawString(display(), m_window[screen()],
 				Border::drawGC(m_windowManager,screen()),
 				maxWidth - 8 - dx, dy,
 				m_items[i], STRLEN_MITEMS(i));
+#if CONFIG_COMMAND_PARAMETERS
+		    }
+#endif
 		} else {
 		    XDrawString(display(), m_window[screen()],
 				Border::drawGC(m_windowManager,screen()),
@@ -676,8 +706,7 @@
     if (i >= m_nHidden && i < m_nItems)
     {
 	char *commandFile =
-	    (char *)malloc(strlen(m_commandDir) + STRLEN_MITEMS(i) + 2);
-
+	    (char *)malloc(strlen(m_commandDir) + strlen(m_items[i]) + 2);
 	sprintf(commandFile, "%s/%s", m_commandDir, m_items[i]);
 	m_windowManager->spawn(m_items[i], commandFile);
 	free(commandFile);
@@ -705,7 +734,7 @@
     char *new_directory;
     int dirlen = strlen (m_commandDir);
     
-    new_directory = (char *)malloc (dirlen + STRLEN_MITEMS(i) + 2);
+    new_directory = (char *)malloc (dirlen + strlen(m_items[i]) + 2);
     strcpy (new_directory, m_commandDir);
     new_directory[dirlen] = '/';
     strcpy (new_directory + dirlen + 1, m_items[i]);
diff -u -r -d wmx-6pre6/README wmx-6pre6-c1/README
--- wmx-6pre6/README	Fri May 12 09:40:20 2000
+++ wmx-6pre6-c1/README	Wed Jan 17 22:23:11 2001
@@ -233,6 +233,23 @@
 are now held in Config.C instead.
 
 
+Menu extensions
+===============
+
+If you like ta add parameters for menu command, use ';' as a separator.
+For example if you like to add xterm menu item with ssh command:
+
+  > ln -s /usr/X11R6/bin/xterm 'ROOT;-e;ssh;-l;root;localhost'
+
+Now if you choose menu item "ROOT", wmx executes command
+
+  /usr/X11R6/bin/xterm -e ssh -l root localhost
+
+If you need to use slash ('/') in parameter, use backslash ('\') instead.
+
+  > ln -s /usr/X11R6/bin/xpmroot 'Neptune;\usr\share\wallpapers\neptune.xpm.gz'
+
+
 Pixmaps
 =======
 
