Files

alias.src
  • // alias.src
  • // @description general alias-cli, create alias for any existed application
  • // @version 0.2
  • // TODO list
  • // [+] alias list
  • // [+] alias <string>=<string>
  • // [] alias -g <string>=<string>
  • pass = @yield
  • globals.sh = get_shell
  • globals.pc = get_shell.host_computer
  • globals.NAME = "alias"
  • globals.paths = ["/bin",home_dir]
  • // meta functions
  • SHOW_USAGES = function
  • u_1 = "\n<b>Name</b>\n" + char(9) + "alias\n\n"
  • u_2 = "<b>Gramma</b>\n" + char(9) + "alias [opt:-g] alias_name=command_name\n" + char(9) + "alias list\n\n"
  • u_3 = "<b>Examples</b>\n" + char(9) + "alias -g py=python\n" + char(9) + "alias p=ping\n\n"
  • u_4 = "<b>Explain</b>\n" + char(9) + "alias used to define a short name for terminal commands.\n\n"
  • u_5 = char(9) + char(9) + "<b>-g</b> : set global alias. It will be set for current user if ignore it.\n\n"
  • u_6 = char(9) + char(9) + "<b>list</b> : show alias settings\n\n"
  • print u_1+u_2+u_3+u_4+u_5+u_6
  • end function
  • // from pythonic.src
  • map = function(proc, iterable_obj)
  • res = []
  • for obj in iterable_obj
  • res.push(proc(obj))
  • end for
  • return res
  • end function
  • // temporary functions
  • get_file_name = function(file)
  • return file.name
  • end function
  • cfg = {}
  • cfg.name = ".aliasrc"
  • cfg.path = home_dir
  • cfg.text = ""
  • cfg._load = function
  • f = pc.File(self.path+"/"+self.name)
  • if not f then
  • ok = pc.touch(self.path,self.name)
  • if ok != 1 then
  • print ok
  • return -1
  • end if
  • f = pc.File(self.path+"/"+self.name)
  • end if
  • self.file = f
  • self.text = f.get_content
  • if self.text != "" then
  • self.lines = self.text.split("\n")
  • else
  • self.lines = []
  • end if
  • return 0
  • end function
  • cfg.print = function
  • if self.text == "" then
  • print "\n<b>no alias existed</b>\n"
  • else
  • print self.text
  • end if
  • end function
  • cfg._varify = function
  • l0 = map(@get_file_name, pc.File(paths[0]).get_files)
  • l1 = map(@get_file_name, pc.File(paths[1]).get_files)
  • cmds = l0+l1
  • command_exists_1 = false
  • command_exists_2 = false
  • lines = self.text.split("\n")
  • if lines.len != 0 then
  • for l in lines
  • kv = l.split("=")
  • if kv.len != 2 then continue
  • for i in cmds
  • if kv[0] == i then command_exists_1 = true
  • if kv[1] == i then command_exists_2 = true
  • end for
  • if not command_exists_1 then return -1
  • if not command_exists_2 then return -1
  • end for
  • end if
  • return 0
  • end function
  • // save alias to .aliasrc
  • cfg.save = function(name,cmd)
  • record = name + "=" + cmd
  • record_existed = false
  • for i in self.lines
  • if i == record then record_existed = true
  • end for
  • if not record_existed then
  • self.lines.push(record)
  • self.file.set_content(self.lines.join(char(10)))
  • end if
  • end function
  • cfg.setup = function
  • if self._load then exit "can't get file .aliasrc"
  • if self._varify then exit "command not found"
  • end function
  • builder = {}
  • builder.generate_src = function(alias_path,alias_name,cmd_path,cmd_name)
  • self.fpath = alias_path
  • src = "get_shell.launch(""" + cmd_path + """,params.join("" ""))"
  • pc.touch(self.fpath,alias_name+".src")
  • self.file = pc.File(self.fpath+"/"+alias_name+".src")
  • self.file.set_content(src)
  • end function
  • builder.build = function(alias_path,alias_name,cmd_path,cmd_name)
  • self.generate_src(alias_path,alias_name,cmd_path,cmd_name)
  • sh.build(self.file.path, alias_path)
  • self.file.delete
  • end function
  • parser = {} // TODO: -g
  • parser.is_global = false
  • parser.init = function
  • if params.len == 0 or params.len > 2 then
  • SHOW_USAGES;exit
  • end if
  • arg0 = params[0]
  • if params.len == 2 then
  • if arg0 == "-g" then
  • self.is_global = true
  • arg0 = params[1]
  • else
  • exit "Unknown Argument " + arg0
  • end if
  • end if
  • if arg0 == "-h" or arg0 == "--help" or arg0 == "?" then
  • SHOW_USAGES;exit
  • else if arg0 == "list" then
  • cfg.print;exit
  • end if
  • kv = arg0.split("=")
  • if kv.len != 2 then
  • exit "error alias format.\n example: alias p=ping"
  • end if
  • alias = kv[0]
  • cmd = kv[1]
  • l1 = pc.File(paths[0]).get_files
  • l2 = pc.File(paths[1]).get_files
  • clis = l1 + l2
  • for i in clis
  • if i.name == alias then exit alias + " has existed."
  • end for
  • for i in clis
  • n = i.name
  • p = i.path
  • if n == cmd then
  • cfg.save(alias,cmd)
  • builder.build(paths[0],alias,p,cmd)
  • return
  • end if
  • end for
  • exit cmd + " not found"
  • end function
  • main = function
  • cfg.setup
  • parser.init
  • end function
  • main