FAQ  •  Register  •  Login

alias cmd with edit

Moderator: Inside3D Admins

<<

r00k

Posts: 906

Joined: Sat Nov 13, 2004 10:39 pm

Post Tue Oct 16, 2012 7:18 am

alias cmd with edit

I did this some years ago but never really shared this so here goes.
When players like to build alias commands they can go crazy and type long lines of stacked commands
But when you are trying to tweak your alias commands it really sucks to retype the whole alias just to change something minor.
This code, allows the user to type "alias foo" then press enter. If "foo" was already a valid alias it prints the value to the console with the cursor
at the end like
] alias foo

] alias foo "echo this is just a testx!" _

Which would allow the user to cursor back and delete the x without having to retype the whole line..

  Code:
void Cmd_Alias_f (void)
{
   cmdalias_t   *a;
   char      cmd[1024];
   int         i, c;
   char      *s,*n;

   if (cls.demoplayback)//R00k dont stuff alias commands when watching a demo.
      return;

   switch (Cmd_Argc())
   {
   case 1: //list all aliases
      for (a = cmd_alias, i = 0; a; a=a->next, i++)
         Con_SafePrintf ("   %s: %s", a->name, a->value);
      if (i)
         Con_SafePrintf ("%i alias command(s)\n", i);
      else
         Con_SafePrintf ("no alias commands found\n");
      break;
   case 2: //output current alias string
      n = Cmd_Argv(1);
      for (a = cmd_alias ; a ; a=a->next)
         if (!strcmp(Cmd_Argv(1), a->name))//R00k empty definition argument edits the current value
         {         
            sprintf (n,"alias %s \"%s",a->name, a->value);

            strcpy (key_lines[edit_line]+1, n);
            key_linepos = (strlen(n) - 1);
            key_lines[edit_line][key_linepos++] = '\"';
            key_lines[edit_line][key_linepos] = 0;
         }
      break;
   default: //set alias string
      s = Cmd_Argv(1);
      if (strlen(s) >= MAX_ALIAS_NAME)
      {
         Con_Printf ("Alias name is too long\n");
         return;
      }

      // if the alias allready exists, reuse it
      for (a = cmd_alias ; a ; a=a->next)
      {
         if (!strcmp(s, a->name))
         {
            Z_Free (a->value);
            break;
         }
      }

      if (!a)
      {
         a = Z_Malloc (sizeof(cmdalias_t));
         a->next = cmd_alias;
         cmd_alias = a;
      }
      strcpy (a->name, s);

      // copy the rest of the command line
      cmd[0] = 0;      // start out with a null string
      c = Cmd_Argc();
      for (i=2 ; i< c ; i++)
      {
         strcat (cmd, Cmd_Argv(i));
         if ((i != c))
            strcat (cmd, " ");
      }
      strcat (cmd, "\n");

      a->value = CopyString (cmd);
      break;
   }
}


I've gotten so used to this, i forgot it wasnt standard. :P
<<

gnounc

User avatar

Posts: 293

Joined: Mon Apr 06, 2009 6:26 am

Post Tue Oct 16, 2012 3:10 pm

Re: alias cmd with edit

hella nice.
<<

mankrip

User avatar

Posts: 500

Joined: Fri Jul 04, 2008 3:02 am

Post Tue Oct 16, 2012 8:39 pm

Re: alias cmd with edit

Taking a quick look at the code, there's a problem: it assumes that the console is active and that the alias command came from it. If the command comes from somewhere else (e.g. a stuffcmd sent by the QC code), it won't work right.

In vanilla Quake, inputting "alias foo" without any other parameters is the default for erasing an alias, so the QC code can create an alias, use it, and erase it afterwards.

Console input should usually be taken care of in keys.c. Implementing this functionality in the Key_Console function would also allow you to activate it through the Tab key instead, which would preserve the user's ability to erase aliases from the console.
Thinking with slipgates.
=-=-=-=-=-=-=-=-=-=
Makaqu engine blog / website.
<<

r00k

Posts: 906

Joined: Sat Nov 13, 2004 10:39 pm

Post Wed Oct 17, 2012 3:33 am

Re: alias cmd with edit

In the last 3 years (since i added this) with my mods stuffing alias commands, i havent seen ANY issues.
this code basically acts like normal;unless there is only 1 parameter, the alias name itself.

Can you get a realtime bug from this? I havent had any probs yet.


EDIT: i re-read your message. I m sorry i over looked the factr that alias apon empty alias erased such
as i use unalias for that. I dont know of mods that erase alias per alias. :(


It was merely for user input convenience, you can edit or dis for your needs.

Return to Programming Tutorials

Who is online

Users browsing this forum: No registered users and 1 guest

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Icons provided by Aha Soft