2017-04-23 9 views
1

私はxmlファイルをklishで書いています。 klish xmlファイルのtabボタンを押して、どのようにパラメータを自動補完することができるか知りたい。たとえばユーザーがklishコマンドラインで有効または無効を入力するようにしたいが、ユーザーが 'e'とタブを押すと自動的に有効にするか、ユーザーが 'd'とタブを押すと自動的に無効にする。 これらのパラメータは、ユーザーごとklishコマンドラインで受信しています。klish - 動的変数と補完

そしてまた私は、パラメータとしてそのマクロ値を渡すklish ACTIONタグにそのマクロを使用できるように、私たちは私のCファイルにklish xmlファイル内のマクロを定義することができます

私のXMLコードは、このようなものです: -

<?xml version="1.0" encoding="UTF-8"?> 
<CLISH_MODULE xmlns="http://clish.sourceforge.net/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://clish.sourceforge.net/XMLSchema 
    http://clish.sourceforge.net/XMLSchema/clish.xsd"> 
    <!--=======================================================--> 
     <COMMAND name="show" 
     help="some utility commands for show"/> 
<COMMAND name="show connection" 
    help="Show the connection"> 
     <DETAIL> 
      connection status 
     </DETAIL> 
    <ACTION>c_file.c 1</ACTION> 
    </COMMAND> 
<COMMAND name="show debugcount" 
    help="It will show enable core"> 
    <DETAIL> 
    Enable core. 
     </DETAIL> 
    <PARAM name="module-name" 
     help="Specify the module name i.e. enable or disable" 
     ptype="STRING"/> 
    <ACTION>c_file.c 3 ${module-name}</ACTION> 
</COMMAND> 

私はとしての自動補完をしたいことを述べたように無効に自動的に来るか、ユーザーdボタンを押すと、タブ場合必要があり、その後、自動的に有効にするユーザーのeを押して、タブ場合

${modulename} 

ので、私が欲しい有効化または無効化されますいずれかparametereすなわちのでtatementは来るべきです。

そして、あなたは私が私のCファイルに値すなわち

<ACTION>c_file.c 1</ACTION> 

を渡していますが、値の代わりに、私はそれが

ようなものになるだろうように、いくつかの変数名やマクロを使用したいタグの中に見ることができるようにマクロについて

<ACTION>c_file ${var} ${modulename}</ACTION> 

どこの$ VAR = 1

+0

これまでに何をしましたか?コードをお持ちの場合は、私たちにお見せしてください。 [よくある質問をする方法]を学んでください。 –

+0

@naru sin XMLファイルを追加しました。あなたはこれについて何か考えてもらえれば助けてください – vivek

答えて

2

研究の多くは最終的に私は成功したコマンドの自動補完を実装した後。 私の例のように、ユーザーがコマンドラインで有効または無効を入力するようにします。これは以下のxmlファイルで実現できます。ちょうど私たちはxmlファイルでVARタグを使用しなければならず、マクロでも同じです。

<?xml version="1.0" encoding="UTF-8"?> 
<CLISH_MODULE xmlns="http://clish.sourceforge.net/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://clish.sourceforge.net/XMLSchema 
http://clish.sourceforge.net/XMLSchema/clish.xsd"> 
<!--=======================================================--> 

<COMMAND name="show" 
     help="some utility commands for show"/> 

<COMMAND name="show connection" 
     help="Show the connection"> 
<DETAIL> 
    connection status 
</DETAIL> 
<ACTION>c_file.c 1</ACTION> 
</COMMAND> 
<COMMAND name="show debugcount" 
help="It will show enable core"> 
<DETAIL> 
Enable core. 
</DETAIL> 
<PARAM name="module-name" 
     help="Specify the module name i.e. enable or disable" 
     ptype="STRING" 
     completion="${third_par}"/> 

<ACTION>c_file.c 3 ${module-name}</ACTION> 

<VAR name="third_par" help="enable/disable" value="enable disable"/> 
</COMMAND> 
0

