[
  {
    "path": ".gitattributes",
    "content": "# Auto detect text files and perform LF normalization\n* text=auto\n*.cmd text eol=crlf\n*.bat text eol=crlf\n*.ps1 text eol=crlf\n*.md text eol=lf\n*.sh text eol=lf\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug-report.yml",
    "content": "name: \"🐞 Bug report (encountered problems/errors)\"\ndescription: Something is not working as it should\ntitle: \"[Bug] \"\nlabels: \"🐛 Type: Bug\"\n\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Thank you for reporting a bug for the Cmder project!\n        ------------------------------------------------------------------\n\n        Please make sure you read and follow the following instructions carefully before reporting bugs, and/or requesting new features.\n\n        - You can find the version of Cmder.exe and ConEmu.exe binaries using Right Click → Properties → Details menu.\n\n  - type: textarea\n    id: version\n    attributes:\n      label: Version Information\n      description: |\n        Please write your Cmder and ConEmu version below.  If applicable, write down your Windows edition too.\n        **👉 See:** [How to find out which Cmder version I'm using](https://github.com/cmderdev/cmder/wiki/Cmder-troubleshooting)\n      placeholder: |\n        Cmder version:\n        Operating system:\n      value: |\n        Cmder version:\n        Operating system:\n      render: markdown\n    validations:\n      required: true\n\n  - type: dropdown\n    id: edition\n    attributes:\n      label: Cmder Edition\n      description: What edition of Cmder are you running?\n      options:\n        - Cmder Full (with Git)\n        - Cmder Mini\n        - N/A\n    validations:\n      required: true\n\n  - type: markdown\n    attributes:\n      value: |\n        Make sure that you have:\n\n        - Read both the README.md and the Wiki:\n\n          | **README.md** | **Wiki** |\n          | ------------- | -------- |\n          | 🌐 [Open Link](https://github.com/cmderdev/cmder/blob/master/README.md) | 🌐 [Open Link](https://github.com/cmderdev/cmder/wiki) |\n\n          (What you may be asking here could already be explained there!)\n\n        - Searched for existing issues (including the **closed** ones) for similar problems here:\n\n          🗃 https://github.com/cmderdev/cmder/issues?q=is:issue\n\n        - Please understand that Cmder uses ConEmu as the default underlying Terminal Emulator.\n\n          If your issue is regarding the **Terminal Emulator**, please visit the ConEmu issues page:\n\n          https://github.com/Maximus5/ConEmu/issues?q=is:issue\n\n          If there isn't an existing issue, you may open a new one there.\n\n          (We don't resolve issues regarding ConEmu here, so, please make sure you open the issue in the correct place.)\n\n          more info: https://conemu.github.io/en/ThirdPartyProblems.html\n\n        - If you are having an issue with any of the **upstream technologies** that are used by Cmder, please make sure that the issue is reproducible _only_ when used in combination with Cmder.\n\n          We may not directly address the issues related to the following tools:\n              - **[Clink](https://github.com/chrisant996/clink)**, the default shell in Cmder\n              - **[ConEmu](https://github.com/Maximus5/ConEmu)**, the terminal emulator\n              - **[Git/MinGW](https://github.com/git-for-windows/git)**, which also provide *NIX tools (such as `ls`, `mv`, `cp`, etc)\n              - **[clink-completions](https://github.com/vladimir-kotikov/clink-completions)**, which provides autocompletion for clink\n\n          We'll try our best to help you -- but we recommend creating an issue specifically at each of the corresponding repositories for the best result.\n\n          **👉 Note:** Try to reproduce the bug you're reporting, on a stand-alone edition of each tool, without using Cmder.  If the bug applies when the mentioned tools are NOT used within Cmder, there's a good chance that you should open the bug at the corresponding repo instead.\n\n        - Lastly, have a look at the official documentation for Cmder over our website, and our wiki.\n\n          Read more about Cmder on ConEmu docs:\n          https://conemu.github.io/en/cmder.html\n\n        #### Prerequisites before submitting an issue\n        - We do not support any versions older than the current release series, if you are using an older Cmder please update to the latest version first.\n        - Verify that the issue is not already fixed and is reproducible in the **[latest official Cmder version](https://github.com/cmderdev/cmder/releases).**\n        - Check the **[current issues list](https://github.com/cmderdev/cmder/issues?q=is%3Aissue)** and perform a **search of the issue tracker (including closed ones)** to avoid posting a duplicate bug report.\n        - Make sure this is not a support request or question, both of which are better suited for either the **[discussions section](https://github.com/cmderdev/cmder/discussions)**, or the **[questions section](https://github.com/cmderdev/cmder/issues/new?template=question.yml)**.\n        - Verify that the **[wiki](https://github.com/cmderdev/cmder/wiki)** did not contain a suitable solution either.\n\n        Thank you for making sure you are opening a new valid issue! ♥\n\n  - type: textarea\n    id: description\n    attributes:\n      label: Description of the issue\n      description: Provide a clear and concise description of the problem here.  Explain the actual behavior vs the expected behavior.\n    validations:\n      required: true\n\n  - type: textarea\n    id: reproduction\n    attributes:\n      label: How to reproduce\n      description: Please provide reliable steps to reproduce the problem.\n      placeholder: |\n        1. In this environment...\n        2. With this config...\n        3. Run '...'\n        4. See error...\n    validations:\n      required: false\n\n  - type: textarea\n    id: notes\n    attributes:\n      label: Additional context\n      description: Add screenshots, etc. (Anything that will provide more context about the problem)\n    validations:\n      required: false\n\n  - type: checkboxes\n    id: checklist\n    attributes:\n      label: Checklist\n      description: Please check all boxes that apply\n      options:\n        - label: I have read the documentation.\n          required: true\n        - label: I have searched for similar issues and found none that describe my issue.\n          required: true\n        - label: I have reproduced the issue on the latest version of Cmder.\n          required: true\n        - label: I am certain my issues are not related to ConEmu, Clink, or other third-party tools that Cmder uses.\n          required: true\n\n  - type: markdown\n    attributes:\n      value: |\n        ### Some tips on how to write a good bug report with the required information.\n        - Make sure the description is worded well enough to be understood, and with as much context and examples as possible.\n        - Post a screenshot or the command that triggered the problem, if applicable.\n        - Use the *Preview* tab to see how your issue will actually look like, before sending it.\n          ⚠ If for some reason you can not see the text you just wrote, make sure you've read the instructions clearly\n        - Avoid using ambiguous phrases like: doesn't work, there's a problem, etc.\n          Help us reproduce the issue by explaining what went wrong, and what did you expect to happen.\n        - Please keep the ticket language to English only here.\n          We can't process your issue if it's written in Russian or Chinese as we can't understand them.\n        - You can find the version of Cmder.exe and ConEmu.exe binaries using Right Click → Properties → Details menu.\n        - Put an `x` into all the boxes `[ ]` relevant to your issue (correct example: `[x]` -- not like this: `[ x]` or `[x ]`).\n        - Any text that is between the comment tags will get ignored, e.g.: `<!-- this will NOT work -- >`\n          You need to write your text either outside the tags, or the line below it.\n        - ⚠ Read the following page to avoid posting a bad issue: https://conemu.github.io/en/BadIssue.html\n\n        Failure to follow these guidelines may result in your issue getting closed. So please follow it carefully!\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\ncontact_links:\n  - name: 📄 Wiki\n    url: \"https://github.com/cmderdev/cmder/wiki\"\n    about: \"Consult the wiki first, it might already contain the information you are looking for\"\n\n  - name: 💬 Discussions\n    url: \"https://github.com/cmderdev/cmder/discussions\"\n    about: \"Please ask questions related to usage/setup/support/non-issue development discussion in the Discussions section\"\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature-request.yml",
    "content": "name: \"⭐ Feature request (request for new functionality)\"\ndescription: Help make Cmder even better\ntitle: \"[Feature request] \"\nlabels: \"🛠 Type: Feature Request\"\n\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Thank you for helping to improve the Cmder project!\n        ------------------------------------------------------------------\n\n        Please make sure you read and follow the following instructions carefully before reporting bugs, and/or requesting new features.\n\n        Make sure that you have:\n\n        - Searched for existing issues (including the **closed** ones) for similar feature requests here:\n\n          🗃 https://github.com/cmderdev/cmder/issues?q=is:issue\n\n        - If you are opening the feature request regarding any of the **upstream technologies** that are used by Cmder, please open the feature request at the corresponding upstream repos instead:\n            - **[Clink](https://github.com/chrisant996/clink)**, the default shell in Cmder\n            - **[ConEmu](https://github.com/Maximus5/ConEmu)**, the terminal emulator\n            - **[Git/MinGW](https://github.com/git-for-windows/git)**, which also provide *NIX tools (such as `ls`, `mv`, `cp`, etc)\n            - **[clink-completions](https://github.com/vladimir-kotikov/clink-completions)**, which provides autocompletion for clink\n\n        - If you would like to ask for guides on how to integrate Cmder with your favorite IDE of choice, or how to perform a specific task with Cmder, make sure you visit our label section first.\n\n          You may already have an answer under the Guides or Questions section.\n\n          For a list of labels, visit **[🌐 Labels](https://github.com/cmderdev/cmder/labels)**.\n\n          (Be sure to also check “Closed” issues in the labels section!)\n\n        - If you have a request to provide auto-complete support for a new tool, please post your request here instead:\n\n          https://github.com/vladimir-kotikov/clink-completions/issues\n\n        Thank you for making the Cmder project even better! ♥\n\n  - type: textarea\n    id: description\n    attributes:\n      label: Suggestion\n      description: Describe the feature\n    validations:\n      required: true\n\n  - type: textarea\n    id: usecase\n    attributes:\n      label: Use case\n      description: Include a usage example of the feature\n    validations:\n      required: false\n\n  - type: textarea\n    id: notes\n    attributes:\n      label: Extra info/examples/attachments\n      description: Extra information, similar tools, etc.  If the feature is currently possible with a workaround\n    validations:\n      required: false\n\n  - type: checkboxes\n    id: checklist\n    attributes:\n      label: Checklist\n      description: Please check all boxes that apply\n      options:\n        - label: I have read the documentation and made sure this feature doesn't already exist.\n          required: true\n        - label: I have searched for similar issues and found none that describe my feature request.\n          required: true\n\n  - type: markdown\n    attributes:\n      value: |\n        ### Some tips on how to write a better feature request\n        - Make sure the description is worded well enough to be understood, and with as much context and examples as possible.\n        - Use the *Preview* tab to see how your issue will actually look like, before sending it.\n          ⚠ If for some reason you can not see the text you just wrote, make sure you've read the instructions clearly\n        - Please keep the ticket language to English only here.\n          We can't process your issue if it's written in Russian or Chinese as we can't understand them.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/question.yml",
    "content": "name: \"❓ Question\"\ndescription: Something is unclear or needs to be discussed\ntitle: \"Question: \"\nlabels: \"❔ Type: Question\"\n\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Before you ask your question, please make sure you read and follow the following instructions carefully.\n\n        - Read both the README.md and the Wiki, as well as the existing issues:\n\n          | **README.md** | **Wiki** | **Issues** |\n          | ------------- | -------- | ---------- |\n          | 🌐 [Open Link](https://github.com/cmderdev/cmder/blob/master/README.md) | 🌐 [Open Link](https://github.com/cmderdev/cmder/wiki) | 🗃 [Open Link](https://github.com/cmderdev/cmder/issues?q=is:issue) |\n\n          (What you may be asking here could already be explained there!)\n\n        - If you would like to ask for guides on how to integrate Cmder with your favorite IDE of choice, or how to perform a specific task with Cmder, make sure you visit our label section first.\n\n          You may already have an answer under the [💬 Guides](https://github.com/cmderdev/cmder/issues?q=label%3A%22%F0%9F%92%AC+Type%3A+Guide%22), [📖 Documentation](https://github.com/cmderdev/cmder/issues?q=label%3A%22%F0%9F%93%96+Documentation%22) or [❔ Questions](https://github.com/cmderdev/cmder/issues?q=is%3Aissue+label%3A%22%E2%9D%94+Type%3A+Question%22) section.\n\n          For a list of labels, visit **[Labels](https://github.com/cmderdev/cmder/labels)**.\n\n          (Be sure to also check “Closed” issues in the labels section!)\n\n  - type: textarea\n    id: description\n    attributes:\n      label: Question\n      description: What would you to ask about Cmder?\n    validations:\n      required: true\n\n  - type: checkboxes\n    id: checklist\n    attributes:\n      label: Checklist\n      description: Please check all boxes that apply\n      options:\n        - label: I have read the documentation and made sure what I'm looking for isn't present, or is unclear.\n          required: true\n        - label: I have searched for similar issues, and either this question wasn't asked before, or I didn't find any that describe my question.\n          required: true\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n  # Enable version updates for GitHub Actions\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\" # Location of package manifests\n    schedule:\n      interval: \"weekly\"\n    labels:\n      - \"👆 Dependencies\"\n      - \"🔄️ GitHub Actions\"\n"
  },
  {
    "path": ".github/stale.yml",
    "content": "# Number of days of inactivity before an issue becomes stale\ndaysUntilStale: 30\n# Number of days of inactivity before a stale issue is closed\ndaysUntilClose: 7\n# Issues with these labels will never be considered stale\nexemptLabels:\n  - \"📌 Pinned\"\n# Label to use when marking an issue as stale\nstaleLabel: \"👀 Awaiting Response\"\n# Comment to post when marking an issue as stale. Set to `false` to disable\nmarkComment: >\n  This issue has been automatically marked as stale because it has not had\n  any recent activity. It will be closed in a week if no further activity occurs.\n  Thank you for your contribution(s).\n# Comment to post when closing a stale issue. Set to `false` to disable\ncloseComment: >\n  This issue has been automatically closed due to it not having any\n  activity since it was marked as stale.\n  Thank you for your contribution(s).\n"
  },
  {
    "path": ".github/workflows/branches.yml",
    "content": "name: Update branches\n\n# Controls when the action will run.\non:\n  # Triggers the workflow on push events for the development branch\n  push:\n    branches: [ master ]\n\n  # Allows you to run this workflow manually from the Actions tab\n  workflow_dispatch:\n\n# A workflow run is made up of one or more jobs that can run sequentially or in parallel\njobs:\n  # This job updates the development branch with the master branch\n  update-development:\n    # The type of runner that the job will run on\n    runs-on: ubuntu-latest\n\n    # Steps represent a sequence of tasks that will be executed as part of the job\n    steps:\n      # Checks-out the repository under $GITHUB_WORKSPACE, so the job can access it\n      - uses: actions/checkout@v6\n        with:\n          fetch-depth: 0 # fetch all history for all branches and tags\n\n      - name: Summary - Merge operation started\n        shell: bash\n        run: |\n          echo \"## 🔀 Update Branches - Workflow Summary\" >> $GITHUB_STEP_SUMMARY\n          echo \"\" >> $GITHUB_STEP_SUMMARY\n          echo \"### Merge Operation\" >> $GITHUB_STEP_SUMMARY\n          echo \"\" >> $GITHUB_STEP_SUMMARY\n          echo \"| Property | Value |\" >> $GITHUB_STEP_SUMMARY\n          echo \"| --- | --- |\" >> $GITHUB_STEP_SUMMARY\n          echo \"| Source Branch | \\`master\\` |\" >> $GITHUB_STEP_SUMMARY\n          echo \"| Target Branch | \\`development\\` |\" >> $GITHUB_STEP_SUMMARY\n          echo \"| Triggered by | @${{ github.actor }} |\" >> $GITHUB_STEP_SUMMARY\n          echo \"| Commit | \\`${{ github.sha }}\\` |\" >> $GITHUB_STEP_SUMMARY\n          echo \"\" >> $GITHUB_STEP_SUMMARY\n\n      # Runs a single command using the runners shell\n      - name: Merge master into development\n        run: |\n          git config user.name \"${{ github.actor }}\"\n          git config user.email \"${{ github.actor }}@users.noreply.github.com\"\n          git checkout development\n          git merge --no-ff master\n          git push origin development\n\n      - name: Summary - Merge completed\n        if: success()\n        shell: bash\n        run: |\n          echo \"### ✅ Merge Successful\" >> $GITHUB_STEP_SUMMARY\n          echo \"\" >> $GITHUB_STEP_SUMMARY\n          echo \"The \\`master\\` branch has been successfully merged into \\`development\\`.\" >> $GITHUB_STEP_SUMMARY\n          echo \"\" >> $GITHUB_STEP_SUMMARY\n          echo \"**Merge type:** No fast-forward merge\" >> $GITHUB_STEP_SUMMARY\n          echo \"\" >> $GITHUB_STEP_SUMMARY\n          echo \"> The development branch is now synchronized with the latest changes from master.\" >> $GITHUB_STEP_SUMMARY\n"
  },
  {
    "path": ".github/workflows/build.yml",
    "content": "#---------------------------------#\n#      general configuration      #\n#---------------------------------#\n\nname: Build Cmder\n\n# Controls when the action will run. Triggers the workflow on push or pull request events but only for the main branch\non:\n  push:\n    branches: [ \"master\" ]\n    tags:\n      - \"v*\"\n  pull_request:\n    branches: [ \"master\", \"development\" ]\n\n#---------------------------------#\n#    environment configuration    #\n#---------------------------------#\n\nenv:\n  # Path to the root of the Cmder project.\n  CMDER_ROOT: ${{ github.workspace }}\n\npermissions:\n  contents: read\n\n# A workflow run is made up of one or more jobs that can run sequentially or in parallel\njobs:\n\n  build:\n    name: Build Project\n    runs-on: windows-latest\n    permissions:\n      contents: write\n      discussions: write\n    steps:\n    - name: Check out repository code (Action from GitHub)\n      uses: actions/checkout@v6\n      with:\n        fetch-depth: 0\n\n    - name: Summary - Repository checkout\n      shell: pwsh\n      run: |\n        echo \"## 📦 Build Cmder - Workflow Summary\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"### Repository Information\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"| Property | Value |\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"| --- | --- |\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"| Repository | \\`${{ github.repository }}\\` |\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"| Branch | \\`${{ github.ref_name }}\\` |\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"| Commit | \\`${{ github.sha }}\\` |\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"| Actor | @${{ github.actor }} |\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"| Workflow | \\`${{ github.workflow }}\\` |\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"\" >> $env:GITHUB_STEP_SUMMARY\n\n    - name: Add MSBuild to PATH\n      uses: microsoft/setup-msbuild@v2\n\n    - name: Build Cmder Launcher\n      shell: pwsh\n      working-directory: scripts\n      run: .\\build.ps1 -Compile -verbose\n\n    - name: Summary - Build completed\n      if: success()\n      shell: pwsh\n      run: |\n        echo \"### ✅ Build Status\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"Cmder launcher successfully compiled.\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"\" >> $env:GITHUB_STEP_SUMMARY\n\n    - name: Pack the built files\n      shell: pwsh\n      working-directory: scripts\n      run: .\\pack.ps1 -verbose\n\n    - name: Summary - Package artifacts\n      if: success()\n      shell: pwsh\n      run: |\n        echo \"### 📦 Artifacts Created\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"| Artifact | Size | Hash (SHA256) |\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"| --- | --- | --- |\" >> $env:GITHUB_STEP_SUMMARY\n        $artifacts = @(\"cmder.zip\", \"cmder.7z\", \"cmder_mini.zip\")\n        foreach ($artifact in $artifacts) {\n          $path = \"build/$artifact\"\n          if (Test-Path $path) {\n            $size = (Get-Item $path).Length / 1MB\n            # Truncate hash to first 16 chars for summary readability (full hash in hashes.txt)\n            $hash = (Get-FileHash $path -Algorithm SHA256).Hash.Substring(0, 16)\n            echo \"| \\`$artifact\\` | $([math]::Round($size, 2)) MB | \\`$hash...\\` |\" >> $env:GITHUB_STEP_SUMMARY\n          }\n        }\n        echo \"\" >> $env:GITHUB_STEP_SUMMARY\n\n    - name: Upload artifact (cmder.zip)\n      uses: actions/upload-artifact@v6\n      with:\n        path: build/cmder.zip\n        name: cmder.zip\n        if-no-files-found: error\n\n    - name: Upload artifact (cmder.7z)\n      uses: actions/upload-artifact@v6\n      with:\n        path: build/cmder.7z\n        name: cmder.7z\n\n    - name: Upload artifact (cmder_mini.zip)\n      uses: actions/upload-artifact@v6\n      with:\n        path: build/cmder_mini.zip\n        name: cmder_mini.zip\n\n    - name: Upload artifact (hashes.txt)\n      uses: actions/upload-artifact@v6\n      with:\n        path: build/hashes.txt\n        name: hashes.txt\n\n    - name: Summary - Artifacts uploaded\n      if: success()\n      shell: pwsh\n      run: |\n        echo \"### ☁️ Upload Status\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"All artifacts successfully uploaded to GitHub Actions:\" >> $env:GITHUB_STEP_SUMMARY\n        echo '- ✅ `cmder.zip`' >> $env:GITHUB_STEP_SUMMARY\n        echo '- ✅ `cmder.7z`' >> $env:GITHUB_STEP_SUMMARY\n        echo '- ✅ `cmder_mini.zip`' >> $env:GITHUB_STEP_SUMMARY\n        echo '- ✅ `hashes.txt`' >> $env:GITHUB_STEP_SUMMARY\n        echo \"\" >> $env:GITHUB_STEP_SUMMARY\n\n    - name: Create Release\n      uses: softprops/action-gh-release@v2\n      with:\n        files: |\n          build/cmder.zip\n          build/cmder.7z\n          build/cmder_mini.zip\n          build/hashes.txt\n        draft: true\n        generate_release_notes: true\n      if: startsWith(github.ref, 'refs/tags/')\n\n    - name: Summary - Release created\n      if: startsWith(github.ref, 'refs/tags/')\n      shell: pwsh\n      run: |\n        echo \"### 🚀 Release Information\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"Draft release created for tag: **\\`${{ github.ref_name }}\\`**\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"Release includes:\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"- Full version (\\`cmder.zip\\`, \\`cmder.7z\\`)\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"- Mini version (\\`cmder_mini.zip\\`)\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"- File hashes (\\`hashes.txt\\`)\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"> ⚠️ Release is in **draft** mode. Please review and publish manually.\" >> $env:GITHUB_STEP_SUMMARY\n\n"
  },
  {
    "path": ".github/workflows/codeql.yml",
    "content": "# For most projects, this workflow file will not need changing; you simply need\n# to commit it to your repository.\n#\n# You may wish to alter this file to override the set of languages analyzed,\n# or to provide custom queries or build logic.\n\nname: \"CodeQL\"\n\non:\n  push:\n    branches: [ \"master\", \"development\" ]\n    paths-ignore:\n      - '**/*.md'\n      - '**/*.txt'\n      - '.github/**'\n      - '**/.gitignore'\n  pull_request:\n    # The branches below must be a subset of the branches above\n    branches: [ \"master\", \"development\" ]\n    paths-ignore:\n      - '**/*.md'\n      - '**/*.txt'\n      - '.github/**'\n      - '**/.gitignore'\n  schedule:\n    - cron: '30 19 * * 0'\n\njobs:\n  analyze:\n    name: Analyze\n    runs-on: windows-latest\n    permissions:\n      actions: read\n      contents: read\n      security-events: write\n\n    strategy:\n      fail-fast: false\n      matrix:\n        language: [ 'cpp' ]\n        # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]\n        # Use only 'java' to analyze code written in Java, Kotlin or both\n        # Use only 'javascript' to analyze code written in JavaScript, TypeScript or both\n        # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support\n\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@v6\n\n    - name: Summary - CodeQL analysis started\n      shell: pwsh\n      run: |\n        $summary = @(\n          '## 🔒 CodeQL Security Analysis - Workflow Summary'\n          ''\n          '### Analysis Configuration'\n          ''\n          '| Property | Value |'\n          '| --- | --- |'\n          '| Repository | `${{ github.repository }}` |'\n          '| Branch | `${{ github.ref_name }}` |'\n          '| Language | `${{ matrix.language }}` |'\n          '| Commit | `${{ github.sha }}` |'\n          ''\n        )\n        $summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY\n\n    # Initializes the CodeQL tools for scanning.\n    - name: Initialize CodeQL\n      uses: github/codeql-action/init@v4\n      with:\n        languages: ${{ matrix.language }}\n        # If you wish to specify custom queries, you can do so here or in a config file.\n        # By default, queries listed here will override any specified in a config file.\n        # Prefix the list here with \"+\" to use these queries and those in the config file.\n\n        # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs\n        # queries: security-extended,security-and-quality\n\n    - name: Add MSBuild to PATH\n      uses: microsoft/setup-msbuild@v2\n\n    - name: Build Cmder Launcher\n      shell: pwsh\n      working-directory: scripts\n      run: .\\build.ps1 -Compile -verbose\n\n    - name: Summary - Build status\n      if: success()\n      shell: pwsh\n      run: |\n        $summary = @(\n          '### ✅ Build Completed'\n          ''\n          'Cmder launcher built successfully for CodeQL analysis.'\n          ''\n        )\n        $summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY\n\n    - name: Perform CodeQL Analysis\n      uses: github/codeql-action/analyze@v4\n      with:\n        category: \"/language:${{matrix.language}}\"\n\n    - name: Summary - Analysis completed\n      if: success()\n      shell: pwsh\n      run: |\n        $summary = @(\n          '### 🔍 CodeQL Analysis Results'\n          ''\n          '✅ CodeQL security analysis completed successfully.'\n          ''\n          '**Language analyzed:** `${{ matrix.language }}`'\n          ''\n          '> Check the Security tab for detailed findings and recommendations.'\n        )\n        $summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY\n"
  },
  {
    "path": ".github/workflows/tests.yml",
    "content": "name: Run Tests\n\non:\n  push:\n    branches:\n      - master\n      - development\n    paths-ignore:\n      - '**/*.md'\n      - '**/*.txt'\n      - '.github/**'\n      - '**/.gitignore'\n  pull_request:\n    branches:\n      - master\n      - development\n    paths-ignore:\n      - '**/*.md'\n      - '**/*.txt'\n      - '.github/**'\n      - '**/.gitignore'\n\ndefaults:\n  run:\n    shell: cmd\n\npermissions:\n  contents: read\n\nconcurrency:\n  group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'\n  cancel-in-progress: true\n\njobs:\n\n  tests:\n    runs-on: windows-latest\n    continue-on-error: false\n\n    steps:\n    - uses: actions/checkout@v6\n\n    - name: Summary - Test execution started\n      shell: pwsh\n      run: |\n        echo \"## 🧪 Run Tests - Workflow Summary\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"### Test Environment\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"| Property | Value |\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"| --- | --- |\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"| Repository | \\`${{ github.repository }}\\` |\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"| Branch | \\`${{ github.ref_name }}\\` |\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"| Commit | \\`${{ github.sha }}\\` |\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"| Runner OS | \\`${{ runner.os }}\\` |\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"\" >> $env:GITHUB_STEP_SUMMARY\n\n    - name: Initialize vendors\n      shell: pwsh\n      working-directory: scripts\n      run: .\\build.ps1 -verbose\n\n    - name: Summary - Vendor initialization\n      if: success()\n      shell: pwsh\n      run: |\n        echo \"### ⚙️ Vendor Initialization\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"✅ Vendor dependencies initialized successfully.\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"\" >> $env:GITHUB_STEP_SUMMARY\n\n    - name: Summary - Test results table header\n      if: success()\n      shell: pwsh\n      run: |\n        echo \"### 📋 Test Results\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"| Test | Status |\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"| --- | --- |\" >> $env:GITHUB_STEP_SUMMARY\n\n    - name: Testing Clink Shell\n      run: |\n          cmd /c vendor\\init.bat /v /d /t\n\n    - name: Summary - Clink Shell test\n      if: success()\n      shell: pwsh\n      run: |\n        echo \"| Clink Shell | ✅ Passed |\" >> $env:GITHUB_STEP_SUMMARY\n    - name: Testing PowerShell\n      run: |\n          PowerShell.exe -ExecutionPolicy Bypass -NoLogo -NoProfile -Command \"$env:CMDER_DEBUG='1'; . 'vendor\\profile.ps1'\"\n\n    - name: Summary - PowerShell test\n      if: success()\n      shell: pwsh\n      run: |\n        echo \"| PowerShell | ✅ Passed |\" >> $env:GITHUB_STEP_SUMMARY\n    - name: Testing Bash\n      run: |\n          bash vendor/cmder.sh\n\n    - name: Summary - Bash test\n      if: success()\n      shell: pwsh\n      run: |\n        echo \"| Bash | ✅ Passed |\" >> $env:GITHUB_STEP_SUMMARY\n\n    - name: Summary - All tests completed\n      if: success()\n      shell: pwsh\n      run: |\n        echo \"\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"### ✅ All Tests Completed\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"\" >> $env:GITHUB_STEP_SUMMARY\n        echo \"All shell environments tested successfully!\" >> $env:GITHUB_STEP_SUMMARY\n"
  },
  {
    "path": ".github/workflows/vendor.yml",
    "content": "name: Update Vendor\n\non:\n  workflow_dispatch:\n  schedule:\n  # At 13:37 UTC every day.\n  - cron: '37 13 * * *'\n\ndefaults:\n  run:\n    shell: pwsh\n\npermissions:\n  contents: read\n\njobs:\n  vendor:\n\n    runs-on: windows-latest\n    continue-on-error: false\n    timeout-minutes: 15\n    permissions:\n      contents: write\n      pull-requests: write\n\n    steps:\n    - uses: actions/checkout@v6\n      with:\n        fetch-depth: 0\n\n    - name: Summary - Workflow started\n      shell: pwsh\n      run: |\n        $summary = @(\n          '## 📦 Update Vendor - Workflow Summary'\n          ''\n          'Checking for vendor dependency updates...'\n          ''\n        )\n        $summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY\n\n    - id: make-changes\n      name: Checking for updates\n      env:\n        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n      run: |\n          $currentVersion = (Get-Content .\\vendor\\sources.json | ConvertFrom-Json)\n          . .\\scripts\\update.ps1 -verbose\n          Set-GHVariable -Name COUNT_UPDATED -Value $count\n          $newVersion = (Get-Content .\\vendor\\sources.json | ConvertFrom-Json)\n          $listUpdated = \"\"\n          $updateMessage = \"| Name | Old Version | New Version |`n| :--- | ---- | ---- |`n\"\n          foreach ($s in $newVersion) {\n            $oldVersion = ($currentVersion | Where-Object {$_.name -eq $s.name}).version\n            if ($s.version -ne $oldVersion) {\n              $repoUrl = ($repoUrl = $s.Url.Replace(\"/archive/\", \"/releases/\")).Substring(0, $repoUrl.IndexOf(\"/releases/\")) + \"/releases\"\n              $listUpdated += \"$($s.name) v$($s.version), \"\n              $updateMessage += \"| **[$($s.name)]($repoUrl)** | $oldVersion | **$($s.version)** |`n\"\n            }\n          }\n          if ($count -eq 0) { return }\n          Set-GHVariable -Name LIST_UPDATED -Value $listUpdated.Trim(', ')\n          echo \"UPDATE_MESSAGE<<<EOF`n$updateMessage`n<EOF\" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8\n\n    - name: Summary - Update check results\n      shell: pwsh\n      run: |\n        $count = [int]$env:COUNT_UPDATED\n        if ($count -eq 0) {\n          $summary = @(\n            '### ✅ No Updates Available'\n            ''\n            'All vendor dependencies are up to date.'\n          )\n          $summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY\n        } else {\n          $word = if ($count -eq 1) { 'dependency' } else { 'dependencies' }\n          $summary = @(\n            '### 🔄 Updates Found'\n            ''\n            \"**$count** vendor $word updated:\"\n            ''\n            $env:UPDATE_MESSAGE\n            ''\n          )\n          $summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY\n        }\n\n    - uses: peter-evans/create-pull-request@v8\n      if: env.COUNT_UPDATED > 0\n      with:\n        title: 'Updates to `${{ env.COUNT_UPDATED }}` vendored dependencies'\n        body: |\n          ### Automatically updated `${{ env.COUNT_UPDATED }}` dependencies:\n          ${{ env.UPDATE_MESSAGE }}\n          ---\n          Please verify and then **Merge** the pull request to update.\n        commit-message: '⬆️ Update dependencies (${{ env.LIST_UPDATED }})'\n        branch: update-vendor\n        base: master\n\n    - name: Summary - Pull request created\n      if: env.COUNT_UPDATED > 0\n      shell: pwsh\n      run: |\n        $summary = @(\n          '### 🎉 Pull Request Created'\n          ''\n          'A pull request has been created to update the vendor dependencies.'\n          ''\n          '**Branch:** `update-vendor`'\n          ''\n          $env:LIST_UPDATED -and \"**Updated dependencies:** $env:LIST_UPDATED\" -or \"**Updated dependencies:** \"\n          ''\n          '> Please review and merge the pull request to apply the updates.'\n        )\n        $summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY\n"
  },
  {
    "path": ".gitignore",
    "content": "\n## Those files should be taken from their repositary\n\nbin/*\n!bin/Readme.md\nopt/*\n!opt/Readme.md\n\nvendor/*/*\n!vendor/bin/*\n!vendor/lib/*\n!vendor/*\n!vendor/psmodules/*\nvendor/git-for-windows\n\nconfig/*\n!config/Readme.md\n!config/profile.d/README.md\n\nconfig_user/*\n\nThumbs.db\n*.exe\n*.dll\nbuild/\n/Version *\n*.bak\n.github_changelog_generator\nlauncher/.vs\nlauncher/src/version.rc2\n.vs/*\n.vscode\n.idea\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Change Log\n\n## [1.3.25](https://github.com/cmderdev/cmder/tree/v1.3.25) (2024-05-31)\n\n### Changes\n\n- Component Updates\n    - Update Git for Windows to 2.45.1.windows.1.\n    - Update ConEmu to 24.05.31.\n    - Clink 1.6.14.\n    - clink-completions 0.5.2.\n\n- Add `SECURITY.md` and refresh CI workflows and actions.\n- Enable `match.expand_envvars` and improve git diagnostics for improper versions.\n\n### Fixes\n\n- Fix #2944.\n- Fix script error when the working directory contains `%`.\n- Remove environment refresh race condition.\n\n## [1.3.24](https://github.com/cmderdev/cmder/tree/v1.3.24) (2023-07-24)\n\n### Changes\n\n- Update `build.yml` workflow.\n\n## [1.3.23](https://github.com/cmderdev/cmder/tree/v1.3.23) (2023-07-24)\n\n### Changes\n\n- Update ConEmu (conemu-maximus5) to 23.07.24.\n\n## [1.3.22](https://github.com/cmderdev/cmder/tree/v1.3.22) (2023-07-24)\n\n### Changes\n\n- Handle Clink injction differently in `init.bat`.\n- Changes to `clink_settings.lua.default`.\n    - Do not add commands to Clink Command Line History that begin with whitespace as a default.\n        - This can be changed to the old behavior by setting `history_ignore_space` to `0` in `config\\clink_settings.lua`.\n    - `history.max_lines` is now defaults to `25000` instead of `10000`.\n        - This can be changed back to the old behavior by setting `history_max_lines` to `10000` in `config\\clink_settings.lua`.\n    - `history.shared` now defaults to `False` instead of `True`.\n        - The previous default of `True` was causing issues with some users when using Cmder in multiple sessions.\n        - This can be changed back to the old behavior by setting `history_shared` to `1` in `config\\clink_settings.lua`.\n\n- Component Updates\n    - Git for Windows to 2.41.0.windows.3\n    - Clink to 1.5.1\n    - ConEmu to 23.07.23\n    - clink-completions to 0.4.10\n\n- Remove AppVeyor configuration and add CodeQL scanning and Dependabot updates.\n\n### Fixes\n\n- Fix `/task \"<taskName>\"` handling.\n- Skip clink injection when initialization fails fatally.\n- Fix errors when git/svn/hg are not installed and in profile.d PowerShell scripts.\n\n## [1.3.21](https://github.com/cmderdev/cmder/tree/v1.3.21) (2022-12-19)\n\n### Fixes\n\n- Fix #2789.\n- Fix Git Bash `GIT_INSTALL_ROOT` handling.\n\n### Changes\n\n- Refactor `clink.lua` to speed up the prompt.\n- Refactor and Cleanup `init.bat` and related scripts.\n- Refactor and Cleanup `profile.ps1` and related scripts.\n- Remove handling of `clink` and `tcc` incompatibility.\n- Update ConEmu to mitigate CVE-2022-46387.\n- Update Git for Windows to 2.39.0.windows.1 and Clink to 1.4.4.\n\n### Adds\n\n- Add `show_warning` function to `vendor\\lib\\lib_console.cmd` for showing warning messages in yellow.\n\n## [1.3.20](https://github.com/cmderdev/cmder/tree/v1.3.20) (2022-03-18)\n\n### Changes\n\n- Update Git for Windows to 2.38.0.windows.1\n- Update Clink to 1.3.47\n- Update ConEmu to 22.08.07\n\n### Fixes\n\n- Fix #2740\n- Fix find and use latest Git install always using vendored Git.\n- Fix using Git from vendored Git and other Git for Windows tools from other Git in path.\n- Remove setting `term=cygwin` in `init.bat` to fix random `ABCD` characters when using arrow keys in `vim`.\n  - See: [Sometimes pressing on arrow keys prints symbols #1691](https://github.com/Maximus5/ConEmu/issues/169)\n- Fix #2654: blank space added between {cwd} and version_control variable by @geekrumper in https://github.com/cmderdev/cmder/pull/2661\n- Fix #2659: Use get_hg_branch() to get Mercurial branch information. by @vsajip in https://github.com/cmderdev/cmder/pull/2660\n- Fix Git prompt branch when using Git worktree by @daxgames in https://github.com/cmderdev/cmder/pull/2680\n- Add optional clink async prompt update for svn status by @Mikaz-fr in https://github.com/cmderdev/cmder/pull/2703\n- Better bat by @daxgames in https://github.com/cmderdev/cmder/pull/2742\n- Related to #2654: Move space from \"{git}{hg}{svn}\" to individual parts by @DRSDavidSoft in https://github.com/cmderdev/cmder/pull/2738\n- Use TaskDialog instead of MessageBox (Fixes Builds) by @DRSDavidSoft in https://github.com/cmderdev/cmder/pull/2746\n- Add bin\\cmder_shell.cmd by @DRSDavidSoft in https://github.com/cmderdev/cmder/pull/2747\n- Fix build system scripts (closes #2723) by @DRSDavidSoft in https://github.com/cmderdev/cmder/pull/2748\n- Custom option for launcher title by @DRSDavidSoft in https://github.com/cmderdev/cmder/pull/2752\n- Use Github Actions to build and release by @MartiUK in https://github.com/cmderdev/cmder/pull/2725\n- Re-factor the build script to distinguish each step by @DRSDavidSoft in https://github.com/cmderdev/cmder/pull/2758\n\n## [1.3.19](https://github.com/cmderdev/cmder/tree/v1.3.19) (2022-01-15)\n\n### Changes\n\n- Update Git for Windows to 2.34.0\n- Update to Clink 1.2.46\n- Update to stable ConEmu 210912\n- Do not rely on having a `%cmder_root%\\config\\cmder_prompt_config.lua`\n\n### Adds\n\n- PowerShell Git version Discovery - See #2373 for the full proposal.\n  - Find user installed Git on Path\n    - If found\n      - if newer than Cmder embedded Git\n        - Use its existing Path config and completely ignore embedded Git.\n      - Else if Cmder embedded Git exists and is newer\n        - Match User installed Git path config using Cmder embedded Git folders.\n    - Else if Cmder embedded Git exists\n      - Add Cmder embedded Git folders to the path.\n        - `$env:cmder_root\\vendor\\git-for-windows\\cmd;$env:path`\n        - `$env:path;$env:cmder_root\\vendor\\git-for-windows\\usr\\bin`\n        - `$env:path;$env:cmder_root\\vendor\\git-for-windows\\mingw64\\bin`\n- Configurable prompt for `cmd.exe` sessions.  See `%cmder_root%\\config\\cmder_prompt_config.lua`\n  - Configurable colors\n  - Option to change `λ` to another character.\n  - Option to add `[user]@[host]` to the prompt\n  - Option to use of `~` to represent `$HOME` folder.\n  - Option to use folder name vs. full working directory path in prompt.\n  - Option to use single line prompt.\n\n### Fixes\n\n- Git prompt opt-out works better with additional changes to `clink-completions`\n\n## [1.3.18](https://github.com/cmderdev/cmder/tree/v1.3.18) (2021-3-26)\n\n### Changes\n\n- Update to Clink 1.1.45 to fix #2451, #2465,  and #2473\n- Update to ConEmu v21.03.04\n- `init.bat` auto migrates the history alias to use `clink history` if required.\n- Remove Tilde match from clink.lua in favor of builtin Clink capability.\n\n## [1.3.17](https://github.com/cmderdev/cmder/tree/v1.3.17) (2020-12-23)\n### Fixes\n\n- [bug] Running `alias ..=cd ..` removes other aliases #2394\n- Switch to @chrisant996 [Clink](https://github.com/chrisant996/clink/) v1.1.10 to fix Clink newer Windows 10 releases.\n- Fix `\\Git\\cmd\\git.exe found. was unexpected at this time.`\n- Documentation fixes.\n\n### Changes\n\n- Update Git to 2.29.0\n- Improve `init.bat` Speed\n- Add `systeminfo.exe` output to iag scripts.\n\n## [1.3.16](https://github.com/cmderdev/cmder/tree/v1.3.16) (2020-07-29)\n\n### Fixes\n\n* Merge pull request #2357 from FloSchwalm/fix-git-version-comparison  [Dax T Games]\n* Merge pull request #2339 from daxgames/fix_global_vars_vscode_err  [Dax T Games]\n\n### Changes\n\n* Merge pull request #2358 from FloSchwalm/update-to-git-2.28  [Dax T Games]\n\n## [1.3.15](https://github.com/cmderdev/cmder/tree/v1.3.15) (2020-06-26)\n\n* Fixes #2247, fixes #2254 [#2265](https://github.com/cmderdev/cmder/pull/2265)\n* Clink path get broken if clink-completions content is created in a different order #2278Clink path get broken if clink-completions content is created in a different order [#2278](https://github.com/cmderdev/cmder/pull/2278)\n* Move Git functions to `lib/git.bat` [#2293](https://github.com/cmderdev/cmder/pull/2293)\n* Fix Cmder issue #2290 [#2294](https://github.com/cmderdev/cmder/pull/2294)\n* Update git for windows to 2.26.2 [#2308](https://github.com/cmderdev/cmder/pull/2308)\n* Update README.md #2323Update README.md [#2323](https://github.com/cmderdev/cmder/pull/2323)\n* Added support for setting custom icons for Cmder window [#2335](https://github.com/cmderdev/cmder/pull/2335)\n* Fix and enhance enhance_path_recursive [#2311](https://github.com/cmderdev/cmder/pull/2311)\n\n## [1.3.14](https://github.com/cmderdev/cmder/tree/v1.3.14) (2020-01-08)\n\n### Fixes\n\n* Pull Request: [#2222](https://github.com/cmderdev/cmder/pull/2222)\n  * Cmder v1.3.13 init script fails. [#2218](https://github.com/cmderdev/cmder/issues/2218)\n  * Git & env related error messages. [#2220](https://github.com/cmderdev/cmder/issues/2220)\n  * Latest addition of \"--nolog\" clink breaks cmd prompts. [#2166](https://github.com/cmderdev/cmder/issues/2166)\n  * `/nix_tools 0` should prevent adding `%GIT_INSTALL_ROOT%\\mingw64\\bin` to PATH. [#2214](https://github.com/cmderdev/cmder/issues/2214)\n\n### Changes\n\n* Update Git for Windows to 2.24.1.windows.2\n  * Pull Request: [#2237](https://github.com/cmderdev/cmder/pull/2237)\n* Update clink-completions to 0.3.5\n  * Pull Request: [#2223](https://github.com/cmderdev/cmder/pull/2223)\n\n## [1.3.13](https://github.com/cmderdev/cmder/tree/v1.3.13) (2019-11-03)\n\n### Changes\n\n* Update to ConEmu 19.10.12\n\n### Adds\n\n* #2197, #1364, #447 Add ability to disable git status either globally or for individual repos.\n  * To disable git status globally add the following to `~/.gitconfig` or locally for a single repo `[repo]/.git/config`:\n\n    ```\n    [cmder]\n      status = false\n    ```\n\n* #2174 `--` Syntax to pass command line options to ConEmu.\n* Disable Clink Logging\n* Add `~` tab completion.\n\n\n### Fixes\n\n* Fix #2191: profile.ps1: CheckGit does not export $gitLoaded\n* Fix #2192: Set default prompt hooks before loading user profile\n* Fix #2097, #1899: PowerShell foreground color changing to green\n* Fix #1979: Update Clink Completions to 0.3.4\n* Fix #1678: Cmder corrupting path with `!` in Cmder folder path.\n\n\n## [1.3.12](https://github.com/cmderdev/cmder/tree/v1.3.12) (2019-08-19)\n\n### Fixes\n\n* Pull Request: [#2113](https://github.com/cmderdev/cmder/pull/2113)\n  * Add `vendor\\bin\\vscode_init.cmd` for use with Visual Studio Code\n  * Fixes [#2118](https://github.com/cmderdev/cmder/issues/2118)\n  * Fixes [#1985](https://github.com/cmderdev/cmder/issues/1985)\n* Pull Request: [#2106](https://github.com/cmderdev/cmder/pull/2106)\n  * Portable Git requires running `post-install.bat` which deletes itself when done.  This was not happening.\n  * Resolves [#2105](https://github.com/cmderdev/cmder/issues/2105)\n* Pull Request: [#2002](https://github.com/cmderdev/cmder/pull/2002)\n  * Updated the HG prompt code to use the '-ib' option to 'hg id' so the branch name is always available, regardless of the state of the working copy\n\n### Changes\n\n* Pull Request: [#2055](https://github.com/cmderdev/cmder/pull/2055)\n  * Upgrade git to 2.21.0\n  * Provide default settings for Clink that updates the history file in real time\n    * Turn this on in existing Cmder using `clink set history_io 1`\n  * Allow clink disable by setting CMDER_CLINK=0 before starting task\n* Pull Request: [#2068](https://github.com/cmderdev/cmder/pull/2068)\n  * Print Index in History Command Output.\n  * Sets default `history_expand_mode = 3` in initial Clink Settings.\n\n### Adds\n\n* Pull Request  : [#2096](https://github.com/cmderdev/cmder/pull/2096)\n  * Question issue: [#2094](https://github.com/cmderdev/cmder/issues/2094)\n  * New argument created to ConEmu forwarding arguments.\n    * Syntax: `/x [ConEmu extras arguments]`\n    *   e.g.: `Cmder.exe /x \"-min -tsa\"`\n\n* Pull Request: [#2072](https://github.com/cmderdev/cmder/pull/2072)\n  * New alias create [alias] [alias command] syntax\n    * Based on [#1750](https://github.com/cmderdev/cmder/pull/1750)\n    * Syntax: `alias create [alias] [alias command]`\n\n## [1.3.11](https://github.com/cmderdev/cmder/tree/v1.3.11) (2018-12-22)\n\n### Fixes\n\n* Fix uncommenting `call ssh-agent` in `user_profile.cmd` breaks Cmder prompt. [#1990](https://github.com/cmderdev/cmder/issues/1990), [#1807](https://github.com/cmderdev/cmder/issues/1807), [#1785](https://github.com/cmderdev/cmder/issues/1785), [#1885](https://github.com/cmderdev/cmder/issues/1885)\n  * Pull Request: [#1999](https://github.com/cmderdev/cmder/issues/1999) fix ssh-agent call in user_profile.cmd.default\n* Unable to use '%' character in git branch names [#1779](https://github.com/cmderdev/cmder/issues/1779)\n  * Pull Request: [#1991](https://github.com/cmderdev/cmder/issues/1991) add percent escaping for string.gsub\n* sort command, unix vs windows (/usr/bin/sort vs sort.exe) [#1931](https://github.com/cmderdev/cmder/issues/1931)\n  * Pull Request: [#1988](https://github.com/cmderdev/cmder/issues/1988) Prefer /nix_tools option\n\n### Adds\n\n* [#1988](https://github.com/cmderdev/cmder/issues/1988) Prefer /nix_tools option\n* [#1982](https://github.com/cmderdev/cmder/issues/1982) make /register work with /single\n* [#1975](https://github.com/cmderdev/cmder/issues/1975) Add `/nix_tools 0` option to init.bat to prevent adding !GIT_INSTALL_ROOT!\\usr\\bin to PATH\n\n\n### Changes\n\n* [#1987](https://github.com/cmderdev/cmder/issues/1987) Use default files for default user profiles\n\n## [1.3.10](https://github.com/cmderdev/cmder/tree/v1.3.10) (2018-11-30)\n\n### Fixes\n\n* Replaces Cmder Release v1.3.9 which has been removed.\n* /c now completely separates user config including ConEmu configuration. This enables true multi-user Cmder with no configuration collisions. See PR #1949.\n* Fix #1959 Start cmder \"find\" errors. See PR #1961.\n* Fix #1956 Git detection should use env from git install root. See PR #1969\n\n### Adds\n\n* /m initially creates %cmder_root%/config/ConEmu-%computername%.xml for users that want per computer ConEmu configuration with shared init scripts. See PR #1949.\n* /register now recognizes /c [path] and creates an appropriate Cmder Here shell context menu. See PR #1949.\n\n## [1.3.8](https://github.com/cmderdev/cmder/tree/v1.3.8) (2018-11-10)\n\n### Fixes\n\n* Fix \\vendor\\bin\\timer.cmd was unexpected at this time. on session start.\n\n## [1.3.7](https://github.com/cmderdev/cmder/tree/v1.3.7) (2018-11-10)\n## Updated components\n\n* ConEmu to 180626\n* Update Git to 2.19.0\n\n## Fixes:\n\n* Cmder now opens in the in the current working dir\n\n## Commits\n### Aaron Arney (1):\n\n* Update README\n\n### Arion Roberto Krause (1):\n\n* Fixed typo\n\n### Benjamin Staneck (8):\n\n* Revert \"replace user-aliases with user_aliases\"\n* replace user-aliases with user_aliases\n* better fix for #1265\n* Revert \"sanitize dir before assigning to prompt\"\n* sanitize dir before assigning to prompt\n* Update CHANGELOG.md\n\n### Bob Hood (1):\n\n* Refactored the Mercurial prompt code to be more efficient.\n\n### David Refoua (1):\n\n* fix some spelling issues\n\n### Dax T Games (30):\n\n* Revert \"Ignore %cmder_root%\\config (#1945)\"\n* Ignore %cmder_root%\\config (#1945)\n* Add /f for fast init. (#1942)\n* add diag helper scripts and adds to the path (#1918)\n* Fix #1806 #1675 (#1870)\n* Profile.ps1 (#1796)\n* Fix lib base (#1794)\n* Little Changes\n* Fixed move of default ConEmu.xml to the vendor folder\n* ignore all of config folder\n* move default comemu.xml to vendor folder\n* fixes\n* more headers\n* init.bat update for cexec\n* git prompt yellow\n* fix user lua and git detection\n* allow conditionally setting environment variables\n* added exit codes\n* flag_exists.cmd to flag_exec.cmd, also to lib as an option\n* fixed\n* handle start dir args with trailing \"\n* cleanup\n* '.gitignore'\n* verbose output\n* cmder_shell settings\n* add cmder_shell method\n* replace - with \\_ in debug-output and verbose-output\n* Trying to get tcc working\n* move user-aliases.cmd to user_aliases.cmd\n* move bin\\alias.bat to vendor\\bin\\alias.cmd\n* fix /unregister\n\n### Dmitri S. Guskov (2):\n\n* PowerShell 5.1 compatibility\n* Update profile.ps1\n\n### Gregory Lucas (1):\n\n* Initialize time_init to fix init error message\n\n### Josef Pihrt (2):\n\n* Fix typos, remove escaping inside inline code, replace single quote with backtick\n* Fix typo and broken link\n\n### Merlin (1):\n\n* Remove duplicate Install-Module detection\n\n### Nicolas Arnaud-Cormos (1):\n\n* Ensure the right git path is found in case of shim.\n\n### Thorsten Sommer (1):\n\n* Fixed spelling\n\n### gaoslin (1):\n\n* Update init.bat\n\n### leochien0102 (1):\n\n* fix the 'was unexpected at this time.'\n\n### xiazeyu (4):\n\n* chore: unite slash\n* docs: update to latest usage\n* refactor: reduce global variable usage, fixed quote issue, added parameters support\n* doc: fix typo\n\n### xiazeyu_2011 (8):\n\n* docs: migrated instructions to the wiki pages\n* rename /bin/have.bat to /vendor/lib/flag_exists.cmd\n* fix: bug when no argument is passed in\n* docs: update doc for have.bat\n* feat: add have.bat as a wrapper\n* Optimize comments of using arguments in user-profile.cmd\n* fix conflict with init.bat build-in command parser, update user-profile.cmd\n* Pass arguments to user-profile.cmd\n\n刘祺 (1):\n\n* add LANG support\n\n## [1.3.6](https://github.com/cmderdev/cmder/tree/v1.3.6) (2018-05-30)\n**Updated components:**\n\n* Git updated to v2.17.1.windows.2\n* ConEmu updated to 180528\n\n**Updates:**\n\n* Cmder now opens in the in the current working dir\n* TBD\n\n## [1.3.6-pre2](https://github.com/cmderdev/cmder/tree/v1.3.6-pre2) (2018-03-01)\n\n**Updated components:**\n\n* Git updated to v2.16.3.windows.1\n* ConEmu updated to 180318\n\n**Updates:**\n\n* Removed all sub routines from `init.bat` and made them into importable libraries that can be used in any `*.bat|cmd` file.\n  * Libraries are in `%cmder_root%\\vendor\\lib`.\n  * Import libraries into any `*.bat|cmd` file using `call \"%cmder_root%\\vendor\\lib\\[library file name]\"`.\n  * Call library methods by typing `\"%lib_path% enhance_path \"c:\\bin\"`.\n  * Get help on library method usage by typing `\"%cmder_root%\\vendor\\lib\\[library file name]\" /h`.\n\n## [1.3.6-pre1](https://github.com/cmderdev/cmder/tree/v1.3.6-pre1) (2018-03-01)\n\n**Fixed bugs:**\n\n* Fixed Git version check recently added to master.\n\n**Updates:**\n\n* Modified Cmder tasks in default ConEmu.xml to allow easily adding command line args for init.bat by adding some quotes. This resulted in a ton of misc changes to this file. See Adds below.\n* Reworked `cmder.exe` command line argument handling to make it more flexible and easily added to.\n* Reworked README.md tables to make them more readable in editors.\n\n**Implemented enhancements:**\n\n* Added `cmder.exe` command line args documentation to `README.md`.\n* Added `:enhance_path` method to vendor\\init.bat that modifies the path only if required.\n  * To prepend: `call :enhance_path \"%cmder_root%\"`\n  * to append: `call :enhance_path \"%cmder_root%\" append`\n* Added `:enhance_path_recursive` method to vendor\\init.bat that adds a path and all its sub directories to the path if required.\n  * Max recurse depth default is '1' configurable using `init.bat /max_depth [1-5]`. 6+ results in error.\n  * To prepend and go 3 levels deep: `call :enhance_path \"%cmder_root%\" 3`\n  * To append and go 2 levels deep: `call :enhance_path \"%cmder_root%\" 2 append`\n* Added ability to init.bat to accept command line args and documented them in README.md. Allows users to change the behaviour of init.bat without editing the file.\n\n| Argument                      | Description                                                                                      | Default                                |\n| ----------------------------- | ------------------------------------------------------------------------------------------------ | -------------------------------------- |\n| /c [user cmder root]          | Enables user bin and config folders for 'Cmder as admin' sessions due to non-shared environment. | not set                                |\n| /d                            | Enables debug output.                                                                            | not set                                |\n| /git_install_root [file path] | User specified Git installation root path.                                                       | '%CMDER_ROOT%\\vendor\\Git-for-Windows'  |\n| /home [home folder]           | User specified folder path to set `%HOME%` environment variable.                                 | '%userprofile%'                        |\n| /max_depth [1-5]              | Define max recurse depth when adding to the path for `%cmder_root%\\bin` and `%cmder_user_bin%`   | 1                                      |\n| /svn_ssh [path to ssh.exe]    | Define %SVN_SSH% so we can use git svn with ssh svn repositories.                                | '%GIT_INSTALL_ROOT%\\bin\\ssh.exe'       |\n| /user_aliases [file path]     | File path pointing to user aliases.                                                              | '%CMDER_ROOT%\\config\\user-aliases.cmd' |\n| /v                            | Enables verbose output.                                                                          | not set                                |\n\n* Added new `cmder.exe /C \\<path\\>` argument\n\n  * To use run Cmder.exe with \"/C\" command line argument. Example: `cmder.exe /C %userprofile%\\cmder_config`\n  * To use run with `Cmder as Admin` sessions you must specify \"/c\" command line argument to `init.bat` in tasks. See [README.md](./Readme.md) for details.\n  * Enables shared Cmder install with Non-Portable Individual User Config\n  * Supported by all supported shells (cmder, PowerShell, git bash, and external bash)\n  * This will create the following directory structure if it is missing.\n\n    ```plain\n    c:\\users\\[username]\\cmder_config\n    ├───bin\n    └───config\n        └───profile.d\n    ```\n\n  * Shell init scripts run in the following order\n    1. %cmder_root%\\config\\profile.d\\*.[cmd|ps1|sh]\n    1. %cmder_root%\\config\\user-profile.[cmd|ps1|sh]\n    1. %userprofile%\\cmder_config\\config\\profile.d\\*.[cmd|ps1|sh]\n    1. %userprofile%\\cmder_config\\config\\user-profile.[cmd|ps1|sh]\n\n## [1.3.5](https://github.com/cmderdev/cmder/releases/tag/v1.3.5) (2018-02-11)\n\nThis is the first Cmder release that comes with Git for Windows in the 64bit version. If you are still using a 32bit version, you have to fix this yourself.\n\n**Updated components:**\n\n* Git updated to v2.16.1.windows.4\n* clink updated to 0.4.9 (official version)\n* ConEmu updated to 180206\n\n**Fixed bugs:**\n\n* use /dir Switch instead of CMDER_START (previously [\\#921](https://github.com/cmderdev/cmder/pull/921)) [\\#1609](https://github.com/cmderdev/cmder/pull/1609) ([Stanzilla](https://github.com/Stanzilla))\n* add config/settings to .gitignore [\\#1592](https://github.com/cmderdev/cmder/pull/1592) ([daxgames](<(https://github.com/daxgames)>))\n* Upgrade #1591 ([daxgames](<(https://github.com/daxgames)>))\n* Fix startup folder issue [\\#1547](https://github.com/cmderdev/cmder/pull/1547) (dr-tony-lin)\n* Fix alias.bat handling \"user-aliases.cmd\" with spaces [\\#1531](https://github.com/cmderdev/cmder/pull/1531) ([Varriount](https://github.com/Varriount))\n* Compatible with Visual Studio Code (cmd) [\\#1416](https://github.com/cmderdev/cmder/pull/1416) ([gucong3000](https://github.com/gucong3000))\n\n## [1.3.4](https://github.com/cmderdev/cmder/releases/tag/v1.3.4) (2017-11-03)\n\nWe now use a forked version of clink since its original author is missing and we needed Windows 10 compatibility.\n\n**Updated components:**\n\n* Git: v2.15.0.windows.1\n\n**Fixed bugs:**\n\n* Fix lambada color after a ConEmu change: [a8d3261](https://github.com/cmderdev/cmder/commit/a8d32611a9b93cfb58f0318ae4b8041bc8a86c68)\n* Compatible with Visual Studio Code (PowerShell): [\\#1417](https://github.com/cmderdev/cmder/pull/1417)\n* Make default tasks respect \"Startup directory for new process\": [b58ff9b](https://github.com/cmderdev/cmder/commit/b58ff9bb539d7f908f427fa34f377e1513fcd825)\n\n## [1.3.3](https://github.com/cmderdev/cmder/releases/tag/v1.3.3) (2017-10-28)\n\nWe now use a forked version of clink since its original author is missing and we needed Windows 10 compat.\n\n**Updated components:**\n\n* Git: v2.14.3.windows.1\n* ConEmu: 170910\n* Clink: 0.4.9-FORK\n* Clink-Completions: 0.3.3\n\n## [1.3.2](https://github.com/cmderdev/cmder/releases/tag/v1.3.2) (2016-12-01)\n\n**Implemented enhancements:**\n\n* Change appveyor.yml to publish all resulting artifacts from builds. [\\#717](https://github.com/cmderdev/cmder/issues/717)\n* Stuff that should not be in the release zips [\\#662](https://github.com/cmderdev/cmder/issues/662)\n* Make cmder auto start with windows and auto minimize to the status bar. [\\#532](https://github.com/cmderdev/cmder/issues/532)\n* v1.2.0: Errors because of PowerShell execution policy [\\#483](https://github.com/cmderdev/cmder/issues/483)\n* Updating Vendors with chocolatey [\\#442](https://github.com/cmderdev/cmder/issues/442)\n* Alias without its opposite [\\#281](https://github.com/cmderdev/cmder/issues/281)\n* Improve new UX [\\#230](https://github.com/cmderdev/cmder/issues/230)\n* Different Font for the Lambda [\\#211](https://github.com/cmderdev/cmder/issues/211)\n* Git Credential Cache [\\#184](https://github.com/cmderdev/cmder/issues/184)\n* Crawling for executables in /bin [\\#61](https://github.com/cmderdev/cmder/issues/61)\n* Include Scoop as package manager [\\#42](https://github.com/cmderdev/cmder/issues/42)\n* Complete aliases on tab [\\#38](https://github.com/cmderdev/cmder/issues/38)\n* Path ordering issue - wrong find.exe executes by default [\\#37](https://github.com/cmderdev/cmder/issues/37)\n* User ConEmu cfg [\\#1109](https://github.com/cmderdev/cmder/pull/1109) ([daxgames](https://github.com/daxgames))\n* Msys bash [\\#702](https://github.com/cmderdev/cmder/pull/702) ([daxgames](https://github.com/daxgames))\n* Added code to check for the existence of a customized ini file.. [\\#427](https://github.com/cmderdev/cmder/pull/427) ([kodybrown](https://github.com/kodybrown))\n* New build and pack scripts [\\#152](https://github.com/cmderdev/cmder/pull/152) ([samvasko](https://github.com/samvasko))\n* Ability to change Font Size using Ctrl+MouseWheel [\\#125](https://github.com/cmderdev/cmder/pull/125) ([saaguero](https://github.com/saaguero))\n\n**Fixed bugs:**\n\n* Git process not ending. [\\#1060](https://github.com/cmderdev/cmder/issues/1060)\n* Git: fatal: Unable to create '.git/index.lock': File exists. [\\#1044](https://github.com/cmderdev/cmder/issues/1044)\n* Aliases with environment variables not working [\\#684](https://github.com/cmderdev/cmder/issues/684)\n* msysgit is not injected into path. [\\#493](https://github.com/cmderdev/cmder/issues/493)\n* cmder display error [\\#491](https://github.com/cmderdev/cmder/issues/491)\n* Path issues on startup [\\#487](https://github.com/cmderdev/cmder/issues/487)\n* Missing DLL: MSVCP140.dll [\\#482](https://github.com/cmderdev/cmder/issues/482)\n* Single mode does not set current directory [\\#420](https://github.com/cmderdev/cmder/issues/420)\n* Fails to parse path in PATH system variable with '&' [\\#185](https://github.com/cmderdev/cmder/issues/185)\n* Cmder hangs after idling for a few minutes or when clicking above the cursor [\\#109](https://github.com/cmderdev/cmder/issues/109)\n* No color scheme in tabs opened as Administrator [\\#94](https://github.com/cmderdev/cmder/issues/94)\n* Bug in alias.bat [\\#52](https://github.com/cmderdev/cmder/issues/52)\n* Clicking/selecting text on terminal causes slowdown [\\#40](https://github.com/cmderdev/cmder/issues/40)\n\n**Closed issues:**\n\n* some kind of project profile [\\#1175](https://github.com/cmderdev/cmder/issues/1175)\n* Does cmder support the notion of a plugin [\\#1173](https://github.com/cmderdev/cmder/issues/1173)\n* Cygwin? [\\#1155](https://github.com/cmderdev/cmder/issues/1155)\n* CMDER ERROR [\\#1154](https://github.com/cmderdev/cmder/issues/1154)\n* Remapping hot keys [\\#1150](https://github.com/cmderdev/cmder/issues/1150)\n* What is mintty in here? [\\#1149](https://github.com/cmderdev/cmder/issues/1149)\n* No make [\\#1146](https://github.com/cmderdev/cmder/issues/1146)\n* How can I set the path of cmder properly at the start ? [\\#1136](https://github.com/cmderdev/cmder/issues/1136)\n* PowerShell Slow Startup [\\#1130](https://github.com/cmderdev/cmder/issues/1130)\n* python for cmder [\\#1129](https://github.com/cmderdev/cmder/issues/1129)\n* Haskell repl \\(ghci\\) crashes only in cmder works elsewhere [\\#1125](https://github.com/cmderdev/cmder/issues/1125)\n* Latest update causes `error: failed to push some refs to git@gitlab....` [\\#1124](https://github.com/cmderdev/cmder/issues/1124)\n* Connection to SSH agent refused [\\#1123](https://github.com/cmderdev/cmder/issues/1123)\n* Slow on startup [\\#1122](https://github.com/cmderdev/cmder/issues/1122)\n* Shell script fail [\\#1121](https://github.com/cmderdev/cmder/issues/1121)\n* Ctrl+` shorcut does not work in version 161002 [\\#1113](https://github.com/cmderdev/cmder/issues/1113)\n* Git LFS not working with newer cmder versions [\\#1112](https://github.com/cmderdev/cmder/issues/1112)\n* Processes dying due to lack of memory? [\\#1106](https://github.com/cmderdev/cmder/issues/1106)\n* Broken links [\\#1103](https://github.com/cmderdev/cmder/issues/1103)\n* \"\\config\\profile.d\\Active\"' is not recognized as an internal or external command, operable program or batch file. [\\#1102](https://github.com/cmderdev/cmder/issues/1102)\n* Can't run 'git commit' [\\#1098](https://github.com/cmderdev/cmder/issues/1098)\n* Unable to use keybase K:\\ [\\#1096](https://github.com/cmderdev/cmder/issues/1096)\n* Can not Run mintty in v1.3.1 [\\#1094](https://github.com/cmderdev/cmder/issues/1094)\n* Shortcut for new tab ?? [\\#1093](https://github.com/cmderdev/cmder/issues/1093)\n* Bad symbols [\\#1092](https://github.com/cmderdev/cmder/issues/1092)\n* cmder turns slow when using GIT command after update to the latest version [\\#1091](https://github.com/cmderdev/cmder/issues/1091)\n* $ENV:CMDER_START has a double quote too much [\\#1079](https://github.com/cmderdev/cmder/issues/1079)\n* Incorrect checksum ? [\\#1075](https://github.com/cmderdev/cmder/issues/1075)\n* Unplugging the battery detaches the Quake console [\\#1074](https://github.com/cmderdev/cmder/issues/1074)\n* Mouse right click copy and paste at same time. [\\#1072](https://github.com/cmderdev/cmder/issues/1072)\n* strange display on Chinese windows 8 [\\#1071](https://github.com/cmderdev/cmder/issues/1071)\n* Permanently add all SSH keys to ssh-agent [\\#1062](https://github.com/cmderdev/cmder/issues/1062)\n* Wrong dir privilege in bash on Windows ? [\\#1059](https://github.com/cmderdev/cmder/issues/1059)\n* Invalid [\\#1058](https://github.com/cmderdev/cmder/issues/1058)\n* Python virtualenv not activating in Windows 10 Cmder [\\#1057](https://github.com/cmderdev/cmder/issues/1057)\n* prompt is Garbled [\\#1054](https://github.com/cmderdev/cmder/issues/1054)\n* startup is so slow [\\#1053](https://github.com/cmderdev/cmder/issues/1053)\n* ~ doesn't work in cmder? [\\#1051](https://github.com/cmderdev/cmder/issues/1051)\n* \\[Solved myself\\] .bash_history and winscp.rnd are not in Cmder's directories [\\#1050](https://github.com/cmderdev/cmder/issues/1050)\n* First run config fails with exclamation in path [\\#1049](https://github.com/cmderdev/cmder/issues/1049)\n* Can't run npm or any Node Module on Cmder \\(Windows 7\\) [\\#1047](https://github.com/cmderdev/cmder/issues/1047)\n* Cannot start cmder [\\#1046](https://github.com/cmderdev/cmder/issues/1046)\n* About letter overlapping [\\#1045](https://github.com/cmderdev/cmder/issues/1045)\n* %cmder_root%\\config\\user-aliases.ps1 is not created on a fresh install of v1.3.0 [\\#1040](https://github.com/cmderdev/cmder/issues/1040)\n* Cmder looking for user-aliases in wrong path [\\#1039](https://github.com/cmderdev/cmder/issues/1039)\n* multiple hg.exe processes spawned [\\#1035](https://github.com/cmderdev/cmder/issues/1035)\n* cls command spacing as well as spacing for input not wrapping to next line, global env vars not highlighted [\\#1032](https://github.com/cmderdev/cmder/issues/1032)\n* Cmder getting raped by dr.web quarantine system [\\#1031](https://github.com/cmderdev/cmder/issues/1031)\n* cmder no longer using path variables [\\#1029](https://github.com/cmderdev/cmder/issues/1029)\n* Can I switch vim in cmder to gvim installed by myself? [\\#1021](https://github.com/cmderdev/cmder/issues/1021)\n* \\[Windows10 Bash\\] Could use UP/Down/Home/End....key in cmder [\\#1017](https://github.com/cmderdev/cmder/issues/1017)\n* {lamb} problem again... :-\\( [\\#1012](https://github.com/cmderdev/cmder/issues/1012)\n* High-lighting text and copying is broken [\\#1008](https://github.com/cmderdev/cmder/issues/1008)\n* issue with updating ConEmuPack.160619.7z [\\#1006](https://github.com/cmderdev/cmder/issues/1006)\n* using touch in cli doesn't work anymore with latest update [\\#1002](https://github.com/cmderdev/cmder/issues/1002)\n* When resizing cmder window an extra path line appears. [\\#1000](https://github.com/cmderdev/cmder/issues/1000)\n* v1.3.0-pre doesn't support running inside program files folder [\\#998](https://github.com/cmderdev/cmder/issues/998)\n* Text cursor disappears when window resized [\\#997](https://github.com/cmderdev/cmder/issues/997)\n* how to use clip command in the cmder? [\\#996](https://github.com/cmderdev/cmder/issues/996)\n* {git}{hg} appearing in path print out rather than the values they represent [\\#995](https://github.com/cmderdev/cmder/issues/995)\n* Don't just prepend the git path. [\\#994](https://github.com/cmderdev/cmder/issues/994)\n* `ls` et al slow after updating cmder [\\#993](https://github.com/cmderdev/cmder/issues/993)\n* Attempt to concatenate local 'package_version' \\(a nil value\\) [\\#991](https://github.com/cmderdev/cmder/issues/991)\n* After auto-update git/hg indication and lambda in prompt are broken [\\#990](https://github.com/cmderdev/cmder/issues/990)\n* Lack of Proxy Setting [\\#989](https://github.com/cmderdev/cmder/issues/989)\n* Clink completion failing [\\#987](https://github.com/cmderdev/cmder/issues/987)\n* \\ [\\#986](https://github.com/cmderdev/cmder/issues/986)\n* default configuration does not support Chinese named file listing with ls [\\#985](https://github.com/cmderdev/cmder/issues/985)\n* When cmder opened in visual studio code, there is wrong path [\\#981](https://github.com/cmderdev/cmder/issues/981)\n* Is It Possible to recover the files removed by `rm -rf` [\\#979](https://github.com/cmderdev/cmder/issues/979)\n* . [\\#973](https://github.com/cmderdev/cmder/issues/973)\n* right click context menu open cmd without color [\\#972](https://github.com/cmderdev/cmder/issues/972)\n* git branch name is not red when there are pending changes [\\#967](https://github.com/cmderdev/cmder/issues/967)\n* git checkout autocomplete is showing files [\\#966](https://github.com/cmderdev/cmder/issues/966)\n* Cmder proxy Ubuntu Bash on Windows [\\#964](https://github.com/cmderdev/cmder/issues/964)\n* Update version on Chocolatey [\\#959](https://github.com/cmderdev/cmder/issues/959)\n* ConEmu Injecting hooks fail [\\#958](https://github.com/cmderdev/cmder/issues/958)\n* chocolatey.lua:1: module 'tables' not found [\\#957](https://github.com/cmderdev/cmder/issues/957)\n* cmder \\(from cmder_mini.zip\\) crashes on startup on windows 7 pro x64 [\\#955](https://github.com/cmderdev/cmder/issues/955)\n* Feature: add some extra prompt-tuning hooks to profile.ps1 from user-profile.ps1 [\\#950](https://github.com/cmderdev/cmder/issues/950)\n* Provide alternate icon colors [\\#947](https://github.com/cmderdev/cmder/issues/947)\n* \"\\cmder\\config\\settings was unexpected at this time\" and {lamb} is shown instead of lambda symbol [\\#937](https://github.com/cmderdev/cmder/issues/937)\n* Cannot save settings [\\#936](https://github.com/cmderdev/cmder/issues/936)\n* init.bat fails and shows {lamb} and {git} [\\#935](https://github.com/cmderdev/cmder/issues/935)\n* Cmder minimizing when losing focus. [\\#934](https://github.com/cmderdev/cmder/issues/934)\n* init.bat always uses \"npm\" as window title [\\#933](https://github.com/cmderdev/cmder/issues/933)\n* `ls` return vertical list instead of horizontal? [\\#924](https://github.com/cmderdev/cmder/issues/924)\n* Arrow keys in Windows 10 Linux Subsystem [\\#919](https://github.com/cmderdev/cmder/issues/919)\n* Arrow keys do not work with bash \\(Win10/Linux Subsystem\\) [\\#914](https://github.com/cmderdev/cmder/issues/914)\n* Aliased commands: Syntax Highlighting Lost [\\#912](https://github.com/cmderdev/cmder/issues/912)\n* 'vim' hangs when loading in cmder bash session [\\#910](https://github.com/cmderdev/cmder/issues/910)\n* Unix commands not working in windows 10 [\\#908](https://github.com/cmderdev/cmder/issues/908)\n* git 2.8 ? [\\#905](https://github.com/cmderdev/cmder/issues/905)\n* Confusing \"Settings\" \\> \"Integration\" dialog behavior [\\#904](https://github.com/cmderdev/cmder/issues/904)\n* v1.3.0 antivirus [\\#903](https://github.com/cmderdev/cmder/issues/903)\n* Feature Request: Send to all/group [\\#896](https://github.com/cmderdev/cmder/issues/896)\n* Updating git-for-windows after installing the full cmder? [\\#887](https://github.com/cmderdev/cmder/issues/887)\n* Tab autocompetion for git is inconsistent \\(doesn't work with git add\\) [\\#885](https://github.com/cmderdev/cmder/issues/885)\n* Line-wrapping breaks when using backspace key in a git repo with Cmder mini and Git for Windows. [\\#883](https://github.com/cmderdev/cmder/issues/883)\n* Cmder opens off screen [\\#881](https://github.com/cmderdev/cmder/issues/881)\n* ctrl+l with PowerShell in quake mode clears the first prompt line as well [\\#879](https://github.com/cmderdev/cmder/issues/879)\n* Enconding ? [\\#877](https://github.com/cmderdev/cmder/issues/877)\n* the {cmd} task [\\#876](https://github.com/cmderdev/cmder/issues/876)\n* Failed to start cmder, app crashed [\\#871](https://github.com/cmderdev/cmder/issues/871)\n* Cmder Windows Pinning Issue \\[weird\\] [\\#869](https://github.com/cmderdev/cmder/issues/869)\n* Why not use @ECHO OFF? [\\#868](https://github.com/cmderdev/cmder/issues/868)\n* alias with && doesn't work [\\#859](https://github.com/cmderdev/cmder/issues/859)\n* Having trouble with packaged ConEmu install, how can I point to a different one? [\\#858](https://github.com/cmderdev/cmder/issues/858)\n* path entry for \\<git\\>/cmd instead of \\<git\\>/bin? [\\#853](https://github.com/cmderdev/cmder/issues/853)\n* Cmder lists path on window resize. [\\#851](https://github.com/cmderdev/cmder/issues/851)\n* Alias with multi-word git commit message not working [\\#847](https://github.com/cmderdev/cmder/issues/847)\n* cmder and vim compatibility problem [\\#846](https://github.com/cmderdev/cmder/issues/846)\n* Unable to git pull,push or any action [\\#845](https://github.com/cmderdev/cmder/issues/845)\n* switch to use master a the default development branch [\\#836](https://github.com/cmderdev/cmder/issues/836)\n* Missing git support, install posth-git [\\#834](https://github.com/cmderdev/cmder/issues/834)\n* Git branch information is broken for submodules [\\#833](https://github.com/cmderdev/cmder/issues/833)\n* \"-ExecutionPolicy' is not recognized as an internal or external command\" [\\#830](https://github.com/cmderdev/cmder/issues/830)\n* How to upgrade from v1.1.4.1 to v1.2 ? [\\#825](https://github.com/cmderdev/cmder/issues/825)\n* Startup warning [\\#821](https://github.com/cmderdev/cmder/issues/821)\n* Cmder prompt screwed up with latest Windows 10 Build [\\#820](https://github.com/cmderdev/cmder/issues/820)\n* Cmder does not open in last open window position [\\#816](https://github.com/cmderdev/cmder/issues/816)\n* CMDer won't open Sublime [\\#814](https://github.com/cmderdev/cmder/issues/814)\n* integrating Git for Windows vs. Git for Windows SDK? [\\#813](https://github.com/cmderdev/cmder/issues/813)\n* Installer for cmder? [\\#812](https://github.com/cmderdev/cmder/issues/812)\n* When will the next version be available? [\\#811](https://github.com/cmderdev/cmder/issues/811)\n* Netcat is missing [\\#810](https://github.com/cmderdev/cmder/issues/810)\n* how to use /? to get the help doc in the `cmder` [\\#808](https://github.com/cmderdev/cmder/issues/808)\n* \\[Enhancement\\] PowerShell and Babun \\(cygwin + zsh\\) [\\#807](https://github.com/cmderdev/cmder/issues/807)\n* Cmder - Warning: Missing git support [\\#806](https://github.com/cmderdev/cmder/issues/806)\n* iul [\\#800](https://github.com/cmderdev/cmder/issues/800)\n* Update clink settings [\\#793](https://github.com/cmderdev/cmder/issues/793)\n* how to add the environment variable to the cmder? [\\#792](https://github.com/cmderdev/cmder/issues/792)\n* % variable expansion in config/alias [\\#791](https://github.com/cmderdev/cmder/issues/791)\n* Problems with node [\\#790](https://github.com/cmderdev/cmder/issues/790)\n* Resizing adds new lines [\\#789](https://github.com/cmderdev/cmder/issues/789)\n* How to remove \"Cmder Here\" in the context menu after .\\cmder.exe /REGISTER ALL? [\\#787](https://github.com/cmderdev/cmder/issues/787)\n* \\[v1.2.9\\] Can not alias with env. variables. [\\#784](https://github.com/cmderdev/cmder/issues/784)\n* How should i add a context menu entry? [\\#780](https://github.com/cmderdev/cmder/issues/780)\n* Branch name not visible and vagrant commands not working [\\#778](https://github.com/cmderdev/cmder/issues/778)\n* Run command to start [\\#775](https://github.com/cmderdev/cmder/issues/775)\n* CMDER_START should always be set to USERPROFILE unless explicitly set through /START parameter [\\#772](https://github.com/cmderdev/cmder/issues/772)\n* Startup Error: cmder\\vendor\\profile.ps1 cannot be loaded. [\\#769](https://github.com/cmderdev/cmder/issues/769)\n* How to make Cmder stop displaying warning? [\\#768](https://github.com/cmderdev/cmder/issues/768)\n* Security Warning - cmder\\vendor\\profile.ps1 [\\#767](https://github.com/cmderdev/cmder/issues/767)\n* Unable to install cmder using Install-Package in Windows 10 [\\#762](https://github.com/cmderdev/cmder/issues/762)\n* How do confirm exe's are safe? md5? checksum? [\\#761](https://github.com/cmderdev/cmder/issues/761)\n* Option to disable preview stacking with multiple tabs [\\#758](https://github.com/cmderdev/cmder/issues/758)\n* 'ls' is no longer recognized command [\\#757](https://github.com/cmderdev/cmder/issues/757)\n* I can't run de Cmder.exe [\\#755](https://github.com/cmderdev/cmder/issues/755)\n* Multiple location references when maximizing [\\#753](https://github.com/cmderdev/cmder/issues/753)\n* Clink completions for npm increase cmder startup time for one second [\\#750](https://github.com/cmderdev/cmder/issues/750)\n* Prevent other apps from overwriting the prompt? [\\#749](https://github.com/cmderdev/cmder/issues/749)\n* cmder.exe infected with Variant.Kazy.767238 [\\#748](https://github.com/cmderdev/cmder/issues/748)\n* cmder.exe considered harmful by Bitdefender [\\#744](https://github.com/cmderdev/cmder/issues/744)\n* curl ntlm auth stopped working [\\#741](https://github.com/cmderdev/cmder/issues/741)\n* Sublime Integration fails - Can't find \"C:\\Programs\"? [\\#727](https://github.com/cmderdev/cmder/issues/727)\n* Cmder and gulp, not friend? [\\#725](https://github.com/cmderdev/cmder/issues/725)\n* Antivirus deleting some files in cmder \\(reporting them as infected\\) [\\#724](https://github.com/cmderdev/cmder/issues/724)\n* Windows Defender on Windows 10 finds Trojan in extracted files [\\#713](https://github.com/cmderdev/cmder/issues/713)\n* e. shortcut not working ? [\\#712](https://github.com/cmderdev/cmder/issues/712)\n* \"Cmder here\" doesn't work if set start-up dir [\\#709](https://github.com/cmderdev/cmder/issues/709)\n* Is cmder support scrolling with touch screen? [\\#706](https://github.com/cmderdev/cmder/issues/706)\n* npm_prompt.lua:11: attempt to concatenate local 'package_version' \\(a nil value\\) [\\#700](https://github.com/cmderdev/cmder/issues/700)\n* Cmder \\(cmd.exe\\) startup crashes at clink step [\\#699](https://github.com/cmderdev/cmder/issues/699)\n* Doesn't run cmder.exe [\\#696](https://github.com/cmderdev/cmder/issues/696)\n* Not getting git status in 1.2.9 prompt [\\#692](https://github.com/cmderdev/cmder/issues/692)\n* Tab-Complete paths not working \\[1.2.9\\] [\\#691](https://github.com/cmderdev/cmder/issues/691)\n* The directory be duplicate displayed [\\#689](https://github.com/cmderdev/cmder/issues/689)\n* Don't work at my windows 7 \\(misiing api-ms-win-crt-runtime-l1-1-0.dll\\) [\\#682](https://github.com/cmderdev/cmder/issues/682)\n* Use tab to cycle through auto complete, like the original cmd does? [\\#681](https://github.com/cmderdev/cmder/issues/681)\n* git: 'pull' is not a git command. See 'git --help'. [\\#679](https://github.com/cmderdev/cmder/issues/679)\n* Error in NPM-Prompt [\\#678](https://github.com/cmderdev/cmder/issues/678)\n* msysgit commands not working [\\#675](https://github.com/cmderdev/cmder/issues/675)\n* Restore last session with history on start [\\#672](https://github.com/cmderdev/cmder/issues/672)\n* Restart As Admin bug [\\#669](https://github.com/cmderdev/cmder/issues/669)\n* git for windows 2.6.1 ssh folder [\\#661](https://github.com/cmderdev/cmder/issues/661)\n* der [\\#660](https://github.com/cmderdev/cmder/issues/660)\n* Cannot clean the terminal [\\#659](https://github.com/cmderdev/cmder/issues/659)\n* Cmder do not run if username has spaces between [\\#658](https://github.com/cmderdev/cmder/issues/658)\n* When exiting vim, cursor goes to first line of terminal instead of the end of it [\\#656](https://github.com/cmderdev/cmder/issues/656)\n* Cmder suddenly start crashing on startup [\\#650](https://github.com/cmderdev/cmder/issues/650)\n* Cannot switch to mapped network drive [\\#649](https://github.com/cmderdev/cmder/issues/649)\n* Ctrl + D? [\\#648](https://github.com/cmderdev/cmder/issues/648)\n* Is there any hotkey jump to \"Search\" box? [\\#647](https://github.com/cmderdev/cmder/issues/647)\n* File /vendor/ConEmu-maximus5/ConEmu.exe not found. [\\#646](https://github.com/cmderdev/cmder/issues/646)\n* As admin CMDER_ROOT not set in PowerShell [\\#643](https://github.com/cmderdev/cmder/issues/643)\n* Emoji support [\\#642](https://github.com/cmderdev/cmder/issues/642)\n* Having ls, cat, etc [\\#641](https://github.com/cmderdev/cmder/issues/641)\n* Cmder having Permission Errors for Windows 10 [\\#640](https://github.com/cmderdev/cmder/issues/640)\n* PowerShell - Msys Aliases [\\#639](https://github.com/cmderdev/cmder/issues/639)\n* Problem with install on window 7? [\\#637](https://github.com/cmderdev/cmder/issues/637)\n* Invoke-Expression : The term 'Invoke-Expression' is not recognized [\\#636](https://github.com/cmderdev/cmder/issues/636)\n* it doesn't like Docker [\\#631](https://github.com/cmderdev/cmder/issues/631)\n* Latest release : Windows 7 : Windows cannot find \".../vendor/ConEmu-maximus5/CpmE,u.exe\" [\\#629](https://github.com/cmderdev/cmder/issues/629)\n* Strange Vim behaviour after Git for Windows upgrade [\\#628](https://github.com/cmderdev/cmder/issues/628)\n* msysGit has been superseded ,consider to switch to Git for Windows 2.x? [\\#627](https://github.com/cmderdev/cmder/issues/627)\n* tail command not found [\\#625](https://github.com/cmderdev/cmder/issues/625)\n* Cmder console remain unused text on screen [\\#623](https://github.com/cmderdev/cmder/issues/623)\n* er con emu [\\#617](https://github.com/cmderdev/cmder/issues/617)\n* first google hit for cmder shows 404 [\\#616](https://github.com/cmderdev/cmder/issues/616)\n* \\[ Solved \\] How to I change to width of Split screen divider \\( border \\) line. [\\#613](https://github.com/cmderdev/cmder/issues/613)\n* No Unix commands? [\\#610](https://github.com/cmderdev/cmder/issues/610)\n* using user installed git \\(2.5\\) with the suggested /bin/agent.cmd does not work [\\#609](https://github.com/cmderdev/cmder/issues/609)\n* vendor/init.bat is overwritten with new versions -\\> use a user startup file? [\\#608](https://github.com/cmderdev/cmder/issues/608)\n* Git autocomplete is not working as in git bash [\\#607](https://github.com/cmderdev/cmder/issues/607)\n* api-ms-win-crt-runtime-l1-1-0.dll is missing error \\(Windows 8.1\\) [\\#604](https://github.com/cmderdev/cmder/issues/604)\n* Prevent inactive cmder windows to be dimmed [\\#603](https://github.com/cmderdev/cmder/issues/603)\n* Git for Windows 2.5 [\\#602](https://github.com/cmderdev/cmder/issues/602)\n* Incompatibility with ConEmu 150716+ / double pinned icon on taskbar [\\#599](https://github.com/cmderdev/cmder/issues/599)\n* Cant get it working on windows xp [\\#598](https://github.com/cmderdev/cmder/issues/598)\n* ls parameters error in Windows 10 [\\#597](https://github.com/cmderdev/cmder/issues/597)\n* Resizing split windows [\\#596](https://github.com/cmderdev/cmder/issues/596)\n* PowerShell Profile Aliases ignored in Cmder [\\#593](https://github.com/cmderdev/cmder/issues/593)\n* \"Inject ConEmuHk\" settings slows git down considerably [\\#592](https://github.com/cmderdev/cmder/issues/592)\n* Suggestion about transparency [\\#591](https://github.com/cmderdev/cmder/issues/591)\n* Powerline integration with cmder [\\#590](https://github.com/cmderdev/cmder/issues/590)\n* Wrong place [\\#589](https://github.com/cmderdev/cmder/issues/589)\n* Misleading install instructions? [\\#588](https://github.com/cmderdev/cmder/issues/588)\n* ENHANCE: Only add git to path if not exist [\\#586](https://github.com/cmderdev/cmder/issues/586)\n* new console confirmation - with Ctrl-T [\\#583](https://github.com/cmderdev/cmder/issues/583)\n* start-ssh-agent not found [\\#580](https://github.com/cmderdev/cmder/issues/580)\n* Missing DLL [\\#579](https://github.com/cmderdev/cmder/issues/579)\n* Invoking ConEmu instead of ConEmu64 on Windows 10 64-bit [\\#574](https://github.com/cmderdev/cmder/issues/574)\n* windows 10 incompatibility [\\#572](https://github.com/cmderdev/cmder/issues/572)\n* FIX: Incorrect startup directory. [\\#571](https://github.com/cmderdev/cmder/issues/571)\n* WARNING: Enable-GitColors is Obsolete and will be removed in a future version of posh-git. [\\#568](https://github.com/cmderdev/cmder/issues/568)\n* Path issue on startup - Invalid download path [\\#567](https://github.com/cmderdev/cmder/issues/567)\n* The term 'vim' is not recognized [\\#566](https://github.com/cmderdev/cmder/issues/566)\n* Using .bashrc [\\#565](https://github.com/cmderdev/cmder/issues/565)\n* Persist tab \"View \\(palette\\)\" selection [\\#562](https://github.com/cmderdev/cmder/issues/562)\n* git add --interactive fails [\\#560](https://github.com/cmderdev/cmder/issues/560)\n* Tab names as directory names [\\#559](https://github.com/cmderdev/cmder/issues/559)\n* Downloads for v1.2 missing DLLs [\\#558](https://github.com/cmderdev/cmder/issues/558)\n* Can't get rid of \"unrecognized parameter\" error [\\#557](https://github.com/cmderdev/cmder/issues/557)\n* How to use cmder in a batch file? [\\#556](https://github.com/cmderdev/cmder/issues/556)\n* Run init.bat before any new scripts [\\#554](https://github.com/cmderdev/cmder/issues/554)\n* ssh not working [\\#552](https://github.com/cmderdev/cmder/issues/552)\n* Restore opened tabs setting opens root drive [\\#551](https://github.com/cmderdev/cmder/issues/551)\n* Maximize single view/terminal/console to whole window [\\#550](https://github.com/cmderdev/cmder/issues/550)\n* not run successfully [\\#547](https://github.com/cmderdev/cmder/issues/547)\n* compass not working with cmder ? [\\#546](https://github.com/cmderdev/cmder/issues/546)\n* Bad unicode support \\(wrong glyphs on alsamixer\\) [\\#545](https://github.com/cmderdev/cmder/issues/545)\n* can we use Vundle to manage Cmder's vim plugins? Need some setup? [\\#535](https://github.com/cmderdev/cmder/issues/535)\n* Error on Windows 7 [\\#534](https://github.com/cmderdev/cmder/issues/534)\n* api-ms-win-crt-runtime l1-109.dll is missing [\\#531](https://github.com/cmderdev/cmder/issues/531)\n* Git checks for 'commits' every time a folder is changed? [\\#529](https://github.com/cmderdev/cmder/issues/529)\n* PowerShell tab title issue [\\#528](https://github.com/cmderdev/cmder/issues/528)\n* conhost.exe keeps on crashing. [\\#527](https://github.com/cmderdev/cmder/issues/527)\n* storage in userprofile \\(instead of fixed config dir relative to the executable\\) [\\#526](https://github.com/cmderdev/cmder/issues/526)\n* Cmder crashes when AVG falsely flags it as a virus. [\\#522](https://github.com/cmderdev/cmder/issues/522)\n* Incomplete git installation packaged with cmder v1.2 [\\#521](https://github.com/cmderdev/cmder/issues/521)\n* api-ms-win-crt-runtime-l1-1-0.dll error [\\#518](https://github.com/cmderdev/cmder/issues/518)\n* Can't set alias in 1.2 anymore [\\#515](https://github.com/cmderdev/cmder/issues/515)\n* git not properly setup in v1.2 [\\#513](https://github.com/cmderdev/cmder/issues/513)\n* Character persistence on cmder windows [\\#506](https://github.com/cmderdev/cmder/issues/506)\n* Git: fatal: Unable to find remote helper for 'https' [\\#503](https://github.com/cmderdev/cmder/issues/503)\n* api-ms-win-crt-runtime-l1-1-0.dll error [\\#501](https://github.com/cmderdev/cmder/issues/501)\n* ncurses borders incorrectly displayed with ssh.exe [\\#499](https://github.com/cmderdev/cmder/issues/499)\n* gitk not found due to changed PATH for msysgit [\\#498](https://github.com/cmderdev/cmder/issues/498)\n* {hg} on every folder [\\#494](https://github.com/cmderdev/cmder/issues/494)\n* Missing dll, APPCRT140.dll [\\#485](https://github.com/cmderdev/cmder/issues/485)\n* Symantec refuses to access cmder [\\#484](https://github.com/cmderdev/cmder/issues/484)\n* Missing MSVCP140.dll [\\#480](https://github.com/cmderdev/cmder/issues/480)\n* Windows 10 compatibility issues [\\#478](https://github.com/cmderdev/cmder/issues/478)\n* update msysgit [\\#473](https://github.com/cmderdev/cmder/issues/473)\n* Notifications about composer.json and CRLF [\\#472](https://github.com/cmderdev/cmder/issues/472)\n* How to add more commands beyond mysisgit? [\\#470](https://github.com/cmderdev/cmder/issues/470)\n* ~ should mean user home directory [\\#466](https://github.com/cmderdev/cmder/issues/466)\n* mklink /d creates symlink with wrong slashes [\\#462](https://github.com/cmderdev/cmder/issues/462)\n* Does cmder come with GCC or not? [\\#461](https://github.com/cmderdev/cmder/issues/461)\n* Question: How to start cmder with a command [\\#457](https://github.com/cmderdev/cmder/issues/457)\n* PATH environment variable has space problem [\\#456](https://github.com/cmderdev/cmder/issues/456)\n* Feature Request : Save opened tabs and locations of the tabs [\\#455](https://github.com/cmderdev/cmder/issues/455)\n* Error on cmder launch: \"The syntax of the command is incorrect\" [\\#454](https://github.com/cmderdev/cmder/issues/454)\n* Lag returning to prompt \\(especially\\) in git repo [\\#447](https://github.com/cmderdev/cmder/issues/447)\n* 'MySQL' is not recognized as an internal or external command, operable program or batch file. [\\#443](https://github.com/cmderdev/cmder/issues/443)\n* Not scaling on Windows 8.1 with High-DPI Monitor [\\#437](https://github.com/cmderdev/cmder/issues/437)\n* Shortcut missing icon in context menu [\\#433](https://github.com/cmderdev/cmder/issues/433)\n* How to update Git? [\\#428](https://github.com/cmderdev/cmder/issues/428)\n* How to redirect Window's cmd.exe to Cmder's cmder.exe? [\\#426](https://github.com/cmderdev/cmder/issues/426)\n* cmder exits with exitcode 4294967295 [\\#423](https://github.com/cmderdev/cmder/issues/423)\n* How do you create an alias? [\\#421](https://github.com/cmderdev/cmder/issues/421)\n* Git pull not working [\\#419](https://github.com/cmderdev/cmder/issues/419)\n* Create files from cmder. [\\#417](https://github.com/cmderdev/cmder/issues/417)\n* Error popup window on opening [\\#416](https://github.com/cmderdev/cmder/issues/416)\n* Vim help not working in cmder [\\#415](https://github.com/cmderdev/cmder/issues/415)\n* How to update bash [\\#399](https://github.com/cmderdev/cmder/issues/399)\n* could you put the version number into the download file [\\#396](https://github.com/cmderdev/cmder/issues/396)\n* git-p4.py \\[Errno 2\\] No such file or directory [\\#392](https://github.com/cmderdev/cmder/issues/392)\n* ConEmu auto attach with Cmder aliases [\\#388](https://github.com/cmderdev/cmder/issues/388)\n* Cmder unable to find .ssh folder [\\#387](https://github.com/cmderdev/cmder/issues/387)\n* extra character appears at the beginning,when used the arrow keys\\(up,down\\) navigate through the history [\\#384](https://github.com/cmderdev/cmder/issues/384)\n* create alias with multi word parameter [\\#376](https://github.com/cmderdev/cmder/issues/376)\n* UI broken characters [\\#375](https://github.com/cmderdev/cmder/issues/375)\n* Possible to change TSA icon? [\\#373](https://github.com/cmderdev/cmder/issues/373)\n* Is Cmder known to cause a false positive alert from some virus checking software? [\\#371](https://github.com/cmderdev/cmder/issues/371)\n* How to disable the crosshair [\\#369](https://github.com/cmderdev/cmder/issues/369)\n* Text reflow and line selection [\\#359](https://github.com/cmderdev/cmder/issues/359)\n* Using the context menu doesn't open a new tab in Single Instance Mode [\\#356](https://github.com/cmderdev/cmder/issues/356)\n* Git client side vulnerability [\\#354](https://github.com/cmderdev/cmder/issues/354)\n* Ctrl+Shift+Arrow does not work as expected [\\#345](https://github.com/cmderdev/cmder/issues/345)\n* i can not read windows path in cmder [\\#342](https://github.com/cmderdev/cmder/issues/342)\n* How to reload system variable [\\#340](https://github.com/cmderdev/cmder/issues/340)\n* SVN commands support [\\#339](https://github.com/cmderdev/cmder/issues/339)\n* Is it possible to show the current folder in front of cursor on the current line? [\\#338](https://github.com/cmderdev/cmder/issues/338)\n* backspace not work [\\#334](https://github.com/cmderdev/cmder/issues/334)\n* 'awk' is not recognized [\\#330](https://github.com/cmderdev/cmder/issues/330)\n* Cannot pin 1.1.4.1 to Win7 taskbar [\\#329](https://github.com/cmderdev/cmder/issues/329)\n* {lamb} instead of lambda sign \\(possibly a UTF-8 problem?\\) [\\#322](https://github.com/cmderdev/cmder/issues/322)\n* Instructions refer to Cmder.bat but it doesn't exist in download .zip [\\#319](https://github.com/cmderdev/cmder/issues/319)\n* Wrong link on cmder.net for msysgit [\\#317](https://github.com/cmderdev/cmder/issues/317)\n* Use system-wide Git [\\#315](https://github.com/cmderdev/cmder/issues/315)\n* Version update information is broken \\(not found\\) [\\#310](https://github.com/cmderdev/cmder/issues/310)\n* feature request vim-airline [\\#306](https://github.com/cmderdev/cmder/issues/306)\n* Integrate PSReadLine [\\#301](https://github.com/cmderdev/cmder/issues/301)\n* Full Screen [\\#295](https://github.com/cmderdev/cmder/issues/295)\n* Configure PowerShell to match CMD [\\#294](https://github.com/cmderdev/cmder/issues/294)\n* Tab Close on CTRL-W [\\#293](https://github.com/cmderdev/cmder/issues/293)\n* v1.1.4.1 /REGISTER ALL has broken icon [\\#292](https://github.com/cmderdev/cmder/issues/292)\n* CD in root not working.. [\\#289](https://github.com/cmderdev/cmder/issues/289)\n* How to enable 256 color? [\\#288](https://github.com/cmderdev/cmder/issues/288)\n* Support comments in /config/aliases [\\#286](https://github.com/cmderdev/cmder/issues/286)\n* Executing linux executables ./ doesn't work :S [\\#285](https://github.com/cmderdev/cmder/issues/285)\n* Moved Documents folder, running \"ls\" gives \"ls: My Documents: No such file or directory\" [\\#284](https://github.com/cmderdev/cmder/issues/284)\n* er [\\#283](https://github.com/cmderdev/cmder/issues/283)\n* \\[1.1.4.1\\] Auto Completion not working [\\#280](https://github.com/cmderdev/cmder/issues/280)\n* Git and lamb macro/symbols not expanded in Windows 10 preview [\\#279](https://github.com/cmderdev/cmder/issues/279)\n* cmder vs cmd using non-blocking STDIN [\\#269](https://github.com/cmderdev/cmder/issues/269)\n* Possible to blur translucent console? [\\#267](https://github.com/cmderdev/cmder/issues/267)\n* Duplicate Root Fires Twice? [\\#266](https://github.com/cmderdev/cmder/issues/266)\n* bug when using up and down key [\\#264](https://github.com/cmderdev/cmder/issues/264)\n* ps scripts: support space in foldernames [\\#261](https://github.com/cmderdev/cmder/issues/261)\n* utils [\\#260](https://github.com/cmderdev/cmder/issues/260)\n* Character mix [\\#259](https://github.com/cmderdev/cmder/issues/259)\n* strange issue no trace in google [\\#257](https://github.com/cmderdev/cmder/issues/257)\n* Can't start cmder 1.4.1.1 [\\#252](https://github.com/cmderdev/cmder/issues/252)\n* Cmder icon reverts to ConEmu icon when \"Startup options\" option is changed [\\#251](https://github.com/cmderdev/cmder/issues/251)\n* Old version files in v1.1.4 release archives [\\#247](https://github.com/cmderdev/cmder/issues/247)\n* \"MSVCP120.dll is missing from your computer.\" [\\#246](https://github.com/cmderdev/cmder/issues/246)\n* Cmder.exe not opening on Windows 7 SP 1 [\\#240](https://github.com/cmderdev/cmder/issues/240)\n* Resize Tab Bar [\\#236](https://github.com/cmderdev/cmder/issues/236)\n* Accented characters [\\#234](https://github.com/cmderdev/cmder/issues/234)\n* Clicking in the window causes cmder to lock up [\\#232](https://github.com/cmderdev/cmder/issues/232)\n* Add cmder to Windows context menu [\\#231](https://github.com/cmderdev/cmder/issues/231)\n* libiconv-2.dll is missing [\\#228](https://github.com/cmderdev/cmder/issues/228)\n* color scheme lost after CTRL+C on git status [\\#227](https://github.com/cmderdev/cmder/issues/227)\n* Can't create process, ErrCode=0x000000C1, Description: %1 is not a valid Win32 application. [\\#226](https://github.com/cmderdev/cmder/issues/226)\n* Cant get powerline fonts to work \\(need utf-8?\\) [\\#225](https://github.com/cmderdev/cmder/issues/225)\n* Can't use aliases + && [\\#224](https://github.com/cmderdev/cmder/issues/224)\n* {git}, {lamb} and strange new console options [\\#223](https://github.com/cmderdev/cmder/issues/223)\n* CJK problem [\\#222](https://github.com/cmderdev/cmder/issues/222)\n* Wire up 'title' to \"rename tab\" [\\#221](https://github.com/cmderdev/cmder/issues/221)\n* system PATH overriding path set in init.bat [\\#219](https://github.com/cmderdev/cmder/issues/219)\n* command autocompletion not working [\\#218](https://github.com/cmderdev/cmder/issues/218)\n* Launcher opens new window separately [\\#217](https://github.com/cmderdev/cmder/issues/217)\n* Theme not applied on Run command prompt here [\\#216](https://github.com/cmderdev/cmder/issues/216)\n* Closes tab on Ctrl-C action [\\#215](https://github.com/cmderdev/cmder/issues/215)\n* \"Your alias cannot contain a space\" [\\#214](https://github.com/cmderdev/cmder/issues/214)\n* Problems with vim colors [\\#213](https://github.com/cmderdev/cmder/issues/213)\n* lambda bug when i install clink [\\#212](https://github.com/cmderdev/cmder/issues/212)\n* Did doskey break in the newest dev update? [\\#207](https://github.com/cmderdev/cmder/issues/207)\n* Bug within the version of msysgit 1.8.5.2 [\\#206](https://github.com/cmderdev/cmder/issues/206)\n* Blank line [\\#205](https://github.com/cmderdev/cmder/issues/205)\n* F7 support for command history? [\\#204](https://github.com/cmderdev/cmder/issues/204)\n* SSH Keys and push passphrase [\\#202](https://github.com/cmderdev/cmder/issues/202)\n* git diff highlight colors on ssh [\\#201](https://github.com/cmderdev/cmder/issues/201)\n* Cursor becomes fat, and i can't do anything [\\#200](https://github.com/cmderdev/cmder/issues/200)\n* Open cmder as Tab from the file explorer [\\#197](https://github.com/cmderdev/cmder/issues/197)\n* include zsh and tmux from cygwin [\\#194](https://github.com/cmderdev/cmder/issues/194)\n* How to enable ssh-agent? [\\#193](https://github.com/cmderdev/cmder/issues/193)\n* Git Not working [\\#192](https://github.com/cmderdev/cmder/issues/192)\n* Open cmder in 64-bit on 64-bit windows [\\#191](https://github.com/cmderdev/cmder/issues/191)\n* Output is very slow [\\#188](https://github.com/cmderdev/cmder/issues/188)\n* Running cmder from the file explorer [\\#187](https://github.com/cmderdev/cmder/issues/187)\n* Add hotkey to switch tabs [\\#186](https://github.com/cmderdev/cmder/issues/186)\n* how to config installed msysgit [\\#183](https://github.com/cmderdev/cmder/issues/183)\n* Windows 8.1 High-DPI Scaling [\\#182](https://github.com/cmderdev/cmder/issues/182)\n* how to disabled command line error beep? [\\#179](https://github.com/cmderdev/cmder/issues/179)\n* Child shells yields broken prompt [\\#178](https://github.com/cmderdev/cmder/issues/178)\n* Crash at start on Windows 8.1 [\\#176](https://github.com/cmderdev/cmder/issues/176)\n* Crashes with mintty.exe [\\#175](https://github.com/cmderdev/cmder/issues/175)\n* Chinese characters looked terribly awful when monospace is checked [\\#171](https://github.com/cmderdev/cmder/issues/171)\n* Copy and paste w/ mouse buttons [\\#170](https://github.com/cmderdev/cmder/issues/170)\n* generation of Pipe symbol not possible [\\#168](https://github.com/cmderdev/cmder/issues/168)\n* Lambda prompt bug [\\#164](https://github.com/cmderdev/cmder/issues/164)\n* Can't select and copy text [\\#163](https://github.com/cmderdev/cmder/issues/163)\n* not running in windows XP SP3 [\\#161](https://github.com/cmderdev/cmder/issues/161)\n* german characters not displaying [\\#160](https://github.com/cmderdev/cmder/issues/160)\n* Moving files with ../ [\\#158](https://github.com/cmderdev/cmder/issues/158)\n* Transparent image. A Detail but I would like to get it to work [\\#156](https://github.com/cmderdev/cmder/issues/156)\n* Taskbar icon after pinning the program reverts to default ConEmu icon. Systray icon is always ConEmu's. [\\#154](https://github.com/cmderdev/cmder/issues/154)\n* A neat way to add sublime text seamlessly. [\\#153](https://github.com/cmderdev/cmder/issues/153)\n* how to update cygwin shipped together within cmder [\\#151](https://github.com/cmderdev/cmder/issues/151)\n* attach to GUI was requested, but there is no console processes! [\\#150](https://github.com/cmderdev/cmder/issues/150)\n* The system cannot find the path specified. [\\#148](https://github.com/cmderdev/cmder/issues/148)\n* Changes to PATH do not persist [\\#146](https://github.com/cmderdev/cmder/issues/146)\n* git clone templates not found / Unable to find remote helper for 'https' [\\#144](https://github.com/cmderdev/cmder/issues/144)\n* handle could not be opened / terminal is not fully functional [\\#143](https://github.com/cmderdev/cmder/issues/143)\n* Create windows installer [\\#142](https://github.com/cmderdev/cmder/issues/142)\n* Auto-create fast new tab shortcuts for additional tasks [\\#140](https://github.com/cmderdev/cmder/issues/140)\n* ssh-agent, ssh-add, ssh all crash as soon as I open a PowerShell window [\\#139](https://github.com/cmderdev/cmder/issues/139)\n* Problems using cmder as an SSH client [\\#137](https://github.com/cmderdev/cmder/issues/137)\n* Add link to bliker.github.io/cmder to repo description/website [\\#134](https://github.com/cmderdev/cmder/issues/134)\n* Environmental variables are not reloaded on new console [\\#132](https://github.com/cmderdev/cmder/issues/132)\n* Git Branch Autocomplete [\\#130](https://github.com/cmderdev/cmder/issues/130)\n* The nice lambda left me :\\( [\\#129](https://github.com/cmderdev/cmder/issues/129)\n* `ls` with output redirection writes ansi escape sequences to destination file [\\#127](https://github.com/cmderdev/cmder/issues/127)\n* Lamba prompt and git status scripts not running [\\#126](https://github.com/cmderdev/cmder/issues/126)\n* how to open specail directory? in sublime Terminal plugin? [\\#123](https://github.com/cmderdev/cmder/issues/123)\n* clink installed allready cmder hangs after install [\\#122](https://github.com/cmderdev/cmder/issues/122)\n* \"The system cannot find the path specified\" [\\#121](https://github.com/cmderdev/cmder/issues/121)\n* \"chcp 65001\" \\(UTF-8\\) support for cmd [\\#119](https://github.com/cmderdev/cmder/issues/119)\n* Incorrect version of clink is being used [\\#117](https://github.com/cmderdev/cmder/issues/117)\n* .bash_profile equivalent? [\\#113](https://github.com/cmderdev/cmder/issues/113)\n* Startup directory on new tab [\\#112](https://github.com/cmderdev/cmder/issues/112)\n* Looking for a contributor/Cmder user [\\#110](https://github.com/cmderdev/cmder/issues/110)\n* Terminate batch job bug \\(I think?\\) [\\#108](https://github.com/cmderdev/cmder/issues/108)\n* latin1 characters [\\#107](https://github.com/cmderdev/cmder/issues/107)\n* Script cleanup [\\#105](https://github.com/cmderdev/cmder/issues/105)\n* Changed \"λ\" to \"?\" [\\#104](https://github.com/cmderdev/cmder/issues/104)\n* How to search history using PgUp and PgDown [\\#103](https://github.com/cmderdev/cmder/issues/103)\n* Folder shortcuts doesn't seem to work in FAR manager under cmder [\\#102](https://github.com/cmderdev/cmder/issues/102)\n* opening cmder.bat on windows 8 [\\#101](https://github.com/cmderdev/cmder/issues/101)\n* Change the builder from google code [\\#99](https://github.com/cmderdev/cmder/issues/99)\n* Text color not honored upon restart [\\#97](https://github.com/cmderdev/cmder/issues/97)\n* Launcher is not recognized as a valid Win32 application on windows XP. [\\#96](https://github.com/cmderdev/cmder/issues/96)\n* Allow the launcher to be pinned to the taskbar [\\#95](https://github.com/cmderdev/cmder/issues/95)\n* VS2013 runtime requirement [\\#93](https://github.com/cmderdev/cmder/issues/93)\n* git flow [\\#92](https://github.com/cmderdev/cmder/issues/92)\n* How to start in a given directory [\\#91](https://github.com/cmderdev/cmder/issues/91)\n* Can't type backslash \\(clink issue\\) [\\#89](https://github.com/cmderdev/cmder/issues/89)\n* command history [\\#87](https://github.com/cmderdev/cmder/issues/87)\n* Install cmder [\\#86](https://github.com/cmderdev/cmder/issues/86)\n* Can not work well with Chinese [\\#81](https://github.com/cmderdev/cmder/issues/81)\n* Does not work with Julia [\\#80](https://github.com/cmderdev/cmder/issues/80)\n* Build script does not work through proxy [\\#79](https://github.com/cmderdev/cmder/issues/79)\n* \"C:\\Users\\bliker\" reference in config/ConEmu.xml [\\#71](https://github.com/cmderdev/cmder/issues/71)\n* Is it possible to install wget into cmder\\(clink, or ConEmu\\) ? [\\#69](https://github.com/cmderdev/cmder/issues/69)\n* cyrillic characters problem [\\#68](https://github.com/cmderdev/cmder/issues/68)\n* Unable to run in Windows XP if path contains spaces [\\#67](https://github.com/cmderdev/cmder/issues/67)\n* Path not set correctly on Windows XP [\\#66](https://github.com/cmderdev/cmder/issues/66)\n* Filenames with special characters e.g. ! are not handled correctly [\\#64](https://github.com/cmderdev/cmder/issues/64)\n* Clink completion does not work [\\#59](https://github.com/cmderdev/cmder/issues/59)\n* Git hosts defined in .ssh/config not working in cmder [\\#58](https://github.com/cmderdev/cmder/issues/58)\n* Setting cmder startup directory. [\\#57](https://github.com/cmderdev/cmder/issues/57)\n* cmder doesn't work with gvim [\\#55](https://github.com/cmderdev/cmder/issues/55)\n* vendor\\msysgit\\libexec\\git-core dir contains 1.45mb git.exe duplicated 110 times. [\\#54](https://github.com/cmderdev/cmder/issues/54)\n* \"terminal is not fully functional\" [\\#50](https://github.com/cmderdev/cmder/issues/50)\n* Open new tab as Admin by default. [\\#49](https://github.com/cmderdev/cmder/issues/49)\n* Chinese characters overlapped [\\#45](https://github.com/cmderdev/cmder/issues/45)\n* `screen irssi`, `mutt` - Cannot find terminfo entry for 'msys'. [\\#44](https://github.com/cmderdev/cmder/issues/44)\n* ps doesn't work [\\#43](https://github.com/cmderdev/cmder/issues/43)\n* Pinning Cmder to taskbar doesn't work as expected [\\#39](https://github.com/cmderdev/cmder/issues/39)\n* Prompt does not work with clink 0.4 [\\#35](https://github.com/cmderdev/cmder/issues/35)\n* vendor/init.bat fails on paths with spaces [\\#28](https://github.com/cmderdev/cmder/issues/28)\n* \"windows cannot find ...\\cmder\\vendor/ConEmu-maximus5/ConEmu.exe\" [\\#27](https://github.com/cmderdev/cmder/issues/27)\n* Issue with SSH and tmux [\\#25](https://github.com/cmderdev/cmder/issues/25)\n* PWD, VI, VIM commands don't work on windows 7. [\\#23](https://github.com/cmderdev/cmder/issues/23)\n* Include icon [\\#21](https://github.com/cmderdev/cmder/issues/21)\n* init.bat failing on Vista x64 [\\#19](https://github.com/cmderdev/cmder/issues/19)\n* Not possible to write @ on Norwegian keyboard [\\#17](https://github.com/cmderdev/cmder/issues/17)\n* Weird output when starting cmder [\\#16](https://github.com/cmderdev/cmder/issues/16)\n* Set a name for the Tab on a task [\\#14](https://github.com/cmderdev/cmder/issues/14)\n* Git branch name [\\#13](https://github.com/cmderdev/cmder/issues/13)\n* bin directories not loaded in path [\\#12](https://github.com/cmderdev/cmder/issues/12)\n* Cmder ssh keys for github [\\#11](https://github.com/cmderdev/cmder/issues/11)\n* How to use cmder with integration mode [\\#10](https://github.com/cmderdev/cmder/issues/10)\n* tab manipulation problem [\\#9](https://github.com/cmderdev/cmder/issues/9)\n* Remove ugly black startup window [\\#8](https://github.com/cmderdev/cmder/issues/8)\n* Unable to `cd` to another drive [\\#6](https://github.com/cmderdev/cmder/issues/6)\n* cant change start directory [\\#4](https://github.com/cmderdev/cmder/issues/4)\n* lalt + arrow left/right not working as a macro hotkey [\\#3](https://github.com/cmderdev/cmder/issues/3)\n* alt gr + 2 opens new PowerShell [\\#2](https://github.com/cmderdev/cmder/issues/2)\n* Gvim preferences are not used in {cmd} [\\#1](https://github.com/cmderdev/cmder/issues/1)\n\n**Merged pull requests:**\n\n* Development [\\#1169](https://github.com/cmderdev/cmder/pull/1169) ([Stanzilla](https://github.com/Stanzilla))\n* Fix typo in init.bat [\\#1157](https://github.com/cmderdev/cmder/pull/1157) ([winks](https://github.com/winks))\n* Bump clink-completions to 0.3.2 [\\#1153](https://github.com/cmderdev/cmder/pull/1153) ([vladimir-kotikov](https://github.com/vladimir-kotikov))\n* Fixed 3 typos [\\#1143](https://github.com/cmderdev/cmder/pull/1143) ([panzer-planet](https://github.com/panzer-planet))\n* Fix for slow startup under certain conditions \\(\\#1122\\) [\\#1131](https://github.com/cmderdev/cmder/pull/1131) ([lamarqua](https://github.com/lamarqua))\n* Development [\\#1127](https://github.com/cmderdev/cmder/pull/1127) ([Stanzilla](https://github.com/Stanzilla))\n* fix error when path has a space [\\#1126](https://github.com/cmderdev/cmder/pull/1126) ([gucong3000](https://github.com/gucong3000))\n* Added closing process in get_git_status [\\#1101](https://github.com/cmderdev/cmder/pull/1101) ([alexandr-san4ez](https://github.com/alexandr-san4ez))\n* Update Readme.md [\\#1082](https://github.com/cmderdev/cmder/pull/1082) ([nverno](https://github.com/nverno))\n* Fix bash login when $CMDER_ROOT has spaces [\\#1078](https://github.com/cmderdev/cmder/pull/1078) ([orionlee](https://github.com/orionlee))\n* Parse the original prompt for cwd and env names [\\#1070](https://github.com/cmderdev/cmder/pull/1070) ([janschulz](https://github.com/janschulz))\n* Added kill ssh-agent to build.ps1 [\\#1042](https://github.com/cmderdev/cmder/pull/1042) ([daxgames](https://github.com/daxgames))\n* Development [\\#1037](https://github.com/cmderdev/cmder/pull/1037) ([Stanzilla](https://github.com/Stanzilla))\n* Minor update in README.md [\\#1016](https://github.com/cmderdev/cmder/pull/1016) ([Mansuro](https://github.com/Mansuro))\n* Added rainbow icons [\\#1014](https://github.com/cmderdev/cmder/pull/1014) ([JoshuaKGoldberg](https://github.com/JoshuaKGoldberg))\n* Fix git branch colouring [\\#1011](https://github.com/cmderdev/cmder/pull/1011) ([MoFo88](https://github.com/MoFo88))\n* Bump clink-completions to 0.3.1 [\\#992](https://github.com/cmderdev/cmder/pull/992) ([vladimir-kotikov](https://github.com/vladimir-kotikov))\n* Fix git branch name never shown as dirty [\\#974](https://github.com/cmderdev/cmder/pull/974) ([janschulz](https://github.com/janschulz))\n* Disable history switching behavior of ctrl+tab. Sequential switching. [\\#963](https://github.com/cmderdev/cmder/pull/963) ([Jackbennett](https://github.com/Jackbennett))\n* Register cmder in the context menu from PowerShell [\\#962](https://github.com/cmderdev/cmder/pull/962) ([Jackbennett](https://github.com/Jackbennett))\n* cmd: change the prompt in lua [\\#961](https://github.com/cmderdev/cmder/pull/961) ([janschulz](https://github.com/janschulz))\n* Custom prompt hooks protected from later overwriting [\\#952](https://github.com/cmderdev/cmder/pull/952) ([Jackbennett](https://github.com/Jackbennett))\n* Update clink-completions to 0.3.0 [\\#946](https://github.com/cmderdev/cmder/pull/946) ([vladimir-kotikov](https://github.com/vladimir-kotikov))\n* Added :verbose-output subroutine, made aliases update more functional [\\#945](https://github.com/cmderdev/cmder/pull/945) ([daxgames](https://github.com/daxgames))\n* fixed git not working in cmder cmd session and added some comments [\\#943](https://github.com/cmderdev/cmder/pull/943) ([daxgames](https://github.com/daxgames))\n* More variable quoting in init.bat [\\#941](https://github.com/cmderdev/cmder/pull/941) ([janschulz](https://github.com/janschulz))\n* Add quotes around all variables [\\#940](https://github.com/cmderdev/cmder/pull/940) ([janschulz](https://github.com/janschulz))\n* Fix missing \"\\\" when building dirpath to psmodules [\\#916](https://github.com/cmderdev/cmder/pull/916) ([liftir](https://github.com/liftir))\n* upgraded git to 2.8.1 [\\#911](https://github.com/cmderdev/cmder/pull/911) ([daxgames](https://github.com/daxgames))\n* Added proxy support [\\#909](https://github.com/cmderdev/cmder/pull/909) ([daxgames](https://github.com/daxgames))\n* fixed - not running user-aliases.cmd if aliases variable is overridde… [\\#892](https://github.com/cmderdev/cmder/pull/892) ([daxgames](https://github.com/daxgames))\n* Merge latest Development [\\#890](https://github.com/cmderdev/cmder/pull/890) ([MartiUK](https://github.com/MartiUK))\n* Process profile.d scripts before adding user aliases [\\#874](https://github.com/cmderdev/cmder/pull/874) ([daxgames](https://github.com/daxgames))\n* Prefer use of first line @echo off vs. @ per line to turn off echo pe… [\\#873](https://github.com/cmderdev/cmder/pull/873) ([daxgames](https://github.com/daxgames))\n* silenced bash profile.d when profile.d is empty [\\#872](https://github.com/cmderdev/cmder/pull/872) ([daxgames](https://github.com/daxgames))\n* Various fixes for profile.d support [\\#867](https://github.com/cmderdev/cmder/pull/867) ([daxgames](https://github.com/daxgames))\n* Revert \"Set CMDER_START to homeprofile\" [\\#866](https://github.com/cmderdev/cmder/pull/866) ([janschulz](https://github.com/janschulz))\n* better git path handling [\\#865](https://github.com/cmderdev/cmder/pull/865) ([janschulz](https://github.com/janschulz))\n* Enhanced alias.bat to allow file storage path [\\#862](https://github.com/cmderdev/cmder/pull/862) ([daxgames](https://github.com/daxgames))\n* Fix cmd plugin.d [\\#860](https://github.com/cmderdev/cmder/pull/860) ([daxgames](https://github.com/daxgames))\n* Added profile.d like support for all supported shells [\\#855](https://github.com/cmderdev/cmder/pull/855) ([daxgames](https://github.com/daxgames))\n* Typo in Readme.md [\\#852](https://github.com/cmderdev/cmder/pull/852) ([janschulz](https://github.com/janschulz))\n* Fixed get_git_dir\\(\\) to take submodules into account. Fixes \\#833 [\\#841](https://github.com/cmderdev/cmder/pull/841) ([gpakosz](https://github.com/gpakosz))\n* Add appveyor batch to README [\\#837](https://github.com/cmderdev/cmder/pull/837) ([janschulz](https://github.com/janschulz))\n* Fixed checkGit\\(\\) in case of submodules [\\#835](https://github.com/cmderdev/cmder/pull/835) ([gpakosz](https://github.com/gpakosz))\n* 1.3 Pre-Release Merge [\\#831](https://github.com/cmderdev/cmder/pull/831) ([MartiUK](https://github.com/MartiUK))\n* Fix build script not exiting on msbuild failure. [\\#804](https://github.com/cmderdev/cmder/pull/804) ([MartiUK](https://github.com/MartiUK))\n* Set tasks to always use CMDER_START [\\#803](https://github.com/cmderdev/cmder/pull/803) ([MartiUK](https://github.com/MartiUK))\n* Make \"cmder here\" work again [\\#798](https://github.com/cmderdev/cmder/pull/798) ([janschulz](https://github.com/janschulz))\n* Reorganize how clink settings are loaded [\\#794](https://github.com/cmderdev/cmder/pull/794) ([janschulz](https://github.com/janschulz))\n* Bump clink to 0.4.6 [\\#781](https://github.com/cmderdev/cmder/pull/781) ([vladimir-kotikov](https://github.com/vladimir-kotikov))\n* Fix vendor/init.bat when the PATH contains spaces. [\\#773](https://github.com/cmderdev/cmder/pull/773) ([glureau](https://github.com/glureau))\n* Merge latest development [\\#771](https://github.com/cmderdev/cmder/pull/771) ([MartiUK](https://github.com/MartiUK))\n* Bump clink-completions to 0.2.2 [\\#766](https://github.com/cmderdev/cmder/pull/766) ([vladimir-kotikov](https://github.com/vladimir-kotikov))\n* Fix: don't garble the input line for long lines in git projects [\\#756](https://github.com/cmderdev/cmder/pull/756) ([janschulz](https://github.com/janschulz))\n* README.md Updates [\\#746](https://github.com/cmderdev/cmder/pull/746) ([daxgames](https://github.com/daxgames))\n* Cmder exinit [\\#740](https://github.com/cmderdev/cmder/pull/740) ([daxgames](https://github.com/daxgames))\n* added config\\user-\\* to packignore [\\#738](https://github.com/cmderdev/cmder/pull/738) ([daxgames](https://github.com/daxgames))\n* Use consistent naming: user-profile.{sh|bat|ps1} [\\#737](https://github.com/cmderdev/cmder/pull/737) ([janschulz](https://github.com/janschulz))\n* More config [\\#736](https://github.com/cmderdev/cmder/pull/736) ([janschulz](https://github.com/janschulz))\n* Do not overwrite aliases on update [\\#735](https://github.com/cmderdev/cmder/pull/735) ([janschulz](https://github.com/janschulz))\n* Added check for git install path in init.bat. [\\#734](https://github.com/cmderdev/cmder/pull/734) ([chase-miller](https://github.com/chase-miller))\n* Fix icons [\\#731](https://github.com/cmderdev/cmder/pull/731) ([daxgames](https://github.com/daxgames))\n* Fixed - PowerShell vim/vim alias opening a new tab when editing a file [\\#729](https://github.com/cmderdev/cmder/pull/729) ([daxgames](https://github.com/daxgames))\n* Added vi/vim aliases and fixed PowerShell startup errors [\\#726](https://github.com/cmderdev/cmder/pull/726) ([daxgames](https://github.com/daxgames))\n* Release 1.3 [\\#723](https://github.com/cmderdev/cmder/pull/723) ([MartiUK](https://github.com/MartiUK))\n* Update to ConEmu 151119 [\\#722](https://github.com/cmderdev/cmder/pull/722) ([MartiUK](https://github.com/MartiUK))\n* Disable appveyor test search [\\#720](https://github.com/cmderdev/cmder/pull/720) ([MartiUK](https://github.com/MartiUK))\n* Fix gitter webhook [\\#719](https://github.com/cmderdev/cmder/pull/719) ([MartiUK](https://github.com/MartiUK))\n* Publish appveyor artefacts [\\#718](https://github.com/cmderdev/cmder/pull/718) ([MartiUK](https://github.com/MartiUK))\n* add bundled vim to path [\\#705](https://github.com/cmderdev/cmder/pull/705) ([wenzowski](https://github.com/wenzowski))\n* Fix batch files [\\#698](https://github.com/cmderdev/cmder/pull/698) ([daxgames](https://github.com/daxgames))\n* Speed up git prompt filtering [\\#697](https://github.com/cmderdev/cmder/pull/697) ([vladimir-kotikov](https://github.com/vladimir-kotikov))\n* Upgrade clink-completions to 0.2.1 [\\#676](https://github.com/cmderdev/cmder/pull/676) ([vladimir-kotikov](https://github.com/vladimir-kotikov))\n* Enable the '/single' switch \\(\\#577\\) [\\#673](https://github.com/cmderdev/cmder/pull/673) ([DoCode](https://github.com/DoCode))\n* Fixed problem with Invoke-Expression [\\#667](https://github.com/cmderdev/cmder/pull/667) ([Pireax](https://github.com/Pireax))\n* Add user startup file for PowerShell [\\#666](https://github.com/cmderdev/cmder/pull/666) ([Pireax](https://github.com/Pireax))\n* Build from behind proxy & appveyor [\\#665](https://github.com/cmderdev/cmder/pull/665) ([MartiUK](https://github.com/MartiUK))\n* Fix init.bat generation [\\#663](https://github.com/cmderdev/cmder/pull/663) ([janschulz](https://github.com/janschulz))\n* Upgrade clink-completions to 0.2.0 [\\#653](https://github.com/cmderdev/cmder/pull/653) ([vladimir-kotikov](https://github.com/vladimir-kotikov))\n* Make wording clearer [\\#652](https://github.com/cmderdev/cmder/pull/652) ([jkingsman](https://github.com/jkingsman))\n* fix typos and better phrasing [\\#651](https://github.com/cmderdev/cmder/pull/651) ([jkingsman](https://github.com/jkingsman))\n* Revert 8b8f98c [\\#634](https://github.com/cmderdev/cmder/pull/634) ([Stanzilla](https://github.com/Stanzilla))\n* Update clink to 0.4.5 [\\#619](https://github.com/cmderdev/cmder/pull/619) ([Stanzilla](https://github.com/Stanzilla))\n* Add a user startup file which can be modified [\\#612](https://github.com/cmderdev/cmder/pull/612) ([janschulz](https://github.com/janschulz))\n* Update README.md [\\#606](https://github.com/cmderdev/cmder/pull/606) ([pyprism](https://github.com/pyprism))\n* Converting msysgit support to git-for-windows support. [\\#605](https://github.com/cmderdev/cmder/pull/605) ([Stanzilla](https://github.com/Stanzilla))\n* :arrow_up: ConEmu@150816 [\\#601](https://github.com/cmderdev/cmder/pull/601) ([Stanzilla](https://github.com/Stanzilla))\n* Use standard path for ConEmu.xml [\\#600](https://github.com/cmderdev/cmder/pull/600) ([Maximus5](https://github.com/Maximus5))\n* Revert \"Run PowerShell as default\" [\\#585](https://github.com/cmderdev/cmder/pull/585) ([Stanzilla](https://github.com/Stanzilla))\n* update VS to 2015 release version and switch to /MT for static linking [\\#578](https://github.com/cmderdev/cmder/pull/578) ([Stanzilla](https://github.com/Stanzilla))\n* Enhance Path in profile.ps1 [\\#575](https://github.com/cmderdev/cmder/pull/575) ([Bobo1239](https://github.com/Bobo1239))\n* Fixed: 'Enable-GitColors is Obsolete...' warning [\\#569](https://github.com/cmderdev/cmder/pull/569) ([eeree](https://github.com/eeree))\n* Update .gitignore [\\#548](https://github.com/cmderdev/cmder/pull/548) ([thomgit](https://github.com/thomgit))\n* Add `-ExecutionPolicy Bypass` to PowerShell tasks [\\#543](https://github.com/cmderdev/cmder/pull/543) ([malobre](https://github.com/malobre))\n* Remove depreciated Enable-GitColors in posh-git [\\#517](https://github.com/cmderdev/cmder/pull/517) ([bondz](https://github.com/bondz))\n* Fix cleanup script. [\\#479](https://github.com/cmderdev/cmder/pull/479) ([MartiUK](https://github.com/MartiUK))\n* Fix link to msysgit's site. Google's repo was moved or removed. [\\#465](https://github.com/cmderdev/cmder/pull/465) ([TheMolkaPL](https://github.com/TheMolkaPL))\n* Update sources.json [\\#451](https://github.com/cmderdev/cmder/pull/451) ([MartiUK](https://github.com/MartiUK))\n* Merge development into master for 1.2 [\\#450](https://github.com/cmderdev/cmder/pull/450) ([MartiUK](https://github.com/MartiUK))\n* Helper function using PowerShell to register the cmder context menu [\\#441](https://github.com/cmderdev/cmder/pull/441) ([Jackbennett](https://github.com/Jackbennett))\n* git and Posh-git check [\\#440](https://github.com/cmderdev/cmder/pull/440) ([Jackbennett](https://github.com/Jackbennett))\n* Improves performance of prompt filtering [\\#438](https://github.com/cmderdev/cmder/pull/438) ([vladimir-kotikov](https://github.com/vladimir-kotikov))\n* Preview PR for including external completions into Cmder [\\#434](https://github.com/cmderdev/cmder/pull/434) ([vladimir-kotikov](https://github.com/vladimir-kotikov))\n* Revert new line from commit dc834cc28f [\\#432](https://github.com/cmderdev/cmder/pull/432) ([Jackbennett](https://github.com/Jackbennett))\n* Leverage the Module Autoload path and save doing it ourselves. [\\#431](https://github.com/cmderdev/cmder/pull/431) ([Jackbennett](https://github.com/Jackbennett))\n* Adds support for PS 4.0 native hash command to remove a dependency [\\#430](https://github.com/cmderdev/cmder/pull/430) ([Jackbennett](https://github.com/Jackbennett))\n* Fix build script removing a trailing comma. Download into a temp folder. [\\#429](https://github.com/cmderdev/cmder/pull/429) ([Jackbennett](https://github.com/Jackbennett))\n* Update clink url [\\#425](https://github.com/cmderdev/cmder/pull/425) ([danneu](https://github.com/danneu))\n* Added git shell task. [\\#422](https://github.com/cmderdev/cmder/pull/422) ([ragekit](https://github.com/ragekit))\n* Public site docs update matching the repo readme [\\#411](https://github.com/cmderdev/cmder/pull/411) ([Jackbennett](https://github.com/Jackbennett))\n* Install steps clarity [\\#410](https://github.com/cmderdev/cmder/pull/410) ([Jackbennett](https://github.com/Jackbennett))\n* Update ConEmu \\<preview release\\>, update clink 4.4 [\\#407](https://github.com/cmderdev/cmder/pull/407) ([Jackbennett](https://github.com/Jackbennett))\n* Use a -Full parameter to download all sources rather than the minimum [\\#406](https://github.com/cmderdev/cmder/pull/406) ([Jackbennett](https://github.com/Jackbennett))\n* Adding mercuial prompt [\\#401](https://github.com/cmderdev/cmder/pull/401) ([utek](https://github.com/utek))\n* Handle quoted paths [\\#398](https://github.com/cmderdev/cmder/pull/398) ([mikesigs](https://github.com/mikesigs))\n* Add a Gitter chat badge to README.md [\\#390](https://github.com/cmderdev/cmder/pull/390) ([gitter-badger](https://github.com/gitter-badger))\n* Support UTF-8 file list [\\#378](https://github.com/cmderdev/cmder/pull/378) ([asika32764](https://github.com/asika32764))\n* Updated vendor references [\\#374](https://github.com/cmderdev/cmder/pull/374) ([CumpsD](https://github.com/CumpsD))\n* Prefer user installed git over cmder one. [\\#364](https://github.com/cmderdev/cmder/pull/364) ([narnaud](https://github.com/narnaud))\n* Update clink to latest \\(0.4.3\\) version [\\#362](https://github.com/cmderdev/cmder/pull/362) ([vladimir-kotikov](https://github.com/vladimir-kotikov))\n* Rework `alias` command to not to use external tools [\\#358](https://github.com/cmderdev/cmder/pull/358) ([vladimir-kotikov](https://github.com/vladimir-kotikov))\n* Updating to msysgit 1.9.5 [\\#353](https://github.com/cmderdev/cmder/pull/353) ([Celeo](https://github.com/Celeo))\n* Adding script to enable SSH-agent \\#193 [\\#352](https://github.com/cmderdev/cmder/pull/352) ([ogrim](https://github.com/ogrim))\n* Docs update for issue \\#319 [\\#337](https://github.com/cmderdev/cmder/pull/337) ([Jackbennett](https://github.com/Jackbennett))\n* changes copied from PR\\#256 [\\#326](https://github.com/cmderdev/cmder/pull/326) ([kohenkatz](https://github.com/kohenkatz))\n* Border less window mode [\\#324](https://github.com/cmderdev/cmder/pull/324) ([cgrail](https://github.com/cgrail))\n* Update alias.bat to show an existing alias [\\#314](https://github.com/cmderdev/cmder/pull/314) ([glucas](https://github.com/glucas))\n* Add an unalias command [\\#313](https://github.com/cmderdev/cmder/pull/313) ([glucas](https://github.com/glucas))\n* Revert \"Add single mode support.\" [\\#312](https://github.com/cmderdev/cmder/pull/312) ([MartiUK](https://github.com/MartiUK))\n* FIX CMDER_ROOT for admin launch [\\#311](https://github.com/cmderdev/cmder/pull/311) ([sescandell](https://github.com/sescandell))\n* Lambda color in PowerShell was changed to DarkGray [\\#308](https://github.com/cmderdev/cmder/pull/308) ([SheGe](https://github.com/SheGe))\n* Add option to reload aliases from file [\\#304](https://github.com/cmderdev/cmder/pull/304) ([glucas](https://github.com/glucas))\n* Clean aliases script [\\#300](https://github.com/cmderdev/cmder/pull/300) ([melku](https://github.com/melku))\n* Adding history alias [\\#299](https://github.com/cmderdev/cmder/pull/299) ([robgithub](https://github.com/robgithub))\n* Fixes the ambiguity about notice and parameter [\\#298](https://github.com/cmderdev/cmder/pull/298) ([LeoColomb](https://github.com/LeoColomb))\n* Fixed small issue in README [\\#296](https://github.com/cmderdev/cmder/pull/296) ([brunowego](https://github.com/brunowego))\n* Fixes small PowerShell' loader issues [\\#273](https://github.com/cmderdev/cmder/pull/273) ([LeoColomb](https://github.com/LeoColomb))\n* Update Dev Branch [\\#272](https://github.com/cmderdev/cmder/pull/272) ([MartiUK](https://github.com/MartiUK))\n* Add custom loader for PowerShell & improve its implementation [\\#271](https://github.com/cmderdev/cmder/pull/271) ([LeoColomb](https://github.com/LeoColomb))\n* Add single mode support. [\\#256](https://github.com/cmderdev/cmder/pull/256) ([TheCjw](https://github.com/TheCjw))\n* Revert \"Start in the HOME folder.\" [\\#253](https://github.com/cmderdev/cmder/pull/253) ([MartiUK](https://github.com/MartiUK))\n* Ensure-Exists is necessary for build.ps1, add it back. [\\#249](https://github.com/cmderdev/cmder/pull/249) ([narnaud](https://github.com/narnaud))\n* Fix clink version [\\#244](https://github.com/cmderdev/cmder/pull/244) ([narnaud](https://github.com/narnaud))\n* Start in the HOME folder. [\\#243](https://github.com/cmderdev/cmder/pull/243) ([narnaud](https://github.com/narnaud))\n* The latest msysgit comes with vim 7.4. [\\#241](https://github.com/cmderdev/cmder/pull/241) ([narnaud](https://github.com/narnaud))\n* Bump versions [\\#208](https://github.com/cmderdev/cmder/pull/208) ([MartiUK](https://github.com/MartiUK))\n* New section for user help with an integration feature of Cmder. [\\#199](https://github.com/cmderdev/cmder/pull/199) ([Jackbennett](https://github.com/Jackbennett))\n* Fix typos [\\#198](https://github.com/cmderdev/cmder/pull/198) ([mtsk](https://github.com/mtsk))\n* Update Clink URL [\\#180](https://github.com/cmderdev/cmder/pull/180) ([CoolOppo](https://github.com/CoolOppo))\n* Try to find 7-zip if it's installed before an error. [\\#177](https://github.com/cmderdev/cmder/pull/177) ([Jackbennett](https://github.com/Jackbennett))\n* Update clink hyperlink [\\#173](https://github.com/cmderdev/cmder/pull/173) ([gmsantos](https://github.com/gmsantos))\n* Typo fix [\\#172](https://github.com/cmderdev/cmder/pull/172) ([robinbijlani](https://github.com/robinbijlani))\n* Only cd to $HOME if started in CMDER_ROOT. [\\#167](https://github.com/cmderdev/cmder/pull/167) ([schlamar](https://github.com/schlamar))\n* Find cmder files when running as Administrator. [\\#166](https://github.com/cmderdev/cmder/pull/166) ([glucas](https://github.com/glucas))\n* Allow for existing HOME variable [\\#165](https://github.com/cmderdev/cmder/pull/165) ([glucas](https://github.com/glucas))\n* Minor changes for \\#152 [\\#162](https://github.com/cmderdev/cmder/pull/162) ([Jackbennett](https://github.com/Jackbennett))\n* Add registration for right-click on folder item; Add context-menu icon [\\#159](https://github.com/cmderdev/cmder/pull/159) ([kohenkatz](https://github.com/kohenkatz))\n* Getting the build script to a working state [\\#157](https://github.com/cmderdev/cmder/pull/157) ([Jackbennett](https://github.com/Jackbennett))\n* Update index.html [\\#145](https://github.com/cmderdev/cmder/pull/145) ([CoolOppo](https://github.com/CoolOppo))\n* Update fast new tab shortcut in gh-pages/index.html [\\#131](https://github.com/cmderdev/cmder/pull/131) ([sopel](https://github.com/sopel))\n* Update links on the webpage to latest version. [\\#111](https://github.com/cmderdev/cmder/pull/111) ([sc0tt](https://github.com/sc0tt))\n* Update fast new tab shortcut in README. [\\#98](https://github.com/cmderdev/cmder/pull/98) ([jcheng31](https://github.com/jcheng31))\n* Make application use Cmder icon [\\#88](https://github.com/cmderdev/cmder/pull/88) ([sc0tt](https://github.com/sc0tt))\n* Git exe Cleanup. [\\#85](https://github.com/cmderdev/cmder/pull/85) ([MartiUK](https://github.com/MartiUK))\n* Fixed errors and grammar in README files. [\\#78](https://github.com/cmderdev/cmder/pull/78) ([sicil1ano](https://github.com/sicil1ano))\n* Fixed a couple tiny typos in the readme [\\#77](https://github.com/cmderdev/cmder/pull/77) ([jdsumsion](https://github.com/jdsumsion))\n* Change TERM from msys to cygwin. [\\#75](https://github.com/cmderdev/cmder/pull/75) ([brkc](https://github.com/brkc))\n* Removed \"C:\\Users\\bliker\" reference in config/ConEmu.xml [\\#74](https://github.com/cmderdev/cmder/pull/74) ([MartiUK](https://github.com/MartiUK))\n* Updated links on gh-pages to newer release of cmder [\\#70](https://github.com/cmderdev/cmder/pull/70) ([MartiUK](https://github.com/MartiUK))\n* Add launcher [\\#62](https://github.com/cmderdev/cmder/pull/62) ([austinwagner](https://github.com/austinwagner))\n* Remove wget dependency and verify existence of 7z.exe in build script [\\#60](https://github.com/cmderdev/cmder/pull/60) ([austinwagner](https://github.com/austinwagner))\n* Allow use of Vim from msysgit. [\\#51](https://github.com/cmderdev/cmder/pull/51) ([MartiUK](https://github.com/MartiUK))\n* Fix line ending handling if autocrlf is false. [\\#34](https://github.com/cmderdev/cmder/pull/34) ([schlamar](https://github.com/schlamar))\n* Fix spelling in init.bat [\\#32](https://github.com/cmderdev/cmder/pull/32) ([Shoozza](https://github.com/Shoozza))\n* Added minimal validation and usage help. [\\#26](https://github.com/cmderdev/cmder/pull/26) ([Vivix](https://github.com/Vivix))\n* Fix spelling [\\#22](https://github.com/cmderdev/cmder/pull/22) ([Shoozza](https://github.com/Shoozza))\n* Proofreading index.html [\\#20](https://github.com/cmderdev/cmder/pull/20) ([manolomartinez](https://github.com/manolomartinez))\n* Fixed grammar [\\#18](https://github.com/cmderdev/cmder/pull/18) ([tonylau](https://github.com/tonylau))\n* Fixed issue when rootDir contains spaces. [\\#15](https://github.com/cmderdev/cmder/pull/15) ([jyggen](https://github.com/jyggen))\n* Another typo. Fixed link to msysgit. [\\#7](https://github.com/cmderdev/cmder/pull/7) ([BeingTomGreen](https://github.com/BeingTomGreen))\n* minor typo fix [\\#5](https://github.com/cmderdev/cmder/pull/5) ([BeingTomGreen](https://github.com/BeingTomGreen))\n\n\\* _This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)_\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# How to contribute\n\nUnfortunately we all can't work on Cmder every day of the year, so I have decided to write some guidelines for contributing.\n\nIf you follow them your contribution will likely be pulled in quicker.\n\n## Getting Started\n\n* Fork the repository on GitHub (It's that easy)\n* Create a feature branch based on the `master` branch.\n\n## Making Changes\n\n* Make changes in your separate branch.\n* Check for unnecessary whitespace with `git diff --check` before committing.\n* Make sure your commit messages are easy to understand\n* Squash your 'Correcting mistakes' commits if you have a lot of them. (See the 'Squashing Commits' link below)\n* Make sure your changes won't affect new users or user without a customised system, try out your changes on a fresh Windows VM to see if it would affect a new user's experience.\n  * Sometimes a change that helps you with your cmder experience and tools doesn't always mean other people may need/want it.\n\n## Making Trivial Changes\n\n### Documentation\n\n* If the documentation is about a currently available feature in cmder or correcting already created documentation, you can safely make your changes on the master branch and pull request them onto master.\n\n## Submitting Changes\n\n* Push your changes to the branch in your fork of the repository.\n* Submit a pull request to the develop branch of the cmder repository (unless it's a change in documentation [see above]).\n* Make sure you explicitly say to not complete the pull request if you are still making changes.\n\n\n# Additional Resources\n\n* [Squashing Commits](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html)\n* [General GitHub documentation](http://help.github.com/)\n* [GitHub pull request documentation](http://help.github.com/articles/creating-a-pull-request/)\n"
  },
  {
    "path": "Cmder.bat",
    "content": "@echo off\r\nSET CMDER_ROOT=%~dp0\r\n\r\n:: Remove Trailing '\\'\r\n@if \"%CMDER_ROOT:~-1%\" == \"\\\" SET CMDER_ROOT=%CMDER_ROOT:~0,-1%\r\n\r\nif not exist \"%CMDER_ROOT%\\config\\user_ConEmu.xml\" (\r\n    if not exist \"%CMDER_ROOT%\\config\" mkdir \"%CMDER_ROOT%\\config\" 2>nul\r\n    copy \"%CMDER_ROOT%\\vendor\\ConEmu.xml.default\" \"%CMDER_ROOT%\\config\\user_ConEmu.xml\" 1>nul\r\n    if %errorlevel% neq 0 (\r\n        echo ERROR: CMDER Initialization has Failed\r\n        exit /b 1\r\n    )\r\n)\r\n\r\nif exist \"%~1\" (\r\n    start %~dp0/vendor/conemu-maximus5/ConEmu.exe /Icon \"%CMDER_ROOT%\\icons\\cmder.ico\" /Title Cmder /LoadCfgFile \"%~1\"\r\n) else (\r\n    start %~dp0/vendor/conemu-maximus5/ConEmu.exe /Icon \"%CMDER_ROOT%\\icons\\cmder.ico\" /Title Cmder /LoadCfgFile \"%CMDER_ROOT%\\config\\user_ConEmu.xml\"\r\n)\r\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2017 Samuel Vasko\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# Cmder\n\n[![Join the chat at https://gitter.im/cmderdev/cmder](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/cmderdev/cmder?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Build Status](https://ci.appveyor.com/api/projects/status/github/cmderdev/cmder?branch=master&svg=true)](https://ci.appveyor.com/project/cmderdev/cmder) [![Build Status](https://github.com/cmderdev/cmder/actions/workflows/build.yml/badge.svg)](https://github.com/cmderdev/cmder/actions/workflows/build.yml)\n\nCmder is a **software package** created out of pure frustration over absence of usable console emulator on Windows. It is based on [ConEmu](https://conemu.github.io/) with *major* config overhaul, comes with a Monokai color scheme, amazing [clink](https://chrisant996.github.io/clink/) (further enhanced by [clink-completions](https://github.com/vladimir-kotikov/clink-completions)) and a custom prompt layout.\n\n![Cmder Screenshot](http://i.imgur.com/g1nNf0I.png)\n\n## Why use it\n\nThe main advantage of Cmder is portability. It is designed to be totally self-contained with no external dependencies, which makes it great for **USB Sticks** or **cloud storage**. So you can carry your console, aliases and binaries (like `wget`, `curl` and `git`) with you anywhere.\n\nThe Cmder's user interface is also designed to be more eye pleasing, and you can compare the main differences between Cmder and ConEmu [here](https://conemu.github.io/en/cmder.html).\n\n## Installation\n### Single User Portable Config\n\n1. Download the [latest release](https://github.com/cmderdev/cmder/releases/)\n2. Extract the archive. *Note: This path should not be `C:\\Program Files` or anywhere else that would require Administrator access for modifying configuration files*\n3. (optional) Place your own executable files into the `%cmder_root%\\bin` folder to be injected into your PATH.\n4. Run `Cmder.exe`\n\n### Shared Cmder install with Non-Portable Individual User Config\n1. Download the [latest release](https://github.com/cmderdev/cmder/releases/)\n2. Extract the archive to a shared location.\n3. (optional) Place your own executable files and custom app folders into the `%cmder_root%\\bin`. See: [bin/README.md](./bin/Readme.md)\n   - This folder to be injected into your PATH by default.\n   - See `/max_depth [1-5]` in 'Command Line Arguments for `init.bat`' table to add subdirectories recursively.\n4. (optional) Place your own custom app folders into the `%cmder_root%\\opt`. See: [opt/README.md](./opt/Readme.md)\n   - This folder will NOT be injected into your PATH so you have total control of what gets added.\n5. Run `Cmder.exe` with `/C` command line argument. Example: `cmder.exe /C %userprofile%\\cmder_config`\n   * This will create the following directory structure if it is missing.\n\n     ```\n     c:\\users\\[username]\\cmder_config\n     ├───bin\n     ├───config\n     │   └───profile.d\n     └───opt\n     ```\n\n  - (optional) Place your own executable files and custom app folders into `%userprofile%\\cmder_config\\bin`.\n    - This folder to be injected into your PATH by default.\n    - See `/max_depth [1-5]` in 'Command Line Arguments for `init.bat`' table to add subdirectories recursively.\n  - (optional) Place your own custom app folders into the `%user_profile%\\cmder_config\\opt`.\n    - This folder will NOT be injected into your PATH so you have total control of what gets added.\n\n\n* Both the shared install and the individual user config locations can contain a full set of init and profile.d scripts enabling shared config with user overrides.  See below.\n\n## Cmder.exe Command Line Arguments\n\n\n| Argument                  | Description                                                                              |\n| ------------------------- | -----------------------------------------------------------------------                  |\n| `/C [user_root_path]`     | Individual user Cmder root folder.  Example: `%userprofile%\\cmder_config`                |\n| `/M`                      | Use `conemu-%computername%.xml` for ConEmu settings storage instead of `user_conemu.xml` |\n| `/REGISTER [ALL, USER]`   | Register a Windows Shell Menu shortcut.                                                  |\n| `/UNREGISTER [ALL, USER]` | Un-register a Windows Shell Menu shortcut.                                               |\n| `/SINGLE`                 | Start Cmder in single mode.                                                              |\n| `/START [start_path]`     | Folder path to start in.                                                                 |\n| `/TASK [task_name]`       | Task to start after launch.                                                              |\n| `/X [ConEmu extras pars]` | Forwards parameters to ConEmu                                                            |\n\n## Context Menu Integration\n\nSo you've experimented with Cmder a little and want to give it a shot in a more permanent home;\n\n### Shortcut to open Cmder in a chosen folder\n\n1. Open a terminal as an Administrator\n2. Navigate to the directory you have placed Cmder\n3. Execute `.\\cmder.exe /REGISTER ALL`\n   _If you get an \"Access Denied\" message, make sure you are executing the command in an **Administrator** prompt._\n\nIn a file explorer window right click in or on a directory to see \"Cmder Here\" in the context menu.\n\n## Keyboard shortcuts\n\n### Tab manipulation\n\n* <kbd>Ctrl</kbd> + <kbd>T</kbd> : New tab dialog (maybe you want to open cmd as admin?)\n* <kbd>Ctrl</kbd> + <kbd>W</kbd> : Close tab\n* <kbd>Ctrl</kbd> + <kbd>D</kbd> : Close tab (if pressed on empty command)\n* <kbd>Shift</kbd> + <kbd>Alt</kbd> + <kbd>#Number</kbd> : Fast new tab: <kbd>1</kbd> - CMD, <kbd>2</kbd> - PowerShell\n* <kbd>Ctrl</kbd> + <kbd>Tab</kbd> : Switch to next tab\n* <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>Tab</kbd> : Switch to previous tab\n* <kbd>Ctrl</kbd> + <kbd>#Number</kbd> : Switch to tab #Number\n* <kbd>Alt</kbd> + <kbd>Enter</kbd>: Fullscreen\n\n### Shell\n\n* <kbd>Ctrl</kbd> + <kbd>Alt</kbd> + <kbd>U</kbd> : Traverse up in directory structure (lovely feature!)\n* <kbd>End</kbd>, <kbd>Home</kbd>, <kbd>Ctrl</kbd> : Traversing text with as usual on Windows\n* <kbd>Ctrl</kbd> + <kbd>R</kbd> : History search\n* <kbd>Shift</kbd> + Mouse : Select and copy text from buffer\n\n_(Some shortcuts are not yet documented, though they exist - please document them here)_\n\n## Features\n\n### Access to multiple shells in one window using tabs\nYou can open multiple tabs each containing one of the following shells:\n\n| Task                | Shell            | Description                                                                                                  |\n| ----                | -----            | -----------                                                                                                  |\n| Cmder               | `cmd.exe`        | Windows `cmd.exe` shell enhanced with Git, Git aware prompt, Clink (GNU Readline), and Aliases.              |\n| Cmder as Admin      | `cmd.exe`        | Administrative Windows `cmd.exe` Cmder shell.                                                                |\n| PowerShell          | `powershell.exe` | Windows PowerShell enhanced with Git and Git aware prompt .                                                  |\n| PowerShell as Admin | `powershell.exe` | Administrative Windows `powershell.exe` Cmder shell.                                                         |\n| Bash                | `bash.exe`       | Unix/Linux like bash shell running on Windows.                                                               |\n| Bash as Admin       | `bash.exe`       | Administrative Unix/Linux like bash shell running on Windows.                                                |\n| Mintty              | `bash.exe`       | Unix/Linux like bash shell running on Windows. See below for Mintty configuration differences                |\n| Mintty as Admin     | `bash.exe`       | Administrative Unix/Linux like bash shell running on Windows. See below for Mintty configuration differences |\n\nCmder, PowerShell, and Bash tabs all run on top of the Windows Console API and work as you might expect in Cmder with access to use ConEmu's color schemes, key bindings and other settings defined in the ConEmu Settings dialog.\n\n⚠ *Note:* Only the full edition of Cmder comes with a pre-installed bash, using a vendored [git-for-windows](https://gitforwindows.org/) installation. The pre-configured Bash tabs may not work on Cmder mini edition without additional configuration.\n\nYou may however, choose to use an external installation of bash, such as Microsoft's [Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) (called WSL) or the [Cygwin](https://cygwin.com/) project which provides POSIX support on windows.\n\n⚠ *Note:* Mintty tabs use a program called 'mintty' as the terminal emulator that is not based on the Windows Console API, rather it's rendered graphically by ConEmu. Mintty differs from the other tabs in that it supports xterm/xterm-256color TERM types, and does not work with ConEmu settings like color schemes and key bindings.  As such, some differences in functionality are to be expected, such as Cmder not being able to apply a system-wide configuration to it.\n\nAs a result mintty specific config is done via the `[%USERPROFILE%|$HOME]/.minttyrc` file.  You may read more about Mintty and its config file [here](https://github.com/mintty/mintty).\n\nAn example of setting Cmder portable terminal colors for mintty:\n\nFrom a bash/mintty shell:\n\n```\ncd $CMDER_ROOT/vendor\ngit clone https://github.com/karlin/mintty-colors-solarized.git\ncd mintty-colors-solarized/\necho source \\$CMDER_ROOT/vendor/mintty-colors-solarized/mintty-solarized-dark.sh>>$CMDER_ROOT/config/user_profile.sh\n```\n\nYou may find some Monokai color schemes for mintty to match Cmder [here](https://github.com/oumu/mintty-color-schemes/blob/master/base16-monokai-mod.minttyrc).\n\n### Changing Cmder Default `cmd.exe` Prompt Config File\n\nThe default Cmder shell `cmd::Cmder` prompt is customized using `Clink` and is configured by editing a config file that exists in one of two locations:\n\n- Single User Portable Config `%CMDER_ROOT%\\config\\cmder_prompt_config.lua`\n- Shared Cmder install with Non-Portable Individual User Config `%CMDER_USER_CONFIG%\\cmder_prompt_config.lua`\n\nIf your Cmder setup does not have this file create it from `%CMDER_ROOT%\\vendor\\cmder_prompt_config.lua.default`\n\nCustomizations include:\n\n- Colors.\n- Single/Multi-line.\n- Full path/Folder only.\n- `[user]@[host]` to the beginning of the prompt.\n- `~` for home directory.\n- `λ` symbol\n\nDocumentation is in the file for each setting.\n\n### Changing Cmder Default `cmd.exe` Shell Startup Behaviour Using Task Arguments\n\n1. Press <kbd>Win</kbd> + <kbd>Alt</kbd> + <kbd>T</kbd>\n1. Click either:\n  * `1. {cmd::Cmder as Admin}`\n  * `2. {cmd::Cmder}`\n1. Add command line arguments where specified below:\n\n  *Note: Pay attention to the quotes!*\n\n  ```\n  cmd /s /k \"\"%ConEmuDir%\\..\\init.bat\" [ADD ARGS HERE]\"\n  ```\n\n##### Command Line Arguments for `init.bat`\n\n| Argument                        | Description                                                                                                                                        | Default                                |\n| -----------------------------   | ----------------------------------------------------------------------------------------------                                                     | -------------------------------------  |\n| `/c [user cmder root]`          | Enables user bin and config folders for 'Cmder as admin' sessions due to non-shared environment.                                                   | not set                                |\n| `/d`                            | Enables debug output.                                                                                                                              | not set                                |\n| `/f`                            | Enables Cmder Fast Init Mode. This disables some features, see pull request [#1492](https://github.com/cmderdev/cmder/pull/1942) for more details. | not set                                |\n| `/t`                            | Enables Cmder Timed Init Mode. This displays the time taken run init scripts                                                                       | not set                                |\n| `/git_install_root [file path]` | User specified Git installation root path.                                                                                                         | `%CMDER_ROOT%\\vendor\\Git-for-Windows`  |\n| `/home [home folder]`           | User specified folder path to set `%HOME%` environment variable.                                                                                   | `%userprofile%`                        |\n| `/max_depth [1-5]`              | Define max recurse depth when adding to the path for `%cmder_root%\\bin` and `%cmder_user_bin%`                                                     | 1                                      |\n| `/nix_tools [0-2]`              | Define how `*nix` tools are added to the path.  Prefer Windows Tools: 1, Prefer *nix Tools: 2, No `/usr/bin` in `%PATH%`: 0                        | 1                                      |\n| `/svn_ssh [path to ssh.exe]`    | Define `%SVN_SSH%` so we can use git svn with ssh svn repositories.                                                                                | `%GIT_INSTALL_ROOT%\\bin\\ssh.exe`       |\n| `/user_aliases [file path]`     | File path pointing to user aliases.                                                                                                                | `%CMDER_ROOT%\\config\\user_aliases.cmd` |\n| `/v`                            | Enables verbose output.                                                                                                                            | not set                                |\n| (custom arguments)              | User defined arguments processed by `cexec`. Type `cexec /?` for more usage.                                                                      | not set                                |\n\n### Cmder Shell User Config\nSingle user portable configuration is possible using the Cmder specific shell config files.  Edit the below files to add your own configuration:\n\n| Shell         | Cmder Portable User Config                |\n| ------------- | ----------------------------------------- |\n| Cmder         | `%CMDER_ROOT%\\config\\user_profile.cmd`    |\n| PowerShell    | `$ENV:CMDER_ROOT\\config\\user_profile.ps1` |\n| Bash/Mintty   | `$CMDER_ROOT/config/user_profile.sh`      |\n\n**Note:** Bash and Mintty sessions will also source the `$HOME/.bashrc` file if it exists after it sources `$CMDER_ROOT/config/user_profile.sh`.\n\nYou can write `*.cmd|*.bat`, `*.ps1`, and `*.sh` scripts and just drop them in the `%CMDER_ROOT%\\config\\profile.d` folder to add startup config to Cmder.\n\n| Shell         | Cmder `Profile.d` Scripts                          |\n| ------------- | -------------------------------------------------- |\n| Cmder         | `%CMDER_ROOT%\\config\\profile.d\\*.bat and *.cmd`    |\n| PowerShell    | `$ENV:CMDER_ROOT\\config\\profile.d\\*.ps1`           |\n| Bash/Mintty   | `$CMDER_ROOT/config/profile.d/*.sh`                |\n\n#### Git Status Opt-Out\n\n To disable Cmder prompt git status globally add the following to `~/.gitconfig` or locally for a single repo `[repo]/.git/config` and start a new session.\n\n *Note: This configuration is not portable*\n\n ```\n [cmder]\n   status = false      # Opt out of Git status for 'ALL' Cmder supported shells.\n   cmdstatus = false   # Opt out of Git status for 'Cmd.exe' shells.\n   psstatus = false    # Opt out of Git status for 'Powershell.exe and 'Pwsh.exe' shells.\n   shstatus = false    # Opt out of Git status for 'bash.exe' shells.\n ```\n\n### Aliases\n#### Cmder(`Cmd.exe`) Aliases\nYou can define simple aliases for `cmd.exe` sessions with a command like `alias name=command`.  Cmd.exe aliases support optional parameters through the `$1-9` or the `$*` special characters so the alias `vi=vim.exe $*` typed as `vi [filename]` will open `[filename]` in `vim.exe`.\n\nCmd.exe aliases can also be more complex. See: [DOSKEY.EXE documentation](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/doskey) for additional details on complex aliases/macros for `cmd.exe`\n\nAliases defined using the `alias.bat` command will automatically be saved in the `%CMDER_ROOT%\\config\\user_aliases.cmd` file\n\nTo make an alias and/or any other profile settings permanent add it to one of the following:\n\nNote: These are loaded in this order by `$CMDER_ROOT/vendor/init.bat`.  Anything stored in `%CMDER_ROOT%` will be a portable setting and will follow Cmder to another machine.\n\n* `%CMDER_ROOT%\\config\\profile.d\\*.cmd` and `\\*.bat`\n* `%CMDER_ROOT%\\config\\user_aliases.cmd`\n* `%CMDER_ROOT%\\config\\user_profile.cmd`\n\n#### Bash.exe|Mintty.exe Aliases\nBash shells support simple and complex aliases with optional parameters natively so they work a little different.  Typing `alias name=command` will create an alias only for the current running session.\n\nTo make an alias and/or any other profile settings permanent add it to one of the following:\n\nNote: These are loaded in this order by `$CMDER_ROOT/vendor/git-for-windows/etc/profile.d/cmder.sh`.  Anything stored in `$CMDER_ROOT` will be a portable setting and will follow Cmder to another machine.\n\n* `$CMDER_ROOT/config/profile.d/*.sh`\n* `$CMDER_ROOT/config/user_profile.sh`\n* `$HOME/.bashrc`\n\nIf you add bash aliases to `$CMDER_ROOT/config/user_profile.sh` they will be portable and follow your Cmder folder if you copy it to another machine.  `$HOME/.bashrc` defined aliases are not portable.\n\n#### PowerShell.exe Aliases\nPowerShell has native simple alias support, for example `[new-alias | set-alias] alias command`, so complex aliases with optional parameters are not supported in PowerShell sessions.  Type `get-help [new-alias|set-alias] -full` for help on PowerShell aliases.\n\nTo make an alias and/or any other profile settings permanent add it to one of the following:\n\nNote: These are loaded in this order by `$ENV:CMDER_ROOT\\vendor\\user_profile.ps1`.  Anything stored in `$ENV:CMDER_ROOT` will be a portable setting and will follow Cmder to another machine.\n\n* `$ENV:CMDER_ROOT\\config\\profile.d\\*.ps1`\n* `$ENV:CMDER_ROOT\\config\\user_profile.ps1`\n\n### SSH Agent\n\nTo start the vendored SSH agent simply call `start-ssh-agent`, which is in the `vendor/git-for-windows/cmd` folder.\n\nIf you want to run SSH agent on startup, include the line `@call \"%GIT_INSTALL_ROOT%/cmd/start-ssh-agent.cmd\"` in `%CMDER_ROOT%/config/user_profile.cmd` (usually just uncomment it).\n\n### Vendored Git\n\nCmder is by default shipped with a vendored Git installation.  On each instance of launching Cmder, an attempt is made to locate any other user provided Git binaries. Upon finding a `git.exe` binary, Cmder further compares its version against the vendored one _by executing_ it. The vendored `git.exe` binary is _only_ used when it is more recent than the user-installed one.\n\nYou may use your favorite version of Git by including its path in the `%PATH%` environment variable.  Moreover, the **Mini** edition of Cmder (found on the [downloads page](https://github.com/cmderdev/cmder/releases)) excludes any vendored Git binaries.\n\n### Using external Cygwin/Babun, MSys2, WSL, or Git for Windows SDK with Cmder.\n\nYou may run bash (the default shell used on Linux, macOS and GNU/Hurd) externally on Cmder, using the following instructions:\n\n1. Setup a new task by pressing <kbd>Win</kbd> +<kbd>Alt</kbd> + <kbd>T</kbd>.\n1. Click the `+` button to add a task.\n1. Name the new task in the top text box.\n1. Provide task parameters, this is optional.\n1. Add `cmd /c \"[path_to_external_env]\\bin\\bash --login -i\" -new_console` to the `Commands` text box.\n\n**Recommended Optional Steps:**\n\nCopy the `vendor/cmder_exinit` file to the Cygwin/Babun, MSys2, or Git for Windows SDK environments `/etc/profile.d/` folder to use portable settings in the `$CMDER_ROOT/config` folder.\n\nNote: MinGW could work if the init scripts include `profile.d` but this has not been tested.\n\nThe destination file extension depends on the shell you use in that environment.  For example:\n\n* bash - Copy to `/etc/profile.d/cmder_exinit.sh`\n* zsh  - Copy to `/etc/profile.d/cmder_exinit.zsh`\n\nUncomment and edit the line below in the script to use Cmder config even when launched from outside Cmder.\n\n```\n# CMDER_ROOT=${USERPROFILE}/cmder  # This is not required if launched from Cmder.\n```\n\n### Customizing user sessions using `init.bat` custom arguments.\n\nYou can pass custom arguments to `init.bat` and use `cexec.cmd` in your `user_profile.cmd` to evaluate these\narguments then execute commands based on a particular flag being detected or not.\n\n`init.bat` creates two shortcuts for using `cexec.cmd` in your profile scripts.\n\n#### `%ccall%` - Evaluates flags, runs commands if found,  and returns to the calling script and continues.\n\n```\nccall=call C:\\Users\\user\\cmderdev\\vendor\\bin\\cexec.cmd\n```\n\nExample: `%ccall% /startnotepad start notepad.exe`\n\n#### `%cexec%` - Evaluates flags, runs commands if found, and does not return to the calling script.\n\n```\ncexec=C:\\Users\\user\\cmderdev\\vendor\\bin\\cexec.cmd\n```\n\nExample: `%cexec% /startnotepad start notepad.exe`\n\nIt is useful when you have multiple tasks to execute `cmder` and need it to initialize\nthe session differently depending on the task chosen.\n\nTo conditionally start `notepad.exe` when you start a specific `cmder` task:\n\n* Press <kbd>win</kbd>+<kbd>alt</kbd>+<kbd>t</kbd>\n* Click `+` to add a new task.\n* Add the below to the `Commands` block:\n\n  ```batch\n\n  cmd.exe /k \"\"%ConEmuDir%\\..\\init.bat\" /startnotepad\"\n\n  ```\n\n* Add the below to your `%cmder_root%\\config\\user_profile.cmd`\n\n  ```batch\n\n  %ccall% \"/startNotepad\" \"start\" \"notepad.exe\"`\n\n  ```\n\nTo see detailed usage of `cexec`, type `cexec /?` in Cmder.\n\n### Integrating Cmder with [Windows Terminal](https://github.com/cmderdev/cmder/wiki/Seamless-Windows-Terminal-Integration), [VS Code](https://github.com/cmderdev/cmder/wiki/Seamless-VS-Code-Integration), and your favorite IDEs\n\nCmder by default comes with a vendored ConEmu installation as the underlying terminal emulator, as stated [here](https://conemu.github.io/en/cmder.html).\n\nHowever, Cmder can in fact run in a variety of other terminal emulators, and even integrated IDEs. Assuming you have the latest version of Cmder, follow the following instructions to get Cmder working with your own terminal emulator.\n\n⚠ *Note:* Cmder includes built-in support for Windows Terminal directory tracking via OSC 9;9 sequences. This enables \"Duplicate Tab\" and \"Split Pane\" features to preserve the current working directory for both `cmd.exe` and PowerShell sessions.\n\n⚠ *Note:* Cmder also includes built-in support for [Windows Terminal shell integration](https://learn.microsoft.com/en-us/windows/terminal/tutorials/shell-integration) via OSC 133 sequences (A, B, C, D) for PowerShell sessions. This enables features like command navigation (jump between commands), command selection, visual command separators, command exit code tracking, and improved command history management in Windows Terminal.\n\nFor instructions on how to integrate Cmder with your IDE, please read our [Wiki section](https://github.com/cmderdev/cmder/wiki#cmder-integration).\n\n## Upgrading\n\nThe process of upgrading Cmder depends on the version/build you are currently running.\n\nIf you have a `[cmder_root]/config/user[-|_]conemu.xml`, you are running a newer version of Cmder, follow the below process:\n\n1. Exit all Cmder sessions and relaunch `[cmder_root]/cmder.exe`, this backs up your existing `[cmder_root]/vendor/conemu-maximus5/conemu.xml` to `[cmder_root]/config/user[-|_]conemu.xml`.\n\n   * The `[cmder_root]/config/user[-|_]conemu.xml` contains any custom settings you have made using the 'Setup Tasks' settings dialog.\n\n2. Exit all Cmder sessions and backup any files you have manually edited under `[cmder_root]/vendor`.\n\n   * Editing files under `[cmder_root]/vendor` is not recommended since you will need to re-apply these changes after any upgrade.  All user customizations should go in `[cmder_root]/config` folder.\n\n3.  Delete the `[cmder_root]/vendor` folder.\n4.  Extract the new `cmder.zip` or `cmder_mini.zip` into `[cmder_root]/` overwriting all files when prompted.\n\nIf you do not have a `[cmder_root]/config/user[-|_]conemu.xml`, you are running an older version of cmder, follow the below process:\n\n1. Exit all Cmder sessions and backup `[cmder_root]/vendor/conemu-maximus5/conemu.xml` to `[cmder_root]/config/user[-|_]conemu.xml`.\n\n2. Backup any files you have manually edited under `[cmder_root]/vendor`.\n\n   * Editing files under `[cmder_root]/vendor` is not recommended since you will need to re-apply these changes after any upgrade.  All user customizations should go in `[cmder_root]/config` folder.\n\n3.  Delete the `[cmder_root]/vendor` folder.\n4.  Extract the new `cmder.zip` or `cmder_mini.zip` into `[cmder_root]/` overwriting all files when prompted.\n\n## Current development builds\n\nYou can download builds of the current development branch by going to AppVeyor via the following link:\n\n[![AppVeyor](https://ci.appveyor.com/api/projects/status/github/cmderdev/cmder?svg=True)](https://ci.appveyor.com/project/cmderdev/cmder/branch/master/artifacts)\n\nThe latest download builds by GitHub Actions can be downloaded from the link below:\n\n[![Build Status](https://github.com/cmderdev/cmder/actions/workflows/build.yml/badge.svg)](https://github.com/cmderdev/cmder/actions/workflows/build.yml)\n\n## License\n\nAll software included is bundled with own license\n\nThe MIT License (MIT)\n\nCopyright (c) 2016 Samuel Vasko\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "SECURITY.md",
    "content": "# Security Policy\n\n## Supported Versions\n\n| Version | Supported          |\n| ------- | ------------------ |\n| 1.3.x   | :white_check_mark: |\n| < 1.3   | ❎ |\n\n## Reporting a Vulnerability\n\nIf you discover a security issue in our project, please report it to [MartiUK](https://github.com/MartiUK). We will acknowledge your email within 24 hours and provide a more detailed response within 48 hours. We will try to fix the issue as soon as possible and inform you when a new version is released.\n\nPlease include as much of the information listed below as you can to help us better understand and resolve the issue:\n\n- The nature of the issue\n- The affected source file(s) with full paths\n- The location of the vulnerable code (tag/branch/commit or direct URL)\n- Any special configuration needed to reproduce the issue\n- Detailed steps to reproduce the issue\n- Proof-of-concept or exploit code (if possible)\n- The impact of the issue, including how an attacker could exploit it\n\nPlease do not disclose the vulnerability publicly until we have resolved it.\n"
  },
  {
    "path": "bin/Readme.md",
    "content": "## Bin\n\nThis folder will be injected into the PATH environment variable at runtime.\n"
  },
  {
    "path": "config/Readme.md",
    "content": "## Config\n\nAll config files must be in this folder. If there is no option to set this folder \ndirectly, it has to be hardlinked.\n\n* `user_aliases.cmd`: aliases in cmd; called from vendor\\init.bat; autocreated from\n  `vendor\\user_aliases.cmd.default`.\n* `*.lua`: clink completions and prompt filters; autoloaded after all\n  prompt filter and clink completions are initialized; add your own.\n* `user_profile.{sh|cmd|ps1}`: startup files for bash|cmd|powershell tasks; called from their\n  respective startup scripts in `vendor\\`; autocreated from\n  `vendor\\user_profile.{sh|cmd|ps1}.default` on first start of such a task.\n* `.history`: the current commandline history; autoupdated on close.\n* `settings`: settings for readline; overwritten on update.\n* `user-ConEmu.xml`: settings from ConEmu the UI of Cmder. ;\n  Do not edit this file directly it is overwritten on each cmder.exe launch.\n"
  },
  {
    "path": "launcher/.gitignore",
    "content": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.sln.docstates\n*.filters\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\nx64/\nbuild/\nbld/\n[Bb]in/\n[Oo]bj/\n\n# Enable \"build/\" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets\n!packages/*/build/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n#NUNIT\n*.VisualState.xml\nTestResult.xml\n\n*_i.c\n*_p.c\n*_i.h\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opensdf\n*.sdf\n*.cachefile\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# JustCode is a .NET coding addin-in\n.JustCode\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# NCrunch\n*.ncrunch*\n_NCrunch_*\n.*crunch*.local.xml\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.Publish.xml\n*.azurePubxml\n\n# NuGet Packages Directory\n## TODO: If you have NuGet Package Restore enabled, uncomment the next line\n#packages/\n## TODO: If the tool you use requires repositories.config, also uncomment the next line\n#!packages/repositories.config\n\n# Windows Azure Build Output\ncsx/\n*.build.csdef\n\n# Windows Store app package directory\nAppPackages/\n\n# Others\nsql/\n*.Cache\nClientBin/\n[Ss]tyle[Cc]op.*\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.[Pp]ublish.xml\n*.pfx\n*.publishsettings\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file to a newer\n# Visual Studio version. Backup files are not needed, because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\n\n# SQL Server files\nApp_Data/*.mdf\nApp_Data/*.ldf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n\n# Microsoft Fakes\nFakesAssemblies/\n\n# =========================\n# Windows detritus\n# =========================\n\n# Windows image file caches\nThumbs.db\nehthumbs.db\n\n# Folder config file\nDesktop.ini\n\n# Recycle Bin used on file shares\n$RECYCLE.BIN/\n"
  },
  {
    "path": "launcher/CmderLauncher.sln",
    "content": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 14\nVisualStudioVersion = 14.0.23107.0\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"CmderLauncher\", \"CmderLauncher.vcxproj\", \"{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\t\tDebug|x64 = Debug|x64\n\t\tRelease|x64 = Release|x64\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}.Release|Win32.Build.0 = Release|Win32\n\t\t{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}.Debug|x64.Build.0 = Debug|x64\n\t\t{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}.Release|x64.ActiveCfg = Release|x64\n\t\t{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}.Release|x64.Build.0 = Release|x64\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "launcher/CmderLauncher.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>CmderLauncher</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v143</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n    <PlatformToolset>v143</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v143</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n    <PlatformToolset>v143</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetName>Cmder</TargetName>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <TargetName>Cmder</TargetName>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetName>Cmder</TargetName>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <LinkIncremental>false</LinkIncremental>\n    <TargetName>Cmder</TargetName>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <SDLCheck>true</SDLCheck>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <!-- <AdditionalDependencies>comctl32.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies> -->\n    </Link>\n    <Manifest>\n      <AdditionalManifestFiles>src/app.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>\n    </Manifest>\n    <ResourceCompile>\n      <PreprocessorDefinitions>_USING_V110_SDK71_;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ResourceCompile>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MinSpace</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>false</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <SDLCheck>true</SDLCheck>\n      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <!-- <AdditionalDependencies>comctl32.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies> -->\n    </Link>\n    <Manifest>\n      <AdditionalManifestFiles>src/app.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>\n    </Manifest>\n    <PostBuildEvent>\n      <Command>copy \"$(TargetPath)\" \"$(SolutionDir)..\\$(TargetFileName)\"</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <SDLCheck>true</SDLCheck>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n    </Link>\n    <Manifest>\n      <AdditionalManifestFiles>src/app.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>\n    </Manifest>\n    <ResourceCompile>\n      <PreprocessorDefinitions>_USING_V110_SDK71_;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ResourceCompile>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MinSpace</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>false</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <SDLCheck>true</SDLCheck>\n      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n    </Link>\n    <Manifest>\n      <AdditionalManifestFiles>src/app.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>\n    </Manifest>\n    <PostBuildEvent>\n      <Command>copy $(TargetPath) $(SolutionDir)..\\$(TargetFileName)</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"src\\resource.rc\">\n      <FileType>RC</FileType>\n    </ResourceCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"src\\resource.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"src\\CmderLauncher.cpp\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "launcher/src/CmderLauncher.cpp",
    "content": "#include <windows.h>\n#include <tchar.h>\n#include <Shlwapi.h>\n#include \"resource.h\"\n#include <vector>\n#include <shlobj.h>\n\n#include <regex>\n#include <iostream>\n\n#pragma comment(lib, \"Shlwapi.lib\")\n#pragma comment(lib, \"comctl32.lib\")\n#pragma warning( disable : 4091 )\n\n#ifndef UNICODE\n#error \"Must be compiled with unicode support.\"\n#endif\n\n#define USE_TASKBAR_API (_WIN32_WINNT >= _WIN32_WINNT_WIN7)\n\n#define MB_TITLE L\"Cmder Launcher\"\n#define SHELL_MENU_REGISTRY_PATH_BACKGROUND L\"Directory\\\\Background\\\\shell\\\\Cmder\"\n#define SHELL_MENU_REGISTRY_PATH_LISTITEM L\"Directory\\\\shell\\\\Cmder\"\n#define SHELL_MENU_REGISTRY_DRIVE_PATH_BACKGROUND L\"Drive\\\\Background\\\\shell\\\\Cmder\"\n#define SHELL_MENU_REGISTRY_DRIVE_PATH_LISTITEM L\"Drive\\\\shell\\\\Cmder\"\n\n#define streqi(a, b) (_wcsicmp((a), (b)) == 0)\n\n#define WIDEN2(x) L ## x\n#define WIDEN(x) WIDEN2(x)\n#define __WFUNCTION__ WIDEN(__FUNCTION__)\n\n#define FAIL_ON_ERROR(x) { DWORD ec; if ((ec = (x)) != ERROR_SUCCESS) { ShowErrorAndExit(ec, __WFUNCTION__, __LINE__); } }\n\nvoid TaskDialogOpen( PCWSTR mainStr, PCWSTR contentStr )\n{\n\n\tHRESULT hr = NULL;\n\n\tTASKDIALOGCONFIG tsk = {sizeof(tsk)};\n\n\tHWND hOwner = NULL;\n\tHINSTANCE hInstance = GetModuleHandle(NULL);\n\tPCWSTR tskTitle = MAKEINTRESOURCE(IDS_TITLE);\n\n\ttsk.hInstance = hInstance;\n\ttsk.pszMainIcon = MAKEINTRESOURCE(IDI_CMDER);\n\ttsk.pszWindowTitle = tskTitle;\n\ttsk.pszMainInstruction = mainStr;\n\ttsk.pszContent = contentStr;\n\n\tTASKDIALOG_BUTTON btns[1] = {\n\t\t{ IDOK,     L\"OK\" }\n\t};\n\n\ttsk.dwFlags        = TDF_ALLOW_DIALOG_CANCELLATION|TDF_ENABLE_HYPERLINKS;\n\ttsk.pButtons       = btns;\n\ttsk.cButtons       = _countof(btns);\n\n\ttsk.hwndParent     = hOwner;\n\n\tint selectedButtonId = IDOK;\n\n\thr = TaskDialogIndirect( &tsk, &selectedButtonId, NULL, NULL );\n\n}\n\nvoid ShowErrorAndExit(DWORD ec, const wchar_t * func, int line)\n{\n\twchar_t * buffer;\n\tif (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,\n\t\tNULL, ec, 0, (LPWSTR)&buffer, 0, NULL) == 0)\n\t{\n\t\tbuffer = L\"Unknown error. FormatMessage failed.\";\n\t}\n\n\twchar_t message[1024];\n\tswprintf_s(message, L\"%s\\nFunction: %s\\nLine: %d\", buffer, func, line);\n\tLocalFree(buffer);\n\n\tMessageBox(NULL, message, MB_TITLE, MB_OK | MB_ICONERROR);\n\texit(1);\n}\n\ntypedef struct _option\n{\n\tstd::wstring name;\n\tbool hasVal;\n\tstd::wstring value;\n\tbool set;\n} option;\n\ntypedef std::pair<std::wstring, std::wstring> optpair;\n\nbool FileExists(const wchar_t * filePath)\n{\n\tHANDLE hFile = CreateFile(filePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);\n\n\tif (hFile != INVALID_HANDLE_VALUE)\n\t{\n\t\tCloseHandle(hFile);\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nvoid StartCmder(std::wstring  path = L\"\", bool is_single_mode = false, std::wstring taskName = L\"\", std::wstring title = L\"\", std::wstring iconPath = L\"\", std::wstring cfgRoot = L\"\", bool use_user_cfg = true, std::wstring conemu_args = L\"\")\n{\n#if USE_TASKBAR_API\n\twchar_t appId[MAX_PATH] = { 0 };\n#endif\n\twchar_t exeDir[MAX_PATH] = { 0 };\n\twchar_t icoPath[MAX_PATH] = { 0 };\n\twchar_t cfgPath[MAX_PATH] = { 0 };\n\twchar_t backupCfgPath[MAX_PATH] = { 0 };\n\twchar_t cpuCfgPath[MAX_PATH] = { 0 };\n\twchar_t userCfgPath[MAX_PATH] = { 0 };\n\twchar_t defaultCfgPath[MAX_PATH] = { 0 };\n\twchar_t conEmuPath[MAX_PATH] = { 0 };\n\twchar_t configDirPath[MAX_PATH] = { 0 };\n\twchar_t userConfigDirPath[MAX_PATH] = { 0 };\n\twchar_t userBinDirPath[MAX_PATH] = { 0 };\n\twchar_t userProfiledDirPath[MAX_PATH] = { 0 };\n\twchar_t userProfilePath[MAX_PATH] = { 0 };\n\twchar_t legacyUserProfilePath[MAX_PATH] = { 0 };\n\twchar_t userAliasesPath[MAX_PATH] = { 0 };\n\twchar_t legacyUserAliasesPath[MAX_PATH] = { 0 };\n\twchar_t args[MAX_PATH * 2 + 256] = { 0 };\n\twchar_t userConEmuCfgPath[MAX_PATH] = { 0 };\n\n\n\tstd::wstring cmderStart = path;\n\tstd::wstring cmderTask = taskName;\n\tstd::wstring cmderTitle = title;\n\tstd::wstring cmderConEmuArgs = conemu_args;\n\n\tstd::copy(cfgRoot.begin(), cfgRoot.end(), userConfigDirPath);\n\tuserConfigDirPath[cfgRoot.length()] = 0;\n\n\tGetModuleFileName(NULL, exeDir, sizeof(exeDir));\n\n#if USE_TASKBAR_API\n\twcscpy_s(appId, exeDir);\n#endif\n\n\tPathRemoveFileSpec(exeDir);\n\n\tif (PathFileExists(iconPath.c_str()))\n\t{\n\t\tstd::copy(iconPath.begin(), iconPath.end(), icoPath);\n\t\ticoPath[iconPath.length()] = 0;\n\t}\n\telse\n\t{\n\t\tPathCombine(icoPath, exeDir, L\"icons\\\\cmder.ico\");\n\t}\n\n\tPathCombine(configDirPath, exeDir, L\"config\");\n\n\t/*\n\tConvert legacy user-profile.cmd to new name user_profile.cmd\n\t*/\n\tPathCombine(legacyUserProfilePath, configDirPath, L\"user-profile.cmd\");\n\tif (PathFileExists(legacyUserProfilePath))\n\t{\n\t\tPathCombine(userProfilePath, configDirPath, L\"user_profile.cmd\");\n\n\t\tchar      *lPr = (char *)malloc(MAX_PATH);\n\t\tchar      *pR = (char *)malloc(MAX_PATH);\n\t\tsize_t i;\n\t\twcstombs_s(&i, lPr, (size_t)MAX_PATH,\n\t\t\tlegacyUserProfilePath, (size_t)MAX_PATH);\n\t\twcstombs_s(&i, pR, (size_t)MAX_PATH,\n\t\t\tuserProfilePath, (size_t)MAX_PATH);\n\t\trename(lPr, pR);\n\t}\n\n\t/*\n\tConvert legacy user-aliases.cmd to new name user_aliases.cmd\n\t*/\n\tPathCombine(legacyUserAliasesPath, configDirPath, L\"user-aliases.cmd\");\n\tif (PathFileExists(legacyUserAliasesPath))\n\t{\n\t\tPathCombine(userAliasesPath, configDirPath, L\"user_aliases.cmd\");\n\n\t\tchar      *lPr = (char *)malloc(MAX_PATH);\n\t\tchar      *pR = (char *)malloc(MAX_PATH);\n\t\tsize_t i;\n\t\twcstombs_s(&i, lPr, (size_t)MAX_PATH,\n\t\t\tlegacyUserAliasesPath, (size_t)MAX_PATH);\n\t\twcstombs_s(&i, pR, (size_t)MAX_PATH,\n\t\t\tuserAliasesPath, (size_t)MAX_PATH);\n\t\trename(lPr, pR);\n\t}\n\n\t/*\n\tWas /c [path] specified?\n\t*/\n\tif (wcscmp(userConfigDirPath, L\"\") == 0)\n\t{\n\t\t// No - It wasn't.\n\t\tPathCombine(userConfigDirPath, exeDir, L\"config\");\n\t}\n\telse\n\t{\n\t\t// Yes - It was.\n\t\tPathCombine(userBinDirPath, userConfigDirPath, L\"bin\");\n\t\tSHCreateDirectoryEx(0, userBinDirPath, 0);\n\n\t\tPathCombine(userConfigDirPath, userConfigDirPath, L\"config\");\n\t\tSHCreateDirectoryEx(0, userConfigDirPath, 0);\n\n\t\tPathCombine(userProfiledDirPath, userConfigDirPath, L\"profile.d\");\n\t\tSHCreateDirectoryEx(0, userProfiledDirPath, 0);\n\n\t\t/*\n\t\tConvert legacy user-profile.cmd to new name user_profile.cmd\n\t\t*/\n\t\tPathCombine(legacyUserProfilePath, userConfigDirPath, L\"user-profile.cmd\");\n\t\tif (PathFileExists(legacyUserProfilePath))\n\t\t{\n\t\t\tPathCombine(userProfilePath, userConfigDirPath, L\"user_profile.cmd\");\n\n\t\t\tchar      *lPr = (char *)malloc(MAX_PATH);\n\t\t\tchar      *pR = (char *)malloc(MAX_PATH);\n\t\t\tsize_t i;\n\t\t\twcstombs_s(&i, lPr, (size_t)MAX_PATH,\n\t\t\t\tlegacyUserProfilePath, (size_t)MAX_PATH);\n\t\t\twcstombs_s(&i, pR, (size_t)MAX_PATH,\n\t\t\t\tuserProfilePath, (size_t)MAX_PATH);\n\t\t\trename(lPr, pR);\n\t\t}\n\n\t\t/*\n\t\tConvert legacy user-aliases.cmd to new name user_aliases.cmd\n\t\t*/\n\t\tPathCombine(legacyUserAliasesPath, userConfigDirPath, L\"user-aliases.cmd\");\n\t\tif (PathFileExists(legacyUserAliasesPath))\n\t\t{\n\t\t\tPathCombine(userAliasesPath, userConfigDirPath, L\"user_aliases.cmd\");\n\n\t\t\tchar      *lPr = (char *)malloc(MAX_PATH);\n\t\t\tchar      *pR = (char *)malloc(MAX_PATH);\n\t\t\tsize_t i;\n\t\t\twcstombs_s(&i, lPr, (size_t)MAX_PATH,\n\t\t\t\tlegacyUserAliasesPath, (size_t)MAX_PATH);\n\t\t\twcstombs_s(&i, pR, (size_t)MAX_PATH,\n\t\t\t\tuserAliasesPath, (size_t)MAX_PATH);\n\t\t\trename(lPr, pR);\n\t\t}\n\t}\n\n\t// Set path to vendored ConEmu config file\n\tPathCombine(cfgPath, exeDir, L\"vendor\\\\conemu-maximus5\\\\ConEmu.xml\");\n\n\t// Set path to Cmder default ConEmu config file\n\tPathCombine(defaultCfgPath, exeDir, L\"vendor\\\\ConEmu.xml.default\");\n\n\t// Check for machine-specific then user config source file.\n\tPathCombine(cpuCfgPath, userConfigDirPath, L\"ConEmu-%COMPUTERNAME%.xml\");\n\tExpandEnvironmentStrings(cpuCfgPath, cpuCfgPath, sizeof(cpuCfgPath) / sizeof(cpuCfgPath[0]));\n\n\t// Set path to Cmder user ConEmu config file\n\tPathCombine(userCfgPath, userConfigDirPath, L\"user-ConEmu.xml\");\n\n\tif ( PathFileExists(cpuCfgPath) || use_user_cfg == false ) // config/ConEmu-%COMPUTERNAME%.xml file exists or /m was specified on command line, use machine specific config.\n\t{\n\t\tif (cfgRoot.length() == 0) // '/c [path]' was NOT specified\n\t\t{\n\t\t\tif (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml file exists, copy vendor/conemu-maximus5/ConEmu.xml to config/ConEmu-%COMPUTERNAME%.xml.\n\t\t\t{\n\t\t\t\tif (!CopyFile(cfgPath, cpuCfgPath, FALSE))\n\t\t\t\t{\n\t\t\t\t\tMessageBox(NULL,\n\t\t\t\t\t\t(GetLastError() == ERROR_ACCESS_DENIED)\n\t\t\t\t\t\t? L\"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml! Access Denied.\"\n\t\t\t\t\t\t: L\"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml!\", MB_TITLE, MB_ICONSTOP);\n\t\t\t\t\texit(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // vendor/conemu-maximus5/ConEmu.xml config file does not exist, copy config/ConEmu-%COMPUTERNAME%.xml to vendor/conemu-maximus5/ConEmu.xml file\n\t\t\t{\n\t\t\t\tif (!CopyFile(cpuCfgPath, cfgPath, FALSE))\n\t\t\t\t{\n\t\t\t\t\tMessageBox(NULL,\n\t\t\t\t\t\t(GetLastError() == ERROR_ACCESS_DENIED)\n\t\t\t\t\t\t? L\"Failed to copy config/ConEmu-%COMPUTERNAME%.xml file to vendor/conemu-maximus5/ConEmu.xml! Access Denied.\"\n\t\t\t\t\t\t: L\"Failed to copy config/ConEmu-%COMPUTERNAME%.xml file to vendor/conemu-maximus5/ConEmu.xml!\", MB_TITLE, MB_ICONSTOP);\n\t\t\t\t\texit(1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse // '/c [path]' was specified, don't copy anything and use existing conemu-%COMPUTERNAME%.xml to start comemu.\n\t\t{\n\t\t\tif (use_user_cfg == false && PathFileExists(cfgPath) && !PathFileExists(cpuCfgPath)) // vendor/conemu-maximus5/ConEmu.xml file exists, copy vendor/conemu-maximus5/ConEmu.xml to config/ConEmu-%COMPUTERNAME%.xml.\n\t\t\t{\n\t\t\t\tif (!CopyFile(cfgPath, cpuCfgPath, FALSE))\n\t\t\t\t{\n\t\t\t\t\tMessageBox(NULL,\n\t\t\t\t\t\t(GetLastError() == ERROR_ACCESS_DENIED)\n\t\t\t\t\t\t? L\"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml! Access Denied.\"\n\t\t\t\t\t\t: L\"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml!\", MB_TITLE, MB_ICONSTOP);\n\t\t\t\t\texit(1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tPathCombine(userConEmuCfgPath, userConfigDirPath, L\"ConEmu-%COMPUTERNAME%.xml\");\n\t\t\tExpandEnvironmentStrings(userConEmuCfgPath, userConEmuCfgPath, sizeof(userConEmuCfgPath) / sizeof(userConEmuCfgPath[0]));\n\t\t}\n\t}\n\telse if (PathFileExists(userCfgPath)) // config/user_conemu.xml exists, use it.\n\t{\n\t\tif (cfgRoot.length() == 0) // '/c [path]' was NOT specified\n\t\t{\n\t\t\tif (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml exists, copy vendor/conemu-maximus5/ConEmu.xml to config/user_conemu.xml.\n\t\t\t{\n\t\t\t\tif (!CopyFile(cfgPath, userCfgPath, FALSE))\n\t\t\t\t{\n\t\t\t\t\tMessageBox(NULL,\n\t\t\t\t\t\t(GetLastError() == ERROR_ACCESS_DENIED)\n\t\t\t\t\t\t? L\"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml! Access Denied.\"\n\t\t\t\t\t\t: L\"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml!\", MB_TITLE, MB_ICONSTOP);\n\t\t\t\t\texit(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // vendor/conemu-maximus5/ConEmu.xml does not exist, copy config/user-conemu.xml to vendor/conemu-maximus5/ConEmu.xml\n\t\t\t{\n\t\t\t\tif (!CopyFile(userCfgPath, cfgPath, FALSE))\n\t\t\t\t{\n\t\t\t\t\tMessageBox(NULL,\n\t\t\t\t\t\t(GetLastError() == ERROR_ACCESS_DENIED)\n\t\t\t\t\t\t? L\"Failed to copy config/user-conemu.xml file to vendor/conemu-maximus5/ConEmu.xml! Access Denied.\"\n\t\t\t\t\t\t: L\"Failed to copy config/user-conemu.xml file to vendor/conemu-maximus5/ConEmu.xml!\", MB_TITLE, MB_ICONSTOP);\n\t\t\t\t\texit(1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse // '/c [path]' was specified, don't copy anything and use existing user_conemu.xml to start comemu.\n\t\t{\n\t\t\tPathCombine(userConEmuCfgPath, userConfigDirPath, L\"user-ConEmu.xml\");\n\t\t}\n\t}\n\telse if (cfgRoot.length() == 0) // '/c [path]' was NOT specified\n\t{\n\t\tif (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml exists, copy vendor/conemu-maximus5/ConEmu.xml to config/user_conemu.xml\n\t\t{\n\t\t\tif (!CopyFile(cfgPath, userCfgPath, FALSE))\n\t\t\t{\n\t\t\t\tMessageBox(NULL,\n\t\t\t\t\t(GetLastError() == ERROR_ACCESS_DENIED)\n\t\t\t\t\t? L\"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml! Access Denied.\"\n\t\t\t\t\t: L\"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml!\", MB_TITLE, MB_ICONSTOP);\n\t\t\t\texit(1);\n\t\t\t}\n\t\t\telse // vendor/ConEmu.xml.default config exists, copy Cmder vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml.\n\t\t\t{\n\t\t\t\tif (!CopyFile(defaultCfgPath, cfgPath, FALSE))\n\t\t\t\t{\n\t\t\t\t\tMessageBox(NULL,\n\t\t\t\t\t\t(GetLastError() == ERROR_ACCESS_DENIED)\n\t\t\t\t\t\t? L\"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml! Access Denied.\"\n\t\t\t\t\t\t: L\"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml!\", MB_TITLE, MB_ICONSTOP);\n\t\t\t\t\texit(1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (!CopyFile(defaultCfgPath, cfgPath, FALSE))\n\t\t\t{\n\t\t\t\tMessageBox(NULL,\n\t\t\t\t\t(GetLastError() == ERROR_ACCESS_DENIED)\n\t\t\t\t\t? L\"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml! Access Denied.\"\n\t\t\t\t\t: L\"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml!\", MB_TITLE, MB_ICONSTOP);\n\t\t\t\texit(1);\n\t\t\t}\n\t\t}\n\t}\n\telse if (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml exists, copy vendor/conemu-maximus5/ConEmu.xml to config/user_conemu.xml\n\t{\n\t\tif (!CopyFile(cfgPath, userCfgPath, FALSE))\n\t\t{\n\t\t\tMessageBox(NULL,\n\t\t\t\t(GetLastError() == ERROR_ACCESS_DENIED)\n\t\t\t\t? L\"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml! Access Denied.\"\n\t\t\t\t: L\"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml!\", MB_TITLE, MB_ICONSTOP);\n\t\t\texit(1);\n\t\t}\n\n\t\tPathCombine(userConEmuCfgPath, userConfigDirPath, L\"user-ConEmu.xml\");\n\t}\n\telse // '/c [path]' was specified and 'vendor/ConEmu.xml.default' config exists, copy Cmder 'vendor/ConEmu.xml.default' file to '[user specified path]/config/user_ConEmu.xml'.\n\t{\n\t\tif ( ! CopyFile(defaultCfgPath, userCfgPath, FALSE))\n\t\t{\n\t\t\tMessageBox(NULL,\n\t\t\t\t(GetLastError() == ERROR_ACCESS_DENIED)\n\t\t\t\t? L\"Failed to copy vendor/ConEmu.xml.default file to [user specified path]/config/user_ConEmu.xml! Access Denied.\"\n\t\t\t\t: L\"Failed to copy vendor/ConEmu.xml.default file to [user specified path]/config/user_ConEmu.xml!\", MB_TITLE, MB_ICONSTOP);\n\t\t\texit(1);\n\t\t}\n\t\tPathCombine(userConEmuCfgPath, userConfigDirPath, L\"user-ConEmu.xml\");\n\t}\n\n\tSYSTEM_INFO sysInfo;\n\tGetNativeSystemInfo(&sysInfo);\n\tif (sysInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)\n\t{\n\t\tPathCombine(conEmuPath, exeDir, L\"vendor\\\\conemu-maximus5\\\\ConEmu64.exe\");\n\t}\n\telse\n\t{\n\t\tPathCombine(conEmuPath, exeDir, L\"vendor\\\\conemu-maximus5\\\\ConEmu.exe\");\n\t}\n\n\tswprintf_s(args, L\"%s /Icon \\\"%s\\\"\", args, icoPath);\n\n\tif (!streqi(cmderStart.c_str(), L\"\"))\n\t{\n\t\tswprintf_s(args, L\"%s /dir \\\"%s\\\"\", args, cmderStart.c_str());\n\t}\n\n\tif (is_single_mode)\n\t{\n\t\tswprintf_s(args, L\"%s /single\", args);\n\t}\n\n\tif (!streqi(cmderTitle.c_str(), L\"\"))\n\t{\n\t\tswprintf_s(args, L\"%s /title \\\"%s\\\"\", args, cmderTitle.c_str());\n\t}\n\n\tif (cfgRoot.length() != 0)\n\t{\n\t\tswprintf_s(args, L\"%s  -loadcfgfile \\\"%s\\\"\", args, userConEmuCfgPath);\n\t}\n\n\tif (!streqi(cmderConEmuArgs.c_str(), L\"\"))\n\t{\n\t\tswprintf_s(args, L\"%s %s\", args, cmderConEmuArgs.c_str());\n\t}\n\n\t// The `/run` arg and its value MUST be the last arg of ConEmu\n\t// see : https://conemu.github.io/en/ConEmuArgs.html\n\t// > This must be the last used switch (excepting -new_console and -cur_console)\n\tif (!streqi(cmderTask.c_str(), L\"\"))\n\t{\n\t\tswprintf_s(args, L\"%s /run {%s}\", args, cmderTask.c_str());\n\t}\n\n\tSetEnvironmentVariable(L\"CMDER_ROOT\", exeDir);\n\tif (wcscmp(userConfigDirPath, configDirPath) != 0)\n\t{\n\t\tSetEnvironmentVariable(L\"CMDER_USER_CONFIG\", userConfigDirPath);\n\t\tSetEnvironmentVariable(L\"CMDER_USER_BIN\", userBinDirPath);\n\t}\n\n\t// Ensure EnvironmentVariables are propagated.\n\n\tSTARTUPINFO si = { 0 };\n\n\tsi.cb = sizeof(STARTUPINFO);\n#if USE_TASKBAR_API\n\tsi.lpTitle = appId;\n\tsi.dwFlags = STARTF_TITLEISAPPID;\n#endif\n\tPROCESS_INFORMATION pi;\n\tif (!CreateProcess(conEmuPath, args, NULL, NULL, false, 0, NULL, NULL, &si, &pi)) {\n\t\tMessageBox(NULL, _T(\"Unable to create the ConEmu process!\"), _T(\"Error\"), MB_OK);\n\t\treturn;\n\t}\n}\n\nbool IsUserOnly(std::wstring opt)\n{\n\tbool userOnly;\n\n\tif (streqi(opt.c_str(), L\"ALL\"))\n\t{\n\t\tuserOnly = false;\n\t}\n\telse if (streqi(opt.c_str(), L\"USER\"))\n\t{\n\t\tuserOnly = true;\n\t}\n\telse\n\t{\n\t\tMessageBox(NULL, L\"Unrecognized option for /REGISTER or /UNREGISTER. Must be either ALL or USER.\", MB_TITLE, MB_OK);\n\t\texit(1);\n\t}\n\n\treturn userOnly;\n}\n\nHKEY GetRootKey(std::wstring opt)\n{\n\tHKEY root;\n\n\tif (IsUserOnly(opt))\n\t{\n\t\tFAIL_ON_ERROR(RegCreateKeyEx(HKEY_CURRENT_USER, L\"Software\\\\Classes\", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &root, NULL));\n\t}\n\telse\n\t{\n\t\troot = HKEY_CLASSES_ROOT;\n\t}\n\n\treturn root;\n}\n\nvoid RegisterShellMenu(std::wstring opt, wchar_t* keyBaseName, std::wstring cfgRoot, bool single)\n{\n\twchar_t userConfigDirPath[MAX_PATH] = { 0 };\n\n\t// First, get the paths we will use\n\n\twchar_t exePath[MAX_PATH] = { 0 };\n\twchar_t icoPath[MAX_PATH] = { 0 };\n\n\tGetModuleFileName(NULL, exePath, sizeof(exePath));\n\n\twchar_t commandStr[MAX_PATH + 20] = { 0 };\n\twchar_t baseCommandStr[MAX_PATH + 20] = { 0 };\n\tif (!single) {\n\t\tswprintf_s(baseCommandStr, L\"\\\"%s\\\"\", exePath);\n\t}\n\telse {\n\t\tswprintf_s(baseCommandStr, L\"\\\"%s\\\" /single\", exePath);\n\t}\n\n\tif (cfgRoot.length() == 0) // '/c [path]' was NOT specified\n\t{\n\t\tswprintf_s(commandStr, L\"%s \\\"%%V\\\"\", baseCommandStr);\n\t}\n\telse {\n\t\tstd::copy(cfgRoot.begin(), cfgRoot.end(), userConfigDirPath);\n\t\tuserConfigDirPath[cfgRoot.length()] = 0;\n\t\tswprintf_s(commandStr, L\"%s /c \\\"%s\\\" \\\"%%V\\\"\", baseCommandStr, userConfigDirPath);\n\t}\n\n\t// Now that we have `commandStr`, it's OK to change `exePath`...\n\tPathRemoveFileSpec(exePath);\n\n\tPathCombine(icoPath, exePath, L\"icons\\\\cmder.ico\");\n\n\t// Now set the registry keys\n\tHKEY root = GetRootKey(opt);\n\n\tHKEY cmderKey;\n\tFAIL_ON_ERROR(RegCreateKeyEx(root, keyBaseName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &cmderKey, NULL));\n\n\tFAIL_ON_ERROR(RegSetValue(cmderKey, L\"\", REG_SZ, L\"Cmder Here\", NULL));\n\tFAIL_ON_ERROR(RegSetValueEx(cmderKey, L\"NoWorkingDirectory\", 0, REG_SZ, (BYTE *)L\"\", 2));\n\n\tFAIL_ON_ERROR(RegSetValueEx(cmderKey, L\"Icon\", 0, REG_SZ, (BYTE *)icoPath, wcslen(icoPath) * sizeof(wchar_t)));\n\n\tHKEY command;\n\tFAIL_ON_ERROR(RegCreateKeyEx(cmderKey, L\"command\", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &command, NULL));\n\n\tFAIL_ON_ERROR(RegSetValue(command, L\"\", REG_SZ, commandStr, NULL));\n\n\tRegCloseKey(command);\n\tRegCloseKey(cmderKey);\n\tRegCloseKey(root);\n}\n\nvoid UnregisterShellMenu(std::wstring opt, wchar_t* keyBaseName)\n{\n\tHKEY root = GetRootKey(opt);\n\tHKEY cmderKey;\n\tFAIL_ON_ERROR(RegCreateKeyEx(root, keyBaseName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &cmderKey, NULL));\n\tFAIL_ON_ERROR(RegDeleteTree(cmderKey, NULL));\n\tRegDeleteKeyEx(root, keyBaseName, KEY_ALL_ACCESS, NULL);\n\tRegCloseKey(cmderKey);\n\tRegCloseKey(root);\n}\n\nstruct cmderOptions\n{\n\tstd::wstring cmderCfgRoot = L\"\";\n\tstd::wstring cmderStart = L\"\";\n\tstd::wstring cmderTask = L\"\";\n\tstd::wstring cmderTitle = L\"Cmder\";\n\tstd::wstring cmderIcon = L\"\";\n\tstd::wstring cmderRegScope = L\"USER\";\n\tstd::wstring cmderConEmuArgs = L\"\";\n\tbool cmderSingle = false;\n\tbool cmderUserCfg = true;\n\tbool registerApp = false;\n\tbool unRegisterApp = false;\n\tbool error = false;\n};\n\ncmderOptions GetOption()\n{\n\tcmderOptions cmderOptions;\n\tLPWSTR *szArgList;\n\tint argCount;\n\n\tszArgList = CommandLineToArgvW(GetCommandLine(), &argCount);\n\n\tfor (int i = 1; i < argCount; i++)\n\t{\n\n\t\t// MessageBox(NULL, szArgList[i], L\"Arglist contents\", MB_OK);\n\t\tif (cmderOptions.error == false) {\n\t\t\tif (_wcsicmp(L\"/c\", szArgList[i]) == 0)\n\t\t\t{\n\t\t\t\tTCHAR userProfile[MAX_PATH];\n\t\t\t\tconst DWORD ret = GetEnvironmentVariable(L\"USERPROFILE\", userProfile, MAX_PATH);\n\n\t\t\t\twchar_t cmderCfgRoot[MAX_PATH] = { 0 };\n\t\t\t\tPathCombine(cmderCfgRoot, userProfile, L\"cmder_cfg\");\n\n\t\t\t\tcmderOptions.cmderCfgRoot = cmderCfgRoot;\n\n\t\t\t\tif (szArgList[i + 1] != NULL && szArgList[i + 1][0] != '/')\n\t\t\t\t{\n\t\t\t\t\tcmderOptions.cmderCfgRoot = szArgList[i + 1];\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (_wcsicmp(L\"/start\", szArgList[i]) == 0)\n\t\t\t{\n\t\t\t\tint len = wcslen(szArgList[i + 1]);\n\t\t\t\tif (wcscmp(&szArgList[i + 1][len - 1], L\"\\\"\") == 0)\n\t\t\t\t{\n\t\t\t\t\tszArgList[i + 1][len - 1] = '\\0';\n\t\t\t\t}\n\n\t\t\t\tif (PathFileExists(szArgList[i + 1]))\n\t\t\t\t{\n\t\t\t\t\tcmderOptions.cmderStart = szArgList[i + 1];\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tMessageBox(NULL, szArgList[i + 1], L\"/START - Folder does not exist!\", MB_OK);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (_wcsicmp(L\"/task\", szArgList[i]) == 0)\n\t\t\t{\n\t\t\t\tcmderOptions.cmderTask = szArgList[i + 1];\n\t\t\t\ti++;\n\t\t\t}\n\t\t\telse if (_wcsicmp(L\"/title\", szArgList[i]) == 0)\n\t\t\t{\n\t\t\t\tcmderOptions.cmderTitle = szArgList[i + 1];\n\t\t\t\ti++;\n\t\t\t}\n\t\t\telse if (_wcsicmp(L\"/icon\", szArgList[i]) == 0)\n\t\t\t{\n\t\t\t\tcmderOptions.cmderIcon = szArgList[i + 1];\n\t\t\t\ti++;\n\t\t\t}\n\t\t\telse if (_wcsicmp(L\"/single\", szArgList[i]) == 0)\n\t\t\t{\n\t\t\t\tcmderOptions.cmderSingle = true;\n\t\t\t}\n\t\t\telse if (_wcsicmp(L\"/m\", szArgList[i]) == 0)\n\t\t\t{\n\t\t\t\tcmderOptions.cmderUserCfg = false;\n\t\t\t}\n\t\t\telse if (_wcsicmp(L\"/register\", szArgList[i]) == 0)\n\t\t\t{\n\t\t\t\tcmderOptions.registerApp = true;\n\t\t\t\tcmderOptions.unRegisterApp = false;\n\t\t\t\tif (szArgList[i + 1] != NULL)\n\t\t\t\t{\n\t\t\t\t\tif (_wcsicmp(L\"all\", szArgList[i + 1]) == 0 || _wcsicmp(L\"user\", szArgList[i + 1]) == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tcmderOptions.cmderRegScope = szArgList[i + 1];\n\t\t\t\t\t\ti++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (_wcsicmp(L\"/unregister\", szArgList[i]) == 0)\n\t\t\t{\n\t\t\t\tcmderOptions.unRegisterApp = true;\n\t\t\t\tcmderOptions.registerApp = false;\n\t\t\t\tif (szArgList[i + 1] != NULL)\n\t\t\t\t{\n\t\t\t\t\tif (_wcsicmp(L\"all\", szArgList[i + 1]) == 0 || _wcsicmp(L\"user\", szArgList[i + 1]) == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tcmderOptions.cmderRegScope = szArgList[i + 1];\n\t\t\t\t\t\ti++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t/* Used for passing arguments to conemu prog */\n\t\t\telse if (_wcsicmp(L\"/x\", szArgList[i]) == 0)\n\t\t\t{\n\t\t\t\tcmderOptions.cmderConEmuArgs = szArgList[i + 1];\n\t\t\t\ti++;\n\t\t\t}\n\t\t\t/* Bare double dash, remaining commandline is for conemu */\n\t\t\telse if (_wcsicmp(L\"--\", szArgList[i]) == 0)\n\t\t\t{\n\t\t\t\tstd::wstring cmdline = std::wstring(GetCommandLineW());\n\t\t\t\tauto doubledash = cmdline.find(L\" -- \");\n\t\t\t\tif (doubledash != std::string::npos)\n\t\t\t\t{\n\t\t\t\t\tcmderOptions.cmderConEmuArgs = cmdline.substr(doubledash + 4);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse if (cmderOptions.cmderStart == L\"\")\n\t\t\t{\n\t\t\t\tint len = wcslen(szArgList[i]);\n\t\t\t\tif (wcscmp(&szArgList[i][len - 1], L\"\\\"\") == 0)\n\t\t\t\t{\n\t\t\t\t\tszArgList[i][len - 1] = '\\0';\n\t\t\t\t}\n\n\t\t\t\tif (PathFileExists(szArgList[i]))\n\t\t\t\t{\n\t\t\t\t\tcmderOptions.cmderStart = szArgList[i];\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tcmderOptions.error = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tcmderOptions.error = true;\n\t\t\t}\n\t\t}\n\n\t}\n\n\tif (cmderOptions.error == true)\n\t{\n\t\twchar_t validOptions[512];\n\t\tHMODULE hMod = GetModuleHandle(NULL);\n\t\tLoadString(hMod, IDS_SWITCHES, validOptions, 512);\n\n\t\t// display list of valid options on unrecognized parameter\n\t\tTaskDialogOpen( L\"Unrecognized parameter.\", validOptions );\n\t}\n\n\tLocalFree(szArgList);\n\n\treturn cmderOptions;\n}\n\nint APIENTRY _tWinMain(_In_ HINSTANCE hInstance,\n\t_In_opt_ HINSTANCE hPrevInstance,\n\t_In_ LPTSTR    lpCmdLine,\n\t_In_ int       nCmdShow)\n{\n\tUNREFERENCED_PARAMETER(hPrevInstance);\n\tUNREFERENCED_PARAMETER(lpCmdLine);\n\tUNREFERENCED_PARAMETER(nCmdShow);\n\n\tcmderOptions cmderOptions = GetOption();\n\n\tif (cmderOptions.registerApp == true)\n\t{\n\t\tRegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_BACKGROUND, cmderOptions.cmderCfgRoot, cmderOptions.cmderSingle);\n\t\tRegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_LISTITEM, cmderOptions.cmderCfgRoot, cmderOptions.cmderSingle);\n\t\tRegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_DRIVE_PATH_BACKGROUND, cmderOptions.cmderCfgRoot, cmderOptions.cmderSingle);\n\t\tRegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_DRIVE_PATH_LISTITEM, cmderOptions.cmderCfgRoot, cmderOptions.cmderSingle);\n\t}\n\telse if (cmderOptions.unRegisterApp == true)\n\t{\n\t\tUnregisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_BACKGROUND);\n\t\tUnregisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_LISTITEM);\n\t\tUnregisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_DRIVE_PATH_BACKGROUND);\n\t\tUnregisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_DRIVE_PATH_LISTITEM);\n\t}\n\telse if (cmderOptions.error == true)\n\t{\n\t\treturn 1;\n\t}\n\telse\n\t{\n\t\tStartCmder(cmderOptions.cmderStart, cmderOptions.cmderSingle, cmderOptions.cmderTask, cmderOptions.cmderTitle, cmderOptions.cmderIcon, cmderOptions.cmderCfgRoot, cmderOptions.cmderUserCfg, cmderOptions.cmderConEmuArgs);\n\t}\n\n\treturn 0;\n}\n"
  },
  {
    "path": "launcher/src/app.manifest",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n\n<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\" xmlns:asmv3=\"urn:schemas-microsoft-com:asm.v3\">\n\n\t<!-- Project description definition -->\n\t<description>Cmder Console Emulator</description>\n\n\t<!-- Project dependency definition -->\n\t<dependency>\n\t\t<dependentAssembly>\n\t\t\t<assemblyIdentity\n\t\t\t\ttype=\"win32\"\n\t\t\t\tname=\"Microsoft.Windows.Common-Controls\"\n\t\t\t\tversion=\"6.0.0.0\" processorArchitecture=\"*\"\n\t\t\t\tpublicKeyToken=\"6595b64144ccf1df\"\n\t\t\t\tlanguage=\"*\" />\n\t\t</dependentAssembly>\n\t</dependency>\n\n\t<!-- Win32 User Account Control definition -->\n\t<trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n\t\t<security>\n\t\t\t<requestedPrivileges>\n\t\t\t\t<requestedExecutionLevel\n\t\t\t\t\tlevel=\"asInvoker\"\n\t\t\t\t\tuiAccess=\"false\" />\n\t\t\t</requestedPrivileges>\n\t\t</security>\n\t</trustInfo>\n\n\t<!-- Required for appcompat behaviour -->\n\t<compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n\t\t<application>\n\t\t\t<!-- Windows Vista -->\n\t\t\t<supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\"/>\n\t\t\t<!-- Windows 7 -->\n\t\t\t<supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\"/>\n\t\t\t<!-- Windows 8 -->\n\t\t\t<supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\"/>\n\t\t\t<!-- Windows 8.1 -->\n\t\t\t<supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\"/>\n\t\t\t<!-- Windows 10 and Windows 11 -->\n\t\t\t<supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\"/>\n\t\t</application>\n\t</compatibility>\n\n\t<!-- Add DPI awareness -->\n\t<asmv3:application>\n\t\t<asmv3:windowsSettings xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">\n\t\t\t<dpiAware>true/pm</dpiAware>\n\t\t</asmv3:windowsSettings>\n\t</asmv3:application>\n\n</assembly>\n"
  },
  {
    "path": "launcher/src/resource.h",
    "content": "//{{NO_DEPENDENCIES}}\n// Microsoft Visual C++ generated include file.\n// Used by Resource.rc\n//\n#define IDI_CMDER                       101\n#define IDS_TITLE                       102\n#define IDS_SWITCHES                    803\n\n// Next default values for new objects\n//\n#ifdef APSTUDIO_INVOKED\n#ifndef APSTUDIO_READONLY_SYMBOLS\n#define _APS_NEXT_RESOURCE_VALUE        102\n#define _APS_NEXT_COMMAND_VALUE         40001\n#define _APS_NEXT_CONTROL_VALUE         1001\n#define _APS_NEXT_SYMED_VALUE           101\n#endif\n#endif\n"
  },
  {
    "path": "launcher/src/resource.rc",
    "content": "/*                  _\n  ___ _ __ ___   __| | ___ _ __\n / __| '_ ` _ \\ / _` |/ _ \\ '__|\n| (__| | | | | | (_| |  __/ |\n \\___|_| |_| |_|\\__,_|\\___|_|\n=============================================================================\n The Cmder Console Emulator Project\n*/\n\n#include \"resource.h\"\n#include \"version.rc2\"\n#include \"strings.rc2\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 2 resource.\n//\n#include \"winres.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n#undef APSTUDIO_READONLY_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n// English (United States) resources\n\n#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\nLANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\n\n#ifdef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// TEXTINCLUDE\n//\n\n1 TEXTINCLUDE\nBEGIN\n\"resource.h\\0\"\nEND\n\n2 TEXTINCLUDE\nBEGIN\n\"#include \"\"winres.h\"\"\\r\\n\"\n\"\\0\"\nEND\n\n3 TEXTINCLUDE\nBEGIN\n\"\\r\\n\"\n\"\\0\"\nEND\n\n#endif    // APSTUDIO_INVOKED\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Icon\n//\n\n// Icon with lowest ID value placed first to ensure application icon\n// remains consistent on all systems.\nIDI_CMDER               ICON                    \"..\\\\..\\\\icons\\\\cmder.ico\"\n#endif    // English (United States) resources\n/////////////////////////////////////////////////////////////////////////////\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Version\n//\n\nVS_VERSION_INFO VERSIONINFO\n FILEVERSION CMDER_MAJOR_VERSION,CMDER_MINOR_VERSION,CMDER_REVISION_VERSION,CMDER_BUILD_VERSION\n PRODUCTVERSION CMDER_MAJOR_VERSION,CMDER_MINOR_VERSION,CMDER_REVISION_VERSION,CMDER_BUILD_VERSION\n FILEFLAGSMASK VS_FFI_FILEFLAGSMASK\n FILEFLAGS (CMDER_DEBUGFLAG | CMDER_BUILDFLAGS)\n FILEOS VOS_NT_WINDOWS32\n FILETYPE VFT_APP\n FILESUBTYPE VFT2_UNKNOWN\nBEGIN\n    BLOCK \"StringFileInfo\"\n    BEGIN\n        BLOCK \"100904b0\"\n        BEGIN\n            VALUE \"CompanyName\", CMDER_COMPANY_NAME_STR \"\\0\"\n            VALUE \"FileDescription\", CMDER_FILE_DESCRIPTION_STR \"\\0\"\n            VALUE \"FileVersion\", CMDER_VERSION_STR \"\\0\"\n            VALUE \"InternalName\", CMDER_INTERNAL_NAME_STR \"\\0\"\n            VALUE \"LegalCopyright\", \"Copyright (C) \" CMDER_COPYRIGHT_YEAR_STR \" \" CMDER_COMPANY_NAME_STR \"\\0\"\n            VALUE \"OriginalFilename\", CMDER_ORIGINAL_FILENAME_STR \"\\0\"\n            VALUE \"ProductName\", CMDER_PRODUCT_NAME_STR \"\\0\"\n            VALUE \"ProductVersion\", CMDER_VERSION_STR \"\\0\"\n        END\n    END\n    BLOCK \"VarFileInfo\"\n    BEGIN\n        VALUE \"Translation\", 0x1009, 1200\n    END\nEND\n\n/////////////////////////////////////////////////////////////////////////////\n\n#ifndef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 3 resource.\n//\n\n/////////////////////////////////////////////////////////////////////////////\n#endif    // not APSTUDIO_INVOKED\n"
  },
  {
    "path": "launcher/src/strings.rc2",
    "content": "\n/////////////////////////////////////////////////////////////////////////////\n// Corresponding ids should be defined in `resource.h` file.\n\nSTRINGTABLE\n{\n\tIDS_TITLE             \"Cmder Launcher\"\n\n\tIDS_SWITCHES          L\"Valid options:\\n\\n    /c [CMDER User Root Path]\\n    /task [ConEmu Task Name]\\n    /icon [CMDER Icon Path]\\n    [/start [Start in Path] | [Start in Path]]\\n    /single\\n    /m\\n    /x [ConEmu extra arguments]\\n\\nor, either:\\n    /register [USER | ALL]\\n    /unregister [USER | ALL]\"\n}\n\n/////////////////////////////////////////////////////////////////////////////\n"
  },
  {
    "path": "launcher/src/version.rc2.sample",
    "content": "\n/**\n * WARNING: This file should NOT be manually modified!\n *          The contents will be automatically generated using the `.ps1` PowerShell scripts,\n *          during builds by the CI.\n */\n\n/////////////////////////////////////////////////////////////////////////////\n// Define the version numbers and build information manually here:\n\n#define CMDER_MAJOR_VERSION         {Cmder-Major-Version}\n#define CMDER_MINOR_VERSION         {Cmder-Minor-Version}\n#define CMDER_REVISION_VERSION      {Cmder-Revision-Version}\n#define CMDER_BUILD_VERSION         {Cmder-Build-Version}\n#define CMDER_VERSION_STR           {Cmder-Version-Str}\n\n#define CMDER_PRODUCT_NAME_STR      \"Cmder\"\n#define CMDER_FILE_DESCRIPTION_STR  \"Cmder: Lovely Console Emulator.\"\n#define CMDER_INTERNAL_NAME_STR     \"Cmder\"\n#define CMDER_ORIGINAL_FILENAME_STR \"Cmder.exe\"\n#define CMDER_COMPANY_NAME_STR      \"Samuel Vasko\"\n#define CMDER_COPYRIGHT_YEAR_STR    \"2016\"\n\n#define CMDER_DEBUGFLAG             0x0L  // set to 0x1L to enable debug mode\n#define CMDER_BUILDFLAGS            0x0L\n/////////////////////////////////////////////////////////////////////////////\n"
  },
  {
    "path": "opt/Readme.md",
    "content": "## Bin\n\nThis folder is for optional user packages and will not be automatically injected into the PATH.\n\nUse `%lib_path% enhance_path \"%cmder_root%\\[path to folder]\"` in `%cmder_root%\\config\\user_profile.cmd` or `%cmder_root%\\config\\profile.d\\*.cmd` to add to the path.\n"
  },
  {
    "path": "packignore",
    "content": "launcher\n.gitignore\n.gitattributes\n.git\n.github\n.vs\n.vscode\n.idea\n*.md\nbuild\nscripts\nconfig\\.history\npackignore\nThumbs.db\nicons\\cmder_icon.psd\nicons\\icon_16*.png\nicons\\icon_32*.png\nicons\\icon_48*.png\nicons\\icon_256*.png\nCmder.bat\nvendor\\tmp\nappveyor.yml\nvendor\\cmder.sh\nvendor\\git-prompt.sh\nconfig\\user-*\nclink_history*\n*.log\n"
  },
  {
    "path": "scripts/build.ps1",
    "content": "<#\r\n.Synopsis\r\n    Build Cmder\r\n.DESCRIPTION\r\n    Use this script to build your own edition of Cmder\r\n\r\n    This script builds dependencies from current vendor/sources.json file and unpacks them.\r\n\r\n    You will need to make this script executable by setting your Powershell Execution Policy to Remote signed\r\n    Then unblock the script for execution with UnblockFile .\\build.ps1\r\n.EXAMPLE\r\n    .\\build.ps1\r\n\r\n    Executes the default build for Cmder; ConEmu, clink. This is equivalent to the \"minimum\" style package in the releases\r\n.EXAMPLE\r\n    .\\build.ps1 -Compile\r\n\r\n    Recompile the launcher executable if you have the requisite build tools for C++ installed.\r\n.EXAMPLE\r\n    .\\build.ps1 -Compile -NoVendor\r\n\r\n    Skip all downloads and only build launcher.\r\n.EXAMPLE\r\n    .\\build -verbose\r\n\r\n    Execute the build and see what's going on.\r\n.EXAMPLE\r\n    .\\build.ps1 -SourcesPath '~/custom/vendors.json'\r\n\r\n    Build Cmder with your own packages. See vendor/sources.json for the syntax you need to copy.\r\n.NOTES\r\n    AUTHORS\r\n    Samuel Vasko, Jack Bennett\r\n    Part of the Cmder project.\r\n.LINK\r\n    http://cmder.app/ - Project Home\r\n#>\r\n[CmdletBinding(SupportsShouldProcess = $true)]\r\nParam(\r\n    # CmdletBinding will give us;\r\n    # -verbose switch to turn on logging and\r\n    # -whatif switch to not actually make changes\r\n\r\n    # Path to the vendor configuration source file\r\n    [string]$sourcesPath = \"$PSScriptRoot\\..\\vendor\\sources.json\",\r\n\r\n    # Vendor folder location\r\n    [string]$saveTo = \"$PSScriptRoot\\..\\vendor\\\",\r\n\r\n    # Launcher folder location\r\n    [string]$launcher = \"$PSScriptRoot\\..\\launcher\",\r\n\r\n    # Config folder location\r\n    [string]$config = \"$PSScriptRoot\\..\\config\",\r\n\r\n    # Using this option will skip all downloads, if you only need to build launcher\r\n    [switch]$noVendor,\r\n\r\n    # Build launcher if you have MSBuild tools installed\r\n    [switch]$Compile\r\n)\r\n\r\n# Get the scripts and Cmder root dirs we are building in.\r\n$cmder_root = Resolve-Path \"$PSScriptRoot\\..\"\r\n\r\n# Dot source util functions into this scope\r\n. \"$PSScriptRoot\\utils.ps1\"\r\n$ErrorActionPreference = \"Stop\"\r\n\r\nif ($Compile) {\r\n    # Check for requirements\r\n    Ensure-Executable \"msbuild\"\r\n\r\n    # Get the version string\r\n    $version = Get-VersionStr\r\n\r\n    Push-Location -Path $launcher\r\n    Create-RC $version ($launcher + '\\src\\version.rc2')\r\n\r\n    Write-Verbose \"Building the launcher...\"\r\n\r\n    # Reference: https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference\r\n    msbuild CmderLauncher.vcxproj /t:Clean,Build /p:configuration=Release /m\r\n\r\n    if ($LastExitCode -ne 0) {\r\n        throw \"MSBuild failed to build the launcher executable.\"\r\n    }\r\n    Pop-Location\r\n}\r\n\r\nif (-not $noVendor) {\r\n    # Check for requirements\r\n    Ensure-Exists $sourcesPath\r\n    Ensure-Executable \"7z\"\r\n\r\n    # Get the vendor sources\r\n    $sources = Get-Content $sourcesPath | Out-String | ConvertFrom-Json\r\n\r\n    Push-Location -Path $saveTo\r\n    New-Item -Type Directory -Path (Join-Path $saveTo \"/tmp/\") -ErrorAction SilentlyContinue >$null\r\n\r\n    $vend = $pwd\r\n\r\n    # Preserve modified (by user) ConEmu setting file\r\n    if ($config -ne \"\") {\r\n        $ConEmuXml = Join-Path $saveTo \"conemu-maximus5\\ConEmu.xml\"\r\n        if (Test-Path $ConEmuXml -pathType leaf) {\r\n            $ConEmuXmlSave = Join-Path $config \"ConEmu.xml\"\r\n            Write-Verbose \"Backup '$ConEmuXml' to '$ConEmuXmlSave'\"\r\n            Copy-Item $ConEmuXml $ConEmuXmlSave\r\n        }\r\n        else { $ConEmuXml = \"\" }\r\n    }\r\n    else { $ConEmuXml = \"\" }\r\n\r\n    # Kill ssh-agent.exe if it is running from the $env:cmder_root we are building\r\n    foreach ($ssh_agent in $(Get-Process ssh-agent -ErrorAction SilentlyContinue)) {\r\n        if ([string]$($ssh_agent.path) -Match [string]$cmder_root.replace('\\', '\\\\')) {\r\n            Write-Verbose $(\"Stopping \" + $ssh_agent.path + \"!\")\r\n            Stop-Process $ssh_agent.id\r\n        }\r\n    }\r\n\r\n    foreach ($s in $sources) {\r\n        Write-Verbose \"Getting vendored $($s.name) $($s.version)...\"\r\n\r\n        # We do not care about the extensions/type of archive\r\n        $tempArchive = \"tmp/$($s.name).tmp\"\r\n        Delete-Existing $tempArchive\r\n        Delete-Existing $s.name\r\n\r\n        Download-File -Url $s.url -File $vend\\$tempArchive -ErrorAction Stop\r\n        Extract-Archive $tempArchive $s.name\r\n\r\n        if ((Get-ChildItem $s.name).Count -eq 1) {\r\n            Flatten-Directory($s.name)\r\n        }\r\n\r\n        # Write current version to .cmderver file, for later.\r\n        \"$($s.version)\" | Out-File \"$($s.name)/.cmderver\"\r\n    }\r\n\r\n    # Restore ConEmu user configuration\r\n    if ($ConEmuXml -ne \"\") {\r\n        Write-Verbose \"Restore '$ConEmuXmlSave' to '$ConEmuXml'\"\r\n        Copy-Item $ConEmuXmlSave $ConEmuXml\r\n    }\r\n\r\n    # Put vendor\\cmder.sh in /etc/profile.d so it runs when we start bash or mintty\r\n    if ( (Test-Path $($saveTo + \"git-for-windows/etc/profile.d\") ) ) {\r\n        Write-Verbose \"Adding cmder.sh /etc/profile.d\"\r\n        Copy-Item $($saveTo + \"cmder.sh\") $($saveTo + \"git-for-windows/etc/profile.d/cmder.sh\")\r\n    }\r\n\r\n    # Replace /etc/profile.d/git-prompt.sh with cmder lambda prompt so it runs when we start bash or mintty\r\n    if ( !(Test-Path $($saveTo + \"git-for-windows/etc/profile.d/git-prompt.sh.bak\") ) ) {\r\n        Write-Verbose \"Replacing /etc/profile.d/git-prompt.sh with our git-prompt.sh\"\r\n        Move-Item $($saveTo + \"git-for-windows/etc/profile.d/git-prompt.sh\") $($saveTo + \"git-for-windows/etc/profile.d/git-prompt.sh.bak\")\r\n        Copy-Item $($saveTo + \"git-prompt.sh\") $($saveTo + \"git-for-windows/etc/profile.d/git-prompt.sh\")\r\n    }\r\n\r\n    Pop-Location\r\n}\r\n\r\nif (-not $Compile -or $noVendor) {\r\n    Write-Warning \"You are not building the full project, Use -Compile without -noVendor\"\r\n    Write-Warning \"This cannot be a release. Test build only!\"\r\n    return\r\n}\r\n\r\nWrite-Verbose \"Successfully built Cmder v$version!\"\r\n\r\nif ( $Env:APPVEYOR -eq 'True' ) {\r\n    Add-AppveyorMessage -Message \"Building Cmder v$version was successful.\" -Category Information\r\n}\r\n\r\nif ( $Env:GITHUB_ACTIONS -eq 'true' ) {\r\n    Write-Output \"::notice title=Build Complete::Building Cmder v$version was successful.\"\r\n}\r\n\r\nWrite-Host -ForegroundColor green \"All good and done!\"\r\n"
  },
  {
    "path": "scripts/pack.ps1",
    "content": "<#\r\n.Synopsis\r\n    Pack Cmder\r\n.DESCRIPTION\r\n    Use this script to pack Cmder into release archives\r\n\r\n    You will need to make this script executable by setting your Powershell Execution Policy to Remote signed\r\n    Then unblock the script for execution with UnblockFile .\\pack.ps1\r\n.EXAMPLE\r\n    .\\pack.ps1\r\n\r\n    Creates default archives for Cmder\r\n.EXAMPLE\r\n    .\\pack.ps1 -verbose\r\n\r\n    Creates default archives for Cmder with plenty of information\r\n.NOTES\r\n    AUTHORS\r\n    Samuel Vasko, Jack Bennett, Martin Kemp\r\n    Part of the Cmder project.\r\n.LINK\r\n    https://github.com/cmderdev/cmder - Project Home\r\n#>\r\n\r\n[CmdletBinding(SupportsShouldProcess = $true)]\r\nParam(\r\n    # CmdletBinding will give us;\r\n    # -verbose switch to turn on logging and\r\n    # -whatif switch to not actually make changes\r\n\r\n    # Path to the vendor configuration source file\r\n    [string]$cmderRoot = \"$PSScriptRoot\\..\",\r\n\r\n    # Vendor folder locaton\r\n    [string]$saveTo = \"$PSScriptRoot\\..\\build\"\r\n)\r\n\r\n$cmderRoot = Resolve-Path $cmderRoot\r\n\r\n. \"$PSScriptRoot\\utils.ps1\"\r\n$ErrorActionPreference = \"Stop\"\r\nEnsure-Executable \"7z\"\r\n\r\n$targets = @{\r\n    \"cmder.7z\"       = \"-t7z -m0=lzma2 -mx=9 -mfb=64 -md=32m -ms=on -myx=7 -mqs=on\";\r\n    \"cmder.zip\"      = \"-mm=Deflate -mfb=128 -mpass=3\";\r\n    \"cmder_mini.zip\" = \"-xr!`\"vendor\\git-for-windows`\"\";\r\n}\r\n\r\nPush-Location -Path $cmderRoot\r\n\r\nDelete-Existing \"$cmderRoot\\Version*\"\r\nDelete-Existing \"$cmderRoot\\build\\*\"\r\n\r\nif (-not (Test-Path -PathType container $saveTo)) {\r\n    (New-Item -ItemType Directory -Path $saveTo) | Out-Null\r\n}\r\n\r\n$saveTo = Resolve-Path $saveTo\r\n\r\n$version = Get-VersionStr\r\n(New-Item -ItemType file \"$cmderRoot\\Version $version\") | Out-Null\r\n\r\nif ($PSCmdlet.MyInvocation.BoundParameters[\"Verbose\"].IsPresent) {\r\n    Write-Verbose \"Packing Cmder $version in $saveTo...\"\r\n    $excluded = (Get-Content -Path \"$cmderRoot\\packignore\") -Split [System.Environment]::NewLine | Where-Object { $_ }\r\n    Get-ChildItem $cmderRoot -Force -Exclude $excluded\r\n}\r\n\r\nforeach ($t in $targets.GetEnumerator()) {\r\n    Create-Archive \"$cmderRoot\" \"$saveTo\\$($t.Name)\" $t.Value\r\n    $hash = (Digest-Hash \"$saveTo\\$($t.Name)\")\r\n    Add-Content -path \"$saveTo\\hashes.txt\" -value ($t.Name + ' ' + $hash)\r\n}\r\n\r\nPop-Location\r\n"
  },
  {
    "path": "scripts/update.ps1",
    "content": "<#\r\n.Synopsis\r\n    Update Cmder vendored dependencies\r\n.DESCRIPTION\r\n    This script updates dependencies to the latest version in vendor/sources.json file.\r\n\r\n    You will need to make this script executable by setting your Powershell Execution Policy to Remote signed\r\n    Then unblock the script for execution with UnblockFile .\\build.ps1\r\n.EXAMPLE\r\n    .\\build.ps1\r\n\r\n    Updates the dependency sources in the default location, the vendor/sources.json file.\r\n.EXAMPLE\r\n    .\\build -verbose\r\n\r\n    Updates the dependency sources and see what's going on.\r\n.EXAMPLE\r\n    .\\build.ps1 -SourcesPath '~/custom/vendors.json'\r\n\r\n    Specify the path to update dependency sources file at.\r\n.NOTES\r\n    AUTHORS\r\n    David Refoua <David@Refoua.me>\r\n    Part of the Cmder project.\r\n.LINK\r\n    http://cmder.app/ - Project Home\r\n#>\r\n[CmdletBinding(SupportsShouldProcess = $true)]\r\nParam(\r\n    # CmdletBinding will give us;\r\n    # -verbose switch to turn on logging and\r\n    # -whatif switch to not actually make changes\r\n\r\n    # Path to the vendor configuration source file\r\n    [string]$sourcesPath = \"$PSScriptRoot\\..\\vendor\\sources.json\",\r\n\r\n    # Include pre-release versions (RC, beta, alpha, etc.)\r\n    # By default, only stable releases are considered\r\n    [switch]$IncludePrerelease = $false\r\n)\r\n\r\n# Get the root directory of the cmder project.\r\n$cmder_root = Resolve-Path \"$PSScriptRoot\\..\"\r\n\r\n# Dot source util functions into this scope\r\n. \"$PSScriptRoot\\utils.ps1\"\r\n$ErrorActionPreference = \"Stop\"\r\n\r\n# Attempts to match the current link with the new link, returning the count of matching characters.\r\nfunction Match-Filenames {\r\n    param (\r\n        $url,\r\n        $downloadUrl,\r\n        $fromEnd\r\n    )\r\n\r\n    $filename = [System.IO.Path]::GetFileName($url)\r\n    $filenameDownload = [System.IO.Path]::GetFileName($downloadUrl)\r\n\r\n    $position = 0\r\n\r\n    if ([String]::IsNullOrEmpty($filename) -or [String]::IsNullOrEmpty($filenameDownload)) {\r\n        throw \"Either one or both filenames are empty!\"\r\n    }\r\n\r\n    if ($fromEnd) {\r\n        $arr = $filename -split \"\"\r\n        [array]::Reverse($arr)\r\n        $filename = $arr -join ''\r\n        $arr = $filenameDownload -split \"\"\r\n        [array]::Reverse($arr)\r\n        $filenameDownload = $arr -join ''\r\n    }\r\n\r\n    while ($filename.Substring($position, 1) -eq $filenameDownload.Substring($position, 1)) {\r\n        $position++\r\n\r\n        if ( ($position -ge $filename.Length) -or ($position -ge $filenameDownload.Length) ) {\r\n            break\r\n        }\r\n    }\r\n\r\n    return $position\r\n}\r\n\r\n# Checks if a release is a pre-release based on GitHub API flag and version tag keywords\r\n# Pre-release keywords include: -rc (release candidate), -beta, -alpha, -preview, -pre\r\nfunction Test-IsPrerelease {\r\n    param (\r\n        [Parameter(Mandatory = $true)]\r\n        $release\r\n    )\r\n\r\n    # Check if marked as pre-release by GitHub\r\n    if ($release.prerelease -eq $true) {\r\n        return $true\r\n    }\r\n\r\n    # Check for common pre-release keywords in tag name\r\n    # This catches versions like v2.50.0-rc, v1.0.0-beta, v1.0.0-alpha, etc.\r\n    $prereleaseKeywords = @('-rc', '-beta', '-alpha', '-preview', '-pre')\r\n    foreach ($keyword in $prereleaseKeywords) {\r\n        if ($release.tag_name -ilike \"*$keyword*\") {\r\n            return $true\r\n        }\r\n    }\r\n\r\n    return $false\r\n}\r\n\r\n# Uses the GitHub api in order to fetch the current download links for the latest releases of the repo.\r\nfunction Fetch-DownloadUrl {\r\n    param (\r\n        [Parameter(Mandatory = $true)]\r\n        $urlStr,\r\n\r\n        [Parameter(Mandatory = $false)]\r\n        [bool]$includePrerelease = $false\r\n    )\r\n\r\n    $url = [uri] $urlStr\r\n\r\n    if ((-not $url) -or ($null -eq $url) -or ($url -eq '')) {\r\n        throw \"Failed to parse url: $urlStr\"\r\n    }\r\n\r\n    if (-not (\"http\", \"https\" -contains $url.Scheme)) {\r\n        throw \"unknown source scheme: $($url.Scheme)\"\r\n    }\r\n\r\n    if (-not ($url.Host -ilike \"*github.com\")) {\r\n        throw \"unknown source domain: $($url.Host)\"\r\n    }\r\n\r\n    $p = $url.Segments.Split([Environment]::NewLine)\r\n\r\n    $headers = @{}\r\n\r\n    if ($env:GITHUB_TOKEN) {\r\n        $headers[\"Authorization\"] = \"token $($env:GITHUB_TOKEN)\"\r\n    }\r\n\r\n    # Api server for GitHub\r\n    $urlHost = \"api.github.com\"\r\n\r\n    # Path for releases end-point\r\n    $urlPath = [IO.Path]::Combine('repos', $p[1], $p[2], 'releases').Trim('/')\r\n\r\n    $apiUrl = [uri] (New-Object System.UriBuilder -ArgumentList $url.Scheme, $urlHost, -1, $urlPath).Uri\r\n\r\n    $info = Invoke-RestMethod -Uri $apiUrl -Headers $headers\r\n\r\n    $downloadLinks = (New-Object System.Collections.Generic.List[System.Object])\r\n\r\n    $charCount = 0\r\n\r\n    if (-not ($info -is [array])) {\r\n        throw \"The response received from API server is invalid\"\r\n    }\r\n\r\n    :loop foreach ($i in $info) {\r\n        # Skip pre-release versions unless explicitly included\r\n        # Pre-releases include RC (Release Candidate), beta, alpha, and other test versions\r\n        if (-not $includePrerelease -and (Test-IsPrerelease $i)) {\r\n            Write-Verbose \"Skipping pre-release version: $($i.tag_name)\"\r\n            continue\r\n        }\r\n\r\n        if (-not ($i.assets -is [array])) {\r\n            continue\r\n        }\r\n\r\n        foreach ($a in $i.assets) {\r\n            if ([String]::IsNullOrEmpty($a.browser_download_url)) {\r\n                continue\r\n            }\r\n\r\n            # Skip some download links as we're not interested in them\r\n            if ( $a.browser_download_url -ilike \"*_symbols*\" ) {\r\n                continue\r\n            }\r\n\r\n            $score = Match-Filenames $url $a.browser_download_url\r\n\r\n            # Skip links that don't match or are less similar\r\n            if ( ($score -eq 0) -or ($score -lt $charCount) ) {\r\n                continue\r\n            }\r\n\r\n            # If we reach the same download link as we have\r\n            if ( $score -eq [System.IO.Path]::GetFileName($url).Length ) {\r\n            }\r\n\r\n            $charCount = $score\r\n            $downloadLinks.Add($a.browser_download_url)\r\n        }\r\n\r\n        # If at least one download link was found, don't continue with older releases\r\n        if ( $downloadLinks.Length -gt 0 ) {\r\n            break :loop\r\n        }\r\n    }\r\n\r\n    # Special case for archive downloads of repository\r\n    if (($null -eq $downloadLinks) -or (-not $downloadLinks)) {\r\n        if ((($p | ForEach-Object { $_.Trim('/') }) -contains \"archive\")) {\r\n            # Find the first release that matches our pre-release filtering criteria\r\n            $selectedRelease = $null\r\n            foreach ($release in $info) {\r\n                # Apply the same filtering logic\r\n                if (-not $includePrerelease -and (Test-IsPrerelease $release)) {\r\n                    continue\r\n                }\r\n                # Use the first release that passes the filter\r\n                $selectedRelease = $release\r\n                break\r\n            }\r\n\r\n            if ($selectedRelease -and $selectedRelease.tag_name) {\r\n                for ($i = 0; $i -lt $p.Length; $i++) {\r\n                    if ($p[$i].Trim('/') -eq \"archive\") {\r\n                        $p[$i + 1] = $selectedRelease.tag_name + \".zip\"\r\n                        $downloadLinks = $url.Scheme + \"://\" + $url.Host + ($p -join '')\r\n                        return $downloadLinks\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        return ''\r\n    }\r\n\r\n    $temp = $downloadLinks | Where-Object { (Match-Filenames $url $_) -eq $charCount }\r\n\r\n    $downloadLinks = (New-Object System.Collections.Generic.List[System.Object])\r\n\r\n    $charCount = 0\r\n\r\n    foreach ($l in $temp) {\r\n        $score = Match-Filenames $url $l true\r\n\r\n        if ( ($score -eq 0) -or ($score -lt $charCount) ) {\r\n            continue\r\n        }\r\n\r\n        $charCount = $score\r\n    }\r\n\r\n    $downloadLinks = $temp | Where-Object { (Match-Filenames $url $_ true) -eq $charCount }\r\n\r\n    if (($null -eq $downloadLinks) -or (-not $downloadLinks)) {\r\n        throw \"No suitable download links matched for the url!\"\r\n    }\r\n\r\n    if (-not($downloadLinks -is [String])) {\r\n        throw \"Found multiple matches for the same url:`n\" + $downloadLinks\r\n    }\r\n\r\n    return $downloadLinks\r\n}\r\n\r\n$count = 0\r\n\r\n# Read the current sources content\r\n$sources = Get-Content $sourcesPath | Out-String | ConvertFrom-Json\r\n\r\nforeach ($s in $sources) {\r\n    Write-Verbose \"Updating sources link for $($s.name)...\"\r\n\r\n    Write-Verbose \"Old Link: $($s.url)\"\r\n\r\n    $downloadUrl = Fetch-DownloadUrl $s.url -includePrerelease $IncludePrerelease\r\n\r\n    if (($null -eq $downloadUrl) -or ($downloadUrl -eq '')) {\r\n        Write-Verbose \"No new links were found\"\r\n        continue\r\n    }\r\n\r\n    Write-Verbose \"Link: $downloadUrl\"\r\n\r\n    $url = [uri] $downloadUrl\r\n\r\n    $version = ''\r\n\r\n    if (($url.Segments[-3] -eq \"download/\") -and ($url.Segments[-2].StartsWith(\"v\"))) {\r\n        $version = $url.Segments[-2].TrimStart('v').TrimEnd('/')\r\n    }\r\n\r\n    if (($url.Segments[-2] -eq \"archive/\")) {\r\n        $version = [System.IO.Path]::GetFileNameWithoutExtension($url.Segments[-1].TrimStart('v').TrimEnd('/'))\r\n    }\r\n\r\n    if ($version -eq '') {\r\n        throw \"Unable to extract version from url string\"\r\n    }\r\n\r\n    Write-Verbose \"Version: $version\"\r\n\r\n    if ( $s.version -ne $version ) {\r\n        # if ( ([System.Version] $s.version) -gt ([System.Version] $version) ) {\r\n        # \tthrow \"The current version $($s.version) is already newer than the found version $version!\"\r\n        # }\r\n\r\n        $count++\r\n    }\r\n\r\n    $s.url = $downloadUrl\r\n    $s.version = $version\r\n}\r\n\r\n$sources | ConvertTo-Json | Set-Content $sourcesPath\r\n\r\nif ($count -eq 0) {\r\n    Write-Host -ForegroundColor yellow \"No new releases were found.\"\r\n    return\r\n}\r\n\r\nif ($Env:APPVEYOR -eq 'True') {\r\n    Add-AppveyorMessage -Message \"Successfully updated $count dependencies.\" -Category Information\r\n}\r\n\r\nif ($Env:GITHUB_ACTIONS -eq 'true') {\r\n    Write-Output \"::notice title=Task Complete::Successfully updated $count dependencies.\"\r\n}\r\n\r\nWrite-Host -ForegroundColor green \"Successfully updated $count dependencies.\"\r\n"
  },
  {
    "path": "scripts/utils.ps1",
    "content": "function Ensure-Exists($path) {\r\n    if (-not (Test-Path $path)) {\r\n        Write-Error \"Missing required $path! Ensure it is installed\"\r\n        exit 1\r\n    }\r\n    return $true > $null\r\n}\r\n\r\nfunction Ensure-Executable($command) {\r\n    try { Get-Command $command -ErrorAction Stop > $null }\r\n    catch {\r\n        if( ($command -eq \"7z\") -and (Test-Path \"$env:programfiles\\7-zip\\7z.exe\") ){\r\n            Set-Alias -Name \"7z\" -Value \"$env:programfiles\\7-zip\\7z.exe\" -Scope script\r\n        }\r\n        elseif( ($command -eq \"7z\") -and (Test-Path \"$env:programw6432\\7-zip\\7z.exe\") ) {\r\n            Set-Alias -Name \"7z\" -Value \"$env:programw6432\\7-zip\\7z.exe\" -Scope script\r\n        }\r\n        else {\r\n            Write-Error \"Missing $command! Ensure it is installed and on in the PATH\"\r\n            exit 1\r\n        }\r\n    }\r\n}\r\n\r\nfunction Delete-Existing($path) {\r\n    if (Test-Path $path) {\r\n        Write-Verbose \"Remove existing $path\"\r\n    }\r\n    Remove-Item -Recurse -Force $path -ErrorAction SilentlyContinue\r\n}\r\n\r\nfunction Extract-Archive($source, $target) {\r\n    Write-Verbose $(\"Extracting Archive '$cmder_root\\vendor\\\" + $source.replace('/','\\') + \" to '$cmder_root\\vendor\\$target'\")\r\n    Invoke-Expression \"7z x -y -o`\"$($target)`\" `\"$source`\"  > `$null\"\r\n    if ($LastExitCode -ne 0) {\r\n        Write-Error \"Extracting of $source failed\"\r\n    }\r\n    Remove-Item $source\r\n}\r\n\r\nfunction Create-Archive($source, $target, $params) {\r\n    $command = \"7z a -x@`\"$source\\packignore`\" $params `\"$target`\" `\"*`\"  > `$null\"\r\n    Write-Verbose \"Creating Archive from '$source' in '$target' with parameters '$params'\"\r\n    Push-Location $source\r\n    Invoke-Expression $command\r\n    Pop-Location\r\n    if ($LastExitCode -ne 0) {\r\n        Write-Error \"Compressing $source failed\"\r\n    }\r\n}\r\n\r\n# If directory contains only one child directory\r\n# Flatten it instead\r\nfunction Flatten-Directory($name) {\r\n    $name = Resolve-Path $name\r\n    $moving = \"$($name)_moving\"\r\n    Rename-Item $name -NewName $moving\r\n    Write-Verbose \"Flattening the '$name' directory...\"\r\n    $child = (Get-ChildItem $moving)[0] | Resolve-Path\r\n    Move-Item -Path $child -Destination $name\r\n    Remove-Item -Recurse $moving\r\n}\r\n\r\nfunction Digest-Hash($path) {\r\n    if (Get-Command Get-FileHash -ErrorAction SilentlyContinue) {\r\n        return (Get-FileHash -Algorithm SHA256 -Path $path).Hash\r\n    }\r\n\r\n    return Invoke-Expression \"md5sum $path\"\r\n}\r\n\r\nfunction Set-GHVariable {\r\n    param(\r\n        [Parameter(Mandatory = $true)]\r\n        [string]$Name,\r\n        [Parameter(Mandatory = $true)]\r\n        [string]$Value\r\n    )\r\n\r\n    Write-Verbose \"Setting CI variable $Name to $Value\" -Verbose\r\n\r\n    if ($env:GITHUB_ENV) {\r\n        Write-Output \"$Name=$Value\" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8\r\n    }\r\n}\r\n\r\nfunction Get-GHTempPath {\r\n    $temp = [System.IO.Path]::GetTempPath()\r\n    if ($env:RUNNER_TEMP) {\r\n        $temp = $env:RUNNER_TEMP\r\n    }\r\n\r\n    Write-Verbose \"Get CI Temp path: $temp\" -Verbose\r\n    return $temp\r\n}\r\n\r\nfunction Get-VersionStr {\r\n    # Clear existing variable\r\n    if ($string) { Clear-Variable -name string }\r\n\r\n    # Determine if git is available\r\n    if (Get-Command \"git.exe\" -ErrorAction SilentlyContinue) {\r\n        # Determine if the current directory is a git repository\r\n        $GitPresent = Invoke-Expression \"git rev-parse --is-inside-work-tree\" -ErrorAction SilentlyContinue\r\n\r\n        if ( $GitPresent -eq 'true' ) {\r\n            $string = Invoke-Expression \"git describe --abbrev=0 --tags\"\r\n        }\r\n    }\r\n\r\n    # Fallback used when Git is not available\r\n    if ( -not($string) ) {\r\n        $string = Parse-Changelog ($PSScriptRoot + '\\..\\' + 'CHANGELOG.md')\r\n    }\r\n\r\n    # Add build number, if AppVeyor is present\r\n    if ( $Env:APPVEYOR -eq 'True' ) {\r\n        $string = $string + '.' + $Env:APPVEYOR_BUILD_NUMBER\r\n    }\r\n    elseif ( $Env:GITHUB_ACTIONS -eq 'true' ) {\r\n        $string = $string + '.' + $Env:GITHUB_RUN_NUMBER\r\n    }\r\n\r\n    # Remove starting 'v' characters\r\n    $string = $string -replace '^v+','' # normalize version string\r\n\r\n    return $string\r\n}\r\n\r\nfunction Parse-Changelog($file) {\r\n    # Define the regular expression to match the version string from changelog\r\n    [regex]$regex = '^## \\[(?<version>[\\w\\-\\.]+)\\]\\([^\\n()]+\\)\\s+\\([^\\n()]+\\)$';\r\n\r\n    # Find the first match of the version string which means the latest version\r\n    $version = Select-String -Path $file -Pattern $regex | Select-Object -First 1 | ForEach-Object { $_.Matches.Groups[1].Value }\r\n\r\n    return $version\r\n}\r\n\r\nfunction Create-RC($string, $path) {\r\n    $version  = $string + '.0.0.0.0' # padding for version string\r\n\r\n    if ( !(Test-Path \"$path.sample\") ) {\r\n        throw \"Invalid path provided for resources file.\"\r\n    }\r\n\r\n    $resource = Get-Content -Path \"$path.sample\"\r\n    $pattern  = @( \"Cmder-Major-Version\", \"Cmder-Minor-Version\", \"Cmder-Revision-Version\", \"Cmder-Build-Version\" )\r\n    $index    = 0\r\n\r\n    # Replace all non-numeric characters to dots and split to array\r\n    $version = $version -replace '[^0-9]+','.' -split '\\.'\r\n\r\n    foreach ($fragment in $version) {\r\n        if ( !$fragment ) { break }\r\n        elseif ($index -le $pattern.length) {\r\n            $resource = $resource.Replace( \"{\" + $pattern[$index++] + \"}\", $fragment )\r\n        }\r\n    }\r\n\r\n    # Add the version string\r\n    $resource = $resource.Replace( \"{Cmder-Version-Str}\", '\"' + $string + '\"' )\r\n\r\n    # Write the results\r\n    Set-Content -Path $path -Value $resource\r\n}\r\n\r\nfunction Register-Cmder() {\r\n    [CmdletBinding()]\r\n    Param\r\n    (\r\n        # Text for the context menu item.\r\n        $MenuText = \"Cmder Here\"\r\n\r\n        , # Defaults to the current Cmder directory when run from Cmder.\r\n        $PathToExe = (Join-Path $env:CMDER_ROOT \"cmder.exe\")\r\n\r\n        , # Commands the context menu will execute.\r\n        $Command = \"%V\"\r\n\r\n        , # Defaults to the icons folder in the Cmder package.\r\n        $icon = (Split-Path $PathToExe | Join-Path -ChildPath 'icons/cmder.ico')\r\n    )\r\n    Begin\r\n    {\r\n        New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT > $null\r\n    }\r\n    Process\r\n    {\r\n        New-Item         -Path \"HKCR:\\Directory\\Shell\\Cmder\" -Force -Value $MenuText\r\n        New-ItemProperty -Path \"HKCR:\\Directory\\Shell\\Cmder\" -Force -Name \"Icon\" -Value `\"$icon`\"\r\n        New-ItemProperty -Path \"HKCR:\\Directory\\Shell\\Cmder\" -Force -Name \"NoWorkingDirectory\"\r\n        New-Item         -Path \"HKCR:\\Directory\\Shell\\Cmder\\Command\" -Force -Value \"`\"$PathToExe`\" `\"$Command`\" \"\r\n\r\n        New-Item         -Path \"HKCR:\\Directory\\Background\\Shell\\Cmder\" -Force -Value $MenuText\r\n        New-ItemProperty -Path \"HKCR:\\Directory\\Background\\Shell\\Cmder\" -Force -Name \"Icon\" -Value `\"$icon`\"\r\n        New-ItemProperty -Path \"HKCR:\\Directory\\Background\\Shell\\Cmder\" -Force -Name \"NoWorkingDirectory\"\r\n        New-Item         -Path \"HKCR:\\Directory\\Background\\Shell\\Cmder\\Command\" -Force -Value \"`\"$PathToExe`\" `\"$Command`\" \"\r\n    }\r\n    End\r\n    {\r\n        Remove-PSDrive -Name HKCR\r\n    }\r\n}\r\n\r\nfunction Unregister-Cmder {\r\n    Begin\r\n    {\r\n        New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT > $null\r\n    }\r\n    Process\r\n    {\r\n        Remove-Item -Path \"HKCR:\\Directory\\Shell\\Cmder\" -Recurse\r\n        Remove-Item -Path \"HKCR:\\Directory\\Background\\Shell\\Cmder\" -Recurse\r\n    }\r\n    End\r\n    {\r\n        Remove-PSDrive -Name HKCR\r\n    }\r\n}\r\n\r\nfunction Download-File {\r\n    param (\r\n        $Url,\r\n        $File\r\n    )\r\n    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12\r\n\r\n    $useBitTransfer = $null -ne (Get-Module -Name BitsTransfer -ListAvailable) -and ($PSVersionTable.PSVersion.Major -le 5)\r\n\r\n    $File = $File -replace \"/\", \"\\\"\r\n\r\n    try {\r\n        if ($useBitTransfer) {\r\n            Start-BitsTransfer -Source $Url -Destination $File -DisplayName \"Downloading '$Url' to $File\"\r\n            return\r\n        }\r\n    }\r\n    catch {\r\n        Write-Error \"Failed to download file using BITS, reason: $_`nUsing fallback method instead...`n\" -ErrorAction:Continue\r\n    }\r\n\r\n    Write-Verbose \"Downloading from $Url to $File`n\"\r\n\r\n    $wc = New-Object System.Net.WebClient\r\n    if ($env:https_proxy) {\r\n        $wc.proxy = (New-Object System.Net.WebProxy($env:https_proxy))\r\n    }\r\n    $wc.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials;\r\n    $wc.DownloadFile($Url, $File)\r\n}\r\n"
  },
  {
    "path": "vendor/ConEmu.xml.default",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<key name=\"Software\">\n\t<key name=\"ConEmu\">\n\t\t<key name=\".Vanilla\" modified=\"2018-02-22 06:02:11\" build=\"171109\">\n\t\t\t<value name=\"ColorTable00\" type=\"dword\" data=\"00222827\"/>\n\t\t\t<value name=\"ColorTable01\" type=\"dword\" data=\"009e5401\"/>\n\t\t\t<value name=\"ColorTable02\" type=\"dword\" data=\"0004aa74\"/>\n\t\t\t<value name=\"ColorTable03\" type=\"dword\" data=\"00a6831a\"/>\n\t\t\t<value name=\"ColorTable04\" type=\"dword\" data=\"003403a7\"/>\n\t\t\t<value name=\"ColorTable05\" type=\"dword\" data=\"009c5689\"/>\n\t\t\t<value name=\"ColorTable06\" type=\"dword\" data=\"0049b6b6\"/>\n\t\t\t<value name=\"ColorTable07\" type=\"dword\" data=\"00cacaca\"/>\n\t\t\t<value name=\"ColorTable08\" type=\"dword\" data=\"007c7c7c\"/>\n\t\t\t<value name=\"ColorTable09\" type=\"dword\" data=\"00f58303\"/>\n\t\t\t<value name=\"ColorTable10\" type=\"dword\" data=\"0006d08d\"/>\n\t\t\t<value name=\"ColorTable11\" type=\"dword\" data=\"00e5c258\"/>\n\t\t\t<value name=\"ColorTable12\" type=\"dword\" data=\"004b04f3\"/>\n\t\t\t<value name=\"ColorTable13\" type=\"dword\" data=\"00b87da8\"/>\n\t\t\t<value name=\"ColorTable14\" type=\"dword\" data=\"0081cccc\"/>\n\t\t\t<value name=\"ColorTable15\" type=\"dword\" data=\"00ffffff\"/>\n\t\t\t<value name=\"ColorTable16\" type=\"dword\" data=\"00222827\"/>\n\t\t\t<value name=\"ColorTable17\" type=\"dword\" data=\"009e5401\"/>\n\t\t\t<value name=\"ColorTable18\" type=\"dword\" data=\"0004aa74\"/>\n\t\t\t<value name=\"ColorTable19\" type=\"dword\" data=\"00a6831a\"/>\n\t\t\t<value name=\"ColorTable20\" type=\"dword\" data=\"003403a7\"/>\n\t\t\t<value name=\"ColorTable21\" type=\"dword\" data=\"009c5689\"/>\n\t\t\t<value name=\"ColorTable22\" type=\"dword\" data=\"0049b6b6\"/>\n\t\t\t<value name=\"ColorTable23\" type=\"dword\" data=\"00cacaca\"/>\n\t\t\t<value name=\"ColorTable24\" type=\"dword\" data=\"007c7c7c\"/>\n\t\t\t<value name=\"ColorTable25\" type=\"dword\" data=\"00f58303\"/>\n\t\t\t<value name=\"ColorTable26\" type=\"dword\" data=\"0006d08d\"/>\n\t\t\t<value name=\"ColorTable27\" type=\"dword\" data=\"00e5c258\"/>\n\t\t\t<value name=\"ColorTable28\" type=\"dword\" data=\"004b04f3\"/>\n\t\t\t<value name=\"ColorTable29\" type=\"dword\" data=\"00b87da8\"/>\n\t\t\t<value name=\"ColorTable30\" type=\"dword\" data=\"0081cccc\"/>\n\t\t\t<value name=\"ColorTable31\" type=\"dword\" data=\"00ffffff\"/>\n\t\t\t<value name=\"ExtendColors\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"ExtendColorIdx\" type=\"hex\" data=\"0e\"/>\n\t\t\t<value name=\"TextColorIdx\" type=\"hex\" data=\"10\"/>\n\t\t\t<value name=\"BackColorIdx\" type=\"hex\" data=\"10\"/>\n\t\t\t<value name=\"PopTextColorIdx\" type=\"hex\" data=\"10\"/>\n\t\t\t<value name=\"PopBackColorIdx\" type=\"hex\" data=\"10\"/>\n\t\t\t<value name=\"ExtendFonts\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"ExtendFontNormalIdx\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"ExtendFontBoldIdx\" type=\"hex\" data=\"0c\"/>\n\t\t\t<value name=\"ExtendFontItalicIdx\" type=\"hex\" data=\"0d\"/>\n\t\t\t<value name=\"CursorTypeActive\" type=\"dword\" data=\"000232c1\"/>\n\t\t\t<value name=\"CursorTypeInactive\" type=\"dword\" data=\"00823282\"/>\n\t\t\t<value name=\"ClipboardDetectLineEnd\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"ClipboardBashMargin\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"ClipboardTrimTrailing\" type=\"hex\" data=\"02\"/>\n\t\t\t<value name=\"ClipboardEOL\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"ClipboardArrowStart\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"ClipboardAllLines\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"ClipboardFirstLine\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"ClipboardClickPromptPosition\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"ClipboardDeleteLeftWord\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"TrueColorerSupport\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"FadeInactive\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"FadeInactiveLow\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"FadeInactiveHigh\" type=\"hex\" data=\"c8\"/>\n\t\t\t<value name=\"ComSpec.UncPaths\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"ConVisible\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"ConInMode\" type=\"dword\" data=\"ffffffff\"/>\n\t\t\t<value name=\"UseInjects\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"SetDefaultTerminal\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"SetDefaultTerminalStartup\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"DefaultTerminalNoInjects\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"DefaultTerminalConfirm\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"DefaultTerminalApps\" type=\"string\" data=\"explorer.exe\"/>\n\t\t\t<value name=\"ProcessAnsi\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"UseClink\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StartType\" type=\"hex\" data=\"02\"/>\n\t\t\t<value name=\"CmdLine\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"StartTasksFile\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"StartTasksName\" type=\"string\" data=\"{cmd::Cmder}\"/>\n\t\t\t<value name=\"StartFarFolders\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"StartFarEditors\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"StoreTaskbarkTasks\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"StoreTaskbarCommands\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"CmdLineHistory\" type=\"multi\"></value>\n\t\t\t<value name=\"SingleInstance\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"ShowHelpTooltips\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"Multi\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"Multi.ShowButtons\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"Multi.NumberInCaption\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"Multi.CloseConfirm\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"Multi.CloseEditViewConfirm\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"Multi.NewConfirm\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"Multi.UseArrows\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"Multi.UseNumbers\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"Multi.UseWinTab\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"Multi.AutoCreate\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"Multi.LeaveOnClose\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"Multi.HideOnClose\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"Multi.MinByEsc\" type=\"hex\" data=\"02\"/>\n\t\t\t<value name=\"MapShiftEscToEsc\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"Multi.Iterate\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"Multi.SplitWidth\" type=\"hex\" data=\"04\"/>\n\t\t\t<value name=\"Multi.SplitHeight\" type=\"hex\" data=\"04\"/>\n\t\t\t<value name=\"KeyboardHooks\" type=\"hex\" data=\"02\"/>\n\t\t\t<value name=\"FontName\" type=\"string\" data=\"Consolas\"/>\n\t\t\t<value name=\"FontName2\" type=\"string\" data=\"Lucida Console\"/>\n\t\t\t<value name=\"FontAutoSize\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"FontSize\" type=\"ulong\" data=\"16\"/>\n\t\t\t<value name=\"FontSizeX\" type=\"ulong\" data=\"0\"/>\n\t\t\t<value name=\"FontSizeX2\" type=\"ulong\" data=\"0\"/>\n\t\t\t<value name=\"FontSizeX3\" type=\"ulong\" data=\"0\"/>\n\t\t\t<value name=\"FontCharSet\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"Anti-aliasing\" type=\"ulong\" data=\"6\"/>\n\t\t\t<value name=\"FontBold\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"FontItalic\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"Monospace\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"BackGround Image show\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"BackGround Image\" type=\"string\" data=\"c:\\back.bmp\"/>\n\t\t\t<value name=\"bgImageDarker\" type=\"hex\" data=\"ff\"/>\n\t\t\t<value name=\"bgImageColors\" type=\"dword\" data=\"ffffffff\"/>\n\t\t\t<value name=\"bgOperation\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"bgPluginAllowed\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"AlphaValue\" type=\"hex\" data=\"f8\"/>\n\t\t\t<value name=\"AlphaValueSeparate\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"AlphaValueInactive\" type=\"hex\" data=\"ee\"/>\n\t\t\t<value name=\"UserScreenTransparent\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"ColorKeyTransparent\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"ColorKeyValue\" type=\"dword\" data=\"00010101\"/>\n\t\t\t<value name=\"UseCurrentSizePos\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"WindowMode\" type=\"dword\" data=\"00000520\"/>\n\t\t\t<value name=\"ConWnd Width\" type=\"dword\" data=\"00000078\"/>\n\t\t\t<value name=\"ConWnd Height\" type=\"dword\" data=\"0000001e\"/>\n\t\t\t<value name=\"Cascaded\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"ConWnd X\" type=\"long\" data=\"500\"/>\n\t\t\t<value name=\"ConWnd Y\" type=\"long\" data=\"500\"/>\n\t\t\t<value name=\"16bit Height\" type=\"ulong\" data=\"0\"/>\n\t\t\t<value name=\"AutoSaveSizePos\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"IntegralSize\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"QuakeStyle\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"QuakeAnimation\" type=\"ulong\" data=\"300\"/>\n\t\t\t<value name=\"HideCaption\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"HideChildCaption\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"FocusInChildWindows\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"HideCaptionAlways\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"HideCaptionAlwaysFrame\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"HideCaptionAlwaysDelay\" type=\"ulong\" data=\"2000\"/>\n\t\t\t<value name=\"HideCaptionAlwaysDisappear\" type=\"ulong\" data=\"2000\"/>\n\t\t\t<value name=\"DownShowHiddenMessage\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"ConsoleFontName\" type=\"string\" data=\"Lucida Console\"/>\n\t\t\t<value name=\"ConsoleFontWidth\" type=\"long\" data=\"3\"/>\n\t\t\t<value name=\"ConsoleFontHeight\" type=\"long\" data=\"5\"/>\n\t\t\t<value name=\"DefaultBufferHeight\" type=\"long\" data=\"1000\"/>\n\t\t\t<value name=\"AutoBufferHeight\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"CmdOutputCP\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"ComSpec.Type\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"ComSpec.Bits\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"ComSpec.UpdateEnv\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"ComSpec.EnvAddPath\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"ComSpec.EnvAddExePath\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"ComSpec.UncPaths\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"ComSpec.Path\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"ConsoleTextSelection\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"CTS.AutoCopy\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"CTS.EndOnTyping\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"CTS.EndOnKeyPress\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"CTS.Freeze\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"CTS.SelectBlock\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"CTS.SelectText\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"CTS.ActMode\" type=\"hex\" data=\"02\"/>\n\t\t\t<value name=\"CTS.RBtnAction\" type=\"hex\" data=\"03\"/>\n\t\t\t<value name=\"CTS.MBtnAction\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"CTS.ColorIndex\" type=\"hex\" data=\"e0\"/>\n\t\t\t<value name=\"ClipboardConfirmEnter\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"ClipboardConfirmLonger\" type=\"ulong\" data=\"200\"/>\n\t\t\t<value name=\"FarGotoEditorOpt\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"FarGotoEditorPath\" type=\"string\" data=\"far.exe /e%1:%2 &quot;%3&quot;\"/>\n\t\t\t<value name=\"FixFarBorders\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"FixFarBordersRanges\" type=\"string\" data=\"2013-25C4;\"/>\n\t\t\t<value name=\"ExtendUCharMap\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"EnhanceGraphics\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"EnhanceButtons\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"PartBrush75\" type=\"hex\" data=\"c8\"/>\n\t\t\t<value name=\"PartBrush50\" type=\"hex\" data=\"96\"/>\n\t\t\t<value name=\"PartBrush25\" type=\"hex\" data=\"5a\"/>\n\t\t\t<value name=\"PartBrushBlack\" type=\"hex\" data=\"20\"/>\n\t\t\t<value name=\"RightClick opens context menu\" type=\"hex\" data=\"02\"/>\n\t\t\t<value name=\"RightClickMacro2\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"SendAltTab\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"SendAltEsc\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"SendAltPrintScrn\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"SendPrintScrn\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"SendCtrlEsc\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"Min2Tray\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"AlwaysShowTrayIcon\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"SafeFarClose\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"SafeFarCloseMacro\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"FARuseASCIIsort\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"ShellNoZoneCheck\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"FixAltOnAltTab\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"DisableMouse\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"RSelectionFix\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"MouseSkipActivation\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"MouseSkipMoving\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"FarHourglass\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"FarHourglassDelay\" type=\"ulong\" data=\"500\"/>\n\t\t\t<value name=\"Dnd\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"DndDrop\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"DefCopy\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"DropUseMenu\" type=\"hex\" data=\"02\"/>\n\t\t\t<value name=\"DragOverlay\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"DragShowIcons\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"DebugSteps\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"DragPanel\" type=\"hex\" data=\"02\"/>\n\t\t\t<value name=\"DragPanelBothEdges\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"KeyBarRClick\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StatusBar.Show\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"StatusBar.Flags\" type=\"dword\" data=\"00000002\"/>\n\t\t\t<value name=\"StatusFontFace\" type=\"string\" data=\"Tahoma\"/>\n\t\t\t<value name=\"StatusFontCharSet\" type=\"ulong\" data=\"0\"/>\n\t\t\t<value name=\"StatusFontHeight\" type=\"long\" data=\"14\"/>\n\t\t\t<value name=\"StatusBar.Color.Back\" type=\"dword\" data=\"00404040\"/>\n\t\t\t<value name=\"StatusBar.Color.Light\" type=\"dword\" data=\"00ffffff\"/>\n\t\t\t<value name=\"StatusBar.Color.Dark\" type=\"dword\" data=\"00a0a0a0\"/>\n\t\t\t<value name=\"StatusBar.Hide.VCon\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"StatusBar.Hide.CapsL\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"StatusBar.Hide.NumL\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"StatusBar.Hide.ScrL\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"StatusBar.Hide.Lang\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StatusBar.Hide.WPos\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StatusBar.Hide.WSize\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StatusBar.Hide.WClient\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StatusBar.Hide.WWork\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StatusBar.Hide.Style\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StatusBar.Hide.StyleEx\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StatusBar.Hide.hFore\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StatusBar.Hide.hFocus\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StatusBar.Hide.ABuf\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"StatusBar.Hide.CPos\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"StatusBar.Hide.CSize\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"StatusBar.Hide.BSize\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"StatusBar.Hide.CurX\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"StatusBar.Hide.CurY\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"StatusBar.Hide.CurS\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"StatusBar.Hide.CurI\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StatusBar.Hide.ConEmuPID\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StatusBar.Hide.ConEmuHWND\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StatusBar.Hide.ConEmuView\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StatusBar.Hide.Srv\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"StatusBar.Hide.SrvHWND\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StatusBar.Hide.Transparency\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"StatusBar.Hide.New\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"StatusBar.Hide.Sync\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"StatusBar.Hide.Proc\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"StatusBar.Hide.Title\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StatusBar.Hide.Resize\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"Tabs\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"TabsLocation\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"TabSelf\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"TabLazy\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"TabRecent\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"TabDblClick\" type=\"ulong\" data=\"1\"/>\n\t\t\t<value name=\"TabsOnTaskBar\" type=\"hex\" data=\"02\"/>\n\t\t\t<value name=\"TaskBarOverlay\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"TabCloseMacro\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"TabFontFace\" type=\"string\" data=\"Segoe UI\"/>\n\t\t\t<value name=\"TabFontCharSet\" type=\"ulong\" data=\"0\"/>\n\t\t\t<value name=\"TabFontHeight\" type=\"long\" data=\"16\"/>\n\t\t\t<value name=\"SaveAllEditors\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"ToolbarAddSpace\" type=\"long\" data=\"0\"/>\n\t\t\t<value name=\"TabConsole\" type=\"string\" data=\"     %n     \"/>\n\t\t\t<value name=\"TabSkipWords\" type=\"string\" data=\"Administrator:|Администратор:\"/>\n\t\t\t<value name=\"TabPanels\" type=\"string\" data=\"&lt;%c&gt; %s\"/>\n\t\t\t<value name=\"TabEditor\" type=\"string\" data=\"&lt;%c.%i&gt;{%s}\"/>\n\t\t\t<value name=\"TabEditorModified\" type=\"string\" data=\"&lt;%c.%i&gt;[%s] *\"/>\n\t\t\t<value name=\"TabViewer\" type=\"string\" data=\"&lt;%c.%i&gt;[%s]\"/>\n\t\t\t<value name=\"TabLenMax\" type=\"ulong\" data=\"20\"/>\n\t\t\t<value name=\"AdminTitleSuffix\" type=\"string\" data=\" (Admin)\"/>\n\t\t\t<value name=\"AdminShowShield\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"HideInactiveConsoleTabs\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"ShowFarWindows\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"TryToCenter\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"CenterConsolePad\" type=\"ulong\" data=\"8\"/>\n\t\t\t<value name=\"ShowScrollbar\" type=\"hex\" data=\"02\"/>\n\t\t\t<value name=\"ScrollBarAppearDelay\" type=\"ulong\" data=\"100\"/>\n\t\t\t<value name=\"ScrollBarDisappearDelay\" type=\"ulong\" data=\"1000\"/>\n\t\t\t<value name=\"IconID\" type=\"ulong\" data=\"1\"/>\n\t\t\t<value name=\"MainTimerElapse\" type=\"ulong\" data=\"10\"/>\n\t\t\t<value name=\"MainTimerInactiveElapse\" type=\"ulong\" data=\"1000\"/>\n\t\t\t<value name=\"AffinityMask\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"SkipFocusEvents\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"MonitorConsoleLang\" type=\"hex\" data=\"03\"/>\n\t\t\t<value name=\"DesktopMode\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"SnapToDesktopEdges\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"AlwaysOnTop\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"SleepInBackground\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"MinimizeOnLoseFocus\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"DisableFarFlashing\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"DisableAllFlashing\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"FindText\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"FindMatchCase\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"FindMatchWholeWords\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"FindTransparent\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"PanView.BackColor\" type=\"dword\" data=\"30ffffff\"/>\n\t\t\t<value name=\"PanView.PFrame\" type=\"long\" data=\"1\"/>\n\t\t\t<value name=\"PanView.PFrameColor\" type=\"dword\" data=\"28808080\"/>\n\t\t\t<value name=\"PanView.SFrame\" type=\"long\" data=\"1\"/>\n\t\t\t<value name=\"PanView.SFrameColor\" type=\"dword\" data=\"07c0c0c0\"/>\n\t\t\t<value name=\"PanView.Thumbs.ImgSize\" type=\"long\" data=\"96\"/>\n\t\t\t<value name=\"PanView.Thumbs.SpaceX1\" type=\"long\" data=\"1\"/>\n\t\t\t<value name=\"PanView.Thumbs.SpaceY1\" type=\"long\" data=\"1\"/>\n\t\t\t<value name=\"PanView.Thumbs.SpaceX2\" type=\"long\" data=\"5\"/>\n\t\t\t<value name=\"PanView.Thumbs.SpaceY2\" type=\"long\" data=\"20\"/>\n\t\t\t<value name=\"PanView.Thumbs.LabelSpacing\" type=\"long\" data=\"2\"/>\n\t\t\t<value name=\"PanView.Thumbs.LabelPadding\" type=\"long\" data=\"0\"/>\n\t\t\t<value name=\"PanView.Thumbs.FontName\" type=\"string\" data=\"Tahoma\"/>\n\t\t\t<value name=\"PanView.Thumbs.FontHeight\" type=\"long\" data=\"14\"/>\n\t\t\t<value name=\"PanView.Tiles.ImgSize\" type=\"long\" data=\"48\"/>\n\t\t\t<value name=\"PanView.Tiles.SpaceX1\" type=\"long\" data=\"4\"/>\n\t\t\t<value name=\"PanView.Tiles.SpaceY1\" type=\"long\" data=\"4\"/>\n\t\t\t<value name=\"PanView.Tiles.SpaceX2\" type=\"long\" data=\"172\"/>\n\t\t\t<value name=\"PanView.Tiles.SpaceY2\" type=\"long\" data=\"4\"/>\n\t\t\t<value name=\"PanView.Tiles.LabelSpacing\" type=\"long\" data=\"4\"/>\n\t\t\t<value name=\"PanView.Tiles.LabelPadding\" type=\"long\" data=\"1\"/>\n\t\t\t<value name=\"PanView.Tiles.FontName\" type=\"string\" data=\"Tahoma\"/>\n\t\t\t<value name=\"PanView.Tiles.FontHeight\" type=\"long\" data=\"14\"/>\n\t\t\t<value name=\"PanView.LoadPreviews\" type=\"hex\" data=\"03\"/>\n\t\t\t<value name=\"PanView.LoadFolders\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"PanView.LoadTimeout\" type=\"ulong\" data=\"15\"/>\n\t\t\t<value name=\"PanView.MaxZoom\" type=\"ulong\" data=\"600\"/>\n\t\t\t<value name=\"PanView.UsePicView2\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"PanView.RestoreOnStartup\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"Update.VerLocation\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"Update.CheckOnStartup\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"Update.CheckHourly\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"Update.ConfirmDownload\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"Update.UseBuilds\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"Update.UseProxy\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"Update.Proxy\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"Update.ProxyUser\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"Update.ProxyPassword\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"Update.ExeCmdLine\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"Update.ArcCmdLine\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"Update.DownloadPath\" type=\"string\" data=\"%TEMP%\\ConEmu\"/>\n\t\t\t<value name=\"Update.LeavePackages\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"Update.PostUpdateCmd\" type=\"string\" data=\"echo Last successful update&gt;ConEmuUpdate.info &amp;&amp; date /t&gt;&gt;ConEmuUpdate.info &amp;&amp; time /t&gt;&gt;ConEmuUpdate.info\"/>\n\t\t\t<value name=\"Multi.Modifier\" type=\"dword\" data=\"00000011\"/>\n\t\t\t<value name=\"Multi.ArrowsModifier\" type=\"dword\" data=\"0000005b\"/>\n\t\t\t<value name=\"KeyMacroVersion\" type=\"hex\" data=\"02\"/>\n\t\t\t<value name=\"MinimizeRestore\" type=\"dword\" data=\"000011c0\"/>\n\t\t\t<value name=\"MinimizeRestore2\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"GlobalRestore\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"ForcedFullScreen\" type=\"dword\" data=\"12115b0d\"/>\n\t\t\t<value name=\"SwitchGuiFocus\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"SetFocusGui\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"SetFocusChild\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"ChildSystemMenu\" type=\"dword\" data=\"ffffffff\"/>\n\t\t\t<value name=\"Multi.NewConsole\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"Multi.NewConsoleShift\" type=\"dword\" data=\"00001154\"/>\n\t\t\t<value name=\"Multi.NewConsolePopup\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"Multi.NewWindow\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"Multi.NewSplitV\" type=\"dword\" data=\"00001000\"/>\n\t\t\t<value name=\"Multi.NewSplitH\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"Multi.NewAttach\" type=\"dword\" data=\"00005b00\"/>\n\t\t\t<value name=\"Multi.Next\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"Multi.NextShift\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"Multi.Recreate\" type=\"dword\" data=\"00005b00\"/>\n\t\t\t<value name=\"Multi.AltCon\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"Multi.Scroll\" type=\"dword\" data=\"00005b00\"/>\n\t\t\t<value name=\"Multi.Close\" type=\"dword\" data=\"00001157\"/>\n\t\t\t<value name=\"CloseTabKey\" type=\"dword\" data=\"00125b00\"/>\n\t\t\t<value name=\"CloseGroupKey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"TerminateProcessKey\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"DuplicateRootKey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"CloseConEmuKey\" type=\"dword\" data=\"00001273\"/>\n\t\t\t<value name=\"Multi.Rename\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"Multi.MoveLeft\" type=\"dword\" data=\"00125b25\"/>\n\t\t\t<value name=\"Multi.MoveRight\" type=\"dword\" data=\"00125b27\"/>\n\t\t\t<value name=\"Multi.CmdKey\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"CTS.VkBlockStart\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"CTS.VkTextStart\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"CTS.VkCopyAll\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"Multi.ShowTabsList\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"Multi.ShowTabsList2\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"ClipboardVkAllLines\" type=\"dword\" data=\"0000102d\"/>\n\t\t\t<value name=\"ClipboardVkFirstLine\" type=\"dword\" data=\"00001156\"/>\n\t\t\t<value name=\"DeleteWordToLeft\" type=\"dword\" data=\"00001108\"/>\n\t\t\t<value name=\"FindTextKey\" type=\"dword\" data=\"00005d46\"/>\n\t\t\t<value name=\"ScreenshotKey\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"ScreenshotFullKey\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"ShowStatusBarKey\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"ShowTabBarKey\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"ShowCaptionKey\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"AlwaysOnTopKey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"Key.TabMenu\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"Key.TabMenu2\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"Key.TabPane1\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"Key.TabPane2\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"Key.Maximize\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"Key.FullScreen\" type=\"dword\" data=\"0000120d\"/>\n\t\t\t<value name=\"Key.SysMenu\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"Key.SysMenu2\" type=\"dword\" data=\"00001102\"/>\n\t\t\t<value name=\"Key.BufUp\" type=\"dword\" data=\"00001126\"/>\n\t\t\t<value name=\"Key.BufDn\" type=\"dword\" data=\"00001128\"/>\n\t\t\t<value name=\"Key.BufPgUp\" type=\"dword\" data=\"00001121\"/>\n\t\t\t<value name=\"Key.BufPgDn\" type=\"dword\" data=\"00001122\"/>\n\t\t\t<value name=\"Key.PicViewSlide\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"Key.PicViewSlower\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"Key.PicViewFaster\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"FontLargerKey\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"FontSmallerKey\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"PasteFileKey\" type=\"dword\" data=\"00101146\"/>\n\t\t\t<value name=\"PastePathKey\" type=\"dword\" data=\"00101144\"/>\n\t\t\t<value name=\"PasteCygwinKey\" type=\"dword\" data=\"00005d2d\"/>\n\t\t\t<value name=\"Key.JumpPrevMonitor\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"Key.JumpNextMonitor\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"Key.TileToLeft\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"Key.TileToRIght\" type=\"dword\" data=\"80808000\"/>\n\t\t\t<value name=\"KeyMacro01\" type=\"dword\" data=\"0012a031\"/>\n\t\t\t<value name=\"KeyMacro01.Text\" type=\"string\" data=\"Task(&quot;cmd&quot;)\"/>\n\t\t\t<value name=\"KeyMacro02\" type=\"dword\" data=\"0012a032\"/>\n\t\t\t<value name=\"KeyMacro02.Text\" type=\"string\" data=\"Task(&quot;PowerShell&quot;)\"/>\n\t\t\t<value name=\"KeyMacro03\" type=\"dword\" data=\"000011d0\"/>\n\t\t\t<value name=\"KeyMacro03.Text\" type=\"string\" data=\"FontSetSize(1,2)\"/>\n\t\t\t<value name=\"KeyMacro04\" type=\"dword\" data=\"000011d1\"/>\n\t\t\t<value name=\"KeyMacro04.Text\" type=\"string\" data=\"FontSetSize(1,-2)\"/>\n\t\t\t<value name=\"KeyMacro05\" type=\"dword\" data=\"0012a033\"/>\n\t\t\t<value name=\"KeyMacro05.Text\" type=\"string\" data=\"Task(&quot;PowerShell as Admin&quot;)\"/>\n\t\t\t<value name=\"KeyMacro06\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro06.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro07\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro07.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro08\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro08.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro09\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro09.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro10\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro10.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro11\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro11.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro12\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro12.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro13\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro13.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro14\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro14.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro15\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro15.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro16\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro16.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro17\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro17.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro18\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro18.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro19\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro19.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro20\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro20.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro21\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro21.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro22\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro22.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro23\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro23.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro24\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro24.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro25\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro25.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro26\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro26.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro27\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro27.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro28\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro28.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro29\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro29.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro30\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro30.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro31\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro31.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"KeyMacro32\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"KeyMacro32.Text\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"CTS.VkBlock\" type=\"hex\" data=\"a4\"/>\n\t\t\t<value name=\"CTS.VkText\" type=\"hex\" data=\"a0\"/>\n\t\t\t<value name=\"CTS.VkAct\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"CTS.VkPrompt\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"FarGotoEditorVk\" type=\"hex\" data=\"a2\"/>\n\t\t\t<value name=\"DndLKey\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"DndRKey\" type=\"hex\" data=\"a2\"/>\n\t\t\t<value name=\"WndDragKey\" type=\"dword\" data=\"00121101\"/>\n\t\t\t<key name=\"Tasks\" modified=\"2018-02-22 06:02:12\" build=\"171109\">\n\t\t\t\t<value name=\"Count\" type=\"long\" data=\"9\"/>\n\t\t\t\t<key name=\"Task1\" modified=\"2018-02-22 06:02:12\" build=\"171109\">\n\t\t\t\t\t<value name=\"Name\" type=\"string\" data=\"{cmd::Cmder as Admin}\"/>\n\t\t\t\t\t<value name=\"GuiArgs\" type=\"string\" data=\" /icon &quot;%CMDER_ROOT%\\icons\\cmder.ico&quot;\"/>\n\t\t\t\t\t<value name=\"Cmd1\" type=\"string\" data=\"*cmd /k &quot;&quot;%ConEmuDir%\\..\\init.bat&quot; &quot;\"/>\n\t\t\t\t\t<value name=\"Active\" type=\"long\" data=\"0\"/>\n\t\t\t\t\t<value name=\"Count\" type=\"long\" data=\"1\"/>\n\t\t\t\t\t<value name=\"Hotkey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t\t<value name=\"Flags\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t</key>\n\t\t\t\t<key name=\"Task2\" modified=\"2018-02-22 06:05:13\" build=\"171109\">\n\t\t\t\t\t<value name=\"Name\" type=\"string\" data=\"{cmd::Cmder}\"/>\n\t\t\t\t\t<value name=\"GuiArgs\" type=\"string\" data=\" /icon &quot;%CMDER_ROOT%\\icons\\cmder.ico&quot;\"/>\n\t\t\t\t\t<value name=\"Cmd1\" type=\"string\" data=\"cmd /k &quot;&quot;%ConEmuDir%\\..\\init.bat&quot; &quot;\"/>\n\t\t\t\t\t<value name=\"Active\" type=\"long\" data=\"0\"/>\n\t\t\t\t\t<value name=\"Count\" type=\"long\" data=\"1\"/>\n\t\t\t\t\t<value name=\"Hotkey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t\t<value name=\"Flags\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t</key>\n\t\t\t\t<key name=\"Task3\" modified=\"2018-02-22 06:05:13\" build=\"171109\">\n\t\t\t\t\t<value name=\"Name\" type=\"string\" data=\"{PowerShell::PowerShell as Admin}\"/>\n\t\t\t\t\t<value name=\"Hotkey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t\t<value name=\"GuiArgs\" type=\"string\" data=\" /icon &quot;%CMDER_ROOT%\\icons\\cmder.ico&quot;\"/>\n\t\t\t\t\t<value name=\"Cmd1\" type=\"string\" data=\"*PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command &quot;Invoke-Expression 'Import-Module ''%ConEmuDir%\\..\\profile.ps1'''&quot;\"/>\n\t\t\t\t\t<value name=\"Active\" type=\"long\" data=\"0\"/>\n\t\t\t\t\t<value name=\"Count\" type=\"long\" data=\"1\"/>\n\t\t\t\t\t<value name=\"Flags\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t</key>\n\t\t\t\t<key name=\"Task4\" modified=\"2018-02-22 06:05:13\" build=\"171109\">\n\t\t\t\t\t<value name=\"Name\" type=\"string\" data=\"{PowerShell::PowerShell}\"/>\n\t\t\t\t\t<value name=\"Hotkey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t\t<value name=\"GuiArgs\" type=\"string\" data=\" /icon &quot;%CMDER_ROOT%\\icons\\cmder.ico&quot;\"/>\n\t\t\t\t\t<value name=\"Cmd1\" type=\"string\" data=\"PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command &quot;Invoke-Expression 'Import-Module ''%ConEmuDir%\\..\\profile.ps1'''&quot;\"/>\n\t\t\t\t\t<value name=\"Cmd2\" type=\"string\" data=\"&quot;%CMDER_ROOT%\\vendor\\git-for-windows\\git-bash.exe&quot;\"/>\n\t\t\t\t\t<value name=\"Active\" type=\"long\" data=\"0\"/>\n\t\t\t\t\t<value name=\"Count\" type=\"long\" data=\"1\"/>\n\t\t\t\t\t<value name=\"Flags\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t</key>\n\t\t\t\t<key name=\"Task5\" modified=\"2018-02-22 06:05:13\" build=\"171109\">\n\t\t\t\t\t<value name=\"Name\" type=\"string\" data=\"{bash::mintty as Admin}\"/>\n\t\t\t\t\t<value name=\"Flags\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t\t<value name=\"Hotkey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t\t<value name=\"GuiArgs\" type=\"string\" data=\"/icon &quot;%ConEmuDir%\\..\\git-for-windows\\usr\\share\\git\\git-for-windows.ico&quot;\"/>\n\t\t\t\t\t<value name=\"Cmd1\" type=\"string\" data=\"*&quot;%ConEmuDir%\\..\\git-for-windows\\usr\\bin\\mintty.exe&quot; /bin/bash -l\"/>\n\t\t\t\t\t<value name=\"Active\" type=\"long\" data=\"0\"/>\n\t\t\t\t\t<value name=\"Count\" type=\"long\" data=\"1\"/>\n\t\t\t\t</key>\n\t\t\t\t<key name=\"Task6\" modified=\"2018-02-22 06:05:13\" build=\"171109\">\n\t\t\t\t\t<value name=\"Name\" type=\"string\" data=\"{bash::mintty}\"/>\n\t\t\t\t\t<value name=\"Flags\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t\t<value name=\"Hotkey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t\t<value name=\"GuiArgs\" type=\"string\" data=\"/icon &quot;%ConEmuDir%\\..\\git-for-windows\\usr\\share\\git\\git-for-windows.ico&quot;\"/>\n\t\t\t\t\t<value name=\"Cmd1\" type=\"string\" data=\"&quot;%ConEmuDir%\\..\\git-for-windows\\usr\\bin\\mintty.exe&quot; /bin/bash -l\"/>\n\t\t\t\t\t<value name=\"Active\" type=\"long\" data=\"0\"/>\n\t\t\t\t\t<value name=\"Count\" type=\"long\" data=\"1\"/>\n\t\t\t\t\t<value name=\"Cmd2\" type=\"string\" data=\"&quot;%CMDER_ROOT%vendor\\git-for-windows\\usr\\bin\\mintty.exe&quot; /bin/bash -l\"/>\n\t\t\t\t</key>\n\t\t\t\t<key name=\"Task7\" modified=\"2018-02-22 06:05:13\" build=\"171109\">\n\t\t\t\t\t<value name=\"Name\" type=\"string\" data=\"{bash::bash as Admin}\"/>\n\t\t\t\t\t<value name=\"Flags\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t\t<value name=\"Hotkey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t\t<value name=\"GuiArgs\" type=\"string\" data=\" /icon &quot;%CMDER_ROOT%\\icons\\cmder.ico&quot;\"/>\n\t\t\t\t\t<value name=\"Active\" type=\"long\" data=\"0\"/>\n\t\t\t\t\t<value name=\"Count\" type=\"long\" data=\"1\"/>\n\t\t\t\t\t<value name=\"Cmd1\" type=\"string\" data=\"*set &quot;PATH=%ConEmuDir%\\..\\git-for-windows\\usr\\bin;%PATH%&quot; &amp; %ConEmuDir%\\..\\git-for-windows\\git-cmd.exe --no-cd --command=%ConEmuBaseDirShort%\\conemu-msys2-64.exe &quot;%ConEmuDir%\\..\\git-for-windows\\usr\\bin\\bash.exe&quot; --login -i\"/>\n\t\t\t\t</key>\n\t\t\t\t<key name=\"Task8\" modified=\"2018-02-22 06:05:13\" build=\"171109\">\n\t\t\t\t\t<value name=\"Name\" type=\"string\" data=\"{bash::bash}\"/>\n\t\t\t\t\t<value name=\"Flags\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t\t<value name=\"Hotkey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t\t<value name=\"GuiArgs\" type=\"string\" data=\" /icon &quot;%CMDER_ROOT%\\icons\\cmder.ico&quot;\"/>\n\t\t\t\t\t<value name=\"Cmd1\" type=\"string\" data=\"set &quot;PATH=%ConEmuDir%\\..\\git-for-windows\\usr\\bin;%PATH%&quot; &amp; %ConEmuDir%\\..\\git-for-windows\\git-cmd.exe --no-cd --command=%ConEmuBaseDirShort%\\conemu-msys2-64.exe &quot;%ConEmuDir%\\..\\git-for-windows\\usr\\bin\\bash.exe&quot; --login -i\"/>\n\t\t\t\t\t<value name=\"Active\" type=\"long\" data=\"0\"/>\n\t\t\t\t\t<value name=\"Count\" type=\"long\" data=\"1\"/>\n\t\t\t\t</key>\n\t\t\t\t<key name=\"Task9\" modified=\"2018-03-23 23:26:53\" build=\"180318\">\n\t\t\t\t\t<value name=\"Name\" type=\"string\" data=\"{WSL::bash}\"/>\n\t\t\t\t\t<value name=\"Flags\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t\t<value name=\"Hotkey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t\t<value name=\"GuiArgs\" type=\"string\" data='-icon \"%USERPROFILE%\\AppData\\Local\\lxss\\bash.ico\"'/>\n\t\t\t\t\t<value name=\"Cmd1\" type=\"string\" data='set \"PATH=%ConEmuBaseDirShort%\\wsl;%PATH%\" &amp; %ConEmuBaseDirShort%\\conemu-cyg-64.exe --wsl -cur_console:pm:/mnt'/>\n\t\t\t\t\t<value name=\"Active\" type=\"long\" data=\"0\"/>\n\t\t\t\t\t<value name=\"Count\" type=\"long\" data=\"1\"/>\n\t\t\t\t</key>\n\t\t\t</key>\n\n\t\t\t<key name=\"Apps\" modified=\"2018-02-22 06:05:13\" build=\"171109\">\n\t\t\t\t<value name=\"Count\" type=\"long\" data=\"0\"/>\n\t\t\t</key>\n\t\t\t<key name=\"Colors\" modified=\"2018-02-22 06:05:13\" build=\"171109\">\n\t\t\t\t<key name=\"Palette1\" modified=\"2018-02-22 06:05:13\" build=\"171109\">\n\t\t\t\t\t<value name=\"Name\" type=\"string\" data=\"Monokai\"/>\n\t\t\t\t\t<value name=\"ExtendColors\" type=\"hex\" data=\"00\"/>\n\t\t\t\t\t<value name=\"ExtendColorIdx\" type=\"hex\" data=\"0e\"/>\n\t\t\t\t\t<value name=\"TextColorIdx\" type=\"hex\" data=\"10\"/>\n\t\t\t\t\t<value name=\"BackColorIdx\" type=\"hex\" data=\"10\"/>\n\t\t\t\t\t<value name=\"PopTextColorIdx\" type=\"hex\" data=\"10\"/>\n\t\t\t\t\t<value name=\"PopBackColorIdx\" type=\"hex\" data=\"10\"/>\n\t\t\t\t\t<value name=\"ColorTable00\" type=\"dword\" data=\"00222827\"/>\n\t\t\t\t\t<value name=\"ColorTable01\" type=\"dword\" data=\"009e5401\"/>\n\t\t\t\t\t<value name=\"ColorTable02\" type=\"dword\" data=\"0004aa74\"/>\n\t\t\t\t\t<value name=\"ColorTable03\" type=\"dword\" data=\"00a6831a\"/>\n\t\t\t\t\t<value name=\"ColorTable04\" type=\"dword\" data=\"003403a7\"/>\n\t\t\t\t\t<value name=\"ColorTable05\" type=\"dword\" data=\"009c5689\"/>\n\t\t\t\t\t<value name=\"ColorTable06\" type=\"dword\" data=\"0049b6b6\"/>\n\t\t\t\t\t<value name=\"ColorTable07\" type=\"dword\" data=\"00cacaca\"/>\n\t\t\t\t\t<value name=\"ColorTable08\" type=\"dword\" data=\"007c7c7c\"/>\n\t\t\t\t\t<value name=\"ColorTable09\" type=\"dword\" data=\"00f58303\"/>\n\t\t\t\t\t<value name=\"ColorTable10\" type=\"dword\" data=\"0006d08d\"/>\n\t\t\t\t\t<value name=\"ColorTable11\" type=\"dword\" data=\"00e5c258\"/>\n\t\t\t\t\t<value name=\"ColorTable12\" type=\"dword\" data=\"004b04f3\"/>\n\t\t\t\t\t<value name=\"ColorTable13\" type=\"dword\" data=\"00b87da8\"/>\n\t\t\t\t\t<value name=\"ColorTable14\" type=\"dword\" data=\"0081cccc\"/>\n\t\t\t\t\t<value name=\"ColorTable15\" type=\"dword\" data=\"00ffffff\"/>\n\t\t\t\t\t<value name=\"ColorTable16\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t\t<value name=\"ColorTable17\" type=\"dword\" data=\"00800000\"/>\n\t\t\t\t\t<value name=\"ColorTable18\" type=\"dword\" data=\"00008000\"/>\n\t\t\t\t\t<value name=\"ColorTable19\" type=\"dword\" data=\"00808000\"/>\n\t\t\t\t\t<value name=\"ColorTable20\" type=\"dword\" data=\"00000080\"/>\n\t\t\t\t\t<value name=\"ColorTable21\" type=\"dword\" data=\"00800080\"/>\n\t\t\t\t\t<value name=\"ColorTable22\" type=\"dword\" data=\"00008080\"/>\n\t\t\t\t\t<value name=\"ColorTable23\" type=\"dword\" data=\"00c0c0c0\"/>\n\t\t\t\t\t<value name=\"ColorTable24\" type=\"dword\" data=\"00808080\"/>\n\t\t\t\t\t<value name=\"ColorTable25\" type=\"dword\" data=\"00ff0000\"/>\n\t\t\t\t\t<value name=\"ColorTable26\" type=\"dword\" data=\"0000ff00\"/>\n\t\t\t\t\t<value name=\"ColorTable27\" type=\"dword\" data=\"00ffff00\"/>\n\t\t\t\t\t<value name=\"ColorTable28\" type=\"dword\" data=\"000000ff\"/>\n\t\t\t\t\t<value name=\"ColorTable29\" type=\"dword\" data=\"00ff00ff\"/>\n\t\t\t\t\t<value name=\"ColorTable30\" type=\"dword\" data=\"0000ffff\"/>\n\t\t\t\t\t<value name=\"ColorTable31\" type=\"dword\" data=\"00ffffff\"/>\n\t\t\t\t</key>\n\t\t\t\t<value name=\"Count\" type=\"long\" data=\"1\"/>\n\t\t\t</key>\n\t\t\t<value name=\"OneTabPerGroup\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"ActivateSplitMouseOver\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"TabBtnDblClick\" type=\"ulong\" data=\"0\"/>\n\t\t\t<value name=\"ConsoleExceptionHandler\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"SaveCmdHistory\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"CTS.IBeam\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"Multi.SplitSizeVU\" type=\"dword\" data=\"00105d26\"/>\n\t\t\t<value name=\"Multi.SplitSizeVD\" type=\"dword\" data=\"00105d28\"/>\n\t\t\t<value name=\"Multi.SplitSizeHL\" type=\"dword\" data=\"00105d25\"/>\n\t\t\t<value name=\"Multi.SplitSizeHR\" type=\"dword\" data=\"00105d27\"/>\n\t\t\t<value name=\"Multi.SplitFocusU\" type=\"dword\" data=\"00005d26\"/>\n\t\t\t<value name=\"Multi.SplitFocusD\" type=\"dword\" data=\"00005d28\"/>\n\t\t\t<value name=\"Multi.SplitFocusL\" type=\"dword\" data=\"00005d25\"/>\n\t\t\t<value name=\"Multi.SplitFocusR\" type=\"dword\" data=\"00005d27\"/>\n\t\t\t<value name=\"CloseGroupPrcKey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"SetDefaultTerminalStartupTSA\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"CTS.HtmlFormat\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"TabIcons\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"Multi.NewConsolePopup2\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"CloseAllConKey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"CloseExceptConKey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"CTS.VkCopyFmt0\" type=\"dword\" data=\"00001143\"/>\n\t\t\t<value name=\"CTS.VkCopyFmt1\" type=\"dword\" data=\"00101143\"/>\n\t\t\t<value name=\"CTS.VkCopyFmt2\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"ProcessNewConArg\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"HighlightMouseRow\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"HighlightMouseCol\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"HighlightMouseSwitch\" type=\"dword\" data=\"00005d4c\"/>\n\t\t\t<value name=\"TransparencyInc\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"TransparencyDec\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"Key.MaximizeWidth\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"Key.MaximizeHeight\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"DefaultTerminalAgressive\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"DefaultTerminalNewWindow\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"AnsiLog\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"AnsiLogPath\" type=\"string\" data=\"%ConEmuDir%\\Logs\\\"/>\n\t\t\t<value name=\"Multi.DupConfirm\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"Multi.DetachConfirm\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"CTS.Intelligent\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"CTS.IntelligentExceptions\" type=\"string\" data=\"far|vim.exe\"/>\n\t\t\t<value name=\"StatusBar.Hide.Time\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"TaskbarProgress\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"RetardInactivePanes\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"ProcessCmdStart\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"Multi.ShowSearch\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"Multi.CloseConfirmFlags\" type=\"hex\" data=\"04\"/>\n\t\t\t<value name=\"FontUseDpi\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"FontUseUnits\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"UseScrollLock\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"CTS.ForceLocale\" type=\"dword\" data=\"00000000\"/>\n\t\t\t<value name=\"StatusBar.Hide.VisL\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StatusBar.Hide.KeyHooks\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StatusBar.Hide.WVBack\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StatusBar.Hide.WVDC\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StatusBar.Hide.Zoom\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StatusBar.Hide.Dpi\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"TabFlashChanged\" type=\"long\" data=\"8\"/>\n\t\t\t<value name=\"TabModifiedSuffix\" type=\"string\" data=\"[*]\"/>\n\t\t\t<key name=\"HotKeys\" modified=\"2018-02-22 06:02:12\" build=\"171109\">\n\t\t\t\t<value name=\"KeyMacroVersion\" type=\"hex\" data=\"02\"/>\n\t\t\t\t<value name=\"Multi.Modifier\" type=\"dword\" data=\"00000011\"/>\n\t\t\t\t<value name=\"Multi.ArrowsModifier\" type=\"dword\" data=\"0000005b\"/>\n\t\t\t\t<value name=\"MinimizeRestore\" type=\"dword\" data=\"000011c0\"/>\n\t\t\t\t<value name=\"MinimizeRestore2\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"GlobalRestore\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"CdExplorerPath\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"ForcedFullScreen\" type=\"dword\" data=\"12115b0d\"/>\n\t\t\t\t<value name=\"SwitchGuiFocus\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"SetFocusGui\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"SetFocusChild\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"ChildSystemMenu\" type=\"dword\" data=\"000011ff\"/>\n\t\t\t\t<value name=\"Multi.NewConsole\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Multi.NewConsoleShift\" type=\"dword\" data=\"00001154\"/>\n\t\t\t\t<value name=\"Multi.CmdKey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Multi.NewWindow\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Multi.NewConsolePopup\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Multi.NewConsolePopup2\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Multi.NewAttach\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Multi.NewSplitV\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Multi.NewSplitH\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Multi.SplitMaximize\" type=\"dword\" data=\"00005d0d\"/>\n\t\t\t\t<value name=\"Multi.SplitSizeVU\" type=\"dword\" data=\"00105d26\"/>\n\t\t\t\t<value name=\"Multi.SplitSizeVD\" type=\"dword\" data=\"00105d28\"/>\n\t\t\t\t<value name=\"Multi.SplitSizeHL\" type=\"dword\" data=\"00105d25\"/>\n\t\t\t\t<value name=\"Multi.SplitSizeHR\" type=\"dword\" data=\"00105d27\"/>\n\t\t\t\t<value name=\"Key.TabPane1\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Key.TabPane2\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Multi.SplitFocusU\" type=\"dword\" data=\"00005d26\"/>\n\t\t\t\t<value name=\"Multi.SplitFocusD\" type=\"dword\" data=\"00005d28\"/>\n\t\t\t\t<value name=\"Multi.SplitFocusL\" type=\"dword\" data=\"00005d25\"/>\n\t\t\t\t<value name=\"Multi.SplitFocusR\" type=\"dword\" data=\"00005d27\"/>\n\t\t\t\t<value name=\"Multi.Next\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Multi.NextShift\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Multi.Recreate\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Multi.AltCon\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Multi.Pause\" type=\"dword\" data=\"80808013\"/>\n\t\t\t\t<value name=\"Multi.Scroll\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Multi.GroupInput\" type=\"dword\" data=\"00005d47\"/>\n\t\t\t\t<value name=\"Multi.Detach\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Multi.Close\" type=\"dword\" data=\"00001157\"/>\n\t\t\t\t<value name=\"CloseTabKey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"CloseGroupKey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"CloseGroupPrcKey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"CloseAllConKey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"CloseZombiesKey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"CloseExceptConKey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"KillProcessKey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"KillAllButShellKey\" type=\"dword\" data=\"00105b2e\"/>\n\t\t\t\t<value name=\"DuplicateRootKey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"CloseConEmuKey\" type=\"dword\" data=\"00001273\"/>\n\t\t\t\t<value name=\"Multi.Rename\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"AffinityPriorityKey\" type=\"dword\" data=\"00005d41\"/>\n\t\t\t\t<value name=\"Multi.MoveLeft\" type=\"dword\" data=\"00125b25\"/>\n\t\t\t\t<value name=\"Multi.MoveRight\" type=\"dword\" data=\"00125b27\"/>\n\t\t\t\t<value name=\"CTS.VkBlockStart\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"CTS.VkTextStart\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"CTS.VkCopyFmt0\" type=\"dword\" data=\"00001143\"/>\n\t\t\t\t<value name=\"CTS.VkCopyFmt1\" type=\"dword\" data=\"00101143\"/>\n\t\t\t\t<value name=\"CTS.VkCopyFmt2\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"CTS.VkCopyAll\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"HighlightMouseSwitch\" type=\"dword\" data=\"00005d4c\"/>\n\t\t\t\t<value name=\"HighlightMouseSwitchX\" type=\"dword\" data=\"00005d58\"/>\n\t\t\t\t<value name=\"Multi.ShowTabsList\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Multi.ShowTabsList2\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"ClipboardVkAllLines\" type=\"dword\" data=\"0000102d\"/>\n\t\t\t\t<value name=\"ClipboardVkFirstLine\" type=\"dword\" data=\"00001156\"/>\n\t\t\t\t<value name=\"DeleteWordToLeft\" type=\"dword\" data=\"00001108\"/>\n\t\t\t\t<value name=\"FindTextKey\" type=\"dword\" data=\"00005d46\"/>\n\t\t\t\t<value name=\"ScreenshotKey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"ScreenshotFullKey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"ShowStatusBarKey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"ShowTabBarKey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"ShowCaptionKey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"AlwaysOnTopKey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"TransparencyInc\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"TransparencyDec\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Key.TabMenu\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Key.TabMenu2\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Key.Maximize\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Key.MaximizeWidth\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Key.MaximizeHeight\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Key.TileToLeft\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Key.TileToRight\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Key.JumpPrevMonitor\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Key.JumpNextMonitor\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Key.FullScreen\" type=\"dword\" data=\"0000120d\"/>\n\t\t\t\t<value name=\"Key.SysMenu\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Key.SysMenu2\" type=\"dword\" data=\"00001102\"/>\n\t\t\t\t<value name=\"Key.BufUp\" type=\"dword\" data=\"00001126\"/>\n\t\t\t\t<value name=\"Key.BufDn\" type=\"dword\" data=\"00001128\"/>\n\t\t\t\t<value name=\"Key.BufPgUp\" type=\"dword\" data=\"00001121\"/>\n\t\t\t\t<value name=\"Key.BufPgDn\" type=\"dword\" data=\"00001122\"/>\n\t\t\t\t<value name=\"Key.BufHfPgUp\" type=\"dword\" data=\"00005d21\"/>\n\t\t\t\t<value name=\"Key.BufHfPgDn\" type=\"dword\" data=\"00005d22\"/>\n\t\t\t\t<value name=\"Key.BufTop\" type=\"dword\" data=\"00005d24\"/>\n\t\t\t\t<value name=\"Key.BufBottom\" type=\"dword\" data=\"00005d23\"/>\n\t\t\t\t<value name=\"Key.BufCursor\" type=\"dword\" data=\"00005d08\"/>\n\t\t\t\t<value name=\"FontLargerKey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"FontSmallerKey\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"FontOriginalKey\" type=\"dword\" data=\"00001104\"/>\n\t\t\t\t<value name=\"PasteFileKey\" type=\"dword\" data=\"00101146\"/>\n\t\t\t\t<value name=\"PastePathKey\" type=\"dword\" data=\"00101144\"/>\n\t\t\t\t<value name=\"PasteCygwinKey\" type=\"dword\" data=\"00005d2d\"/>\n\t\t\t\t<value name=\"KeyMacro01\" type=\"dword\" data=\"00a01231\"/>\n\t\t\t\t<value name=\"KeyMacro01.Text\" type=\"string\" data=\"Task(1)\"/>\n\t\t\t\t<value name=\"KeyMacro02\" type=\"dword\" data=\"00a01232\"/>\n\t\t\t\t<value name=\"KeyMacro02.Text\" type=\"string\" data=\"Task(2)\"/>\n\t\t\t\t<value name=\"KeyMacro03\" type=\"dword\" data=\"000011d0\"/>\n\t\t\t\t<value name=\"KeyMacro03.Text\" type=\"string\" data=\"FontSetSize(1,2)\"/>\n\t\t\t\t<value name=\"KeyMacro04\" type=\"dword\" data=\"000011d1\"/>\n\t\t\t\t<value name=\"KeyMacro04.Text\" type=\"string\" data=\"FontSetSize(1,-2)\"/>\n\t\t\t\t<value name=\"KeyMacro05\" type=\"dword\" data=\"00a01233\"/>\n\t\t\t\t<value name=\"KeyMacro05.Text\" type=\"string\" data=\"Task(3)\"/>\n\t\t\t\t<value name=\"KeyMacro06\" type=\"dword\" data=\"00a01234\"/>\n\t\t\t\t<value name=\"KeyMacro06.Text\" type=\"string\" data=\"Task(4)\"/>\n\t\t\t\t<value name=\"KeyMacro07\" type=\"dword\" data=\"00a01235\"/>\n\t\t\t\t<value name=\"KeyMacro07.Text\" type=\"string\" data=\"Task(5)\"/>\n\t\t\t\t<value name=\"KeyMacro08\" type=\"dword\" data=\"00a01236\"/>\n\t\t\t\t<value name=\"KeyMacro08.Text\" type=\"string\" data=\"Task(6)\"/>\n\t\t\t\t<value name=\"KeyMacro09\" type=\"dword\" data=\"00a01237\"/>\n\t\t\t\t<value name=\"KeyMacro09.Text\" type=\"string\" data=\"Task(7)\"/>\n\t\t\t\t<value name=\"KeyMacro10\" type=\"dword\" data=\"00a01238\"/>\n\t\t\t\t<value name=\"KeyMacro10.Text\" type=\"string\" data=\"Task(8)\"/>\n\t\t\t\t<value name=\"KeyMacro11\" type=\"dword\" data=\"00a01239\"/>\n\t\t\t\t<value name=\"KeyMacro11.Text\" type=\"string\" data=\"Task(9)\"/>\n\t\t\t\t<value name=\"KeyMacro12\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"KeyMacro12.Text\" type=\"string\" data=\"\"/>\n\t\t\t\t<value name=\"KeyMacro13\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"KeyMacro13.Text\" type=\"string\" data=\"\"/>\n\t\t\t\t<value name=\"KeyMacro14\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"KeyMacro14.Text\" type=\"string\" data=\"\"/>\n\t\t\t\t<value name=\"KeyMacro15\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"KeyMacro15.Text\" type=\"string\" data=\"\"/>\n\t\t\t\t<value name=\"KeyMacro16\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"KeyMacro16.Text\" type=\"string\" data=\"\"/>\n\t\t\t\t<value name=\"KeyMacro17\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"KeyMacro17.Text\" type=\"string\" data=\"\"/>\n\t\t\t\t<value name=\"KeyMacro18\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"KeyMacro18.Text\" type=\"string\" data=\"\"/>\n\t\t\t\t<value name=\"KeyMacro19\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"KeyMacro19.Text\" type=\"string\" data=\"\"/>\n\t\t\t\t<value name=\"KeyMacro20\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"KeyMacro20.Text\" type=\"string\" data=\"\"/>\n\t\t\t\t<value name=\"KeyMacro21\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"KeyMacro21.Text\" type=\"string\" data=\"\"/>\n\t\t\t\t<value name=\"KeyMacro22\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"KeyMacro22.Text\" type=\"string\" data=\"\"/>\n\t\t\t\t<value name=\"KeyMacro23\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"KeyMacro23.Text\" type=\"string\" data=\"\"/>\n\t\t\t\t<value name=\"KeyMacro24\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"KeyMacro24.Text\" type=\"string\" data=\"\"/>\n\t\t\t\t<value name=\"KeyMacro25\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"KeyMacro25.Text\" type=\"string\" data=\"\"/>\n\t\t\t\t<value name=\"KeyMacro26\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"KeyMacro26.Text\" type=\"string\" data=\"\"/>\n\t\t\t\t<value name=\"KeyMacro27\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"KeyMacro27.Text\" type=\"string\" data=\"\"/>\n\t\t\t\t<value name=\"KeyMacro28\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"KeyMacro28.Text\" type=\"string\" data=\"\"/>\n\t\t\t\t<value name=\"KeyMacro29\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"KeyMacro29.Text\" type=\"string\" data=\"\"/>\n\t\t\t\t<value name=\"KeyMacro30\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"KeyMacro30.Text\" type=\"string\" data=\"\"/>\n\t\t\t\t<value name=\"KeyMacro31\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"KeyMacro31.Text\" type=\"string\" data=\"\"/>\n\t\t\t\t<value name=\"KeyMacro32\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"KeyMacro32.Text\" type=\"string\" data=\"\"/>\n\t\t\t\t<value name=\"CTS.VkBlock\" type=\"hex\" data=\"a4\"/>\n\t\t\t\t<value name=\"CTS.VkText\" type=\"hex\" data=\"a0\"/>\n\t\t\t\t<value name=\"CTS.VkAct\" type=\"hex\" data=\"00\"/>\n\t\t\t\t<value name=\"CTS.VkPrompt\" type=\"hex\" data=\"00\"/>\n\t\t\t\t<value name=\"FarGotoEditorVk\" type=\"hex\" data=\"a2\"/>\n\t\t\t\t<value name=\"DndLKey\" type=\"hex\" data=\"00\"/>\n\t\t\t\t<value name=\"DndRKey\" type=\"hex\" data=\"a2\"/>\n\t\t\t\t<value name=\"WndDragKey\" type=\"dword\" data=\"00121101\"/>\n\t\t\t\t<value name=\"Multi.Unfasten\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Key.DebugProcess\" type=\"dword\" data=\"00105b44\"/>\n\t\t\t\t<value name=\"Key.DumpProcess\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Key.DumpTree\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Multi.SplitSwap\" type=\"dword\" data=\"00125d58\"/>\n\t\t\t\t<value name=\"Multi.SplitSwapU\" type=\"dword\" data=\"00125d26\"/>\n\t\t\t\t<value name=\"Multi.SplitSwapD\" type=\"dword\" data=\"00125d28\"/>\n\t\t\t\t<value name=\"Multi.SplitSwapL\" type=\"dword\" data=\"00125d25\"/>\n\t\t\t\t<value name=\"Multi.SplitSwapR\" type=\"dword\" data=\"00125d27\"/>\n\t\t\t\t<value name=\"Multi.GroupInputAll\" type=\"dword\" data=\"00105d47\"/>\n\t\t\t\t<value name=\"Multi.GroupInputKey\" type=\"dword\" data=\"00125d47\"/>\n\t\t\t\t<value name=\"Key.AltNumpad\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Key.JumpActiveMonitor\" type=\"dword\" data=\"00000000\"/>\n\t\t\t\t<value name=\"Key.BufPrUp\" type=\"dword\" data=\"00121121\"/>\n\t\t\t\t<value name=\"Key.BufPrDn\" type=\"dword\" data=\"00121122\"/>\n\t\t\t\t<value name=\"Key.ResetTerm\" type=\"dword\" data=\"00000000\"/>\n\t\t\t</key>\n\t\t\t<value name=\"StartCreateDelay\" type=\"ulong\" data=\"100\"/>\n\t\t\t<value name=\"DefaultTerminalDebugLog\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"LastMonitor\" type=\"string\" data=\"0,0,1440,1050\"/>\n\t\t\t<value name=\"Restore2ActiveMon\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"DownShowExOnTopMessage\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"EnvironmentSet\" type=\"multi\">\n\t\t\t\t<line data=\"set PATH=%ConEmuBaseDir%\\Scripts;%PATH%\"/>\n\t\t\t</value>\n\t\t\t<value name=\"Update.InetTool\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"Update.InetToolCmd\" type=\"string\" data=\"\"/>\n\t\t\t<value name=\"SuppressBells\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"ClipboardAllLinesPosix\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"ClipboardFirstLinePosix\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"VividColors\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"AnsiExecution\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"AnsiAllowedCommands\" type=\"multi\">\n\t\t\t\t<line data=\"cmd -cur_console:R /cGitShowBranch.cmd\"/>\n\t\t\t</value>\n\t\t\t<value name=\"KillSshAgent\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"ProcessCtrlZ\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"JumpListAutoUpdate\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"CompressLongStrings\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"DynamicBufferHeight\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"CTS.ResetOnRelease\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"CTS.EraseBeforeReset\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"Anti-aliasing2\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"UseAltGrayPlus\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"MouseDragWindow\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"DebugLog\" type=\"hex\" data=\"00\"/>\n\t\t\t<value name=\"StatusBar.Hide.TMode\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StatusBar.Hide.RMode\" type=\"hex\" data=\"01\"/>\n\t\t\t<value name=\"StatusBar.Hide.CellI\" type=\"hex\" data=\"01\"/>\n\t\t</key>\n\t</key>\n</key>\n"
  },
  {
    "path": "vendor/Readme.md",
    "content": "## Vendor\n\nThird parties software & init script.\n"
  },
  {
    "path": "vendor/bin/alias.cmd",
    "content": "@echo off\r\n\r\n\r\nif \"%ALIASES%\" == \"\" (\r\n  set ALIASES=\"%CMDER_ROOT%\\config\\user_aliases.cmd\"\r\n)\r\n\r\nsetlocal enabledelayedexpansion\r\n\r\nif \"%~1\" == \"\" echo Use /? for help & echo. & goto :p_show\r\n\r\n:: check command usage\r\n\r\nrem #region parseargument\r\ngoto parseargument\r\n\r\n:do_shift\r\n  shift\r\n\r\n:parseargument\r\n  set currentarg=%~1\r\n\r\n  if /i \"%currentarg%\" equ \"/f\" (\r\n    set ALIASES=%~2\r\n    set _f=%~2\r\n    shift\r\n    goto :do_shift\r\n  ) else if /i \"%currentarg%\" == \"/reload\" (\r\n    goto :p_reload\r\n  ) else if \"%currentarg%\" equ \"/H\" (\r\n    goto :p_help\r\n  ) else if \"%currentarg%\" equ \"/h\" (\r\n    goto :p_help\r\n  ) else if \"%currentarg%\" equ \"/?\" (\r\n    goto :p_help\r\n  ) else if /i \"%currentarg%\" equ \"/d\" (\r\n    if \"%~2\" neq \"\" (\r\n      if \"%~3\" equ \"\" (\r\n        :: /d flag for delete existing alias\r\n        call :p_del %~2\r\n        shift\r\n        goto :eof\r\n      )\r\n    )\r\n  ) else if \"%currentarg%\" neq \"\" (\r\n    if \"%~2\" equ \"\" (\r\n      :: Show the specified alias\r\n      doskey /macros | %WINDIR%\\System32\\findstr /b %currentarg%= && exit /b\r\n      echo insufficient parameters.\r\n      goto :p_help\r\n    ) else (\r\n      :: handle quotes within command definition, e.g. quoted long file names\r\n      set _x=%*\r\n    )\r\n  )\r\n\r\nrem #endregion parseargument\r\n\r\nif \"%ALIASES%\" neq \"%CMDER_ROOT%\\config\\user_aliases.cmd\" (\r\n  set _x=!_x:/f \"%ALIASES%\" =!\r\n\r\n  if not exist \"%ALIASES%\" (\r\n    echo ;= @echo off>\"%ALIASES%\"\r\n    echo ;= rem Call DOSKEY and use this file as the macrofile>>\"%ALIASES%\"\r\n    echo ;= %%SystemRoot%%\\system32\\doskey /listsize=1000 /macrofile=%%0%%>>\"%ALIASES%\"\r\n    echo ;= rem In batch mode, jump to the end of the file>>\"%ALIASES%\"\r\n    echo ;= goto:eof>>\"%ALIASES%\"\r\n    echo ;= Add aliases below here>>\"%ALIASES%\"\r\n  )\r\n)\r\n\r\n:: validate alias\r\nfor /f \"delims== tokens=1,* usebackq\" %%G in (`echo \"!_x!\"`) do (\r\n  set alias_name=%%G\r\n  set alias_value=%%H\r\n)\r\n\r\n:: leading quotes added while validating\r\nset alias_name=!alias_name:~1!\r\n\r\n:: trailing quotes added while validating\r\nset alias_value=!alias_value:~0,-1!\r\n\r\n::remove spaces\r\nset _temp=%alias_name: =%\r\n\r\nif not [\"%_temp%\"] == [\"%alias_name%\"] (\r\n  echo Your alias name can not contain a space\r\n  endlocal\r\n  exit /b\r\n)\r\n\r\n:: replace already defined alias\r\n%WINDIR%\\System32\\findstr /b /l /v /i \"%alias_name%=\" \"%ALIASES%\" >> \"%ALIASES%.tmp\"\r\necho %alias_name%=%alias_value% >> \"%ALIASES%.tmp\" && type \"%ALIASES%.tmp\" > \"%ALIASES%\" & @del /f /q \"%ALIASES%.tmp\"\r\ndoskey /macrofile=\"%ALIASES%\"\r\nendlocal\r\nexit /b\r\n\r\n:p_del\r\nset del_alias=%~1\r\n\r\n%WINDIR%\\System32\\findstr /b /l /v /i \"%del_alias%=\" \"%ALIASES%\" >> \"%ALIASES%.tmp\"\r\ntype \"%ALIASES%\".tmp > \"%ALIASES%\" & @del /f /q \"%ALIASES%.tmp\"\r\ndoskey %del_alias%=\r\ndoskey /macrofile=\"%ALIASES%\"\r\ngoto:eof\r\n\r\n:p_reload\r\ndoskey /macrofile=\"%ALIASES%\"\r\necho Aliases reloaded\r\nexit /b\r\n\r\n:p_show\r\ndoskey /macros|%WINDIR%\\System32\\findstr /v /r \"^;=\" | sort\r\nexit /b\r\n\r\n:p_help\r\necho.Usage:\r\necho.\r\necho.  alias [options] [alias=alias command]\r\necho.\r\necho.Options:\r\necho.\r\necho.  Note: Options MUST precede the alias definition.\r\necho.\r\necho.  /d [alias]     Delete an [alias].\r\necho.  /f [macrofile] Path to the [macrofile] you want to store the new alias in.\r\necho.                 Default: %cmder_root%\\config\\user_aliases.cmd\r\necho.  /reload        Reload the aliases file.  Can be used with /f argument.\r\necho.                 Default: %cmder_root%\\config\\user_aliases.cmd\r\necho.\r\necho. If alias is called with no parameters, it will display the list of existing\r\necho. aliases.\r\necho.\r\necho. In the alias command, you can use the following notations:\r\necho.\r\necho. ^^^^^^^^%% - %% signs in env vars must be escaped if preserving the variable\r\necho.         in he alias is desired. Variables in aliases surrounded by double\r\necho.         quotes only require '^^%%' vs '^^^^^^^^%%'\r\necho. $*    - allows the alias to assume all the parameters of the supplied\r\necho.         command.\r\necho. $1-$9 - Allows you to separate parameter by number, much like %%1 in\r\necho.         batch.\r\necho. $T    - Command separator, allowing you to string several commands\r\necho.         together into one alias.\r\necho.\r\necho. For more information, read DOSKEY /?\r\nexit /b\r\n"
  },
  {
    "path": "vendor/bin/cexec.cmd",
    "content": "@echo off\r\n\r\nif \"%~1\" equ \"\" goto :wrongSyntax\r\n\r\nif not defined CMDER_USER_FLAGS (\r\n  :: in case nothing was passed to %CMDER_USER_FLAGS%\r\n  set \"CMDER_USER_FLAGS= \"\r\n)\r\n\r\n\r\nset \"feNot=false\"\r\ngoto :parseArgument\r\n\r\n:doShift\r\n  shift\r\n\r\n:parseArgument\r\nset \"currenArgu=%~1\"\r\nif /i \"%currenArgu%\" equ \"/setPath\" (\r\n  set ccall=call \"%~dp0cexec.cmd\"\r\n  set cexec=\"%~dp0cexec.cmd\"\r\n) else if /i \"%currenArgu%\" == \"/?\" (\r\n  goto :help\r\n) else if /i \"%currenArgu%\" equ \"/help\" (\r\n  goto :help\r\n) else if /i \"%currenArgu%\" equ \"/h\" (\r\n  goto :help\r\n) else if /i \"%currenArgu%\" equ \"NOT\" (\r\n  set \"feNot=true\"\r\n  goto :doShift\r\n) else (\r\n  if \"%~1\" equ \"\" goto :wrongSyntax\r\n  if \"%~2\" equ \"\" goto :wrongSyntax\r\n  set \"feFlagName=%~1\"\r\n  set \"feCommand=%~2\"\r\n  if not \"%~3\" equ \"\" (\r\n    set \"feParam=%~3\"\r\n  )\r\n  goto :detect\r\n)\r\n\r\n:detect\r\n:: to avoid erroneous deteciton like \"/do\" \"/doNOT\", which both have a \"/do\"\r\n:: we added a space after the flag name, like \"/do \", which won't match \"/doN\"\r\nset \"feFlagName=%feFlagName% \"\r\n:: echo.\r\n:: echo %CMDER_USER_FLAGS%\r\n:: echo %feNOT%\r\n:: echo %feFlagName%\r\n:: echo %feCommand%\r\n:: echo %feParam%\r\n:: echo.\r\necho %CMDER_USER_FLAGS% | %WINDIR%\\System32\\find /i \"%feFlagName%\">nul\r\nif \"%ERRORLEVEL%\" == \"0\" (\r\n  if \"%feNOT%\" == \"false\" (\r\n    endlocal && call %feCommand% %feParam%\r\n    exit /b 0\r\n  )\r\n) else (\r\n  if \"%feNOT%\" == \"true\" (\r\n    endlocal && call %feCommand% %feParam%\r\n    exit /b 0\r\n  )\r\n)\r\nendlocal\r\nexit /b 1\r\n\r\n:wrongSyntax\r\necho The syntax of the command is incorrect.\r\necho.\r\necho use /? for help\r\necho.\r\nendlocal\r\nexit /b\r\n\r\n:help\r\necho.\r\necho CExec - Conditional Exec\r\necho.\r\necho Handles with custom arguments for cmder's init.bat.\r\necho   written by xiazeyu, inspired DRSDavidSoft.\r\necho.\r\necho Usage:\r\necho.\r\necho cexec /setPath [NOT] flagName command/program [parameters]\r\necho.\r\necho   /setPath         Generate a global variables %%ccall%% and  %%cexec%% for\r\necho                    quicker use. Following arguments will be ignored.\r\necho.\r\necho   NOT              Specifies that cexec should carry out\r\necho                    the command only if the flag is missing.\r\necho.\r\necho   /[flagName]      Specifies which flag name is to detect. It's recommended\r\necho                    to use a pair of double quotation marks to wrap\r\necho                    your flag name to avoid exceed expectation.\r\necho.\r\necho   command/program  Specifies the command to carry out if the\r\necho                    argument name is detected. It's recommended to\r\necho                    use a pair of double quotation marks to\r\necho                    wrap your command to avoid exceed expectation.\r\necho.\r\necho   parameters       These are the parameters passed to the command/program.\r\necho                    It's recommended to use a pair of double quotation marks \r\necho                    to wrap your flag name to avoid exceed expectation.\r\necho.\r\necho Examples:\r\necho.\r\necho   These examples are expected to be written in %cmder_root%/config/user-profile.cmd\r\necho   CExec evaluates the environment variable \"CMDER_USER_FLAGS\" and conditionally\r\necho   caries out actions based on flags that are passed.\r\necho.\r\necho   Case 1:\r\necho.\r\necho   The following command in `user_profile.cmd` would execute \"notepad.exe\" and continue running the `user_profile.cmd`\r\necho.\r\necho     \"%ccall%\" \"/startNotepad\" \"start\" \"notepad.exe\"\r\necho.\r\necho   If you pass parameter to init.bat like:\r\necho.\r\necho     init.bat /startNotepad\r\necho.\r\necho   Case 2:\r\necho.\r\necho   The following command in `user_profile.cmd` would execute \"notepad.exe\" and stop running the `user_profile.cmd`\r\necho.\r\necho     \"%cexec%\" NOT \"/dontStartNotepad\" \"start\" \"notepad.exe\"\r\necho.\r\necho   UNLESS you pass parameter to init.bat like:\r\necho.\r\necho     init.bat /dontStartNotepad\r\necho.\r\nendlocal\r\nexit /b\r\n"
  },
  {
    "path": "vendor/bin/cmder_diag.cmd",
    "content": "@echo off\r\n\r\n(echo.\r\necho ------------------------------------\r\necho set\r\necho ------------------------------------\r\nset\r\n\r\necho.\r\necho ------------------------------------\r\necho where git\r\necho ------------------------------------\r\nwhere git\r\n\r\necho.\r\necho ------------------------------------\r\necho where clink\r\necho ------------------------------------\r\nwhere clink\r\n\r\necho.\r\necho ------------------------------------\r\necho systeminfo\r\necho ------------------------------------\r\nsysteminfo\r\n\r\necho ------------------------------------\r\necho dir \"%cmder_root%\"\r\necho ------------------------------------\r\ndir \"%cmder_root%\"\r\n\r\necho.\r\necho ------------------------------------\r\necho dir \"%cmder_root%\\vendor\"\r\necho ------------------------------------\r\ndir \"%cmder_root%\\vendor\"\r\n\r\necho.\r\necho ------------------------------------\r\necho dir /s \"%cmder_root%\\bin\"\r\necho ------------------------------------\r\ndir /s \"%cmder_root%\\bin\"\r\n\r\necho.\r\necho ------------------------------------\r\necho dir /s \"%cmder_root%\\config\"\r\necho ------------------------------------\r\ndir /s \"%cmder_root%\\config\"\r\n\r\necho.\r\necho ------------------------------------\r\necho Make sure you sanitize this output of private data prior to posting it online for review by the CMDER Team!\r\necho ------------------------------------\r\n) > \"%temp%\\cmder_diag_cmd.log\"\r\n\r\ntype \"%temp%\\cmder_diag_cmd.log\"\r\n\r\necho.\r\necho Above output was saved in \"%temp%\\cmder_diag_cmd.log\"\r\n\r\n\r\n"
  },
  {
    "path": "vendor/bin/cmder_diag.ps1",
    "content": "if (test-path  $env:temp\\cmder_diag_ps.log) {\r\n  remove-item $env:temp\\cmder_diag_ps.log\r\n}\r\n\r\n$cmder_diag = {\r\n\"\"\r\n\"------------------------------------\"\r\n\"get-childitem env:\"\r\n\"------------------------------------\"\r\nget-childitem env: | ft -autosize -wrap 2>&1\r\n\r\n\"\"\r\n\"------------------------------------\"\r\n\"get-command git -all -ErrorAction SilentlyContinue\"\r\n\"------------------------------------\"\r\nget-command git -all -ErrorAction SilentlyContinue\r\n\r\n\"\"\r\n\"------------------------------------\"\r\n\"get-command clink -all -ErrorAction SilentlyContinue\"\r\n\"------------------------------------\"\r\nget-command clink -all -ErrorAction SilentlyContinue\r\n\r\n\"\"\r\n\"------------------------------------\"\r\n\"systeminfo\"\r\n\"------------------------------------\"\r\nsysteminfo 2>&1\r\n\r\n\"------------------------------------\"\r\n\"get-childitem '$env:CMDER_ROOT'\"\r\n\"------------------------------------\"\r\nget-childitem \"$env:CMDER_ROOT\" |ft LastWriteTime,mode,length,FullName\r\n\r\n\"\"\r\n\"------------------------------------\"\r\n\"get-childitem '$env:CMDER_ROOT/vendor'\"\r\n\"------------------------------------\"\r\nget-childitem \"$env:CMDER_ROOT/vendor\" |ft LastWriteTime,mode,length,FullName\r\n\r\n\"\"\r\n\"------------------------------------\"\r\n\"get-childitem -s '$env:CMDER_ROOT/bin'\"\r\n\"------------------------------------\"\r\nget-childitem -s \"$env:CMDER_ROOT/bin\" |ft LastWriteTime,mode,length,FullName\r\n\r\n\"\"\r\n\"------------------------------------\"\r\n\"get-childitem -s '$env:CMDER_ROOT/config'\"\r\n\"------------------------------------\"\r\nget-childitem -s \"$env:CMDER_ROOT/config\" |ft LastWriteTime,mode,length,FullName\r\n\r\n\"\"\r\n\"------------------------------------\"\r\n\"Make sure you sanitize this output of private data prior to posting it online for review by the CMDER Team!\"\r\n\"------------------------------------\"\r\n}\r\n\r\n& $cmder_diag | out-file -filePath $env:temp\\cmder_diag_ps.log\r\n\r\nget-content \"$env:temp\\cmder_diag_ps.log\"\r\n\r\nwrite-host \"\"\r\nwrite-host Above output was saved in \"$env:temp\\cmder_diag_ps.log\"\r\n"
  },
  {
    "path": "vendor/bin/cmder_diag.sh",
    "content": "#!/usr/bin/env bash\n\n[[ -f \"$TEMP/cmder_diag_sh.log\" ]] && rm -f  \"$TEMP/cmder_diag_sh.log\"\n\n(echo ''\necho ------------------------------------\necho env\necho ------------------------------------\nenv 2>&1\n\necho ''\necho ------------------------------------\necho which git\necho ------------------------------------\nwhich git 2>&1\n\necho ''\necho ------------------------------------\necho which clink\necho ------------------------------------\nwhich clink 2>&1\n\necho ''\necho ------------------------------------\necho systeminfo\necho ------------------------------------\nsysteminfo 2>&1\n\necho ------------------------------------\necho ls -la \"$CMDER_ROOT\"\necho ------------------------------------\nls -la \"$CMDER_ROOT\" 2>&1\n\necho ''\necho ------------------------------------\necho ls -la \"$CMDER_ROOT/vendor\"\necho ------------------------------------\nls -la \"$CMDER_ROOT/vendor\" 2>&1\n\necho ''\necho ------------------------------------\necho ls -la /s \"$CMDER_ROOT/bin\"\necho ------------------------------------\nls -laR /s \"$CMDER_ROOT/bin\" 2>&1\n\necho ''\necho ------------------------------------\necho ls -la /s \"$CMDER_ROOT/config\"\necho ------------------------------------\nls -laR /s \"$CMDER_ROOT/config\" 2>&1\n\necho ''\necho ------------------------------------\necho Make sure you sanitize this output of private data prior to posting it online for review by the CMDER Team!\necho ------------------------------------\n) > \"$TEMP/cmder_diag_sh.log\"\n\ncat \"$TEMP/cmder_diag_sh.log\"\n\necho ''\necho Above output was saved in \"$TEMP/cmder_diag_sh.log\"\n"
  },
  {
    "path": "vendor/bin/cmder_shell.cmd",
    "content": "@echo off\r\n\r\nset CMDER_ROOT=%~dp0..\\..\\\r\n\r\nif \"%cmder_init%\" == \"1\" (\r\n    \"%CMDER_ROOT%\\vendor\\clink\\clink.bat\" inject -q --profile \"%CMDER_ROOT%\\config\" --scripts \"%CMDER_ROOT%\\vendor\"\r\n) else (\r\n    set cmder_init=1\r\n)\r\n\r\npushd \"%CMDER_ROOT%\"\r\ncall \"%CMDER_ROOT%\\vendor\\init.bat\" /f %*\r\npopd\r\n"
  },
  {
    "path": "vendor/bin/excd.cmd",
    "content": "@echo off\r\nset excd=%*\r\nset excd=%excd:\"=%\r\nset excd_param=/d\r\nif /i \"%excd:~0,2%\"==\"/d\" set \"excd=%excd:~2%\"\r\nif \"%excd:~0,1%\"==\"~\" (set excd=%userprofile%\\%excd:~1%)\r\nif \"%excd:~0,1%\"==\"/\" (set excd_param=)\r\ncd %excd_param% %excd%\r\n"
  },
  {
    "path": "vendor/bin/timer.cmd",
    "content": "@echo off\r\n\r\nset start=%~1\r\nset end=%~2\r\n\r\nset options=\"tokens=1-4 delims=:.,\"\r\nfor /f %options% %%a in (\"%start%\") do set start_h=%%a&set /a start_m=100%%b %% 100&set /a start_s=100%%c %% 100&set /a start_ms=100%%d %% 100\r\nfor /f %options% %%a in (\"%end%\") do set end_h=%%a&set /a end_m=100%%b %% 100&set /a end_s=100%%c %% 100&set /a end_ms=100%%d %% 100\r\n\r\nset /a hours=%end_h%-%start_h%\r\nset /a mins=%end_m%-%start_m%\r\nset /a secs=%end_s%-%start_s%\r\nset /a ms=%end_ms%-%start_ms%\r\nif %ms% lss 0 set /a secs = %secs% - 1 & set /a ms = 100%ms%\r\nif %secs% lss 0 set /a mins = %mins% - 1 & set /a secs = 60%secs%\r\nif %mins% lss 0 set /a hours = %hours% - 1 & set /a mins = 60%mins%\r\nif %hours% lss 0 set /a hours = 24%hours%\r\nif 1%ms% lss 100 set ms=0%ms%\r\n\r\n:: Mission accomplished\r\nset /a totalsecs = %hours%*3600 + %mins%*60 + %secs%\r\necho Elapsed Time: %hours%:%mins%:%secs%.%ms% (%totalsecs%.%ms%s total)\r\n"
  },
  {
    "path": "vendor/bin/vscode_init.cmd",
    "content": "@echo off\r\n\r\nrem Find root dir\r\n\r\nif not defined CMDER_ROOT (\r\n    for /f \"delims=\" %%i in (\"%~dp0\\..\\..\") do (\r\n        set \"cmder_root=%%~fi\"\r\n    )\r\n)\r\n\r\nif defined cmder_user_bin (\r\n    set CMDER_VSCODE_INIT_ARGS=%cmder_user_bin%\\vscode_init_args.cmd\r\n) else (\r\n    set CMDER_VSCODE_INIT_ARGS=%CMDER_ROOT%\\bin\\vscode_init_args.cmd\r\n)\r\n\r\nif not exist \"%CMDER_VSCODE_INIT_ARGS%\" (\r\n    echo Creating initial \"%CMDER_VSCODE_INIT_ARGS%\"...\r\n    copy \"%CMDER_ROOT%\\vendor\\bin\\vscode_init_args.cmd.default\" \"%CMDER_VSCODE_INIT_ARGS%\"\r\n) else (\r\n    call \"%CMDER_VSCODE_INIT_ARGS%\"\r\n)\r\n\r\nIF [%1] == [] (\r\n    REM -- manually opened console (Ctrl + Shift + `) --\r\n    CALL \"%~dp0..\\init.bat\"\r\n) ELSE (\r\n    REM -- task --\r\n    CALL cmd %*\r\n    exit\r\n)\r\n"
  },
  {
    "path": "vendor/bin/vscode_init_args.cmd.default",
    "content": "@echo off\n\nrem Below are the default Cmder session settings:\nrem\nrem See \"%CMDER_ROOT%\\README.md\" for details on these settings.\nrem\nrem `Cmder.exe` Arguments:\nrem ----------------------\nrem \nrem `/c [cmder_user_cfg_root]\nrem set cmder_user_bin=[cmder_user_cfg_root]\\bin\nrem set cmder_user_config=[cmder_user_cfg_root]\\config\nrem\nrem `init.bat` Arguments\nrem --------------------\nrem\nrem `/d`\nrem debug_output=0\nrem\nrem `/v`\nrem verbose_output=0\nrem\nrem `/f`\nrem fast_init=0\nrem\nrem `/nix_tools`\nrem nix_tools=1\nrem\nrem `/t`\nrem time_init=0\nrem\nrem `/max_depth`\nrem max_depth=1\nrem\nrem `/user_aliases`\nrem user_aliases=\nrem\nrem `/git_install_root`\nrem GIT_INSTALL_ROOT=\nrem\nrem `/home`\nrem HOME=\nrem\nrem `/svn_ssh`\nrem SVN_SSH=\n\necho Applying Cmder VSCode settings from '%~0'...\n\nif defined CMDER_CONFIGURED (\n    rem Set Cmder settings here for when VSCode is launched inside Cmder.\n    set verbose_output=1\n) else (\n    rem Set Cmder settings here for when VSCode is launched from outside Cmder.\n    set verbose_output=1\n)\n\nrem Set all required Cmder VSCode terminal environment settings above this line.\necho Applying Cmder VSCode settings is complete!\n"
  },
  {
    "path": "vendor/clink.lua",
    "content": "-- default script for clink, called by init.bat when injecting clink\n\n-- !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED\n-- !!! Use \"%CMDER_ROOT%\\config\\<whatever>.lua\" to add your lua startup scripts\n\n-- luacheck: globals CMDER_SESSION\n-- luacheck: globals uah_color cwd_color lamb_color clean_color dirty_color conflict_color unknown_color\n-- luacheck: globals prompt_homeSymbol prompt_lambSymbol prompt_type prompt_useHomeSymbol prompt_useUserAtHost\n-- luacheck: globals prompt_singleLine prompt_includeVersionControl\n-- luacheck: globals prompt_overrideGitStatusOptIn\n-- luacheck: globals clink io.popenyield os.isdir settings.get\n\n-- At first, load the original clink.lua file\n-- this is needed as we set the script path to this dir and therefore the original\n-- clink.lua is not loaded.\nlocal clink_lua_file = clink.get_env('CMDER_ROOT')..'\\\\vendor\\\\clink\\\\clink.lua'\ndofile(clink_lua_file)\n\n-- now add our own things...\n\n\nlocal function get_uah_color()\n    return uah_color or \"\\x1b[1;33;49m\" -- Green = uah = [user]@[hostname]\nend\n\nlocal function get_cwd_color()\n    return cwd_color or \"\\x1b[1;32;49m\" -- Yellow cwd = Current Working Directory\nend\n\nlocal function get_lamb_color()\n    return lamb_color or \"\\x1b[1;30;49m\" -- Light Grey = Lambda Color\nend\n\n\nlocal function get_clean_color()\n    return clean_color or \"\\x1b[37;1m\" -- White, Bold\nend\n\n\nlocal function get_dirty_color()\n    return dirty_color or \"\\x1b[33;3m\" -- Yellow, Italic\nend\n\n\nlocal function get_conflict_color()\n    return conflict_color or \"\\x1b[31;1m\" -- Red, Bold\nend\n\nlocal function get_unknown_color()\n    return unknown_color or \"\\x1b[37;1m\" -- White, Bold\nend\n\n---\n-- Escapes special characters in a string.gsub `find` parameter, so that it\n-- can be matched as a literal plain text string, i.e. disable Lua pattern\n-- matching.  See \"Patterns\" (https://www.lua.org/manual/5.2/manual.html#6.4.1).\n-- @param {string} text Text to escape\n-- @returns {string} Escaped text\n---\nlocal function escape_gsub_find_arg(text)\n    return text and text:gsub(\"([-+*?.%%()%[%]$^])\", \"%%%1\") or \"\"\nend\n\n---\n-- Escapes special characters in a string.gsub `replace` parameter, so that it\n-- can be replaced as a literal plain text string, i.e. disable Lua pattern\n-- matching.  See \"Patterns\" (https://www.lua.org/manual/5.2/manual.html#6.4.1).\n-- @param {string} text Text to escape\n-- @returns {string} Escaped text\n---\nlocal function escape_gsub_replace_arg(text)\n    return text and text:gsub(\"%%\", \"%%%%\") or \"\"\nend\n\n---\n-- Perform string.sub, but disable Lua pattern matching and just treat both\n-- the `find` and `replace` parameters as a literal plain text replacement.\n-- @param {string} str Text in which to perform find and replace\n-- @param {string} find Text to find (plain text; not a Lua pattern)\n-- @param {string} replace Replacement text (plain text; not a Lua pattern)\n-- @returns {string} Copy of the input `str` with `find` replaced by `replace`\n---\nlocal function gsub_plain(str, find, replace)\n    return string.gsub(str, escape_gsub_find_arg(find), escape_gsub_replace_arg(replace))\nend\n\n-- Extracts only the folder name from the input Path\n-- Ex: Input C:\\Windows\\System32 returns System32\n---\nlocal function get_folder_name(path)\n    local reversePath = string.reverse(path)\n    local slashIndex = string.find(reversePath, \"\\\\\")\n    return string.sub(path, string.len(path) - slashIndex + 2)\nend\n\n\n---\n-- Forward/backward compatibility for Clink asynchronous prompt filtering.\n-- With Clink v1.2.10 and higher this lets git status run in the background and\n-- refresh the prompt when it finishes, to eliminate waits in large git repos.\n---\nlocal io_popenyield\nlocal clink_promptcoroutine\nlocal cached_info = {}\nif clink.promptcoroutine and io.popenyield then\n    io_popenyield = io.popenyield\n    clink_promptcoroutine = clink.promptcoroutine\nelse\n    io_popenyield = io.popen\n    clink_promptcoroutine = function (func)\n        return func(false)\n    end\nend\n\n\n---\n-- Global variable so other Lua scripts can detect whether they're in a Cmder\n-- shell session.\n---\nCMDER_SESSION = true\n\n\n---\n-- Setting the prompt in clink means that commands which rewrite the prompt do\n-- not destroy our own prompt. It also means that started cmds (or batch files\n-- which echo) don't get the ugly '{lamb}' shown.\n---\nlocal function set_prompt_filter()\n    -- get_cwd() is differently encoded than the clink.prompt.value, so everything other than\n    -- pure ASCII will get garbled. So try to parse the current directory from the original prompt\n    -- and only if that doesn't work, use get_cwd() directly.\n    -- The matching relies on the default prompt which ends in X:\\PATH\\PATH>\n    -- (no network path possible here!)\n    local old_prompt = clink.prompt.value\n    local cwd = old_prompt:match('.*(.:[^>]*)>')\n    if cwd == nil then cwd = clink.get_cwd() end\n\n    -- environment systems like pythons virtualenv change the PROMPT and usually\n    -- set some variable. But the variables are differently named and we would never\n    -- get them all, so try to parse the env name out of the PROMPT.\n    -- envs are usually put in round or square parentheses and before the old prompt\n    local env = old_prompt:match('.*%(([^%)]+)%).+:')\n    -- also check for square brackets\n    if env == nil then env = old_prompt:match('.*%[([^%]]+)%].+:') end\n\n    -- Much of the below was 'borrowed' from https://github.com/AmrEldib/cmder-powerline-prompt\n    -- Symbol displayed for the home dir in the prompt.\n    if not prompt_homeSymbol then\n        prompt_homeSymbol = \"~\"\n    end\n\n    -- Symbol displayed in the new line below the prompt.\n    if not prompt_lambSymbol then\n        prompt_lambSymbol = \"λ\"\n    end\n\n    if not prompt_type then\n        prompt_type = \"full\"\n    end\n\n    if prompt_useHomeSymbol == nil then\n        prompt_useHomeSymbol = false\n    end\n\n    if prompt_useUserAtHost == nil then\n        prompt_useUserAtHost = false\n    end\n\n    if prompt_singleLine == nil then\n        prompt_singleLine = false\n    end\n\n    if prompt_includeVersionControl == nil then\n        prompt_includeVersionControl = true\n    end\n\n    if prompt_type == 'folder' then\n        cwd = get_folder_name(cwd)\n    end\n\n    if prompt_useHomeSymbol and string.find(cwd, clink.get_env(\"HOME\")) then\n        cwd = gsub_plain(cwd, clink.get_env(\"HOME\"), prompt_homeSymbol)\n    end\n\n    local uah = ''\n    if prompt_useUserAtHost then\n        uah = clink.get_env(\"USERNAME\") .. \"@\" .. clink.get_env(\"COMPUTERNAME\") .. ' '\n    end\n\n    local cr = \"\\n\"\n    if prompt_singleLine then\n        cr = ' '\n    end\n\n    cr = \"\\x1b[0m\" .. cr\n\n    if env ~= nil then env = \"(\"..env..\") \" else env = \"\" end\n\n    if uah ~= '' then uah = get_uah_color() .. uah end\n    if cwd ~= '' then cwd = get_cwd_color() .. cwd end\n\n    local version_control = prompt_includeVersionControl and \"{git}{hg}{svn}\" or \"\"\n\n    local prompt = \"{uah}{cwd}\" .. version_control .. cr .. get_lamb_color() .. \"{env}{lamb}\\x1b[0m \"\n    prompt = gsub_plain(prompt, \"{uah}\", uah)\n    prompt = gsub_plain(prompt, \"{cwd}\", cwd)\n    prompt = gsub_plain(prompt, \"{env}\", env)\n    clink.prompt.value = gsub_plain(prompt, \"{lamb}\", prompt_lambSymbol)\nend\n\nlocal function percent_prompt_filter()\n    clink.prompt.value = gsub_plain(clink.prompt.value, \"{percent}\", \"%\")\nend\n\n---\n-- Resolves closest directory location for specified directory.\n-- Navigates subsequently up one level and tries to find specified directory\n-- @param  {string} path    Path to directory will be checked. If not provided\n--                          current directory will be used\n-- @param  {string} dirname Directory name to search for\n-- @return {string} Path to specified directory or nil if such dir not found\nlocal function get_dir_contains(path, dirname)\n\n    -- return parent path for specified entry (either file or directory)\n    local function pathname(path) -- luacheck: ignore 432\n        local prefix = \"\"\n        local i = path:find(\"[\\\\/:][^\\\\/:]*$\")\n        if i then\n            prefix = path:sub(1, i-1)\n        end\n        return prefix\n    end\n\n    -- Navigates up one level\n    local function up_one_level(path) -- luacheck: ignore 432\n        if path == nil then path = '.' end\n        if path == '.' then path = clink.get_cwd() end\n        return pathname(path)\n    end\n\n    -- Checks if provided directory contains git directory\n    local function has_specified_dir(path, specified_dir) -- luacheck: ignore 432\n        if path == nil then path = '.' end\n        local found_dirs = clink.find_dirs(path..'/'..specified_dir)\n        if #found_dirs > 0 then return true end\n        return false\n    end\n\n    -- Set default path to current directory\n    if path == nil then path = '.' end\n\n    -- If we're already have .git directory here, then return current path\n    if has_specified_dir(path, dirname) then\n        return path..'/'..dirname\n    else\n        -- Otherwise go up one level and make a recursive call\n        local parent_path = up_one_level(path)\n        if parent_path == path then\n            return nil\n        else\n            return get_dir_contains(parent_path, dirname)\n        end\n    end\nend\n\n-- adapted from from clink-completions' git.lua\nlocal function get_git_dir(path)\n\n    -- return parent path for specified entry (either file or directory)\n    local function pathname(path) -- luacheck: ignore 432\n        local prefix = \"\"\n        local i = path:find(\"[\\\\/:][^\\\\/:]*$\")\n        if i then\n            prefix = path:sub(1, i-1)\n        end\n\n        return prefix\n    end\n\n    -- Checks if provided directory contains git directory\n    local function has_git_dir(dir)\n        return clink.is_dir(dir..'/.git') and dir..'/.git'\n    end\n\n    local function has_git_file(dir)\n        local gitfile = io.open(dir..'/.git')\n        if not gitfile then return false end\n\n        local line = gitfile:read() or ''\n        local git_dir = line:match('gitdir: (.*)')\n        gitfile:close()\n\n        if os.isdir then -- only available in Clink v1.0.0 and higher\n            if git_dir and os.isdir(git_dir) then\n                return git_dir\n            end\n        end\n\n        return git_dir and dir..'/'..git_dir\n    end\n\n    -- Set default path to current directory\n    if not path or path == '.' then path = clink.get_cwd() end\n\n    -- Calculate parent path now otherwise we won't be\n    -- able to do that inside of logical operator\n    local parent_path = pathname(path)\n\n    return has_git_dir(path)\n        or has_git_file(path)\n        -- Otherwise go up one level and make a recursive call\n        or (parent_path ~= path and get_git_dir(parent_path) or nil)\nend\n\nlocal function get_hg_dir(path)\n    return get_dir_contains(path, '.hg')\nend\n\nlocal function get_svn_dir(path)\n    return get_dir_contains(path, '.svn')\nend\n\n---\n-- Find out current branch\n-- @return {nil|git branch name}\n---\nlocal function get_git_branch(git_dir, fast)\n    git_dir = git_dir or get_git_dir()\n\n    -- If git directory not found then we're probably outside of repo\n    -- or something went wrong. The same is when head_file is nil\n    local head_file = git_dir and io.open(git_dir..'/HEAD')\n    if not head_file then return end\n\n    local HEAD = head_file:read()\n    head_file:close()\n\n    -- If HEAD is missing, something is wrong.\n    if not HEAD then return end\n\n    -- if HEAD matches branch expression, then we're on named branch\n    -- otherwise it is a detached commit\n    local branch_name = HEAD:match('ref: refs/heads/(.+)')\n    if os.getenv(\"CLINK_DEBUG_GIT_REFTABLE\") then\n        branch_name = '.invalid'\n    end\n\n    -- If the branch name is \".invalid\" and the fast method wasn't requested,\n    -- then invoke git.exe to get accurate current branch info (slow method).\n    if branch_name == \".invalid\" and not fast then\n        local file\n        branch_name = nil\n\n        -- Handle the most common case first.\n        if not branch_name then\n            file = io_popenyield(\"git --no-optional-locks branch 2>nul\")\n            if file then\n                for line in file:lines() do\n                    local b = line:match(\"^%*%s+(.*)\")\n                    if b then\n                        b = b:match(\"^%((HEAD detached at .*)%)\") or b\n                        branch_name = b\n                        break\n                    end\n                end\n                file:close()\n            end\n        end\n\n        -- Handle the cases where \"git branch\" output is empty, but \"git\n        -- branch --show-current\" shows the branch name (e.g. a new repo).\n        if not branch_name then\n            file = io_popenyield(\"git --no-optional-locks branch --show-current 2>nul\")\n            if file then\n                for line in file:lines() do -- luacheck: ignore 512\n                    branch_name = line\n                    break\n                end\n                file:close()\n            end\n        end\n    else\n        branch_name = branch_name or 'HEAD detached at '..HEAD:sub(1, 7)\n    end\n\n    return branch_name\nend\n\nlocal function get_git_remote(git_dir, branch)\n    if not git_dir then return nil end\n    if not branch then return nil end\n\n    local file = io.open(git_dir..\"/config\", 'r')\n    if not file then return nil end\n\n    local git_config = {}\n\n    local function get_git_config_value(section, param)\n        return git_config[section] and git_config[section][param] or nil\n    end\n\n    local section\n    for line in file:lines() do\n        if (line:sub(1,1) == \"[\" and line:sub(-1) == \"]\") then\n            if (line:sub(2,5) == \"lfs \") then\n                section = nil -- skip LFS entries as there can be many and we never use them\n            else\n                section = line:sub(2,-2)\n                git_config[section] = git_config[section] or {}\n            end\n        elseif section then\n            local param, value = line:match('^%s-([%w|_]+)%s-=%s+(.+)$')\n            if (param and value ~= nil) then\n                git_config[section][param] = value\n            end\n        end\n    end\n    file:close()\n\n    local remote_to_push = get_git_config_value('branch \"'..branch..'\"', 'remote') or ''\n    local remote_ref = get_git_config_value('remote \"'..remote_to_push..'\"', 'push') or\n            get_git_config_value('push', 'default')\n\n    local text = remote_to_push\n    if remote_ref then text = text..'/'..remote_ref end\n\n    return text ~= '' and text or nil\nend\n\n---\n-- Find out current branch information\n-- @return {false|mercurial branch information}\n---\nlocal function get_hg_branch()\n    -- Return the branch information.\n    local file = io.popen(\"hg branch 2>nul\")\n    if not file then\n        return false\n    end\n\n    for line in file:lines() do\n        local m = line:match(\"(.+)$\")\n        if m then\n            file:close()\n            return m\n        end\n    end\n    file:close()\n\n    return false\nend\n\n---\n-- Find out current branch\n-- @return {false|svn branch name}\n---\nlocal function get_svn_branch()\n    local file = io_popenyield(\"svn info 2>nul\")\n    if not file then\n        return false\n    end\n\n    for line in file:lines() do\n        local m = line:match(\"^Relative URL:\")\n        if m then\n            file:close()\n            return line:sub(line:find(\"/\")+1,line:len())\n        end\n    end\n    file:close()\n\n    return false\nend\n\n---\n-- Get the status and conflict status of working dir\n-- @return {bool <status>, bool <is_conflict>}\n---\nlocal function get_git_status(git_dir)\n    local file = io_popenyield(\"git --no-optional-locks status --porcelain 2>nul\")\n    if not file then\n        return {}\n    end\n\n    local conflict_found = false\n    local is_status = true\n    for line in file:lines() do\n        local code = line:sub(1, 2)\n        -- print (string.format(\"code: %s, line: %s\", code, line))\n        if code == \"DD\" or code == \"AU\" or code == \"UD\" or code == \"UA\" or code == \"DU\" or code == \"AA\" or code == \"UU\" then -- luacheck: no max line length\n            is_status = false\n            conflict_found = true\n            break\n        -- unversioned files are ignored, comment out 'code ~= \"!!\"' to unignore them\n        elseif code ~= \"!!\" and code ~= \"??\" then\n            is_status = false\n        end\n    end\n    file:close()\n\n    local branch = get_git_branch(git_dir, false--[[fast]])\n    local remote = get_git_remote(git_dir, branch)\n\n    return { status = is_status, branch = branch, remote = remote, conflict = conflict_found }\nend\n\n---\n-- Get the status of working dir\n-- @return {bool}\n---\nlocal function get_hg_status()\n    -- The default is to just use the branch name, but you could e.g. use the\n    -- \"hg-prompt\" extension to get more information, such as any applied mq\n    -- patches.  Here's an example of that:\n    -- \"hg prompt \\\"{branch}{status}{|{patch}}{update}\\\"\"\n    local pipe = io_popenyield(\"hg status -amrd 2>&1\")\n    if not pipe then\n        return { error = true }\n    end\n\n    local output = pipe:read('*all')\n    pipe:close()\n\n    local dirty = (output ~= nil and output ~= \"\")\n    return { clean = not dirty }\nend\n\n---\n-- Get the status of working dir\n-- @return {bool}\n---\nlocal function get_svn_status()\n    local file = io_popenyield(\"svn status -q 2>nul\")\n    if not file then\n        return { error = true }\n    end\n\n    for line in file:lines() do -- luacheck: ignore 512, no unused\n        file:close()\n        return { clean = false }\n    end\n    file:close()\n\n    return { clean = true }\nend\n\n---\n-- Get the status of working dir\n-- @return {bool}\n---\nlocal last_git_status_time = nil\nlocal last_git_status_setting = true\nlocal function get_git_status_setting()\n    local time = os.clock()\n    local last_time = last_git_status_time\n    last_git_status_time = time\n    if last_time and time >= 0 and time - last_time < 10 then\n        return last_git_status_setting\n    end\n\n    -- When async prompt filtering is available, check the\n    -- prompt_overrideGitStatusOptIn config setting for whether to ignore the\n    -- cmder.status and cmder.cmdstatus git config opt-in settings.\n    if clink.promptcoroutine and io.popenyield and settings.get(\"prompt.async\") then\n        if prompt_overrideGitStatusOptIn then\n            last_git_status_setting = true\n            return true\n        end\n    end\n\n    local gitStatusConfig = io_popenyield(\"git --no-pager config cmder.status 2>nul\")\n    if gitStatusConfig then\n        for line in gitStatusConfig:lines() do\n            if string.match(line, 'false') then\n                gitStatusConfig:close()\n                last_git_status_setting = false\n                return false\n            end\n        end\n        gitStatusConfig:close()\n    end\n\n    local gitCmdStatusConfig = io_popenyield(\"git --no-pager config cmder.cmdstatus 2>nul\")\n    if gitCmdStatusConfig then\n        for line in gitCmdStatusConfig:lines() do\n            if string.match(line, 'false') then\n                gitCmdStatusConfig:close()\n                last_git_status_setting = false\n                return false\n            end\n        end\n        gitCmdStatusConfig:close()\n    end\n\n    last_git_status_setting = true\n    return true\nend\n\n---\n-- Use a prompt coroutine to get git status in the background.\n-- Cache the info so we can reuse it next time to reduce flicker.\n---\nlocal function get_git_info_table(git_dir)\n    local info = clink_promptcoroutine(function ()\n        -- Use git status if allowed.\n        local cmderGitStatusOptIn = get_git_status_setting()\n        return cmderGitStatusOptIn and get_git_status(git_dir) or {}\n    end)\n    if not info then\n        info = cached_info.git_info or {}\n    else\n        cached_info.git_info = info\n    end\n    return info\nend\n\nlocal function git_prompt_filter()\n\n    -- Don't do any git processing if the prompt doesn't want to show git info.\n    if not clink.prompt.value:find(\"{git}\") then\n        return false\n    end\n\n    local git_dir = get_git_dir()\n    local color\n    if git_dir then\n        local branch = get_git_branch(git_dir, true--[[fast]])\n        if branch then\n            -- If in a different repo or branch than last time, discard cached info.\n            if cached_info.git_dir ~= git_dir or\n                    (branch ~= \".invalid\" and cached_info.git_branch ~= branch) then\n                cached_info.git_info = nil\n                cached_info.git_dir = git_dir\n                cached_info.git_branch = branch\n            end\n\n            -- If we're inside of git repo then try to detect current branch\n            -- Has branch => therefore it is a git folder, now figure out status\n            local gitInfo = get_git_info_table(git_dir)\n            local gitStatus = gitInfo.status\n            local gitConflict = gitInfo.conflict\n\n            -- Compensate for git reftables.\n            branch = gitInfo.branch or branch\n            if branch == \".invalid\" then\n                branch = \"Loading...\"\n            elseif gitInfo.remote then\n                branch = branch..\" -> \"..gitInfo.remote\n            end\n\n            -- Prevent an older clink-completions git_prompt.lua scripts from\n            -- modifying the prompt.\n            branch = \"\\x1b[10m\"..branch\n\n            if gitStatus == nil then\n                color = get_unknown_color()\n            elseif gitStatus then\n                color = get_clean_color()\n            else\n                color = get_dirty_color()\n            end\n\n            if gitConflict then\n                color = get_conflict_color()\n            end\n\n            local result = \" \"..color..\"(\"..branch..\")\"\n            clink.prompt.value = gsub_plain(clink.prompt.value, \"{git}\", result)\n            return false\n        end\n    end\n\n    -- No git present or not in git file\n    clink.prompt.value = gsub_plain(clink.prompt.value, \"{git}\", \"\")\n    return false\nend\n\nlocal function get_hg_info_table()\n    local info = clink_promptcoroutine(function ()\n        return get_hg_status() or {}\n    end)\n    if not info then\n        info = cached_info.hg_info or {}\n    else\n        cached_info.hg_info = info\n    end\n    return info\nend\n\nlocal function hg_prompt_filter()\n\n    -- Don't do any hg processing if the prompt doesn't want to show hg info.\n    if not clink.prompt.value:find(\"{hg}\") then\n        return false\n    end\n\n    local hg_dir = get_hg_dir()\n    if hg_dir then\n        local branch = get_hg_branch()\n        if branch and\n           string.sub(branch,1,7) ~= \"abort: \" and             -- not an HG working copy\n           (not string.find(branch, \"is not recognized\")) then -- 'hg' not in path\n            -- If in a different repo or branch than last time, discard cached info\n            if cached_info.hg_dir ~= hg_dir or cached_info.hg_branch ~= branch then\n                cached_info.hg_info = nil\n                cached_info.hg_dir = hg_dir\n                cached_info.hg_branch = branch\n            end\n\n            local hgInfo = get_hg_info_table()\n\n            local color\n            if not hgInfo or hgInfo.error then\n                color = get_unknown_color()\n            elseif hgInfo.clean then\n                color = get_clean_color()\n            else\n                color = get_dirty_color()\n            end\n\n            local result = \" \"..color..\"(\"..branch..\")\"\n            clink.prompt.value = gsub_plain(clink.prompt.value, \"{hg}\", result)\n            return false\n        end\n    end\n\n    -- No hg present or not in hg repo\n    clink.prompt.value = gsub_plain(clink.prompt.value, \"{hg}\", \"\")\nend\n\nlocal function get_svn_info_table()\n    local info = clink_promptcoroutine(function ()\n        return get_svn_status() or {}\n    end)\n    if not info then\n        info = cached_info.svn_info or {}\n    else\n        cached_info.svn_info = info\n    end\n    return info\nend\n\nlocal function svn_prompt_filter()\n\n    -- Don't do any svn processing if the prompt doesn't want to show svn info.\n    if not clink.prompt.value:find(\"{svn}\") then\n        return false\n    end\n\n    local svn_dir = get_svn_dir()\n    if svn_dir then\n        -- if we're inside of svn repo then try to detect current branch\n        local branch = get_svn_branch()\n        if branch then\n            -- If in a different repo or branch than last time, discard cached info\n            if cached_info.svn_dir ~= svn_dir or cached_info.svn_branch ~= branch then\n                cached_info.svn_info = nil\n                cached_info.svn_dir = svn_dir\n                cached_info.svn_branch = branch\n            end\n\n            local svnInfo = get_svn_info_table()\n\n            local color\n            if not svnInfo or svnInfo.error then\n                color = get_unknown_color()\n            elseif svnInfo.clean then\n                color = get_clean_color()\n            else\n                color = get_dirty_color()\n            end\n\n            clink.prompt.value = gsub_plain(clink.prompt.value, \"{svn}\", \" \"..color..\"(\"..branch..\")\")\n            return false\n        end\n    end\n\n    -- No svn present or not in svn file\n    clink.prompt.value = gsub_plain(clink.prompt.value, \"{svn}\", \"\")\n    return false\nend\n\n-- insert the set_prompt at the very beginning so that it runs first\nclink.prompt.register_filter(set_prompt_filter, 1)\nclink.prompt.register_filter(hg_prompt_filter, 50)\nclink.prompt.register_filter(git_prompt_filter, 50)\nclink.prompt.register_filter(svn_prompt_filter, 50)\nclink.prompt.register_filter(percent_prompt_filter, 51)\n\nlocal completions_dir = clink.get_env('CMDER_ROOT')..'/vendor/clink-completions/'\n-- Execute '.init.lua' first to ensure package.path is set properly\ndofile(completions_dir..'.init.lua')\nfor _,lua_module in ipairs(clink.find_files(completions_dir..'*.lua')) do\n    -- Skip files that starts with _. This could be useful if some files should be ignored\n    if not string.match(lua_module, '^_.*') then\n        local filename = completions_dir..lua_module\n        -- use dofile instead of require because require caches loaded modules\n        -- so config reloading using Alt-Q won't reload updated modules.\n        dofile(filename)\n    end\nend\n\nif clink.get_env('CMDER_USER_CONFIG') then\n    local cmder_config_dir = clink.get_env('CMDER_ROOT')..'/config/'\n    for _,lua_module in ipairs(clink.find_files(cmder_config_dir..'*.lua')) do\n        local filename = cmder_config_dir..lua_module\n        -- use dofile instead of require because require caches loaded modules\n        -- so config reloading using Alt-Q won't reload updated modules.\n        dofile(filename)\n    end\nend\n"
  },
  {
    "path": "vendor/clink_settings.default",
    "content": "# For explanation of these and other settings see:\n# https://chrisant996.github.io/clink/clink.html\n\n# name: Expand envvars when completing\n# type: boolean\nmatch.expand_envvars = True\n\n# name: Sets how command history expansion is applied\n# type: enum\n# options: off,on,not_squoted,not_dquoted,not_quoted\nhistory.expand_mode = not_dquoted\n\n# name: Skip adding lines prefixed with whitespace\n# type: boolean\nhistory.ignore_space = True\n\n# name: The number of history lines to save\n# type: integer\nhistory.max_lines = 25000\n\n# name: Share history between instances\n# type: boolean\nhistory.shared = False\n\n# name: Auto-answer terminate prompt\n# type: enum\n# options: off,answer_yes,answer_no\ncmd.auto_answer = answer_yes\n\n# name: Doskey completions\n# type: color\ncolor.doskey = yellow\n"
  },
  {
    "path": "vendor/cmder.sh",
    "content": "# DO NOT EDIT THIS FILE IT WILL BE OVERWRITTEN ON UPDATE\n#\n# Add portable user customizations ${CMDER_ROOT}/config/user_profile.sh,\n# these customizations will follow Cmder if $CMDER_ROOT is copied\n# to another machine.\n#\n# Add system specific users customizations to $HOME/.bashrc, these\n# customizations will not follow Cmder to another machine.\n\nfunction runProfiled {\n  unset profile_d_scripts\n  pushd \"${1}\" >/dev/null\n  profile_d_scripts=$(ls *.sh 2>/dev/null)\n\n  if [ ! \"x${profile_d_scripts}\" = \"x\" ] ; then\n    for x in ${profile_d_scripts} ; do\n      # echo Sourcing \"${1}/${x}\"...\n      . \"${1}/${x}\"\n    done\n  fi\n  popd >/dev/null\n}\n\n# We do this for bash as admin sessions since $CMDER_ROOT is not being set\nif [ \"$CMDER_ROOT\" == \"\" ] ; then\n    case \"$ConEmuDir\" in *\\\\*) CMDER_ROOT=$( cd \"$(cygpath -u \"$ConEmuDir\")/../..\" ; pwd );; esac\nelse\n    case \"$CMDER_ROOT\" in *\\\\*) CMDER_ROOT=\"$(cygpath -u \"$CMDER_ROOT\")\";; esac\nfi\n\n# Remove any trailing '/'\nCMDER_ROOT=$(echo $CMDER_ROOT | sed 's:/*$::')\n\nexport CMDER_ROOT\n\nif [ -f \"/c/Program Files/Git/cmd/git.exe\" ] ; then\n    GIT_INSTALL_ROOT=\"/c/Program Files/Git\"\nelif [ -f \"/c/Program Files(x86)/Git/cmd/git.exe\" ] ; then\n    GIT_INSTALL_ROOT=\"/c/Program Files(x86)/Git\"\nelif [ -f \"${CMDER_ROOT}/vendor/git-for-windows/cmd/git.exe\" ] ; then\n    GIT_INSTALL_ROOT=${CMDER_ROOT}/vendor/git-for-windows\nfi\n\nif [[ ! \"$PATH\" =~ \"${GIT_INSTALL_ROOT}/bin:\" ]] ; then\n  PATH=\"${GIT_INSTALL_ROOT}/bin:$PATH\"\nfi\n\nPATH=\"${CMDER_ROOT}/bin:${CMDER_ROOT}/vendor/bin:$PATH:${CMDER_ROOT}\"\n\nexport PATH\n\n# Drop *.sh or *.zsh files into \"${CMDER_ROOT}\\config\\profile.d\"\n# to source them at startup.\nif [ ! -d \"${CMDER_ROOT}/config/profile.d\" ] ; then\n  mkdir -p \"${CMDER_ROOT}/config/profile.d\"\nfi\n\nif [ -d \"${CMDER_ROOT}/config/profile.d\" ] ; then\n  runProfiled  \"${CMDER_ROOT}/config/profile.d\"\nfi\n\nif [ -d \"${CMDER_USER_CONFIG}/profile.d\" ] ; then\n  runProfiled  \"${CMDER_USER_CONFIG}/profile.d\"\nfi\n\n\n# Renaming to \"config\\user_profile.sh\" to \"user_profile.sh\" for consistency.\nif [ -f \"$CMDER_ROOT/config/user-profile.sh\" ] ; then\n  mv \"$CMDER_ROOT/config/user-profile.sh\" \"$CMDER_ROOT/config/user_profile.sh\"\nfi\n\nCmderUserProfilePath=\"${CMDER_ROOT}/config/user_profile.sh\"\nif [ -f \"${CMDER_ROOT}/config/user_profile.sh\" ] ; then\n    . \"${CMDER_ROOT}/config/user_profile.sh\"\nfi\n\nif [ \"${CMDER_USER_CONFIG}\" != \"\" ] ; then\n  # Renaming to \"config\\user_profile.sh\" to \"user_profile.sh\" for consistency.\n  if [ -f \"$CMDER_USER_CONFIG/user-profile.sh\" ] ; then\n    mv \"$CMDER_USER_CONFIG/user-profile.sh\" \"$CMDER_USER_CONFIG/user_profile.sh\"\n  fi\n\n  export PATH=\"${CMDER_USER_CONFIG}/bin:$PATH\"\n\n  CmderUserProfilePath=\"${CMDER_USER_CONFIG}/user_profile.sh\"\n  if [ -f \"${CMDER_USER_CONFIG}/user_profile.sh\" ] ; then\n    . \"${CMDER_USER_CONFIG}/user_profile.sh\"\n  fi\nfi\n\nif [ ! -f \"${CmderUserProfilePath}\" ] ; then\n    echo Creating user startup file: \"${CmderUserProfilePath}\"\n    cp \"${CMDER_ROOT}/vendor/user_profile.sh.default\" \"${CmderUserProfilePath}\"\nfi\n\n# Source the users .bashrc file if it exists\nif [ -f \"${HOME}/.bashrc\" ] ; then\n    . \"${HOME}/.bashrc\"\nfi\n"
  },
  {
    "path": "vendor/cmder_exinit",
    "content": "# Copy this file to your non integrated *nix-like environment,\n# Cygwin/MSys2/Git for Windows SDK, installs '/etc/profile.d/'\n# folder to integrate the externally installed Unix like environment\n# into Cmder so it has access to settings stored in Cmder/config\n# folder when launched.\n#\n# The destination file extension depends on the shell you use.  For example:\n#\n# bash - Copy to /etc/profile.d/cmder_exinit.sh\n# zsh  - Copy to /etc/profile.d/cmder_exinit.zsh\n# Add portable user customizations ${CMDER_ROOT}/config/user-profile.sh or\n# add whole config scripts to ${CMDER_ROOT}/config/profile.d both will be sourced\n# from this file and be applied to the environment at startup.\n#\n# These customizations will follow Cmder if $CMDER_ROOT is copied\n# to another machine.\n#\n# Add system specific users customizations to $HOME/.bashrc, these\n# customizations will not follow Cmder to another machine.\n\n# # Uncomment and edit the CMDER_ROOT line to use Cmder/config even when launched\n# # from outside Cmder.\n# CMDER_ROOT=${USERPROFILE}/cmder  # This is not required if launched from Cmder.\n\nfunction runProfiled {\n  unset profile_d_scripts\n  pushd \"${1}\" >/dev/null\n\n  if [ ! \"x${ZSH_VERSION}\" = \"x\"  ]; then\n    profile_d_scripts=$(ls *.zsh 2>/dev/null)\n  elif [ ! \"x${BASH_VERSION}\" = \"x\"  ]; then\n    profile_d_scripts=$(ls *.sh 2>/dev/null)\n  fi\n\n  if [ ! \"x${profile_d_scripts}\" = \"x\" ] ; then\n    for x in ${profile_d_scripts} ; do\n      echo Sourcing \"${1}/${x}\"...\n      . \"${1}/${x}\"\n    done\n  fi\n  popd >/dev/null\n}\n\n# Check that we haven't already been sourced.\n[[ -z ${CMDER_EXINIT} ]] && CMDER_EXINIT=\"1\" || return\n\n# We do this for bash as admin sessions since $CMDER_ROOT is not being set\nif [ \"$CMDER_ROOT\" = \"\" -a \"$ConEmuDir\" != \"\" ] ; then\n  if [ -d \"${ConEmuDir}../../vendor\" ] ; then\n    case \"$ConEmuDir\" in *\\\\*) CMDER_ROOT=$( cd \"$(cygpath -u \"$ConEmuDir\")/../..\" ; pwd );; esac\n  else\n    echo \"Running in ConEmu without Cmder, skipping Cmder integration.\"\n  fi\nelif [ \"$CMDER_ROOT\" != \"\" ] ; then\n  case \"$CMDER_ROOT\" in *\\\\*) CMDER_ROOT=\"$(cygpath -u \"$CMDER_ROOT\")\";; esac\nfi\n\nif [ ! \"$CMDER_ROOT\" = \"\" ] ; then\n  # Remove any trailing '/'\n  CMDER_ROOT=$(echo $CMDER_ROOT | sed 's:/*$::')\n\n  echo \"Using \\\"CMDER_ROOT\\\" at \\\"${CMDER_ROOT}\\\".\"\n\n  export CMDER_ROOT\n\n  PATH=${CMDER_ROOT}/bin:${CMDER_ROOT}/vendor/bin:$PATH:${CMDER_ROOT}\n\n  export PATH\n\n  # Drop *.sh or *.zsh files into \"${CMDER_ROOT}\\config\\profile.d\"\n  # to source them at startup.\n  if [ ! -d \"${CMDER_ROOT}/config/profile.d\" ] ; then\n    mkdir -p \"${CMDER_ROOT}/config/profile.d\"\n  fi\n\n  if [ -d \"${CMDER_ROOT}/config/profile.d\" ] ; then\n    runProfiled  \"${CMDER_ROOT}/config/profile.d\"\n  fi\n\n  if [ -d \"${CMDER_USER_CONFIG}/profile.d\" ] ; then\n    runProfiled  \"${CMDER_USER_CONFIG}/profile.d\"\n  fi\n\n\n  # Renaming to \"config\\user_profile.sh\" to \"user_profile.sh\" for consistency.\n  if [ -f \"$CMDER_ROOT/config/user-profile.sh\" ] ; then\n    mv \"$CMDER_ROOT/config/user-profile.sh\" \"$CMDER_ROOT/config/user_profile.sh\"\n  fi\n\n  CmderUserProfilePath=\"${CMDER_ROOT}/config/user_profile.sh\"\n  if [ -f \"${CMDER_ROOT}/config/user_profile.sh\" ] ; then\n      . \"${CMDER_ROOT}/config/user_profile.sh\"\n  fi\n\n  if [ \"${CMDER_USER_CONFIG}\" != \"\" ] ; then\n    # Renaming to \"config\\user_profile.sh\" to \"user_profile.sh\" for consistency.\n    if [ -f \"$CMDER_USER_CONFIG/user-profile.sh\" ] ; then\n      mv \"$CMDER_USER_CONFIG/user-profile.sh\" \"$CMDER_USER_CONFIG/user_profile.sh\"\n    fi\n\n    export PATH=${CMDER_USER_CONFIG}/bin:$PATH\n\n    CmderUserProfilePath=\"${CMDER_USER_CONFIG}/user_profile.sh\"\n    if [ -f \"${CMDER_USER_CONFIG}/user_profile.sh\" ] ; then\n      . \"${CMDER_USER_CONFIG}/user_profile.sh\"\n    fi\n  fi\n\n  if [ ! -f \"${CmderUserProfilePath}\" ] ; then\n      echo Creating user startup file: \"${CmderUserProfilePath}\"\n      cp \"${CMDER_ROOT}/vendor/user_profile.sh.default\" \"${CmderUserProfilePath}\"\n  fi\nfi\n"
  },
  {
    "path": "vendor/cmder_prompt_config.lua.default",
    "content": "-- All of the below was 'borrowed' from https://github.com/AmrEldib/cmder-powerline-prompt\n\n--- REQUIRED. config_prompt_type is whether the displayed prompt is the full path or only the folder name\n -- Use:\n -- \"full\" for full path like C:\\Windows\\System32\n -- \"folder\" for folder name only like System32\n -- default is full\nprompt_type = \"full\"\n\n--- REQUIRED. config_prompt_useHomeSymbol is whether to show ~ instead of the full path to the user's home folder\n -- Use true or false\n -- default is false\nprompt_useHomeSymbol = false\n\n-- Symbols\n-- REQUIRED. Prompt displayed instead of user's home folder e.g. C:\\Users\\username\n -- default is '~'\nprompt_homeSymbol = \"~\"\n\n-- REQUIRED. Symbol displayed in the new line below the prompt.\n -- default is 'λ'\nprompt_lambSymbol = \"λ\"\n\n-- REQUIRED. Adds [user]@[host] to the beginning of the prompt like bash\n -- default is false\nprompt_useUserAtHost = false\n\n-- REQUIRED. If true prompt is a single line instead of default two line prompt.\n -- default is false\nprompt_singleLine = false\n\n-- OPTIONAL. If true then Cmder includes git, mercurial, and subversion status in the prompt.\n -- default is true\nprompt_includeVersionControl = true\n\n-- OPTIONAL. If true then always ignore the cmder.status and cmder.cmdstatus git config settings and run the git prompt commands in the background.\n -- default is false\n -- NOTE: This only takes effect if using Clink v1.2.10 or higher.\nprompt_overrideGitStatusOptIn = false\n\n-- Prompt Attributes\n--\n-- Colors: https://github.com/cmderdev/cmder/wiki/Customization#list-of-colors\n-- Effects: https://github.com/cmderdev/cmder/wiki/Customization#list-of-effects\n--\n-- Green:      \"\\x1b[1;32;49m\"\n-- Yellow:     \"\\x1b[1;33;49m\"\n-- Light Grey: \"\\x1b[1;30;49m\"\n\n-- Prompt Element Colors\nuah_color = \"\\x1b[1;33;49m\" -- Yellow uah = [user]@[hostname]\ncwd_color = \"\\x1b[1;32;49m\" -- Green cwd = Current Working Directory\nlamb_color = \"\\x1b[1;30;49m\" -- Light Grey = Lambda Color\nclean_color = \"\\x1b[37;1m\"\ndirty_color = \"\\x1b[33;3m\" -- Yellow, Italic\nconflict_color = \"\\x1b[31;1m\" -- Red, Bold\nunknown_color = \"\\x1b[37;1m\" -- White, Bold = No VCS Status Branch Color\n"
  },
  {
    "path": "vendor/git-prompt.sh",
    "content": "# Returns 1 if git status for Cmder is disabled, otherwise returns 0\nfunction getGitStatusSetting() {\n  local gitConfig\n\n  # Get all git config entries for the current repository without pager\n  gitConfig=$(git --no-pager config -l 2>/dev/null) || return 0  # treat failure as enabled\n\n  # Check if git status display for Cmder is disabled via config\n  # Matches: cmder.status=false or cmder.shstatus=false (Bash-specific)\n  if [[ $gitConfig =~ (^|$'\\n')cmder\\.(sh)?status=false($|$'\\n') ]]\n  then\n    return 1  # disabled\n  fi\n\n  return 0\n}\n\n# Prints current branch or detached HEAD short commit hash\nfunction getSimpleGitBranch() {\n  local gitDir\n  gitDir=$(git rev-parse --git-dir 2>/dev/null) || return 0\n\n  local headFile=\"$gitDir/HEAD\"\n  [ -f \"$headFile\" ] || return 0\n\n  local headContent\n  headContent=$(< \"$headFile\")\n  if [[ \"$headContent\" =~ ^ref:\\ refs/heads/(.+)$ ]]\n  then\n    echo \" (${BASH_REMATCH[1]})\"\n  else\n    echo \" (HEAD detached at ${headContent:0:7})\"\n  fi\n}\n\nif test -f /etc/profile.d/git-sdk.sh\nthen\n  TITLEPREFIX=SDK-${MSYSTEM#MINGW}\nelse\n  TITLEPREFIX=$MSYSTEM\nfi\n\nif test -f ~/.config/git/git-prompt.sh\nthen\n  if getGitStatusSetting\n  then\n    . ~/.config/git/git-prompt.sh\n  fi\nelse\n\n  # Setup OSC 133 shell integration for Windows Terminal\n  if [ -n \"$WT_SESSION\" ]; then\n    __cmder_prompt_command() {\n      local exit_code=$?\n      # Emit OSC 133;D to mark the end of command execution with exit code\n      printf '\\e]133;D;%s\\a' \"$exit_code\"\n      return $exit_code\n    }\n\n    __cmder_preexec() {\n      # Emit OSC 133;C to mark the start of command execution\n      printf '\\e]133;C\\a'\n    }\n\n    # Append to PROMPT_COMMAND to emit sequences just before each prompt\n    if [ -z \"$PROMPT_COMMAND\" ]; then\n      PROMPT_COMMAND=\"__cmder_prompt_command\"\n    else\n      PROMPT_COMMAND=\"__cmder_prompt_command;$PROMPT_COMMAND\"\n    fi\n\n    # Use DEBUG trap to emit OSC 133;C before command execution\n    trap '__cmder_preexec' DEBUG\n  fi\n\n  # Source: github.com/git-for-windows/build-extra/blob/main/git-extra/git-prompt.sh\n  PS1='\\[\\033]0;${TITLEPREFIX:+$TITLEPREFIX:}${PWD//[^[:ascii:]]/?}\\007\\]' # set window title to TITLEPREFIX (if set) and current working directory\n  # PS1=\"$PS1\"'\\n'               # new line (disabled)\n\n  if [ -n \"$WT_SESSION\" ]; then\n    # Emit OSC 133;A to mark the start of prompt\n    PS1=\"$PS1\"'\\e]133;A\\a'\n  fi\n\n  PS1=\"$PS1\"'\\[\\033[32m\\]'       # change to green and bold\n  PS1=\"$PS1\"'\\u@\\h '             # user@host<space>\n  PS1=\"$PS1${MSYSTEM:+\\[\\033[35m\\]$MSYSTEM }\" # show MSYSTEM in purple (if set)\n  PS1=\"$PS1\"'\\[\\033[1;33m\\]'     # change to dark yellow in bold\n  PS1=\"$PS1\"'\\w'                 # current working directory\n  if test -z \"$WINELOADERNOEXEC\"\n  then\n    GIT_EXEC_PATH=\"$(git --exec-path 2>/dev/null)\"\n    COMPLETION_PATH=\"${GIT_EXEC_PATH%/libexec/git-core}\"\n    COMPLETION_PATH=\"${COMPLETION_PATH%/lib/git-core}\"\n    COMPLETION_PATH=\"$COMPLETION_PATH/share/git/completion\"\n    if test -f \"$COMPLETION_PATH/git-prompt.sh\"\n    then\n      . \"$COMPLETION_PATH/git-completion.bash\"\n      if getGitStatusSetting\n      then\n        . \"$COMPLETION_PATH/git-prompt.sh\"\n        PS1=\"$PS1\"'\\[\\033[36m\\]'  # change color to cyan\n        PS1=\"$PS1\"'`__git_ps1`'   # bash function\n      else\n        PS1=\"$PS1\"'\\[\\033[37;1m\\]' # change color to white\n        PS1=\"$PS1\"'`getSimpleGitBranch`'\n      fi\n    fi\n  fi\n  PS1=\"$PS1\"'\\[\\033[0m\\]'        # reset color\n  PS1=\"$PS1\"'\\n'                 # new line\n  PS1=\"$PS1\"'\\[\\033[30;1m\\]'     # change color to grey in bold\n  PS1=\"$PS1\"'λ '                 # prompt: Cmder uses λ\n  PS1=\"$PS1\"'\\[\\033[0m\\]'        # reset color\n\n  if [ -n \"$WT_SESSION\" ]; then\n    # Emit OSC 133;B to mark the end of prompt\n    PS1=\"$PS1\"'\\[\\e]133;B\\a\\]'\n  fi\nfi\n\nMSYS2_PS1=\"$PS1\"                 # for detection by MSYS2 SDK's bash.basrc\n\n# Evaluate all user-specific Bash completion scripts (if any)\nif test -z \"$WINELOADERNOEXEC\"\nthen\n  for c in \"$HOME\"/bash_completion.d/*.bash\n  do\n    # Handle absence of any scripts (or the folder) gracefully\n    test ! -f \"$c\" ||\n    . \"$c\"\n  done\nfi\n"
  },
  {
    "path": "vendor/init.bat",
    "content": "@echo off\r\n\r\nset CMDER_INIT_START=%time%\r\n\r\n:: Init Script for cmd.exe shell\r\n:: Created as part of cmder project\r\n\r\n:: !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED\r\n:: !!! Use \"%CMDER_ROOT%\\config\\user_profile.cmd\" to add your own startup commands\r\n\r\n:: Use /v command line arg or set to > 0 for verbose output to aid in debugging.\r\nif not defined verbose_output set verbose_output=0\r\n\r\n:: Use /d command line arg or set to 1 for debug output to aid in debugging.\r\nif not defined debug_output set debug_output=0\r\n\r\n:: Use /t command line arg or set to 1 to display init time.\r\nif not defined time_init set time_init=0\r\n\r\n:: Use /f command line arg to speed up init at the expense of some functionality.\r\nif not defined fast_init set fast_init=0\r\n\r\n:: Use /max_depth 1-5 to set max recurse depth for calls to `enhance_path_recursive`\r\nif not defined max_depth set max_depth=1\r\n\r\n:: Add *nix tools to end of path. 0 turns off *nix tools, 2 adds *nix tools to the front of the path.\r\nif not defined nix_tools set nix_tools=1\r\n\r\nset \"CMDER_USER_FLAGS= \"\r\n\r\n:: Find root dir\r\nif not defined CMDER_ROOT (\r\n    if defined ConEmuDir (\r\n        for /f \"delims=\" %%i in (\"%ConEmuDir%\\..\\..\") do (\r\n            set \"CMDER_ROOT=%%~fi\"\r\n        )\r\n    ) else (\r\n        for /f \"delims=\" %%i in (\"%~dp0\\..\") do (\r\n            set \"CMDER_ROOT=%%~fi\"\r\n        )\r\n    )\r\n)\r\n\r\n:: Remove trailing '\\' from %CMDER_ROOT%\r\nif \"%CMDER_ROOT:~-1%\" == \"\\\" SET \"CMDER_ROOT=%CMDER_ROOT:~0,-1%\"\r\n\r\n:: Include Cmder libraries\r\ncall \"%cmder_root%\\vendor\\bin\\cexec.cmd\" /setpath\r\ncall \"%cmder_root%\\vendor\\lib\\lib_console\"\r\ncall \"%cmder_root%\\vendor\\lib\\lib_base\"\r\ncall \"%cmder_root%\\vendor\\lib\\lib_path\"\r\ncall \"%cmder_root%\\vendor\\lib\\lib_git\"\r\ncall \"%cmder_root%\\vendor\\lib\\lib_profile\"\r\n\r\n:var_loop\r\n    if \"%~1\" == \"\" (\r\n        goto :start\r\n    ) else if /i \"%1\" == \"/f\" (\r\n        set fast_init=1\r\n    ) else if /i \"%1\" == \"/t\" (\r\n        set time_init=1\r\n    ) else if /i \"%1\" == \"/v\" (\r\n        set verbose_output=1\r\n    ) else if /i \"%1\" == \"/d\" (\r\n        set debug_output=1\r\n    ) else if /i \"%1\" == \"/max_depth\" (\r\n        if \"%~2\" geq \"1\" if \"%~2\" leq \"5\" (\r\n            set \"max_depth=%~2\"\r\n            shift\r\n        ) else (\r\n            %print_error% \"'/max_depth' requires a number between 1 and 5!\"\r\n            exit /b\r\n        )\r\n    ) else if /i \"%1\" == \"/c\" (\r\n        if exist \"%~2\" (\r\n            if not exist \"%~2\\bin\" mkdir \"%~2\\bin\"\r\n            set \"cmder_user_bin=%~2\\bin\"\r\n            if not exist \"%~2\\config\\profile.d\" mkdir \"%~2\\config\\profile.d\"\r\n            set \"cmder_user_config=%~2\\config\"\r\n            shift\r\n        )\r\n    ) else if /i \"%1\" == \"/user_aliases\" (\r\n        if exist \"%~2\" (\r\n            set \"user_aliases=%~2\"\r\n            shift\r\n        )\r\n    ) else if /i \"%1\" == \"/git_install_root\" (\r\n        if exist \"%~2\" (\r\n            set \"GIT_INSTALL_ROOT=%~2\"\r\n            shift\r\n        ) else (\r\n            %print_error% \"The Git install root folder \"%~2\" that you specified does not exist!\"\r\n            exit /b\r\n        )\r\n    ) else if /i \"%1\" == \"/nix_tools\" (\r\n        if \"%2\" equ \"0\" (\r\n            REM Do not add *nix tools to path\r\n            set nix_tools=0\r\n            shift\r\n        ) else if \"%2\" equ \"1\" (\r\n            REM Add *nix tools to end of path\r\n            set nix_tools=1\r\n            shift\r\n        ) else if \"%2\" equ \"2\" (\r\n            REM Add *nix tools to front of path\r\n            set nix_tools=2\r\n            shift\r\n        )\r\n    ) else if /i \"%1\" == \"/home\" (\r\n        if exist \"%~2\" (\r\n            set \"HOME=%~2\"\r\n            shift\r\n        ) else (\r\n            %print_error% The home folder \"%2\" that you specified does not exist!\r\n            exit /b\r\n        )\r\n    ) else if /i \"%1\" == \"/svn_ssh\" (\r\n        set SVN_SSH=%2\r\n        shift\r\n    ) else (\r\n        set \"CMDER_USER_FLAGS=%1 %CMDER_USER_FLAGS%\"\r\n    )\r\n    shift\r\ngoto :var_loop\r\n\r\n:start\r\n:: Enable console related methods if verbose/debug is turned on\r\nif %debug_output% gtr 0 (set print_debug=%lib_console% debug_output)\r\nif %verbose_output% gtr 0 (\r\n    set print_verbose=%lib_console% verbose_output\r\n    set print_warning=%lib_console% show_warning\r\n)\r\n\r\n:: Sets CMDER_SHELL, CMDER_CLINK, CMDER_ALIASES variables\r\n%lib_base% cmder_shell\r\n%print_debug% init.bat \"Env Var - CMDER_ROOT=%CMDER_ROOT%\"\r\n%print_debug% init.bat \"Env Var - debug_output=%debug_output%\"\r\n\r\n:: Set the Cmder directory paths\r\nset CMDER_CONFIG_DIR=%CMDER_ROOT%\\config\r\n\r\n:: Check if we're using Cmder individual user profile\r\nif defined CMDER_USER_CONFIG (\r\n    %print_debug% init.bat \"CMDER IS ALSO USING INDIVIDUAL USER CONFIG FROM '%CMDER_USER_CONFIG%'!\"\r\n\r\n    if not exist \"%CMDER_USER_CONFIG%\\..\\opt\" md \"%CMDER_USER_CONFIG%\\..\\opt\"\r\n    set CMDER_CONFIG_DIR=%CMDER_USER_CONFIG%\r\n)\r\n\r\nif not \"%CMDER_SHELL%\" == \"cmd\" (\r\n    %print_warning% \"Incompatible 'ComSpec/Shell' Detected: %CMDER_SHELL%\"\r\n    set CMDER_CLINK=0\r\n    set CMDER_ALIASES=0\r\n)\r\n\r\n:: Pick the right version of Clink\r\n:: TODO: Support for ARM\r\nif \"%PROCESSOR_ARCHITECTURE%\"==\"x86\" (\r\n    set clink_architecture=x86\r\n    set architecture_bits=32\r\n) else if \"%PROCESSOR_ARCHITECTURE%\"==\"AMD64\" (\r\n    set clink_architecture=x64\r\n    set architecture_bits=64\r\n) else (\r\n    %print_warning% \"Incompatible Processor Detected: %PROCESSOR_ARCHITECTURE%\"\r\n    set CMDER_CLINK=0\r\n)\r\n\r\nif \"%CMDER_CLINK%\" == \"1\" (\r\n    REM TODO: Detect if clink is already injected, if so goto :CLINK_FINISH\r\n    goto :INJECT_CLINK\r\n)\r\n\r\ngoto :SKIP_CLINK\r\n\r\n:INJECT_CLINK\r\n    %print_verbose% \"Injecting Clink!\"\r\n\r\n    :: Check if Clink is not present\r\n    if not exist \"%CMDER_ROOT%\\vendor\\clink\\clink_%clink_architecture%.exe\" (\r\n        %print_error% \"Clink executable is not present in 'vendor\\clink\\clink_%clink_architecture%.exe'\"\r\n        goto :SKIP_CLINK\r\n    )\r\n\r\n    :: Run Clink\r\n    if not exist \"%CMDER_CONFIG_DIR%\\settings\" if not exist \"%CMDER_CONFIG_DIR%\\clink_settings\" (\r\n        echo Generating Clink initial settings in \"%CMDER_CONFIG_DIR%\\clink_settings\"\r\n        copy \"%CMDER_ROOT%\\vendor\\clink_settings.default\" \"%CMDER_CONFIG_DIR%\\clink_settings\"\r\n        echo Additional *.lua files in \"%CMDER_CONFIG_DIR%\" are loaded on startup.\r\n    )\r\n\r\n    if not exist \"%CMDER_CONFIG_DIR%\\cmder_prompt_config.lua\" (\r\n        echo Creating Cmder prompt config file: \"%CMDER_CONFIG_DIR%\\cmder_prompt_config.lua\"\r\n        copy \"%CMDER_ROOT%\\vendor\\cmder_prompt_config.lua.default\" \"%CMDER_CONFIG_DIR%\\cmder_prompt_config.lua\"\r\n    )\r\n\r\n    :: Cleanup legacy Clink Settings file\r\n    if exist \"%CMDER_CONFIG_DIR%\\settings\" if exist \"%CMDER_CONFIG_DIR%\\clink_settings\" (\r\n        del \"%CMDER_CONFIG_DIR%\\settings\"\r\n    )\r\n\r\n    :: Cleanup legacy Clink history file\r\n    if exist \"%CMDER_CONFIG_DIR%\\.history\" if exist \"%CMDER_CONFIG_DIR%\\clink_history\" (\r\n        del \"%CMDER_CONFIG_DIR%\\.history\"\r\n    )\r\n\r\n    \"%CMDER_ROOT%\\vendor\\clink\\clink_%clink_architecture%.exe\" inject --quiet --profile \"%CMDER_CONFIG_DIR%\" --scripts \"%CMDER_ROOT%\\vendor\"\r\n\r\n    :: Check if a fatal error occurred when trying to inject Clink\r\n    if errorlevel 2 (\r\n        REM %print_error% \"Clink injection has failed with error code: %errorlevel%\"\r\n        goto :SKIP_CLINK\r\n    )\r\n\r\n    goto :CLINK_FINISH\r\n\r\n:SKIP_CLINK\r\n    %print_warning% \"Skipping Clink Injection!\"\r\n\r\n    for /f \"tokens=2 delims=:.\" %%x in ('chcp') do set cp=%%x\r\n    chcp 65001>nul\r\n\r\n    :: Revert back to plain cmd.exe prompt without clink\r\n    prompt $E[1;32;49m$P$S$_$E[1;30;49mλ$S$E[0m\r\n    \r\n    :: Add Windows Terminal shell integration support (OSC 133 sequences)\r\n    if defined WT_SESSION (prompt $e]133;D$e\\$e]133;A$e\\$e]9;9;$P$e\\%PROMPT%$e]133;B$e\\)\r\n\r\n    chcp %cp%>nul\r\n\r\n:CLINK_FINISH\r\n\r\nif \"%CMDER_CONFIGURED%\" GTR \"1\" (\r\n    %print_verbose% \"Cmder is already configured, skipping Cmder Init!\"\r\n\r\n    goto :USER_ALIASES\r\n) else if \"%CMDER_CONFIGURED%\" == \"1\" (\r\n    %print_verbose% \"Cmder is already configured, skipping to Cmder User Init!\"\r\n\r\n    goto :USER_CONFIG_START\r\n)\r\n\r\n:: Prepare for git-for-windows\r\n\r\n:: Detect which git.exe version to use\r\n:: * if the user points to a specific git, use that\r\n:: * test if git is in path and if yes, use that\r\n:: * last, use our vendored git\r\n:: also check that we have a recent enough version of git by examining the version string\r\nif defined GIT_INSTALL_ROOT (\r\n    if exist \"%GIT_INSTALL_ROOT%\\cmd\\git.exe\" goto :SPECIFIED_GIT\r\n    set GIT_INSTALL_ROOT=\r\n) else if \"%fast_init%\" == \"1\" (\r\n    if exist \"%CMDER_ROOT%\\vendor\\git-for-windows\\cmd\\git.exe\" (\r\n        %print_debug% init.bat \"Skipping Git Auto-Detect!\"\r\n        goto :VENDORED_GIT\r\n    )\r\n\r\n    %print_debug% init.bat \"Fast init is enabled, vendored Git does not exist\"\r\n    for /F \"delims=\" %%F in ('where git.exe 2^>nul') do (\r\n\tset \"EXT_GIT_EXE=%%~fF\"\r\n        %print_debug% init.bat \"Found User installed Git at '%%~fF'. Skipping Git Auto-Detect!\"\r\n        goto :SET_ENV\r\n    )\r\n)\r\n\r\n%print_debug% init.bat \"Looking for Git install root...\"\r\n\r\n:: Get the version information for vendored git binary\r\n%lib_git% read_version VENDORED \"%CMDER_ROOT%\\vendor\\git-for-windows\\cmd\" 2>nul\r\n%lib_git% validate_version VENDORED %GIT_VERSION_VENDORED%\r\n\r\n:: Check if git is in path\r\nfor /F \"delims=\" %%F in ('where git.exe 2^>nul') do call :check_git \"%%~fF\"\r\n\r\nif defined GIT_INSTALL_ROOT (\r\n    goto :FOUND_GIT\r\n) else (\r\n    goto :VENDORED_GIT\r\n)\r\n\r\n:check_git\r\n    set full_path=\"%~f1\"\r\n    if not defined GIT_INSTALL_ROOT (\r\n        if not [\\%full_path:\\cmd\\git.exe=:%]==[\\%full_path%] (\r\n            :: Get the absolute path to the user provided git binary\r\n            %lib_git% is_git_shim \"%~dp1\"\r\n            %lib_git% get_user_git_version\r\n            %lib_git% compare_git_versions\r\n        )\r\n    )\r\n    exit /b\r\n\r\n:: Our last hope: use vendored git\r\n:VENDORED_GIT\r\nif exist \"%CMDER_ROOT%\\vendor\\git-for-windows\" (\r\n    set \"GIT_INSTALL_ROOT=%CMDER_ROOT%\\vendor\\git-for-windows\"\r\n    %print_debug% init.bat \"Using vendored Git '%GIT_VERSION_VENDORED%'...\"\r\n    goto :CONFIGURE_GIT\r\n) else (\r\n    goto :NO_GIT\r\n)\r\n\r\n:SPECIFIED_GIT\r\n%print_debug% init.bat \"Using /GIT_INSTALL_ROOT...\"\r\ngoto :CONFIGURE_GIT\r\n\r\n:FOUND_GIT\r\n%print_debug% init.bat \"Using found Git '%GIT_VERSION_USER%' from '%GIT_INSTALL_ROOT%...\"\r\ngoto :CONFIGURE_GIT\r\n\r\n:CONFIGURE_GIT\r\n%print_debug% init.bat \"Using Git from '%GIT_INSTALL_ROOT%...\"\r\n:: Add git to the path\r\nif exist \"%GIT_INSTALL_ROOT%\\cmd\\git.exe\" %lib_path% enhance_path \"%GIT_INSTALL_ROOT%\\cmd\" \"\"\r\n\r\n:: Add the unix commands at the end to not shadow windows commands like `more` and `find`\r\nif %nix_tools% equ 1 (\r\n    %print_verbose% \"Preferring Windows commands\"\r\n    set \"path_position=append\"\r\n) else (\r\n    %print_verbose% \"Preferring *nix commands\"\r\n    set \"path_position=\"\r\n)\r\n\r\nif %nix_tools% geq 1 (\r\n    if exist \"%GIT_INSTALL_ROOT%\\mingw32\" (\r\n        %lib_path% enhance_path \"%GIT_INSTALL_ROOT%\\mingw32\\bin\" %path_position%\r\n    ) else if exist \"%GIT_INSTALL_ROOT%\\mingw64\" (\r\n        %lib_path% enhance_path \"%GIT_INSTALL_ROOT%\\mingw64\\bin\" %path_position%\r\n    )\r\n    if exist \"%GIT_INSTALL_ROOT%\\usr\\bin\" (\r\n        %lib_path% enhance_path \"%GIT_INSTALL_ROOT%\\usr\\bin\" %path_position%\r\n    )\r\n)\r\n\r\n:SET_ENV\r\n\r\n:: Plink (PuTTY Link) is a command-line connection tool similar to ssh, setting its protocol to ssh\r\nset PLINK_PROTOCOL=ssh\r\n\r\n:: Define SVN_SSH so we can use git svn with ssh svn repositories\r\nif not defined SVN_SSH set \"SVN_SSH=%GIT_INSTALL_ROOT:\\=\\\\%\\\\bin\\\\ssh.exe\"\r\n\r\n:: Find locale.exe: From the git install root, from the path, using the git installed env, or fallback using the env from the path.\r\nsetlocal enabledelayedexpansion\r\nif not defined git_locale if defined EXT_GIT_EXE (\r\n    set \"GIT_INSTALL_ROOT=!EXT_GIT_EXE:\\cmd\\git.exe=!\"\r\n)\r\nendlocal && set GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%\r\n\r\nif not defined git_locale if exist \"%GIT_INSTALL_ROOT%\\usr\\bin\\locale.exe\" set git_locale=\"%GIT_INSTALL_ROOT%\\usr\\bin\\locale.exe\"\r\nif not defined git_locale for /F \"tokens=* delims=\" %%F in ('where locale.exe 2^>nul') do ( if not defined git_locale set git_locale=\"%%F\" )\r\nif not defined git_locale if exist \"%GIT_INSTALL_ROOT%\\usr\\bin\\env.exe\" set git_locale=\"%GIT_INSTALL_ROOT%\\usr\\bin\\env.exe\" /usr/bin/locale\r\nif not defined git_locale for /F \"tokens=* delims=\" %%F in ('where env.exe 2^>nul') do ( if not defined git_locale set git_locale=\"%%F\" /usr/bin/locale )\r\n\r\nsetlocal enabledelayedexpansion\r\nif defined git_locale (\r\n    REM %print_debug% init.bat \"Env Var - git_locale=!git_locale!\"\r\n    if not defined LANG (\r\n        for /F \"delims=\" %%F in ('\"!git_locale!\" -uU 2') do (\r\n            set \"LANG=%%F\"\r\n        )\r\n    )\r\n)\r\nendlocal && set LANG=%LANG%\r\n\r\n%print_debug% init.bat \"Env Var - GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%\"\r\n%print_debug% init.bat \"Found Git in: '%GIT_INSTALL_ROOT%'\"\r\ngoto :PATH_ENHANCE\r\n\r\n:NO_GIT\r\n:: Skip this if GIT WAS FOUND else we did 'endlocal' above!\r\nendlocal\r\n\r\n:PATH_ENHANCE\r\n%lib_path% enhance_path \"%CMDER_ROOT%\\vendor\\bin\"\r\n\r\n:USER_CONFIG_START\r\n%lib_path% enhance_path_recursive \"%CMDER_ROOT%\\bin\" 0 %max_depth%\r\nif defined CMDER_USER_BIN (\r\n    %lib_path% enhance_path_recursive \"%CMDER_USER_BIN%\" 0 %max_depth%\r\n)\r\n%lib_path% enhance_path \"%CMDER_ROOT%\" append\r\n\r\n:: Drop *.bat and *.cmd files into \"%CMDER_ROOT%\\config\\profile.d\"\r\n:: to run them at startup.\r\n%lib_profile% run_profile_d \"%CMDER_ROOT%\\config\\profile.d\"\r\nif defined CMDER_USER_CONFIG (\r\n    %lib_profile% run_profile_d \"%CMDER_USER_CONFIG%\\profile.d\"\r\n)\r\n\r\n:USER_ALIASES\r\n:: Allows user to override default aliases store using profile.d\r\n:: scripts run above by setting the 'aliases' env variable.\r\n::\r\n:: Note: If overriding default aliases store file the aliases\r\n:: must also be self executing, see '.\\user_aliases.cmd.default',\r\n:: and be in profile.d folder.\r\nif not defined user_aliases (\r\n    set \"user_aliases=%CMDER_CONFIG_DIR%\\user_aliases.cmd\"\r\n)\r\n\r\nif \"%CMDER_ALIASES%\" == \"1\" (\r\n    REM The aliases environment variable is used by alias.bat to id\r\n    REM the default file to store new aliases in.\r\n    if not defined aliases (\r\n        set \"aliases=%user_aliases%\"\r\n    )\r\n\r\n    REM Make sure we have a self-extracting user_aliases.cmd file\r\n    if not exist \"%user_aliases%\" (\r\n        echo Creating initial user_aliases store in \"%user_aliases%\"...\r\n        copy \"%CMDER_ROOT%\\vendor\\user_aliases.cmd.default\" \"%user_aliases%\"\r\n    ) else (\r\n        %lib_base% update_legacy_aliases\r\n    )\r\n\r\n    :: Update old 'user_aliases' to new self executing 'user_aliases.cmd'\r\n    if exist \"%CMDER_ROOT%\\config\\aliases\" (\r\n        echo Updating old \"%CMDER_ROOT%\\config\\aliases\" to new format...\r\n        type \"%CMDER_ROOT%\\config\\aliases\" >> \"%user_aliases%\"\r\n        del \"%CMDER_ROOT%\\config\\aliases\"\r\n    ) else if exist \"%user_aliases%.old_format\" (\r\n        echo Updating old \"%user_aliases%\" to new format...\r\n        type \"%user_aliases%.old_format\" >> \"%user_aliases%\"\r\n        del \"%user_aliases%.old_format\"\r\n    )\r\n)\r\n\r\n:: Add aliases to the environment\r\ntype \"%user_aliases%\" | %WINDIR%\\System32\\findstr /b /l /i \"history=cat \" >nul\r\nif \"%ERRORLEVEL%\" == \"0\" (\r\n    echo Migrating alias 'history' to new Clink 1.x.x...\r\n    call \"%CMDER_ROOT%\\vendor\\bin\\alias.cmd\" /d history\r\n    echo Restart the session to activate changes!\r\n)\r\n\r\ncall \"%user_aliases%\"\r\n\r\nif \"%CMDER_CONFIGURED%\" gtr \"1\" goto :CMDER_CONFIGURED\r\n\r\n:: See vendor\\git-for-windows\\README.portable for why we do this\r\n:: Basically we need to execute this post-install.bat because we are\r\n:: manually extracting the archive rather than executing the 7z sfx\r\nif exist \"%GIT_INSTALL_ROOT%\\post-install.bat\" (\r\n    echo Running Git for Windows one time Post Install....\r\n    pushd \"%GIT_INSTALL_ROOT%\\\"\r\n    \"%GIT_INSTALL_ROOT%\\git-cmd.exe\" --no-needs-console --no-cd --command=post-install.bat\r\n    popd\r\n)\r\n\r\n:: Set home path\r\nif not defined HOME set \"HOME=%USERPROFILE%\"\r\n%print_debug% init.bat \"Env Var - HOME=%HOME%\"\r\n\r\nset \"initialConfig=%CMDER_ROOT%\\config\\user_profile.cmd\"\r\nif exist \"%CMDER_ROOT%\\config\\user_profile.cmd\" (\r\n    REM Create this file and place your own command in there\r\n    %print_debug% init.bat \"Calling - %CMDER_ROOT%\\config\\user_profile.cmd\"\r\n    call \"%CMDER_ROOT%\\config\\user_profile.cmd\"\r\n)\r\n\r\nif defined CMDER_USER_CONFIG (\r\n    set \"initialConfig=%CMDER_USER_CONFIG%\\user_profile.cmd\"\r\n    if exist \"%CMDER_USER_CONFIG%\\user_profile.cmd\" (\r\n        REM Create this file and place your own command in there\r\n        %print_debug% init.bat \"Calling - %CMDER_USER_CONFIG%\\user_profile.cmd\"\r\n        call \"%CMDER_USER_CONFIG%\\user_profile.cmd\"\r\n    )\r\n)\r\n\r\nif not exist \"%initialConfig%\" (\r\n    echo Creating user startup file: \"%initialConfig%\"\r\n    copy \"%CMDER_ROOT%\\vendor\\user_profile.cmd.default\" \"%initialConfig%\"\r\n)\r\n\r\nif \"%CMDER_ALIASES%\" == \"1\" if exist \"%CMDER_ROOT%\\bin\\alias.bat\" if exist \"%CMDER_ROOT%\\vendor\\bin\\alias.cmd\" (\r\n    echo Cmder's 'alias' command has been moved into \"%CMDER_ROOT%\\vendor\\bin\\alias.cmd\"\r\n    echo to get rid of this message either:\r\n    echo.\r\n    echo Delete the file \"%CMDER_ROOT%\\bin\\alias.bat\"\r\n    echo.\r\n    echo or\r\n    echo.\r\n    echo If you have customized it and want to continue using it instead of the included version\r\n    echo   * Rename \"%CMDER_ROOT%\\bin\\alias.bat\" to \"%CMDER_ROOT%\\bin\\alias.cmd\".\r\n    echo   * Search for 'user-aliases' and replace it with 'user_aliases'.\r\n)\r\n\r\nset initialConfig=\r\n\r\n:CMDER_CONFIGURED\r\nif not defined CMDER_CONFIGURED set CMDER_CONFIGURED=1\r\n\r\nset CMDER_INIT_END=%time%\r\n\r\nif %time_init% gtr 0 (\r\n    \"%cmder_root%\\vendor\\bin\\timer.cmd\" \"%CMDER_INIT_START%\" \"%CMDER_INIT_END%\"\r\n)\r\nexit /b\r\n"
  },
  {
    "path": "vendor/lib/lib_base.cmd",
    "content": "@echo off\r\n\r\nset lib_base=call \"%~dp0lib_base.cmd\"\r\n\r\nif \"%~1\" == \"/h\" (\r\n    %lib_base% help \"%~0\"\r\n) else if \"%~1\" neq \"\" (\r\n    call :%*\r\n)\r\n\r\nexit /b\r\n\r\n:::===============================================================================\r\n:::help - shows all sub routines in a .bat/.cmd file with documentation\r\n:::.\r\n:::include:\r\n:::.\r\n:::       call \"lib_base.cmd\"\r\n:::.\r\n:::usage:\r\n:::.\r\n:::       %lib_base% help \"file\"\r\n:::.\r\n:::options:\r\n:::.\r\n:::       file <in> full path to file containing lib_routines to display\r\n:::-------------------------------------------------------------------------------\r\n\r\n:help\r\n    for /f \"tokens=* delims=:\" %%a in ('%WINDIR%\\System32\\findstr /i /r \"^:::\" \"%~1\"') do (\r\n        if \"%%a\"==\".\" (\r\n            echo.\r\n        ) else if /i \"%%a\" == \"usage\" (\r\n            echo %%a:\r\n        ) else if /i \"%%a\" == \"options\" (\r\n            echo %%a:\r\n        ) else if not \"%%a\" == \"\" (\r\n            echo %%a\r\n        )\r\n    )\r\n\r\n    pause\r\n    exit /b\r\n\r\n:::===============================================================================\r\n:::cmder_shell - Initializes the Cmder shell environment variables\r\n:::.\r\n:::description:\r\n:::.\r\n:::       This routine sets up the Cmder shell environment by detecting the\r\n:::       command shell and initializing related variables.\r\n:::.\r\n:::include:\r\n:::.\r\n:::       call \"lib_base.cmd\"\r\n:::.\r\n:::usage:\r\n:::.\r\n:::       %lib_base% cmder_shell\r\n:::-------------------------------------------------------------------------------\r\n\r\n:cmder_shell\r\n    call :detect_comspec %ComSpec%\r\n    exit /b\r\n\r\n:::===============================================================================\r\n:::detect_comspec - Detects the command shell being used:::\r\n:::.\r\n:::description:\r\n:::.\r\n:::       This function sets the CMDER_SHELL variable to the name of the\r\n:::       detected command shell. It also initializes the CMDER_CLINK and\r\n:::       CMDER_ALIASES variables if they are not already defined.\r\n:::.\r\n:::include:\r\n:::.\r\n:::       call \"lib_base.cmd\"\r\n:::.\r\n:::usage:\r\n:::.\r\n:::       %lib_base% detect_comspec %ComSpec%\r\n:::-------------------------------------------------------------------------------\r\n\r\n:detect_comspec\r\n    set CMDER_SHELL=%~n1\r\n    if not defined CMDER_CLINK (\r\n        set CMDER_CLINK=1\r\n    )\r\n    if not defined CMDER_ALIASES (\r\n        set CMDER_ALIASES=1\r\n    )\r\n    exit /b\r\n\r\n:::===============================================================================\r\n:::update_legacy_aliases - Updates the legacy alias definitions in the user_aliases file\r\n:::.\r\n:::description:\r\n:::.\r\n:::       This function checks if the user_aliases file contains the marker\r\n:::       \";= Add aliases below here\". If the marker is not found, it creates\r\n:::       an initial user_aliases store by copying the default user_aliases file\r\n:::       from the CMDER_ROOT directory. If the CMDER_USER_CONFIG environment\r\n:::       variable is defined, it creates a backup of the existing user_aliases\r\n:::       file before copying the default file.\r\n:::.\r\n:::include:\r\n:::.\r\n:::       call \"lib_base.cmd\"\r\n:::.\r\n:::usage:\r\n:::.\r\n:::       %lib_base% update_legacy_aliases\r\n:::-------------------------------------------------------------------------------\r\n\r\n:update_legacy_aliases\r\n    type \"%user_aliases%\" | %WINDIR%\\System32\\findstr /i \";= Add aliases below here\" >nul\r\n    if \"%errorlevel%\" == \"1\" (\r\n        echo Creating initial user_aliases store in \"%user_aliases%\"...\r\n        if defined CMDER_USER_CONFIG (\r\n            copy \"%user_aliases%\" \"%user_aliases%.old_format\"\r\n            copy \"%CMDER_ROOT%\\vendor\\user_aliases.cmd.default\" \"%user_aliases%\"\r\n        ) else (\r\n            copy \"%user_aliases%\" \"%user_aliases%.old_format\"\r\n            copy \"%CMDER_ROOT%\\vendor\\user_aliases.cmd.default\" \"%user_aliases%\"\r\n        )\r\n    )\r\n    exit /b\r\n"
  },
  {
    "path": "vendor/lib/lib_console.cmd",
    "content": "@echo off\r\n\r\ncall \"%~dp0lib_base.cmd\"\r\nset lib_console=call \"%~dp0lib_console.cmd\"\r\nset ESC=\u001b\r\n\r\n:: Much faster than using \"%lib_console% debug_output ...\" etc.\r\nset print_debug=if %debug_output% gtr 0 %lib_console% debug_output\r\nset print_verbose=if %verbose_output% gtr 0 %lib_console% verbose_output\r\nset print_warning=if %verbose_output% gtr 0 %lib_console% show_warning\r\nset print_error=%lib_console% show_error\r\n\r\nif %fast_init% gtr %verbose_output% if %fast_init% gtr %debug_output% exit /b\r\n\r\nif \"%~1\" == \"/h\" (\r\n    %lib_base% help \"%~0\"\r\n) else if \"%~1\" neq \"\" (\r\n    call :%*\r\n)\r\n\r\nexit /b\r\n\r\n:debug_output\r\n:::===============================================================================\r\n:::debug_output - Output a debug message to the console.\r\n:::.\r\n:::include:\r\n:::.\r\n:::  call \"lib_console.cmd\"\r\n:::.\r\n:::usage:\r\n:::.\r\n:::  %lib_console% debug_output [caller] [message]\r\n:::.\r\n:::required:\r\n:::.\r\n:::  [caller]  <in> Script/sub routine name calling debug_output\r\n:::.\r\n:::  [message] <in> Message text to display.\r\n:::.\r\n:::-------------------------------------------------------------------------------\r\n\r\n    if %debug_output% gtr 0 echo %time% DEBUG(%~1): %~2 & echo.\r\n    exit /b\r\n\r\n:verbose_output\r\n:::===============================================================================\r\n:::verbose_output - Output a debug message to the console.\r\n:::.\r\n:::include:\r\n:::.\r\n:::  call \"$0\"\r\n:::.\r\n:::usage:\r\n:::.\r\n:::  %lib_console% verbose_output \"[message]\"\r\n:::.\r\n:::required:\r\n:::.\r\n:::  [message] <in> Message text to display.\r\n:::.\r\n:::-------------------------------------------------------------------------------\r\n\r\n    if %verbose_output% gtr 0 echo %~1\r\n    exit /b\r\n\r\n:show_error\r\n:::===============================================================================\r\n:::show_error - Output an error message to the console.\r\n:::.\r\n:::include:\r\n:::.\r\n:::  call \"$0\"\r\n:::.\r\n:::usage:\r\n:::.\r\n:::  %lib_console% show_error \"[message]\"\r\n:::.\r\n:::required:\r\n:::.\r\n:::  [message] <in> Message text to display.\r\n:::.\r\n:::-------------------------------------------------------------------------------\r\n\r\n    echo %ESC%[91;1mERROR:%ESC%[0m %~1\r\n    exit /b\r\n\r\n:show_warning\r\n:::===============================================================================\r\n:::show_warning - Output a warning message to the console.\r\n:::.\r\n:::include:\r\n:::.\r\n:::  call \"$0\"\r\n:::.\r\n:::usage:\r\n:::.\r\n:::  %lib_console% show_warning \"[message]\"\r\n:::.\r\n:::required:\r\n:::.\r\n:::  [message] <in> Message text to display.\r\n:::.\r\n:::-------------------------------------------------------------------------------\r\n\r\n    echo %ESC%[93;1mWARNING:%ESC%[0m %~1\r\n    exit /b\r\n"
  },
  {
    "path": "vendor/lib/lib_git.cmd",
    "content": "@echo off\r\n\r\ncall \"%~dp0lib_base.cmd\"\r\ncall \"%~dp0lib_console.cmd\"\r\nset lib_git=call \"%~dp0lib_git.cmd\"\r\n\r\nif \"%~1\" == \"/h\" (\r\n    %lib_base% help \"%~0\"\r\n) else if \"%~1\" neq \"\" (\r\n    call :%*\r\n)\r\n\r\nexit /b\r\n\r\n:::===============================================================================\r\n:::read_version - Get the git.exe version\r\n:::.\r\n:::include:\r\n:::.\r\n:::  call \"lib_git.cmd\"\r\n:::.\r\n:::usage:\r\n:::.\r\n:::  %lib_git% read_version \"[dir_path]\"\r\n:::.\r\n:::required:\r\n:::.\r\n:::  [GIT SCOPE]   <in> USER | VENDORED\r\n:::  [GIT PATH]    <in> Fully qualified path to the Git command root.\r\n:::.\r\n:::output:\r\n:::.\r\n:::  GIT_VERSION_[GIT SCOPE] <out> Env variable containing Git semantic version string\r\n:::-------------------------------------------------------------------------------\r\n\r\n:read_version\r\n    :: clear the variables\r\n    set GIT_VERSION_%~1=\r\n\r\n    :: set the executable path\r\n    set \"git_executable=%~2\\git.exe\"\r\n    %print_debug% :read_version \"Env Var - git_executable=%git_executable%\"\r\n\r\n    :: check if the executable actually exists\r\n    if not exist \"%git_executable%\" (\r\n        %print_debug% :read_version \"%git_executable% does not exist.\"\r\n        exit /b -255\r\n    )\r\n\r\n    :: get the git version in the provided directory\r\n    \"%git_executable%\" --version > \"%temp%\\git_version.txt\"\r\n    setlocal enabledelayedexpansion\r\n    for /F \"tokens=1,2,3 usebackq\" %%A in (`type \"%temp%\\git_version.txt\" 2^>nul`) do (\r\n        if /i \"%%A %%B\" == \"git version\" (\r\n            set \"GIT_VERSION=%%C\"\r\n        ) else (\r\n            echo \"'git --version' returned an improper version string!\"\r\n            %print_debug% :read_version \"returned string: '%%A %%B %%C' by executable path: %git_executable%\"\r\n            pause\r\n            exit /b\r\n        )\r\n    )\r\n    endlocal & set \"GIT_VERSION_%~1=%GIT_VERSION%\" & %print_debug% :read_version \"Env Var - GIT_VERSION_%~1=%GIT_VERSION%\"\r\n\r\n    exit /b\r\n\r\n:::===============================================================================\r\n:::parse_version - Parse semantic version string 'x.x.x.x' and return the pieces\r\n:::.\r\n:::include:\r\n:::.\r\n:::  call \"$0\"\r\n:::.\r\n:::usage:\r\n:::.\r\n:::  %lib_git% parse_version \"[VERSION]\"\r\n:::.\r\n:::required:\r\n:::.\r\n:::  [SCOPE]     <in> USER | VENDORED\r\n:::  [VERSION]   <in> Semantic version String. Ex: 1.2.3.4\r\n:::.\r\n:::output:\r\n:::.\r\n:::  [SCOPE]_MAJOR <out> Scoped Major version.\r\n:::  [SCOPE]_MINOR <out> Scoped Minor version.\r\n:::  [SCOPE]_PATCH <out> Scoped Patch version.\r\n:::  [SCOPE]_BUILD <out> Scoped Build version.\r\n:::-------------------------------------------------------------------------------\r\n\r\n:parse_version\r\n    :: process a `x.x.x.xxxx.x` formatted string\r\n    %print_debug% :parse_version \"ARGV[1]=%~1, ARGV[2]=%~2\"\r\n\r\n    setlocal enabledelayedexpansion\r\n    for /F \"tokens=1-3* delims=.,-\" %%A in (\"%2\") do (\r\n        set \"%~1_MAJOR=%%A\"\r\n        set \"%~1_MINOR=%%B\"\r\n        set \"%~1_PATCH=%%C\"\r\n        set \"%~1_BUILD=%%D\"\r\n    )\r\n\r\n    REM endlocal & set \"%~1_MAJOR=!%~1_MAJOR!\" & set \"%~1_MINOR=!%~1_MINOR!\" & set \"%~1_PATCH=!%~1_PATCH!\" & set \"%~1_BUILD=!%~1_BUILD!\"\r\n    if \"%~1\" == \"VENDORED\" (\r\n        endlocal & set \"%~1_MAJOR=%VENDORED_MAJOR%\" & set \"%~1_MINOR=%VENDORED_MINOR%\" & set \"%~1_PATCH=%VENDORED_PATCH%\" & set \"%~1_BUILD=%VENDORED_BUILD%\"\r\n    ) else (\r\n        endlocal & set \"%~1_MAJOR=%USER_MAJOR%\" & set \"%~1_MINOR=%USER_MINOR%\" & set \"%~1_PATCH=%USER_PATCH%\" & set \"%~1_BUILD=%USER_BUILD%\"\r\n    )\r\n\r\n    exit /b\r\n\r\n:endlocal_set_git_version\r\n\r\n:::===============================================================================\r\n:::validate_version - Validate semantic version string 'x.x.x.x'\r\n:::.\r\n:::include:\r\n:::.\r\n:::  call \"$0\"\r\n:::.\r\n:::usage:\r\n:::.\r\n:::  %lib_git% validate_version [SCOPE] [VERSION]\r\n:::.\r\n:::required:\r\n:::.\r\n:::  [SCOPE]     <in> Example:  USER | VENDORED\r\n:::  [VERSION]   <in> Semantic version String. Ex: 1.2.3.4\r\n:::-------------------------------------------------------------------------------\r\n\r\n:validate_version\r\n    :: now parse the version information into the corresponding variables\r\n    %print_debug% :validate_version \"ARGV[1]=%~1, ARGV[2]=%~2\"\r\n\r\n    call :parse_version %~1 %~2\r\n\r\n    :: ... and maybe display it, for debugging purposes.\r\n    REM %print_debug% :validate_version \"Found Git Version for %~1: !%~1_MAJOR!.!%~1_MINOR!.!%~1_PATCH!.!%~1_BUILD!\"\r\n    if \"%~1\" == \"VENDORED\" (\r\n        %print_debug% :validate_version \"Found Git Version for %~1: %VENDORED_MAJOR%.%VENDORED_MINOR%.%VENDORED_PATCH%.%VENDORED_BUILD%\"\r\n    ) else (\r\n        %print_debug% :validate_version \"Found Git Version for %~1: %USER_MAJOR%.%USER_MINOR%.%USER_PATCH%.%USER_BUILD%\"\r\n    )\r\n    exit /b\r\n\r\n:::===============================================================================\r\n:::compare_version - Compare semantic versions and return latest version\r\n:::.\r\n:::include:\r\n:::.\r\n:::  call \"$0\"\r\n:::.\r\n:::usage:\r\n:::.\r\n:::  %lib_git% validate_version [SCOPE1] [SCOPE2]\r\n:::.\r\n:::required:\r\n:::.\r\n:::  [SCOPE1]    <in> Example: USER\r\n:::  [SCOPE2]    <in> Example: VENDOR\r\n:::-------------------------------------------------------------------------------\r\n\r\n:compare_versions\r\n    :: checks all major, minor, patch and build variables for the given arguments.\r\n    :: whichever binary that has the most recent version will be used based on the return code.\r\n\r\n    %print_debug% \":compare_versions\" \"Comparing:\"\r\n    %print_debug% \":compare_versions\" \"%~1: %USER_MAJOR%.%USER_MINOR%.%USER_PATCH%.%USER_BUILD%\"\r\n    %print_debug% \":compare_versions\" \"%~2: %VENDORED_MAJOR%.%VENDORED_MINOR%.%VENDORED_PATCH%.%VENDORED_BUILD%\"\r\n\r\n    setlocal enabledelayedexpansion\r\n    if !%~1_MAJOR! GTR !%~2_MAJOR! (endlocal & exit /b  1)\r\n    if !%~1_MAJOR! LSS !%~2_MAJOR! (endlocal & exit /b -1)\r\n\r\n    if !%~1_MINOR! GTR !%~2_MINOR! (endlocal & exit /b  1)\r\n    if !%~1_MINOR! LSS !%~2_MINOR! (endlocal & exit /b -1)\r\n\r\n    if !%~1_PATCH! GTR !%~2_PATCH! (endlocal & exit /b  1)\r\n    if !%~1_PATCH! LSS !%~2_PATCH! (endlocal & exit /b -1)\r\n\r\n    if !%~1_BUILD! GTR !%~2_BUILD! (endlocal & exit /b  1)\r\n    if !%~1_BUILD! LSS !%~2_BUILD! (endlocal & exit /b -1)\r\n\r\n    :: looks like we have the same versions.\r\n    endlocal & exit /b 0\r\n\r\n:::===============================================================================\r\n:::is_git_shim - Check if the directory has a git.shim file\r\n:::.\r\n:::description:\r\n:::.\r\n:::  Shim is a small helper program for Scoop that calls the executable configured in git.shim file\r\n:::  See: github.com/ScoopInstaller/Shim and github.com/cmderdev/cmder/pull/1905\r\n:::.\r\n:::include:\r\n:::.\r\n:::  call \"$0\"\r\n:::.\r\n:::usage:\r\n:::.\r\n:::  %lib_git% is_git_shim [filepath]\r\n:::.\r\n:::required:\r\n:::.\r\n:::  [filepath]    <in>\r\n:::-------------------------------------------------------------------------------\r\n\r\n:is_git_shim\r\n    pushd \"%~1\"\r\n    :: check if there is a shim file - if yes, read the actual executable path\r\n    setlocal enabledelayedexpansion\r\n    if exist git.shim (\r\n        for /F \"tokens=2 delims== \" %%I in (git.shim) do (\r\n            pushd %%~dpI\r\n            set \"test_dir=!CD!\"\r\n            popd\r\n        )\r\n    ) else (\r\n        set \"test_dir=!CD!\"\r\n    )\r\n    endlocal & set \"test_dir=%test_dir%\"\r\n\r\n    popd\r\n    exit /b\r\n\r\n:::===============================================================================\r\n:::compare_git_versions - Compare the user git version against the vendored version\r\n:::.\r\n:::include:\r\n:::.\r\n:::  call \"$0\"\r\n:::.\r\n:::usage:\r\n:::.\r\n:::  %lib_git% compare_git_versions\r\n:::-------------------------------------------------------------------------------\r\n\r\n:compare_git_versions\r\n    setlocal enabledelayedexpansion\r\n    if ERRORLEVEL 0 (\r\n        :: compare the user git version against the vendored version\r\n        %lib_git% compare_versions USER VENDORED\r\n        set result=!ERRORLEVEL!\r\n        %print_debug% \":compare_git_versions\" \"campare versions_result: !result!\"\r\n\r\n        :: use the user provided git if its version is greater than, or equal to the vendored git\r\n        if !result! geq 0 (\r\n            if exist \"!test_dir:~0,-4!\\cmd\\git.exe\" (\r\n                set \"GIT_INSTALL_ROOT=!test_dir:~0,-4!\"\r\n            ) else (\r\n                set \"GIT_INSTALL_ROOT=!test_dir!\"\r\n            )\r\n        ) else (\r\n            %print_debug% \":compare_git_versions\" \"Found old !GIT_VERSION_USER! in !test_dir!, but not using...\"\r\n        )\r\n    ) else (\r\n        :: compare the user git version against the vendored version\r\n        :: if the user provided git executable is not found\r\n        IF ERRORLEVEL -255 IF NOT ERRORLEVEL -254 (\r\n        :: if not exist \"%git_executable%\" (\r\n            %print_debug% \":compare_git_versions\" \"No git at '%git_executable%' found.\"\r\n            set test_dir=\r\n        )\r\n    )\r\n    endlocal && set \"GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%\" && set test_dir=\r\n\r\n    exit /b\r\n\r\n:::===============================================================================\r\n:::get_user_git_version - Get the version information for the user provided git binary\r\n:::.\r\n:::include:\r\n:::.\r\n:::  call \"$0\"\r\n:::.\r\n:::usage:\r\n:::.\r\n:::  %lib_git% get_user_git_version\r\n:::-------------------------------------------------------------------------------\r\n\r\n:get_user_git_version\r\n    :: get the version information for the user provided git binary\r\n    %lib_git% read_version USER \"%test_dir%\" 2>nul\r\n    %print_debug% \":get_user_git_version\" \"get_user_git_version GIT_VERSION_USER: %GIT_VERSION_USER%\"\r\n    %lib_git% validate_version USER %GIT_VERSION_USER%\r\n    exit /b\r\n"
  },
  {
    "path": "vendor/lib/lib_path.cmd",
    "content": "@echo off\r\n\r\ncall \"%~dp0lib_base.cmd\"\r\ncall \"%~dp0lib_console.cmd\"\r\nset lib_path=call \"%~dp0lib_path.cmd\"\r\n\r\nif \"%~1\" == \"/h\" (\r\n    %lib_base% help \"%~0\"\r\n) else if \"%~1\" neq \"\" (\r\n    call :%*\r\n)\r\n\r\nsetlocal enabledelayedexpansion\r\nif not defined find_pathext (\r\n    set \"find_pathext=!PATHEXT:;= !\"\r\n    set \"find_pathext=!find_pathext:.=\\.!\"\r\n)\r\nendlocal & set \"find_pathext=%find_pathext%\"\r\n\r\nexit /b\r\n\r\n:enhance_path\r\n:::===============================================================================\r\n:::enhance_path - Add a directory to the path env variable if required.\r\n:::\r\n:::include:\r\n:::\r\n:::  call \"lib_path.cmd\"\r\n:::\r\n:::usage:\r\n:::\r\n:::  %lib_path% enhance_path \"[dir_path]\" [append]\r\n:::\r\n:::required:\r\n:::\r\n:::  [dir_path] <in> Fully qualified directory path. Ex: \"c:\\bin\"\r\n:::\r\n:::options:\r\n:::\r\n:::  append     <in> Append to the path env variable rather than pre-pend.\r\n:::\r\n:::\r\n:::output:\r\n:::\r\n:::  path       <out> Sets the path env variable if required.\r\n:::-------------------------------------------------------------------------------\r\n    if \"%~1\" neq \"\" (\r\n        set \"add_path=%~1\"\r\n    ) else (\r\n        %print_error% \"You must specify a directory to add to the path!\"\r\n        exit /b 1\r\n    )\r\n\r\n    if \"%~2\" neq \"\" if /i \"%~2\" == \"append\" (\r\n        set \"position=%~2\"\r\n    ) else (\r\n        set \"position=\"\r\n    )\r\n\r\n    dir \"%add_path%\" 2>NUL | findstr -i -e \"%find_pathext%\" >NUL\r\n\r\n    if \"%ERRORLEVEL%\" == \"0\" (\r\n        set \"add_to_path=%add_path%\"\r\n    ) else (\r\n        set \"add_to_path=\"\r\n    )\r\n\r\n    if \"%fast_init%\" == \"1\" (\r\n        if \"%position%\" == \"append\" (\r\n            set \"PATH=%PATH%;%add_to_path%\"\r\n        ) else (\r\n            set \"PATH=%add_to_path%;%PATH%\"\r\n        )\r\n        goto :end_enhance_path\r\n    ) else if \"%add_to_path%\" equ \"\" (\r\n        goto :end_enhance_path\r\n    )\r\n\r\n    set found=0\r\n    set \"find_query=%add_to_path%\"\r\n    set \"find_query=%find_query:\\=\\\\%\"\r\n    set \"find_query=%find_query: =\\ %\"\r\n    set \"OLD_PATH=%PATH%\"\r\n\r\n    setlocal enabledelayedexpansion\r\n    if \"!found!\" == \"0\" (\r\n        echo \"!PATH!\"|!WINDIR!\\System32\\findstr >nul /I /R /C:\";!find_query!;\"\r\n        call :set_found\r\n    )\r\n    %print_debug% :enhance_path \"Env Var INSIDE PATH !find_query! - found=!found!\"\r\n\r\n    if /i \"!position!\" == \"append\" (\r\n        if \"!found!\" == \"0\" (\r\n            echo \"!PATH!\"|!WINDIR!\\System32\\findstr >nul /I /R /C:\";!find_query!\\\"$\"\r\n            call :set_found\r\n        )\r\n        %print_debug% :enhance_path \"Env Var END PATH !find_query! - found=!found!\"\r\n    ) else (\r\n        if \"!found!\" == \"0\" (\r\n            echo \"!PATH!\"|!WINDIR!\\System32\\findstr >nul /I /R /C:\"^\\\"!find_query!;\"\r\n            call :set_found\r\n        )\r\n        %print_debug% :enhance_path \"Env Var BEGIN PATH !find_query! - found=!found!\"\r\n    )\r\n    endlocal & set found=%found%\r\n\r\n    if \"%found%\" == \"0\" (\r\n        if /i \"%position%\" == \"append\" (\r\n            %print_debug% :enhance_path \"Appending '%add_to_path%'\"\r\n            set \"PATH=%PATH%;%add_to_path%\"\r\n        ) else (\r\n            %print_debug% :enhance_path \"Prepending '%add_to_path%'\"\r\n            set \"PATH=%add_to_path%;%PATH%\"\r\n        )\r\n\r\n        set found=1\r\n    )\r\n\r\n    :end_enhance_path\r\n    set \"PATH=%PATH:;;=;%\"\r\n\r\n    REM echo %path%|wc -c\r\n\r\n    if \"%fast_init%\" == \"1\" exit /b\r\n\r\n    if not \"%OLD_PATH:~0,3000%\" == \"%OLD_PATH:~0,3001%\" goto :toolong\r\n    if not \"%OLD_PATH%\" == \"%PATH%\" goto :changed\r\n    exit /b\r\n\r\n    :toolong\r\n        set \"_rand=%RANDOM%\"\r\n        if exist \"%temp%\\%_rand%_cmder_lib_pathA\" del \"%temp%\\%_rand%_cmder_lib_pathA\" 2>nul 1>nul\r\n        if exist \"%temp%\\%_rand%_cmder_lib_pathB\" del \"%temp%\\%_rand%_cmder_lib_pathB\" 2>nul 1>nul\r\n        if exist \"%temp%\\%_rand%_cmder_lib_pathA\" goto :toolong\r\n        if exist \"%temp%\\%_rand%_cmder_lib_pathB\" goto :toolong\r\n        echo \"%OLD_PATH%\">\"%temp%\\%_rand%_cmder_lib_pathA\"\r\n        if errorlevel 1 ( if exist \"%temp%\\%_rand%_cmder_lib_pathA\" del \"%temp%\\%_rand%_cmder_lib_pathA\" & goto :toolong )\r\n        echo \"%PATH%\">\"%temp%\\%_rand%_cmder_lib_pathB\"\r\n        if errorlevel 1 ( if exist \"%temp%\\%_rand%_cmder_lib_pathA\" del \"%temp%\\%_rand%_cmder_lib_pathA\" & if exist \"%temp%\\%_rand%_cmder_lib_pathB\" del \"%temp%\\%_rand%_cmder_lib_pathB\" & goto :toolong )\r\n        fc /b \"%temp%\\%_rand%_cmder_lib_pathA\" \"%temp%\\%_rand%_cmder_lib_pathB\" 2>nul 1>nul\r\n        if errorlevel 1 ( del \"%temp%\\%_rand%_cmder_lib_pathA\" & del \"%temp%\\%_rand%_cmder_lib_pathB\" & set \"_rand=\" & goto :changed )\r\n        del \"%temp%\\%_rand%_cmder_lib_pathA\" & del \"%temp%\\%_rand%_cmder_lib_pathB\" & set \"_rand=\"\r\n        exit /b\r\n\r\n    :changed\r\n        %print_debug% :enhance_path \"END Env Var - PATH=%PATH%\"\r\n        %print_debug% :enhance_path \"Env Var %find_query% - found=%found%\"\r\n        exit /b\r\n\r\n    exit /b\r\n\r\n:set_found\r\n    if \"%ERRORLEVEL%\" == \"0\" (\r\n        set found=1\r\n    )\r\n\r\n    exit /b\r\n\r\n:enhance_path_recursive\r\n:::===============================================================================\r\n:::enhance_path_recursive - Add a directory and subs to the path env variable if\r\n:::                         required.\r\n:::.\r\n:::include:\r\n:::.\r\n:::  call \"$0\"\r\n:::.\r\n:::usage:\r\n:::.\r\n:::  call \"%~DP0lib_path\" enhance_path_recursive \"[dir_path]\" [max_depth] [append]\r\n:::.\r\n:::required:\r\n:::.\r\n:::  [dir_path] <in> Fully qualified directory path. Ex: \"c:\\bin\"\r\n:::.\r\n:::options:\r\n:::.\r\n:::  [max_depth] <in> Max recursion depth.  Default: 1\r\n:::.\r\n:::  append      <in> Append instead to path env variable rather than pre-pend.\r\n:::.\r\n:::output:\r\n:::.\r\n:::  path       <out> Sets the path env variable if required.\r\n:::-------------------------------------------------------------------------------\r\n    if \"%~1\" neq \"\" (\r\n        set \"add_path=%~1\"\r\n    ) else (\r\n        %print_error% \"You must specify a directory to add to the path!\"\r\n        exit /b 1\r\n    )\r\n\r\n    set \"depth=%~2\"\r\n    set \"max_depth=%~3\"\r\n\r\n    if \"%~4\" neq \"\" if /i \"%~4\" == \"append\" (\r\n        set \"position=%~4\"\r\n    ) else (\r\n        set \"position=\"\r\n    )\r\n\r\n    dir \"%add_path%\" 2>NUL | findstr -i -e \"%find_pathext%\" >NUL\r\n\r\n    if \"%ERRORLEVEL%\" == \"0\" (\r\n        set \"add_to_path=%add_path%\"\r\n    ) else (\r\n        set \"add_to_path=\"\r\n    )\r\n\r\n    if \"%fast_init%\" == \"1\" (\r\n        if \"%add_to_path%\" neq \"\" (\r\n            call :enhance_path \"%add_to_path%\" %position%\r\n        )\r\n    )\r\n\r\n    set \"PATH=%PATH:;;=;%\"\r\n    if \"%fast_init%\" == \"1\" (\r\n        exit /b\r\n    )\r\n\r\n    %print_debug% :enhance_path_recursive \"Env Var - add_path=%add_to_path%\"\r\n    %print_debug% :enhance_path_recursive \"Env Var - position=%position%\"\r\n    %print_debug% :enhance_path_recursive \"Env Var - depth=%depth%\"\r\n    %print_debug% :enhance_path_recursive \"Env Var - max_depth=%max_depth%\"\r\n\r\n    if %max_depth% gtr %depth% (\r\n        if \"%add_to_path%\" neq \"\" (\r\n            %print_debug% :enhance_path_recursive \"Adding parent directory - '%add_to_path%'\"\r\n            call :enhance_path \"%add_to_path%\" %position%\r\n        )\r\n        call :set_depth\r\n        call :loop_depth\r\n    )\r\n\r\n    set \"PATH=%PATH%\"\r\n\r\n    exit /b\r\n\r\n:set_depth\r\n    set /a \"depth=%depth%+1\"\r\n    exit /b\r\n\r\n:loop_depth\r\n    if %depth% == %max_depth% (\r\n        exit /b\r\n    )\r\n\r\n    for /d %%i in (\"%add_path%\\*\") do (\r\n        %print_debug% :enhance_path_recursive \"Env Var BEFORE - depth=%depth%\"\r\n        %print_debug% :enhance_path_recursive \"Found Subdirectory - '%%~fi'\"\r\n        call :enhance_path_recursive \"%%~fi\" %depth% %max_depth% %position%\r\n        %print_debug% :enhance_path_recursive \"Env Var AFTER- depth=%depth%\"\r\n    )\r\n    exit /b\r\n"
  },
  {
    "path": "vendor/lib/lib_profile.cmd",
    "content": "@echo off\r\n\r\ncall \"%~dp0lib_base.cmd\"\r\ncall \"%~dp0lib_console.cmd\"\r\nset lib_profile=call \"%~dp0lib_profile.cmd\"\r\n\r\nif \"%~1\" == \"/h\" (\r\n    %lib_base% help \"%~0\"\r\n) else if \"%~1\" neq \"\" (\r\n    call :%*\r\n)\r\n\r\nexit /b\r\n\r\n:::===============================================================================\r\n:::run_profile_d - Run all scripts in the passed directory path\r\n:::.\r\n:::include:\r\n:::.\r\n:::  call \"lib_profile.cmd\"\r\n:::.\r\n:::usage:\r\n:::.\r\n:::  %lib_profile% \"[dir_path]\"\r\n:::.\r\n:::required:\r\n:::.\r\n:::  [dir_path] <in> Fully qualified directory path containing init *.cmd|*.bat.\r\n:::                  Example: \"c:\\bin\"\r\n:::.\r\n:::  path       <out> Sets the path env variable if required.\r\n:::-------------------------------------------------------------------------------\r\n\r\n:run_profile_d\r\n    if not exist \"%~1\" (\r\n        mkdir \"%~1\"\r\n    )\r\n\r\n    pushd \"%~1\"\r\n    for /f \"usebackq\" %%x in ( `dir /b *.bat *.cmd 2^>nul` ) do (\r\n        %print_verbose% \"Calling '%~1\\%%x'...\"\r\n        call \"%~1\\%%x\"\r\n    )\r\n    popd\r\n    exit /b\r\n"
  },
  {
    "path": "vendor/lib/start-ssh-agent.sh",
    "content": "# Copied from https://help.github.com/articles/working-with-ssh-key-passphrases\nenv=~/.ssh/agent.env\n\nagent_load_env () { test -f \"$env\" && . \"$env\" >| /dev/null ; }\n\nagent_start () {\n    (umask 077; ssh-agent >| \"$env\")\n    . \"$env\" >| /dev/null ; }\n\nagent_load_env\n\n# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running\nagent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)\n\nif [ ! \"$SSH_AUTH_SOCK\" ] || [ $agent_run_state = 2 ]; then\n    agent_start\n    ssh-add\nelif [ \"$SSH_AUTH_SOCK\" ] && [ $agent_run_state = 1 ]; then\n    ssh-add\nfi\n\nunset env"
  },
  {
    "path": "vendor/profile.ps1",
    "content": "﻿# Init Script for PowerShell\r\n# Created as part of Cmder project\r\n# NOTE: This file must be saved using UTF-8 with BOM encoding for prompt symbol to work correctly.\r\n\r\n# !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED\r\n# !!! Use \"%CMDER_ROOT%\\config\\user_profile.ps1\" to add your own startup commands\r\n\r\n$CMDER_INIT_START = Get-Date\r\n\r\n# Determine the script root if not already set\r\nif (!$PSScriptRoot) {\r\n    $PSScriptRoot = Split-Path $Script:MyInvocation.MyCommand.Path\r\n}\r\n\r\n# We do this for Powershell as Admin Sessions because CMDER_ROOT is not being set.\r\nif (!$ENV:CMDER_ROOT) {\r\n    if ($ENV:ConEmuDir) {\r\n        $ENV:CMDER_ROOT = Resolve-Path($ENV:ConEmuDir + \"\\..\\..\")\r\n    } else {\r\n        $ENV:CMDER_ROOT = Resolve-Path($PSScriptRoot + \"\\..\")\r\n    }\r\n}\r\n\r\n# Remove trailing '\\'\r\n$ENV:CMDER_ROOT = ($ENV:CMDER_ROOT).TrimEnd(\"\\\")\r\n\r\n# Recent PowerShell versions include PowerShellGet out of the box\r\n$moduleInstallerAvailable = [bool](Get-Command -Name 'Install-Module' -ErrorAction SilentlyContinue)\r\n\r\n# Enable Debug and Verbose output if CMDER_DEBUG environment variable is set to '1' or 'true'\r\nif ($env:CMDER_DEBUG -and ($env:CMDER_DEBUG -match '^(1|true)$')) {\r\n    $DebugPreference = 'Continue'\r\n    $VerbosePreference = 'Continue'\r\n}\r\n\r\n# Add Cmder modules directory to the autoload path.\r\n$CmderModulePath = Join-path $PSScriptRoot \"psmodules/\"\r\n\r\n# Import Cmder functions\r\n$CmderFunctions  = Join-Path $CmderModulePath \"Cmder.ps1\"\r\n. $CmderFunctions\r\n\r\n# Configure PSModulePath to include Cmder modules if not already present\r\nif (-not $moduleInstallerAvailable -and -not $env:PSModulePath.Contains($CmderModulePath) ) {\r\n    $env:PSModulePath = $env:PSModulePath.Insert(0, \"$CmderModulePath;\")\r\n}\r\n\r\nif ($env:CMDER_USER_CONFIG) {\r\n    Write-Verbose \"CMDER IS ALSO USING INDIVIDUAL USER CONFIG FROM '$ENV:CMDER_USER_CONFIG'!\"\r\n}\r\n\r\n# Read vendored Git Version\r\n$gitVendorPath = Join-Path $ENV:CMDER_ROOT 'vendor\\git-for-windows\\cmd'\r\n$gitVersionVendor = Get-GitVersion -GitPath $gitVendorPath\r\nif (-not [string]::IsNullOrEmpty($gitVersionVendor)) {\r\n    Write-Debug \"GIT VENDOR: ${gitVersionVendor}\"\r\n} else {\r\n    Write-Debug \"GIT VENDOR is not present at '$gitVendorPath'\"\r\n}\r\n\r\n# Get user installed Git version(s) if found, and compare them with vendored version.\r\nforeach ($git in (Get-Command -ErrorAction SilentlyContinue 'git')) {\r\n    Write-Debug \"GIT USER PATH: $($git.Path)\"\r\n    $gitDir = Split-Path -Path $git.Path\r\n    $gitDir = Get-GitShimPath -GitPath $gitDir\r\n    $gitVersionUser = Get-GitVersion -GitPath $gitDir\r\n    Write-Debug \"GIT USER VERSION: ${gitVersionUser}\"\r\n\r\n    $useGitVersion = Compare-GitVersion -UserVersion $gitVersionUser -VendorVersion $gitVersionVendor\r\n    Write-Debug \"Using Git Version: ${useGitVersion}\"\r\n\r\n    # Use user installed Git\r\n    if ($null -eq $gitPathUser) {\r\n        Write-Debug \"Detected Git from mingw bin directory\"\r\n        Write-Debug \"Git Dir: ${gitDir}\"\r\n        if ($gitDir -match '\\\\mingw32\\\\bin' -or $gitDir -match '\\\\mingw64\\\\bin') {\r\n            $gitPathUser = $gitDir.subString(0, $gitDir.Length - 12)\r\n        } else {\r\n            $gitPathUser = $gitDir.subString(0, $gitDir.Length - 4)\r\n        }\r\n        Write-Debug \"Git Path User: ${gitDir}\"\r\n    }\r\n\r\n    if ($useGitVersion -eq $gitVersionUser) {\r\n        Write-Debug \"Using Git Dir: ${gitDir}\"\r\n        $ENV:GIT_INSTALL_ROOT = $gitPathUser\r\n        $ENV:GIT_INSTALL_TYPE = 'USER'\r\n        break\r\n    }\r\n}\r\n\r\n# Use vendored Git if no user Git found or user Git is older than vendored Git\r\nif ($null -eq $ENV:GIT_INSTALL_ROOT -and $null -ne $gitVersionVendor) {\r\n    $ENV:GIT_INSTALL_ROOT = \"$ENV:CMDER_ROOT\\vendor\\git-for-windows\"\r\n    $ENV:GIT_INSTALL_TYPE = 'VENDOR'\r\n}\r\n\r\nWrite-Debug \"GIT_INSTALL_ROOT: ${ENV:GIT_INSTALL_ROOT}\"\r\nWrite-Debug \"GIT_INSTALL_TYPE: ${ENV:GIT_INSTALL_TYPE}\"\r\n\r\nif ($null -ne $ENV:GIT_INSTALL_ROOT) {\r\n    $env:Path = Set-GitPath -GitRoot \"$ENV:GIT_INSTALL_ROOT\" -GitType $ENV:GIT_INSTALL_TYPE -GitPathUser $gitPathUser\r\n}\r\n\r\n# Create 'vi' alias for 'vim' if vim is available\r\nif (Get-Command -Name \"vim\" -ErrorAction SilentlyContinue) {\r\n    New-Alias -name \"vi\" -value vim\r\n}\r\n\r\n# PSReadline configuration\r\nif (Get-Module PSReadline -ErrorAction \"SilentlyContinue\") {\r\n    # Display an extra prompt line between the prompt and the command input\r\n    Set-PSReadlineOption -ExtraPromptLineCount 1\r\n\r\n    # Invoked when Enter is pressed to submit a command\r\n    if ($env:WT_SESSION) {\r\n        Set-PSReadLineKeyHandler -Key Enter -ScriptBlock {\r\n            # Get the current command line\r\n            $line = $null\r\n            $cursor = $null\r\n            [Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$line, [ref]$cursor)\r\n\r\n            # Accept the line first\r\n            [Microsoft.PowerShell.PSConsoleReadLine]::AcceptLine()\r\n\r\n            # Emit OSC 133;C to mark start of command output\r\n            # This is written directly to the console after the command is accepted\r\n            [Console]::Write(\"$([char]0x1B)]133;C$([char]7)\")\r\n        }\r\n    }\r\n}\r\n\r\n# Pre-assign default prompt hooks so the first run of Cmder gets a working prompt\r\n$env:gitLoaded = $null\r\n[ScriptBlock]$PrePrompt = {}\r\n[ScriptBlock]$PostPrompt = {}\r\n[ScriptBlock]$CmderPrompt = {\r\n    # Check if we're currently running under Admin privileges\r\n    $identity = [Security.Principal.WindowsIdentity]::GetCurrent()\r\n    $principal = [Security.Principal.WindowsPrincipal] $identity\r\n    $adminRole = [Security.Principal.WindowsBuiltInRole]::Administrator\r\n    $color = \"White\"\r\n    if ($principal.IsInRole($adminRole)) { $color = \"Red\" }\r\n    $Host.UI.RawUI.ForegroundColor = \"White\"\r\n    Microsoft.PowerShell.Utility\\Write-Host \"PS \" -NoNewline -ForegroundColor $color\r\n    Microsoft.PowerShell.Utility\\Write-Host $pwd.ProviderPath -NoNewLine -ForegroundColor Green\r\n    Show-GitStatus -Path $pwd.ProviderPath\r\n    Microsoft.PowerShell.Utility\\Write-Host \"`nλ\" -NoNewLine -ForegroundColor \"DarkGray\"\r\n}\r\n\r\n# Enhance Path\r\n$env:Path = \"$Env:CMDER_ROOT\\bin;$Env:CMDER_ROOT\\vendor\\bin;$env:Path;$Env:CMDER_ROOT\"\r\n\r\n# Drop *.ps1 files into \"$ENV:CMDER_ROOT\\config\\profile.d\"\r\n# to source them at startup.\r\nif (-not (Test-Path -PathType container \"$ENV:CMDER_ROOT\\config\\profile.d\")) {\r\n    New-Item -ItemType Directory -Path \"$ENV:CMDER_ROOT\\config\\profile.d\"\r\n}\r\n\r\nPush-Location $ENV:CMDER_ROOT\\config\\profile.d\r\nforeach ($x in Get-ChildItem *.psm1) {\r\n    Write-Verbose \"Sourcing $x\"\r\n    Import-Module $x\r\n}\r\nforeach ($x in Get-ChildItem *.ps1) {\r\n    Write-Verbose \"Sourcing $x\"\r\n    . $x\r\n}\r\nPop-Location\r\n\r\n# Drop *.ps1 files into \"$ENV:CMDER_USER_CONFIG\\config\\profile.d\"\r\n# to source them at startup.  Requires using cmder.exe /C [cmder_user_root_path] argument\r\nif ($ENV:CMDER_USER_CONFIG -ne \"\" -and (Test-Path \"$ENV:CMDER_USER_CONFIG\\profile.d\")) {\r\n    Push-Location $ENV:CMDER_USER_CONFIG\\profile.d\r\n    foreach ($x in Get-ChildItem *.psm1) {\r\n        Write-Verbose \"Sourcing $x\"\r\n        Import-Module $x\r\n    }\r\n    foreach ($x in Get-ChildItem *.ps1) {\r\n        Write-Verbose \"Sourcing $x\"\r\n        . $x\r\n    }\r\n    Pop-Location\r\n}\r\n\r\n# Renaming to \"config\\user_profile.ps1\" to \"user_profile.ps1\" for consistency.\r\nif (Test-Path \"$env:CMDER_ROOT\\config\\user-profile.ps1\") {\r\n    Rename-Item  \"$env:CMDER_ROOT\\config\\user-profile.ps1\" user_profile.ps1\r\n}\r\n\r\n$CmderUserProfilePath = Join-Path $env:CMDER_ROOT \"config\\user_profile.ps1\"\r\nif (Test-Path $CmderUserProfilePath) {\r\n    # Create this file and place your own command in there.\r\n    . \"$CmderUserProfilePath\" # user_profile.ps1 is not a module DO NOT USE import-module\r\n}\r\n\r\nif ($ENV:CMDER_USER_CONFIG) {\r\n    # Renaming to \"$env:CMDER_USER_CONFIG\\user-profile.ps1\" to \"user_profile.ps1\" for consistency.\r\n    if (Test-Path \"$env:CMDER_USER_CONFIG\\user-profile.ps1\") {\r\n        Rename-Item  \"$env:CMDER_USER_CONFIG\\user-profile.ps1\" user_profile.ps1\r\n    }\r\n\r\n    $env:Path = \"$Env:CMDER_USER_CONFIG\\bin;$env:Path\"\r\n\r\n    $CmderUserProfilePath = Join-Path $ENV:CMDER_USER_CONFIG \"user_profile.ps1\"\r\n    if (Test-Path $CmderUserProfilePath) {\r\n        . \"$CmderUserProfilePath\" # user_profile.ps1 is not a module DO NOT USE import-module\r\n    }\r\n}\r\n\r\nif (-not (Test-Path $CmderUserProfilePath)) {\r\n    $CmderUserProfilePath = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($CmderUserProfilePath)\r\n    Write-Host -NoNewline \"`r\"\r\n    Write-Host -BackgroundColor Green -ForegroundColor Black \"First Run: Creating user startup file: $CmderUserProfilePath\"\r\n    Copy-Item \"$env:CMDER_ROOT\\vendor\\user_profile.ps1.default\" -Destination $CmderUserProfilePath\r\n}\r\n\r\n#\r\n# Prompt Section\r\n#   Users should modify their user_profile.ps1 as it will be safe from updates.\r\n#\r\n\r\n# Only set the prompt if it is currently set to the default\r\n# This allows users to configure the prompt in their user_profile.ps1 or config\\profile.d\\*.ps1\r\nif ( $(Get-Command prompt).Definition -match 'PS \\$\\(\\$executionContext.SessionState.Path.CurrentLocation\\)\\$\\(' -and `\r\n    $(Get-Command prompt).Definition -match '\\(\\$nestedPromptLevel \\+ 1\\)\\) \";') {\r\n\r\n    <#\r\n    This scriptblock runs every time the prompt is returned.\r\n    Explicitly use functions from MS namespace to protect from being overridden in the user session.\r\n    Custom prompt functions are loaded in as constants to get the same behaviour\r\n    #>\r\n    [ScriptBlock]$Prompt = {\r\n        $lastSUCCESS = $?\r\n        $realLastExitCode = $LastExitCode\r\n\r\n        # Terminal-specific escape sequences for Windows Terminal and ConEmu\r\n        if ($env:WT_SESSION -or $env:ConEmuPID) {\r\n            # Emit OSC 133;D to mark the end of command execution with exit code\r\n            if ($env:WT_SESSION) {\r\n                Microsoft.PowerShell.Utility\\Write-Host -NoNewline \"$([char]0x1B)]133;D;$realLastExitCode$([char]7)\"\r\n            }\r\n\r\n            # Emit OSC 9;9 to enable directory tracking\r\n            # Enables \"Duplicate Tab\" and \"Split Pane\" to preserve the working directory\r\n            $loc = $executionContext.SessionState.Path.CurrentLocation\r\n            if ($loc.Provider.Name -eq \"FileSystem\") {\r\n                Microsoft.PowerShell.Utility\\Write-Host -NoNewline \"$([char]0x1B)]9;9;`\"$($loc.ProviderPath)`\"$([char]0x1B)\\\"\r\n            }\r\n\r\n            # Emit OSC 133;A to mark the start of the prompt\r\n            # Enables features like command navigation, selection, and visual separators\r\n            if ($env:WT_SESSION) {\r\n                Microsoft.PowerShell.Utility\\Write-Host -NoNewline \"$([char]0x1B)]133;A$([char]7)\"\r\n            }\r\n        }\r\n\r\n        $host.UI.RawUI.WindowTitle = Microsoft.PowerShell.Management\\Split-Path $pwd.ProviderPath -Leaf\r\n        Microsoft.PowerShell.Utility\\Write-Host -NoNewline \"$([char]0x200B)`r$([char]0x1B)[K\"\r\n        if ($lastSUCCESS -or ($LastExitCode -ne 0)) {\r\n            Microsoft.PowerShell.Utility\\Write-Host\r\n        }\r\n        PrePrompt | Microsoft.PowerShell.Utility\\Write-Host -NoNewline\r\n        CmderPrompt\r\n        PostPrompt | Microsoft.PowerShell.Utility\\Write-Host -NoNewline\r\n\r\n        # Emit OSC 133;B to mark the start of command input (after prompt, before user types)\r\n        if ($env:WT_SESSION) {\r\n            Microsoft.PowerShell.Utility\\Write-Host -NoNewline \"$([char]0x1B)]133;B$([char]7)\"\r\n        }\r\n\r\n        $global:LastExitCode = $realLastExitCode\r\n        return \" \"\r\n    }\r\n\r\n    # Once Created these code blocks cannot be overwritten\r\n    # if (-not $(Get-Command PrePrompt).Options   -match 'Constant') {Set-Item -Path function:\\PrePrompt   -Value $PrePrompt   -Options Constant}\r\n    # if (-not $(Get-Command CmderPrompt).Options -match 'Constant') {Set-Item -Path function:\\CmderPrompt -Value $CmderPrompt -Options Constant}\r\n    # if (-not $(Get-Command PostPrompt).Options  -match 'Constant') {Set-Item -Path function:\\PostPrompt  -Value $PostPrompt  -Options Constant}\r\n\r\n    Set-Item -Path function:\\PrePrompt   -Value $PrePrompt   -Options Constant\r\n    Set-Item -Path function:\\CmderPrompt -Value $CmderPrompt -Options Constant\r\n    Set-Item -Path function:\\PostPrompt  -Value $PostPrompt  -Options Constant\r\n\r\n    # Functions can be made constant only at creation time\r\n    # ReadOnly at least requires `-force` to be overwritten\r\n    # if (!$(Get-Command Prompt).Options -match 'ReadOnly') {Set-Item -Path function:\\prompt  -Value $Prompt  -Options ReadOnly}\r\n    Set-Item -Path function:\\prompt  -Value $Prompt  -Options ReadOnly\r\n}\r\n\r\n$CMDER_INIT_END = Get-Date\r\n\r\n$ElapsedTime = New-TimeSpan -Start $CMDER_INIT_START -End $CMDER_INIT_END\r\n\r\nWrite-Verbose \"Elapsed Time: $($ElapsedTime.TotalSeconds) seconds total\"\r\n"
  },
  {
    "path": "vendor/psmodules/Cmder.ps1",
    "content": "function Get-GitVersion {\r\n    param(\r\n        [Parameter(Mandatory = $true)]\r\n        [string]$GitPath\r\n    )\r\n\r\n    $gitExecutable = Join-Path $GitPath \"git.exe\"\r\n\r\n    if (-not (Test-Path $gitExecutable)) {\r\n        return $null\r\n    }\r\n\r\n    # Execute 'git --version' and capture output\r\n    $gitVersion = & $gitExecutable --version 2>$null\r\n\r\n    if ($gitVersion -match 'git version\\s+(\\S+)') {\r\n        return $Matches[1]\r\n    }\r\n\r\n    Write-Debug \"Git executable path: $gitExecutable\"\r\n    Write-Error \"'git --version' returned an improper version string!\"\r\n    Write-Error \"Unable to determine Git version from output: $gitVersion\"\r\n\r\n    return $null\r\n}\r\n\r\nfunction Get-GitShimPath {\r\n    param(\r\n        [Parameter(Mandatory = $true)]\r\n        [string]$GitPath\r\n    )\r\n    # Check if there is a shim file - if yes, read the actual executable path\r\n    # See: github.com/ScoopInstaller/Shim\r\n\r\n    $shimFile = Join-Path $GitPath \"git.shim\"\r\n    if (Test-Path $shimFile) {\r\n        $shimContent = Get-Content $shimFile -Raw\r\n        if ($shimContent -match '^\\s*path\\s*=\\s*(.+)\\s*$') {\r\n            $GitPath = $Matches[1].Trim().Replace('\\git.exe', '')\r\n        }\r\n    }\r\n\r\n    return $GitPath\r\n}\r\n\r\nfunction Compare-Version {\r\n    param(\r\n        [Parameter(Mandatory = $false)]\r\n        [AllowNull()]\r\n        [string]$UserVersion,\r\n        [Parameter(Mandatory = $false)]\r\n        [AllowNull()]\r\n        [string]$VendorVersion\r\n    )\r\n\r\n    if ([string]::IsNullOrEmpty($UserVersion)) { return -1 }\r\n    if ([string]::IsNullOrEmpty($VendorVersion)) { return 1 }\r\n\r\n    # Split version strings by dots to compare segment by segment\r\n    # For \"2.49.0.windows.1\", we get: [\"2\", \"49\", \"0\", \"windows\", \"1\"]\r\n    $userParts = $UserVersion -split '\\.'\r\n    $vendorParts = $VendorVersion -split '\\.'\r\n\r\n    $maxLength = [Math]::Max($userParts.Count, $vendorParts.Count)\r\n\r\n    for ($i = 0; $i -lt $maxLength; $i++) {\r\n        $userPart = if ($i -lt $userParts.Count) { $userParts[$i] } else { '' }\r\n        $vendorPart = if ($i -lt $vendorParts.Count) { $vendorParts[$i] } else { '' }\r\n\r\n        # Check if both parts are purely numeric\r\n        $userIsNumeric = $userPart -match '^\\d+$'\r\n        $vendorIsNumeric = $vendorPart -match '^\\d+$'\r\n\r\n        if ($userIsNumeric -and $vendorIsNumeric) {\r\n            # Both numeric: compare as integers (so 49 > 5, not lexicographic)\r\n            $userNum = [int]$userPart\r\n            $vendorNum = [int]$vendorPart\r\n\r\n            if ($userNum -gt $vendorNum) { return 1 }\r\n            if ($userNum -lt $vendorNum) { return -1 }\r\n        }\r\n        elseif ($userIsNumeric -and -not $vendorIsNumeric) {\r\n            # Numeric segment comes before text segment (e.g., \"2.0\" < \"2.0.rc1\")\r\n            return -1\r\n        }\r\n        elseif (-not $userIsNumeric -and $vendorIsNumeric) {\r\n            # Text segment comes after numeric segment\r\n            return 1\r\n        }\r\n        else {\r\n            # Both are text: use case-insensitive lexicographic comparison\r\n            $cmp = [string]::Compare($userPart, $vendorPart, $true)\r\n            if ($cmp -ne 0) { return [Math]::Sign($cmp) }\r\n        }\r\n    }\r\n\r\n    return 0\r\n}\r\n\r\nfunction Compare-GitVersion {\r\n    param(\r\n        [Parameter(Mandatory = $false)]\r\n        [AllowNull()]\r\n        [string]$UserVersion,\r\n        [Parameter(Mandatory = $false)]\r\n        [AllowNull()]\r\n        [string]$VendorVersion\r\n    )\r\n\r\n    $result = Compare-Version -UserVersion $UserVersion -VendorVersion $VendorVersion\r\n\r\n    Write-Debug \"Compare Versions Result: $result\"\r\n    if ($result -ge 0) {\r\n        return $UserVersion\r\n    }\r\n    return $VendorVersion\r\n}\r\n\r\nfunction Set-GitPath {\r\n    param(\r\n        [Parameter(Mandatory = $true)]\r\n        [string]$GitRoot,\r\n        [Parameter(Mandatory = $true)]\r\n        [string]$GitType,\r\n        [Parameter(Mandatory = $false)]\r\n        [string]$GitPathUser\r\n    )\r\n\r\n    # Proposed Behavior\r\n\r\n    # Modify the path if we are using VENDORED Git, do nothing if using USER Git.\r\n    # If User Git is installed but is older, match its path config adding paths\r\n    # in the same path positions allowing a user to configure Cmder Git path\r\n    # using locally installed Git Path Config.\r\n\r\n    if ($GitType -ne 'VENDOR') {\r\n        return $env:Path\r\n    }\r\n\r\n    $newPath = $env:Path\r\n\r\n    # Replace user Git path with vendored Git if user path exists\r\n    if ($GitPathUser) {\r\n        Write-Verbose \"Cmder 'profile.ps1': Replacing older user Git path '$GitPathUser' with newer vendored Git path '$GitRoot' in the system path...\"\r\n        $newPath = $newPath -ireplace [regex]::Escape($GitPathUser), $GitRoot\r\n    } else {\r\n        # Add Git cmd directory to the path\r\n        $gitCmd = Join-Path $GitRoot \"cmd\"\r\n        if (-not ($newPath -match [regex]::Escape($gitCmd))) {\r\n            Write-Debug \"Adding $gitCmd to the path\"\r\n            $newPath = \"$gitCmd;$newPath\"\r\n        }\r\n\r\n        # Add mingw[32|64]\\bin directories to the path, if they exist and not already present\r\n        # Prefer mingw64 on 64-bit systems, mingw32 on 32-bit systems\r\n        $is64Bit = [Environment]::Is64BitOperatingSystem\r\n        $mingwDirs = if ($is64Bit) { @('mingw64', 'mingw32') } else { @('mingw32') }\r\n\r\n        foreach ($mingw in $mingwDirs) {\r\n            $mingwBin = Join-Path $GitRoot \"$mingw\\bin\"\r\n            if ((Test-Path $mingwBin) -and -not ($newPath -match [regex]::Escape($mingwBin))) {\r\n                Write-Debug \"Adding $mingwBin to the path\"\r\n                $newPath = \"$newPath;$mingwBin\"\r\n                break\r\n            }\r\n        }\r\n\r\n        # Add usr\\bin directory to the path\r\n        $usrBin = Join-Path $GitRoot \"usr\\bin\"\r\n        if ((Test-Path $usrBin) -and -not ($newPath -match [regex]::Escape($usrBin))) {\r\n            Write-Debug \"Adding $usrBin to the path\"\r\n            $newPath = \"$newPath;$usrBin\"\r\n        }\r\n    }\r\n\r\n    return $newPath\r\n}\r\n\r\nfunction Import-Git {\r\n    $gitModule = Get-Module -Name Posh-Git -ListAvailable\r\n\r\n    if (-not $gitModule) {\r\n        Microsoft.PowerShell.Utility\\Write-Host -NoNewline \"`r`n\"\r\n        Write-Warning \"Missing git support, install posh-git with 'Install-Module posh-git' and restart Cmder.\"\r\n        Microsoft.PowerShell.Utility\\Write-Host -NoNewline \"`r$([char]0x1B)[A\"\r\n        return $false\r\n    }\r\n\r\n    # Import posh-git module (works for all versions)\r\n    Import-Module Posh-Git -ErrorAction SilentlyContinue | Out-Null\r\n\r\n    # Apply version-specific settings for posh-git 1.0.0+\r\n    if (($gitModule.Version -ge [version]\"1.0.0\") -and (Get-Variable -Name GitPromptSettings -ErrorAction SilentlyContinue)) {\r\n        $GitPromptSettings.AnsiConsole = $false\r\n    }\r\n\r\n    return $true\r\n}\r\n\r\nfunction Show-GitStatus {\r\n    param(\r\n        [Parameter(Mandatory = $true)]\r\n        [string]$Path\r\n    )\r\n\r\n    if (-not (Get-Command git -ErrorAction SilentlyContinue)) {\r\n        return\r\n    }\r\n\r\n    $gitDir = Join-Path $Path '.git'\r\n    if (-not (Test-Path $gitDir)) {\r\n        $parentPath = Split-Path $Path\r\n        if ($parentPath) {\r\n            Show-GitStatus -Path $parentPath\r\n        }\r\n        return\r\n    }\r\n\r\n    if (Get-GitStatusSetting) {\r\n        if ($null -eq $env:gitLoaded) {\r\n            $env:gitLoaded = Import-Git\r\n        }\r\n        if ($env:gitLoaded -eq $true) {\r\n            Write-VcsStatus\r\n        }\r\n    } else {\r\n        $headFile = Join-Path $gitDir 'HEAD'\r\n        if (Test-Path $headFile) {\r\n            $headContent = Get-Content $headFile -Raw\r\n            if ($headContent -match 'ref: refs/heads/(.+)') {\r\n                $branchName = $Matches[1].Trim()\r\n            } else {\r\n                $shortHash = $headContent.Substring(0, [Math]::Min(7, $headContent.Length))\r\n                $branchName = \"HEAD detached at $shortHash\"\r\n            }\r\n            Microsoft.PowerShell.Utility\\Write-Host \" [$branchName]\" -NoNewline -ForegroundColor White\r\n        }\r\n    }\r\n}\r\n\r\nfunction Get-GitStatusSetting {\r\n    $gitConfig = git --no-pager config -l 2>$null | Out-String\r\n\r\n    # Check if git status display is disabled via config\r\n    # Matches: cmder.status=false or cmder.psstatus=false (PowerShell-specific)\r\n    if ($gitConfig -match '(?m)^cmder\\.(ps)?status=false$') {\r\n        return $false\r\n    }\r\n\r\n    return $true\r\n}\r\n"
  },
  {
    "path": "vendor/sources.json",
    "content": "[\n  {\n    \"name\": \"git-for-windows\",\n    \"version\": \"2.52.0.windows.1\",\n    \"url\": \"https://github.com/git-for-windows/git/releases/download/v2.52.0.windows.1/PortableGit-2.52.0-64-bit.7z.exe\"\n  },\n  {\n    \"name\": \"clink\",\n    \"version\": \"1.9.5\",\n    \"url\": \"https://github.com/chrisant996/clink/releases/download/v1.9.5/clink.1.9.5.ee6b4f.zip\"\n  },\n  {\n    \"name\": \"conemu-maximus5\",\n    \"version\": \"23.07.24\",\n    \"url\": \"https://github.com/ConEmu/ConEmu/releases/download/v23.07.24/ConEmuPack.230724.7z\"\n  },\n  {\n    \"name\": \"windows-terminal\",\n    \"version\": \"1.23.12811.0\",\n    \"url\": \"https://github.com/microsoft/terminal/releases/download/v1.23.12811.0/Microsoft.WindowsTerminal_1.23.12811.0_x64.zip\"\n  },\n  {\n    \"name\": \"clink-completions\",\n    \"version\": \"0.6.7\",\n    \"url\": \"https://github.com/vladimir-kotikov/clink-completions/archive/v0.6.7.zip\"\n  }\n]\n"
  },
  {
    "path": "vendor/user_aliases.cmd.default",
    "content": ";= @echo off\n;= rem Call DOSKEY and use this file as the macrofile\n;= %SystemRoot%\\system32\\doskey /listsize=1000 /macrofile=%0%\n;= rem In batch mode, jump to the end of the file\n;= goto:eof\n;= Add aliases below here\ne.=explorer .\ngl=git log --oneline --all --graph --decorate  $*\nl=ls --show-control-chars -CFGNhp --color --ignore={\"NTUSER.DAT*\",\"ntuser.dat*\"} $*\nls=ls --show-control-chars -F --color $*\npwd=cd\nclear=cls\nunalias=alias /d $1\nvi=vim $*\ncmderr=cd /d \"%CMDER_ROOT%\"\npwsh=%SystemRoot%/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command \"Invoke-Expression '. ''%CMDER_ROOT%/vendor/profile.ps1'''\"\n"
  },
  {
    "path": "vendor/user_profile.cmd.default",
    "content": ":: use this file to run your own startup commands\n:: use in front of the command to prevent printing the command\n\n:: uncomment this to have the ssh agent load when cmder starts\n:: call \"%GIT_INSTALL_ROOT%/cmd/start-ssh-agent.cmd\" /k exit\n\n:: uncomment the next two lines to use pageant as the ssh authentication agent\n:: SET SSH_AUTH_SOCK=/tmp/.ssh-pageant-auth-sock\n:: call \"%GIT_INSTALL_ROOT%/cmd/start-ssh-pageant.cmd\"\n\n:: you can add your plugins to the cmder path like so\n:: set \"PATH=%CMDER_ROOT%\\vendor\\whatever;%PATH%\"\n\n:: arguments in this batch are passed from init.bat, you can quickly parse them like so:\n:: more usage can be seen by typing \"cexec /?\"\n\n:: %ccall% \"/customOption\" \"command/program\"\n\n@echo off\n"
  },
  {
    "path": "vendor/user_profile.ps1.default",
    "content": "# Use this file to run your own startup commands\n\n## Prompt Customization\n<#\n.SYNTAX\n    <PrePrompt><CMDER DEFAULT>\n    λ <PostPrompt> <repl input>\n.EXAMPLE\n    <PrePrompt>N:\\Documents\\src\\cmder [master]\n    λ <PostPrompt> |\n#>\n\n[ScriptBlock]$PrePrompt = {\n\n}\n\n# Replace the cmder prompt entirely with this.\n# [ScriptBlock]$CmderPrompt = {}\n\n[ScriptBlock]$PostPrompt = {\n\n}\n\n## <Continue to add your own>\n\n# # Delete default powershell aliases that conflict with bash commands\n# if (get-command git) {\n#     del -force alias:cat\n#     del -force alias:clear\n#     del -force alias:cp\n#     del -force alias:diff\n#     del -force alias:echo\n#     del -force alias:kill\n#     del -force alias:ls\n#     del -force alias:mv\n#     del -force alias:ps\n#     del -force alias:pwd\n#     del -force alias:rm\n#     del -force alias:sleep\n#     del -force alias:tee\n# }\n"
  },
  {
    "path": "vendor/user_profile.sh.default",
    "content": "# use this file to run your own startup commands for msys2 bash'\n\n# To add a new vendor to the path, do something like:\n# export PATH=${CMDER_ROOT}/vendor/whatever:${PATH}\n\n# Uncomment this to have the ssh agent load with the first bash terminal\n# . \"${CMDER_ROOT}/vendor/lib/start-ssh-agent.sh\""
  }
]