上記のXMLが整形式であるかどうかはわかりません。現在のclish.xsdスキーマでは<VAR>要素は<COMMAND>要素の下に存在しなくなりました。実際、<VAR>要素には有効な場所が全くありません。確認するには

xmllint -schema /path/to/latest/clish.xsd --noout /path/to/your/file.xml

あなたは<VAR>の存在は、スキーマに対してXMLが無効になることがわかります。

  • DETAIL
  • PARAM
  • CONFIG
  • ACTION:内部コマンドは次の順序でなければならないことを指定して、基本的に

    <xs:complexType name="command_t"> 
        <xs:sequence> 
         <xs:element ref="DETAIL" minOccurs="0"/> 
         <xs:element ref="PARAM" minOccurs="0" maxOccurs="unbounded"/> 
         <xs:element ref="CONFIG" minOccurs="0"/> 
         <xs:element ref="ACTION" minOccurs="0"/> 
        </xs:sequence> 
        <xs:attributeGroup ref="menu_item_g"/> 
        <xs:attribute name="ref" type="xs:string" use="optional"/> 
        <xs:attribute name="view" type="xs:string" use="optional"/> 
        <xs:attribute name="viewid" type="xs:string" use="optional"/> 
        <xs:attribute name="access" type="xs:string" use="optional"/> 
        <xs:attribute name="args" type="xs:string" use="optional"/> 
        <xs:attribute name="args_help" type="xs:string" use="optional"/> 
        <xs:attribute name="escape_chars" type="xs:string" 
    use="optional"/> 
        <xs:attribute name="lock" type="bool_t" use="optional" 
    default="true"/> 
        <xs:attribute name="interrupt" type="bool_t" use="optional" 
    default="false"/> 
    </xs:complexType> 
    

    :以下

    <COMMAND>要素スキーマであります

PARAMの後にDETAILを配置すると、スキーマに対して無効です。完了について

Author: Serj Kalichev <[email protected]> 
Date: Fri Dec 15 18:03:53 2017 +0300 

Version 2.1.4 
1

:私はklish git repoで、次のclish.xsdスキーマのバージョンを参照しています。それを実装するにはいくつかの方法があります。それは簡単ですが、厳密ではない、すなわち、ユーザが「有効/無効」以外の何かを入力することができます

<PARAM name="module-name" 
    help="Specify the module name i.e. enable or disable" 
    ptype="STRING" 
    completion="enable disable"/> 

: 最初の方法は、このようなものです。

第二の方法は、 "選択" 方法とPTYPE =である:

<PTYPE name="BOOL" method="select" pattern="true(1) false(0)" help="Boolean choice"/> 

この方法は厳密です。オートコンプリートは "真/偽"を表示しますが、ユーザーはACTIONの値が "1/0"の対応するPARAMを取得します。しかし、ACTIONで "true"または "false"を取得するには、pattern = "true(true)false(false)"を使用できます。

<PARAM name="choose" help="switch example" mode="switch" ptype="SWITCH"> 
    <PARAM name="enable" help="Enable" ptype="SUBCOMMAND" mode="subcommand"/> 
    <PARAM name="disable" help="Disable" ptype="SUBCOMMAND" mode="subcommand"/> 
</PARAM> 

それは厳しいです:

第三の方法は、スイッチです。ユーザは、「スイッチ」PARAM内のPARAMのうちの1つだけを選択(入力)しなければならない。

VARについて... klishのVARはグローバルです。したがって、COMMANDタグまたはVIEWタグなしで表示されることがあります。 "VIEW"タグと同じレベルにします。

+0

ありがとう@Serj、実際に私がklishで始まったとき、私はこれについて何も考えていませんでした。私はklishのGoogleグループにもこの質問を投稿しましたが、誰も答えませんでした。私はこの方法を知るようになりました....スタックオーバーフローでこの答えを投稿しました....あなたの投稿の後、私はこのことを達成するためにさらに2つの方法を学びました.... 〜に – vivek