<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Janko</title>
    <description>The latest articles on DEV Community by Janko (@jankoweb).</description>
    <link>https://dev.to/jankoweb</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F520394%2F0f380464-d76f-4012-9366-5a38530383e6.jpeg</url>
      <title>DEV Community: Janko</title>
      <link>https://dev.to/jankoweb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jankoweb"/>
    <language>en</language>
    <item>
      <title>test kodu</title>
      <dc:creator>Janko</dc:creator>
      <pubDate>Sun, 08 Mar 2026 18:18:34 +0000</pubDate>
      <link>https://dev.to/jankoweb/test-kodu-45k3</link>
      <guid>https://dev.to/jankoweb/test-kodu-45k3</guid>
      <description>&lt;p&gt;Toto je ukazka kodu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
alert('ahoj');&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>test</category>
      <category>devto</category>
      <category>automation</category>
    </item>
    <item>
      <title>How to Fix GitHub Copilot Terminal Integration in VS Code</title>
      <dc:creator>Janko</dc:creator>
      <pubDate>Thu, 05 Feb 2026 16:04:54 +0000</pubDate>
      <link>https://dev.to/jankoweb/how-to-fix-github-copilot-terminal-integration-in-vs-code-294p</link>
      <guid>https://dev.to/jankoweb/how-to-fix-github-copilot-terminal-integration-in-vs-code-294p</guid>
      <description>&lt;p&gt;If your GitHub Copilot Chat is failing to send commands to the terminal or constantly asking for permission, follow these steps to fix your &lt;code&gt;settings.json&lt;/code&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  1. Enable Shell Integration
&lt;/h2&gt;

&lt;p&gt;Copilot cannot interact with the terminal without this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Change in settings.json:&lt;/strong&gt;&lt;br&gt;
"terminal.integrated.shellIntegration.enabled": true&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Relocate Chat for Stability
&lt;/h2&gt;

&lt;p&gt;Running Chat in the terminal panel often causes focus issues. Use the Sidebar instead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Change in settings.json:&lt;/strong&gt;&lt;br&gt;
"github.copilot.chat.terminalChatLocation": "chatView"&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary for settings.json
&lt;/h2&gt;

&lt;p&gt;{&lt;br&gt;
  "terminal.integrated.shellIntegration.enabled": true,&lt;br&gt;
  "github.copilot.chat.terminalChatLocation": "chatView",&lt;br&gt;
}&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>githubcopilot</category>
      <category>terminal</category>
      <category>integration</category>
    </item>
    <item>
      <title>Enhancing Todo Tree in VS Code</title>
      <dc:creator>Janko</dc:creator>
      <pubDate>Sun, 04 Jan 2026 20:56:02 +0000</pubDate>
      <link>https://dev.to/jankoweb/enhancing-todo-tree-in-vs-code-44n9</link>
      <guid>https://dev.to/jankoweb/enhancing-todo-tree-in-vs-code-44n9</guid>
      <description>&lt;p&gt;Todo Tree collects inline TODO/FIXME-style comments from your code and shows them in a compact tree view in VS Code. Below is a concise explanation of useful settings and why they help.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Group items in the tree (&lt;code&gt;todo-tree.tree.grouped&lt;/code&gt;) to organise by file or tag for faster navigation.&lt;/li&gt;
&lt;li&gt;Enable grouping buttons (&lt;code&gt;todo-tree.tree.buttons.groupByTag&lt;/code&gt;, &lt;code&gt;groupBySubTag&lt;/code&gt;) to quickly switch views.&lt;/li&gt;
&lt;li&gt;Define a clear set of tags in &lt;code&gt;todo-tree.general.tags&lt;/code&gt; (e.g. &lt;code&gt;TODO&lt;/code&gt;, &lt;code&gt;FIXME&lt;/code&gt;, &lt;code&gt;[ ]&lt;/code&gt;, &lt;code&gt;@urgent&lt;/code&gt;) so filtering is predictable.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;todo-tree.highlights.customHighlight&lt;/code&gt; to colour-code priorities or owners, making high-priority items stand out.&lt;/li&gt;
&lt;li&gt;Adjust the &lt;code&gt;todo-tree.regex.regex&lt;/code&gt; to match your comment styles across languages (line comments, block comments, markdown lists, etc.).&lt;/li&gt;
&lt;li&gt;Limit scope by excluding large folders or node_modules so the tree stays relevant and responsive.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example &lt;code&gt;settings.json&lt;/code&gt; snippets (adapt to your preferences):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"todo-tree.tree.tagsOnly": true,
  "todo-tree.tree.grouped": true,
  "todo-tree.tree.buttons.groupByTag": true,
  "todo-tree.tree.buttons.groupBySubTag": true,
  "todo-tree.general.tags": [
    "[ ]",
    "[/]",
    "@jankoweb",
    "TODO",
    "FIXME",
    "@1",
    "@2",
    "@3",
    "@4"
  ],
  "todo-tree.regex.regex": "(//|#|&amp;lt;!--|;|/\\*|^|^[ \\t]*\\*|^[ \\t]*(-|\\d+.))\\s*($TAGS)",
  "todo-tree.regex.regexCaseSensitive": false,
  "todo-tree.filtering.includeGlobs": ["**/*.todo", "**/*.td"],
  "todo-tree.filtering.excludeGlobs": ["**/node_modules/*/**"],
  "todo-tree.tree.labelFormat": "${afterOrBefore}",
  "todo-tree.highlights.customHighlight": {
    "[ ]": { "foreground": "green" },
    "[/]": { "foreground": "yellow" },
    "[x]": { "foreground": "silver" },
    "@jankoweb": { "foreground": "magenta" },
    "TODO": { "foreground": "green" },
    "FIXME": { "foreground": "lime" },
    "@1": { "foreground": "red" },
    "@2": { "foreground": "orange" },
    "@3": { "foreground": "yellow" },
    "@4": { "foreground": "blue" }
  },
  "todo-tree.highlights.defaultHighlight": {
    "type": "whole-line"
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Workflow tips: keep tag names short and consistent, include owner prefixes when helpful, and combine Todo Tree with your issue tracker for lifecycle management. The result is faster code navigation and clearer visibility into outstanding work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fjankoweb%2FPublic.Dev.to%2Fmain%2Fposts%2F260103%2520vscode%2520todo%2520tree%2520enhancement%2F.2026-01-03%252023_22_44-Greenshot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fjankoweb%2FPublic.Dev.to%2Fmain%2Fposts%2F260103%2520vscode%2520todo%2520tree%2520enhancement%2F.2026-01-03%252023_22_44-Greenshot.png" alt="Result" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>todotree</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Automating DEV.to Publishing with GitHub Actions</title>
      <dc:creator>Janko</dc:creator>
      <pubDate>Sun, 04 Jan 2026 00:04:30 +0000</pubDate>
      <link>https://dev.to/jankoweb/automating-devto-publishing-with-github-actions-3dj0</link>
      <guid>https://dev.to/jankoweb/automating-devto-publishing-with-github-actions-3dj0</guid>
      <description>&lt;p&gt;GitHub Actions can automate publishing your markdown articles to DEV.to whenever you push changes to your repository. &lt;/p&gt;

&lt;h2&gt;
  
  
  What You Need
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;A GitHub repository with your articles in a &lt;code&gt;posts/&lt;/code&gt; folder (markdown files with front matter).&lt;/li&gt;
&lt;li&gt;DEV.to API key stored as a GitHub secret named &lt;code&gt;DEVTO_API_KEY&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The workflow file (&lt;code&gt;.github/workflows/publish.yml&lt;/code&gt;) with the following configuration:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Publish to dev.to&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt;
    &lt;span class="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;posts/**/*.md"&lt;/span&gt;

&lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;publish&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;fetch-depth&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Get changed posts&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;changed&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;if git rev-parse HEAD~1 &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;/span&gt;
            &lt;span class="s"&gt;FILES=$(git diff --name-only HEAD~1 HEAD \&lt;/span&gt;
              &lt;span class="s"&gt;| grep '^posts/.*\.md$' \&lt;/span&gt;
              &lt;span class="s"&gt;| tr '\n' ' ')&lt;/span&gt;
          &lt;span class="s"&gt;else&lt;/span&gt;
            &lt;span class="s"&gt;FILES=$(git show --name-only --pretty="" HEAD \&lt;/span&gt;
              &lt;span class="s"&gt;| grep '^posts/.*\.md$' \&lt;/span&gt;
              &lt;span class="s"&gt;| tr '\n' ' ')&lt;/span&gt;
          &lt;span class="s"&gt;fi&lt;/span&gt;
          &lt;span class="s"&gt;echo "FILES=$FILES" &amp;gt;&amp;gt; $GITHUB_OUTPUT&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Publish articles to dev.to&lt;/span&gt;
        &lt;span class="na"&gt;if&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;steps.changed.outputs.FILES != ''&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sinedied/publish-devto@v2&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;devto_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.DEVTO_API_KEY }}&lt;/span&gt;
          &lt;span class="na"&gt;github_token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;
          &lt;span class="na"&gt;files&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ steps.changed.outputs.FILES }}&lt;/span&gt;
          &lt;span class="na"&gt;conventional_commits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This setup automatically publishes your articles to DEV.to when you commit changes to markdown files in the posts directory.&lt;/p&gt;

</description>
      <category>github</category>
      <category>actions</category>
      <category>devto</category>
      <category>automation</category>
    </item>
    <item>
      <title>Creating a Reliable VS Code Task for New DEV.to Posts (Windows + PowerShell)</title>
      <dc:creator>Janko</dc:creator>
      <pubDate>Sat, 03 Jan 2026 23:09:03 +0000</pubDate>
      <link>https://dev.to/jankoweb/creating-a-reliable-vs-code-task-for-new-devto-posts-windows-powershell-dh9</link>
      <guid>https://dev.to/jankoweb/creating-a-reliable-vs-code-task-for-new-devto-posts-windows-powershell-dh9</guid>
      <description>&lt;p&gt;This article provides a &lt;strong&gt;verified setup&lt;/strong&gt; for creating new DEV.to posts using &lt;strong&gt;VS Code Tasks&lt;/strong&gt; on &lt;strong&gt;Windows&lt;/strong&gt; with &lt;strong&gt;PowerShell&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It avoids common issues with input handling and quoting.&lt;/p&gt;




&lt;h2&gt;
  
  
  Problem
&lt;/h2&gt;

&lt;p&gt;Using &lt;code&gt;tasks.json&lt;/code&gt; with &lt;code&gt;type: "shell"&lt;/code&gt;, inline PowerShell, and &lt;code&gt;${input:...}&lt;/code&gt; directly in scripts causes VS Code to expand inputs without escaping. Spaces in input break PowerShell parsing, leading to errors like "Missing statement block" or broken arrays.&lt;/p&gt;

&lt;h2&gt;
  
  
  Launch Configuration
&lt;/h2&gt;

&lt;p&gt;To run the task with F5 without debug UI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.2.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"configurations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Run Task"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"launch"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"program"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"echo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"Task completed"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"preLaunchTask"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"New DEV.to post (today)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"noDebug"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"console"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"internalConsole"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"internalConsoleOptions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"neverOpen"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Key Principles
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Avoid interpolating &lt;code&gt;${input:...}&lt;/code&gt; directly into PowerShell.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;type: "process"&lt;/code&gt;, not &lt;code&gt;shell&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Pass input via environment variables (&lt;code&gt;$env:VAR_NAME&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is the robust approach for Windows.&lt;/p&gt;




&lt;h2&gt;
  
  
  Working &lt;code&gt;tasks.json&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tasks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"New DEV.to post (today)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"process"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pwsh"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"-NoProfile"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"-Command"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"$ErrorActionPreference='Stop'; $d=Get-Date -Format 'yyMMdd'; $n=$env:POST_NAME; if ([string]::IsNullOrWhiteSpace($n)) { $fname=('{0}.md' -f $d) } else { $fname=('{0} {1}.md' -f $d, $n) }; $dir=Join-Path $PWD 'posts'; if (!(Test-Path $dir)) { New-Item -ItemType Directory -Path $dir | Out-Null }; $f=Join-Path $dir $fname; if (!(Test-Path $f)) { @('---','title: ""','published: false','tags:','---','') | Set-Content -Encoding utf8 $f }; code -r $f"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"cwd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${workspaceFolder}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"POST_NAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${input:postName}"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"group"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"build"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"problemMatcher"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"inputs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"postName"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"promptString"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Enter post name (optional):"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"default"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Task Behavior
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Prompts for optional post name.&lt;/li&gt;
&lt;li&gt;Creates file: &lt;code&gt;yyMMdd.md&lt;/code&gt; or &lt;code&gt;yyMMdd Name.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ensures &lt;code&gt;posts/&lt;/code&gt; directory exists.&lt;/li&gt;
&lt;li&gt;Adds DEV.to front-matter if new.&lt;/li&gt;
&lt;li&gt;Opens file in VS Code.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why It Works
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;type: "process"&lt;/code&gt; avoids shell re-parsing.&lt;/li&gt;
&lt;li&gt;Environment variables handle spaces safely.&lt;/li&gt;
&lt;li&gt;PowerShell gets valid syntax.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stable and safe for production.&lt;/p&gt;




&lt;h2&gt;
  
  
  Recommendations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use extensions for slugifying filenames.&lt;/li&gt;
&lt;li&gt;Auto-fill title from filename.&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;published: true&lt;/code&gt; for posts.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;For &lt;strong&gt;VS Code + PowerShell on Windows&lt;/strong&gt;, this is the correct way to handle inputs in &lt;code&gt;tasks.json&lt;/code&gt;. Other methods will break.&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>productivity</category>
      <category>shortcut</category>
      <category>devto</category>
    </item>
    <item>
      <title>Automating Git Workflow in VS Code: AI Commit &amp; Sync with One Shortcut</title>
      <dc:creator>Janko</dc:creator>
      <pubDate>Thu, 01 Jan 2026 20:39:08 +0000</pubDate>
      <link>https://dev.to/jankoweb/automating-git-workflow-in-vs-code-ai-commit-sync-with-one-shortcut-5d3b</link>
      <guid>https://dev.to/jankoweb/automating-git-workflow-in-vs-code-ai-commit-sync-with-one-shortcut-5d3b</guid>
      <description>&lt;h1&gt;
  
  
  Automating Git Workflow in VS Code: AI Commit &amp;amp; Sync with One Shortcut
&lt;/h1&gt;

&lt;p&gt;Manually staging files, waiting for AI to generate a commit message, and then pushing can be tedious. While extensions like GitLens Pro offer this, you can achieve the same "one-click" workflow for free using &lt;strong&gt;GitHub Copilot&lt;/strong&gt; and the &lt;strong&gt;Macro Commander&lt;/strong&gt; extension.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;To use this automation, ensure you have the following installed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Copilot&lt;/strong&gt; (for AI message generation)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Macro Commander&lt;/strong&gt; (&lt;code&gt;jeff-hykin.macro-commander&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 1: Define the Macro in &lt;code&gt;settings.json&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Open VS Code &lt;strong&gt;Settings (JSON)&lt;/strong&gt;: &lt;code&gt;Ctrl+Shift+P&lt;/code&gt; → &lt;em&gt;Preferences: Open User Settings (JSON)&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Add the following configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"macros"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"aiCommitSmart"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"javascript"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"const sleep = (ms) =&amp;gt; new Promise(r =&amp;gt; setTimeout(r, ms));"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"const gitExt = vscode.extensions.getExtension('vscode.git');"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"if (!gitExt) { await vscode.window.showErrorMessage('Git extension not found'); return; }"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"const api = gitExt.exports.getAPI(1);"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"const repo = api.repositories?.[0];"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"if (!repo) { await vscode.window.showErrorMessage('No Git repository in this window'); return; }"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"await vscode.commands.executeCommand('git.stageAll');"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"await vscode.commands.executeCommand('workbench.view.scm');"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"await vscode.commands.executeCommand('github.copilot.git.generateCommitMessage');"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"let committed = false;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"const oldHead = repo.state.HEAD?.commit;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"for (let i = 0; i &amp;lt; 300; i++) {"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  const msg = repo.inputBox.value;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  if (msg &amp;amp;&amp;amp; msg.trim().length &amp;gt; 0) {"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"    await sleep(300);"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"    await vscode.commands.executeCommand('scm.acceptInput');"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"    // wait for HEAD to change or for index/worktree to be clean"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"    for (let j = 0; j &amp;lt; 100; j++) {"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"      const head = repo.state.HEAD?.commit;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"      const indexChanges = repo.state.indexChanges ? repo.state.indexChanges.length : 0;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"      const workingChanges = repo.state.workingTreeChanges ? repo.state.workingTreeChanges.length : 0;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"      if ((head &amp;amp;&amp;amp; oldHead &amp;amp;&amp;amp; head !== oldHead) || (indexChanges === 0 &amp;amp;&amp;amp; workingChanges === 0)) {"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"        committed = true;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"        break;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"      }"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"      await sleep(100);"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"    }"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"    break;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  }"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  await sleep(100);"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"if (!committed) {"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  await vscode.window.showWarningMessage('AI Commit: timeout waiting for message or commit. Will attempt to stash and pull.');"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  try {"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"    await vscode.commands.executeCommand('git.stash');"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  } catch (e) {"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"    // ignore stash errors"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  }"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  await sleep(500);"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  try {"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"    await vscode.commands.executeCommand('git.pullRebase');"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  } catch (e) {"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"    await vscode.window.showErrorMessage('Pull failed: ' + (e &amp;amp;&amp;amp; e.message ? e.message : e));"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  }"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  try {"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"    await vscode.commands.executeCommand('git.stashPop');"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  } catch (e) {"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"    // ignore stash pop errors"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  }"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  return;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"await sleep(500);"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"// final safety check: if repo still has changes, stash, pull, pop"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"const indexChanges = repo.state.indexChanges ? repo.state.indexChanges.length : 0;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"const workingChanges = repo.state.workingTreeChanges ? repo.state.workingTreeChanges.length : 0;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"if (indexChanges &amp;gt; 0 || workingChanges &amp;gt; 0) {"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  try {"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"    await vscode.commands.executeCommand('git.stash');"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  } catch (e) {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  await sleep(300);"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  try {"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"    await vscode.commands.executeCommand('git.pullRebase');"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  } catch (e) {"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"    await vscode.window.showErrorMessage('Pull failed: ' + (e &amp;amp;&amp;amp; e.message ? e.message : e));"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  }"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  try {"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"    await vscode.commands.executeCommand('git.stashPop');"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  } catch (e) {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"} else {"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  await sleep(200);"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  await vscode.commands.executeCommand('git.push');"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  await sleep(500);"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"  await vscode.commands.executeCommand('git.pullRebase');"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"}"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 2: Map the Keyboard Shortcut
&lt;/h2&gt;

&lt;p&gt;Open &lt;strong&gt;Keyboard Shortcuts (JSON)&lt;/strong&gt;: &lt;code&gt;Ctrl+Shift+P&lt;/code&gt; → &lt;em&gt;Preferences: Open Keyboard Shortcuts (JSON)&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Add this binding:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ctrl+alt+g"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"macros.aiCommitSmart"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 3: Reload VS Code
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Ctrl+Shift+P&lt;/code&gt; → &lt;strong&gt;Reload Window&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;Once configured, simply press &lt;strong&gt;&lt;code&gt;Ctrl + Alt + G&lt;/code&gt;&lt;/strong&gt;. VS Code will:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Stage&lt;/strong&gt; all your current changes.&lt;/li&gt;
&lt;li&gt;Open the SCM view.&lt;/li&gt;
&lt;li&gt;Call &lt;strong&gt;GitHub Copilot&lt;/strong&gt; to write a commit message based on your diff.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wait&lt;/strong&gt; (up to 30 seconds) for the AI to fill in the message.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commit&lt;/strong&gt; the changes automatically.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This setup transforms a 5-step manual process into a single, seamless action.&lt;/p&gt;




&lt;h2&gt;
  
  
  Notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Works only if:

&lt;ul&gt;
&lt;li&gt;A Git repository is active&lt;/li&gt;
&lt;li&gt;You are signed in to GitHub Copilot&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Timeout is about &lt;strong&gt;30 seconds&lt;/strong&gt;
&lt;/li&gt;

&lt;li&gt;Fully compatible with &lt;strong&gt;Settings Sync&lt;/strong&gt;
&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>vscode</category>
      <category>productivity</category>
      <category>ai</category>
      <category>commit</category>
    </item>
    <item>
      <title>HTTrack Website Copier – Troubleshooting gzip Errors</title>
      <dc:creator>Janko</dc:creator>
      <pubDate>Tue, 30 Dec 2025 00:24:42 +0000</pubDate>
      <link>https://dev.to/jankoweb/httrack-website-copier-troubleshooting-gzip-errors-3ah4</link>
      <guid>https://dev.to/jankoweb/httrack-website-copier-troubleshooting-gzip-errors-3ah4</guid>
      <description>&lt;p&gt;&lt;strong&gt;HTTrack&lt;/strong&gt; is a free, open-source offline browser utility. Download sites for offline viewing: &lt;a href="https://www.httrack.com/" rel="noopener noreferrer"&gt;httrack.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Issue:&lt;/strong&gt;&lt;br&gt;
HTTrack sometimes fails to decompress (unzip) downloaded pages on jankoweb, resulting in corrupted binary output instead of HTML.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observed error:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Error when decompressing&lt;br&gt;
while fetching pages that appear to be gzip-compressed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Workaround:&lt;/strong&gt;&lt;br&gt;
In HTTrack, go to:&lt;br&gt;
&lt;code&gt;Set Options → Spider → Force HTTP/1.0&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt;&lt;br&gt;
Forcing HTTP/1.0 disables some server-side compression/transfer behaviors that may trigger decompression failures in HTTrack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt;&lt;br&gt;
Testing whether HTTP/1.0 prevents broken gzip responses from the server.&lt;/p&gt;

</description>
      <category>httrack</category>
      <category>archive</category>
      <category>issues</category>
    </item>
    <item>
      <title>VS Code Terminal Shell Integration (Windows)</title>
      <dc:creator>Janko</dc:creator>
      <pubDate>Tue, 30 Dec 2025 00:19:11 +0000</pubDate>
      <link>https://dev.to/jankoweb/vs-code-terminal-shell-integration-windows-4phf</link>
      <guid>https://dev.to/jankoweb/vs-code-terminal-shell-integration-windows-4phf</guid>
      <description>&lt;p&gt;To avoid “The terminal is awaiting input” and similar prompts, VS Code needs Terminal Shell Integration enabled and a supported shell.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt;&lt;br&gt;
If you see “The terminal is awaiting input” or similar prompts, VS Code needs Terminal Shell Integration enabled and a supported shell.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Required VS Code settings (&lt;code&gt;settings.json&lt;/code&gt;):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"terminal.integrated.shellIntegration.enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"terminal.integrated.defaultProfile.windows"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"PowerShell 7"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"terminal.integrated.profiles.windows"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"PowerShell 7"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Program Files&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;PowerShell&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;7&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;pwsh.exe"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;After changing settings:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Close all terminals&lt;/li&gt;
&lt;li&gt;Reload VS Code window&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Still seeing the message?&lt;/strong&gt;&lt;br&gt;
You are likely using &lt;strong&gt;Windows PowerShell 5.1&lt;/strong&gt;, which has unreliable shell integration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix (one-time per machine):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Install PowerShell 7:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/powershell" rel="noopener noreferrer"&gt;Microsoft Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Or run:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;winget&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Microsoft.PowerShell&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;PowerShell 7&lt;/strong&gt; fully supports VS Code terminal integration and resolves command/input detection issues.&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>windows</category>
      <category>ai</category>
    </item>
    <item>
      <title>Moved from https://jankoweb.tumblr.com/</title>
      <dc:creator>Janko</dc:creator>
      <pubDate>Mon, 29 Dec 2025 23:58:13 +0000</pubDate>
      <link>https://dev.to/jankoweb/test-26m4</link>
      <guid>https://dev.to/jankoweb/test-26m4</guid>
      <description>&lt;p&gt;&lt;strong&gt;I'm moving from &lt;a href="https://jankoweb.tumblr.com/" rel="noopener noreferrer"&gt;Tumblr&lt;/a&gt; to Dev.to!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Markdown support&lt;/strong&gt; – writing technical posts is much easier&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub integration&lt;/strong&gt; – write and manage articles in Visual Studio Code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Follow me here for new content about programming and web development!&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>git</category>
    </item>
    <item>
      <title>Coronavirus stats: worldwide country position bookmarklet</title>
      <dc:creator>Janko</dc:creator>
      <pubDate>Wed, 06 Jan 2021 16:50:16 +0000</pubDate>
      <link>https://dev.to/jankoweb/coronavirus-stats-worldwide-country-position-bookmarklet-45dj</link>
      <guid>https://dev.to/jankoweb/coronavirus-stats-worldwide-country-position-bookmarklet-45dj</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;javascript&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; 
&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onclick&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="nx"&gt;event&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;srcElement&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
 &lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Czechia&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* CHANGE THIS TO SEE OTHER STATE */&lt;/span&gt;
 &lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerText&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
 &lt;span class="nx"&gt;place&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerText&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;substring&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\n([&lt;/span&gt;&lt;span class="sr"&gt;0-9&lt;/span&gt;&lt;span class="se"&gt;]&lt;/span&gt;&lt;span class="sr"&gt;+&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
 &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; is #&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;place&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; in &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; worldwide.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Simply add this code in place of a bookmark URL - &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F2wbve3m7c0h9x36av8n7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F2wbve3m7c0h9x36av8n7.png" alt="Alt Text" width="707" height="206"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go to &lt;a href="https://www.worldometers.info/coronavirus/" rel="noopener noreferrer"&gt;https://www.worldometers.info/coronavirus/&lt;/a&gt; and click this bookmark. Then - when you click on the first row of the data table with data&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Frdustc554wsa7yd38la5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Frdustc554wsa7yd38la5.png" alt="Alt Text" width="647" height="223"&gt;&lt;/a&gt;&lt;br&gt;
the bookmarklet will show you the position of the selected country (see in code) &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fx175w5om29hoc6qqdjz0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fx175w5om29hoc6qqdjz0.png" alt="Alt Text" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>coronavirus</category>
      <category>bookmarklet</category>
      <category>worldometer</category>
    </item>
    <item>
      <title>Bookmarklet for hashtags insertion on social networks</title>
      <dc:creator>Janko</dc:creator>
      <pubDate>Sat, 12 Dec 2020 13:33:14 +0000</pubDate>
      <link>https://dev.to/jankoweb/bookmarklet-for-hashtags-insertion-on-social-networks-3akl</link>
      <guid>https://dev.to/jankoweb/bookmarklet-for-hashtags-insertion-on-social-networks-3akl</guid>
      <description>&lt;p&gt;1) Put this code in place of URL of your bookmark:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;javascript:document.execCommand('insertText', false /*no UI*/, "#education #science #popularization");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2) When you typing text into an editable (social networks etc.) array click on the created bookmark&lt;br&gt;
3) Javascript put hashtags&lt;br&gt;
You can change hashtags as you like and create other bookmarks with different hashtags.&lt;/p&gt;

&lt;h2&gt;
  
  
  Notes
&lt;/h2&gt;

&lt;p&gt;Twitter - you have to start typing text (or an error occures).&lt;/p&gt;

&lt;h2&gt;
  
  
  Tested on
&lt;/h2&gt;

&lt;p&gt;Google Chrome&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspired by
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://kubyshkin.name/posts/insert-text-into-textarea-at-cursor-position/" rel="noopener noreferrer"&gt;https://kubyshkin.name/posts/insert-text-into-textarea-at-cursor-position/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>bookmarklets</category>
      <category>socialnetworks</category>
      <category>productivity</category>
    </item>
    <item>
      <title>SOLVED: Cisco Anyconnect Linux Mint 20 SIGSEGV</title>
      <dc:creator>Janko</dc:creator>
      <pubDate>Mon, 07 Dec 2020 13:46:50 +0000</pubDate>
      <link>https://dev.to/jankoweb/cisco-anyconnect-linux-mint-20-problem-5e1c</link>
      <guid>https://dev.to/jankoweb/cisco-anyconnect-linux-mint-20-problem-5e1c</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I/O warning : failed to load external entity "/opt/cisco/anyconnect/CustomerExperienceFeedback/CustomerExperience_Feedback.xml"
I/O warning : failed to load external entity "/opt/cisco/anyconnect/CustomerExperienceFeedback/CustomerExperience_Feedback.xml"
I/O warning : failed to load external entity "/opt/cisco/anyconnect/CustomerExperienceFeedback/CustomerExperience_Feedback.xml"
Neoprávněný přístup do paměti (SIGSEGV) (core dumped [obraz paměti uložen])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Tried
&lt;/h1&gt;

&lt;p&gt;reinstall&lt;br&gt;
&lt;a href="https://unix.stackexchange.com/questions/532585/getting-dbind-warnings-about-registering-with-the-accessibility-bus" rel="noopener noreferrer"&gt;https://unix.stackexchange.com/questions/532585/getting-dbind-warnings-about-registering-with-the-accessibility-bus&lt;/a&gt;&lt;br&gt;
&lt;a href="https://askubuntu.com/questions/1039243/packet-tracer-segmentation-fault-ubuntu-18-04" rel="noopener noreferrer"&gt;https://askubuntu.com/questions/1039243/packet-tracer-segmentation-fault-ubuntu-18-04&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.cisco.com/c/en/us/td/docs/security/vpn_client/anyconnect/anyconnect40/administration/guide/b_AnyConnect_Administrator_Guide_4-0/customize-localize-anyconnect.html" rel="noopener noreferrer"&gt;https://www.cisco.com/c/en/us/td/docs/security/vpn_client/anyconnect/anyconnect40/administration/guide/b_AnyConnect_Administrator_Guide_4-0/customize-localize-anyconnect.html&lt;/a&gt;&lt;br&gt;
&lt;a href="https://askubuntu.com/questions/1040485/unable-to-open-cisco-anyconnect-secure-mobility-client-on-my-ubuntu-18-04-lts" rel="noopener noreferrer"&gt;https://askubuntu.com/questions/1040485/unable-to-open-cisco-anyconnect-secure-mobility-client-on-my-ubuntu-18-04-lts&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Solved
&lt;/h1&gt;

&lt;p&gt;Delete with sudo /opt/cisco/anyconnect and install again.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>ciscoanyconnect</category>
      <category>problem</category>
      <category>solved</category>
    </item>
  </channel>
</rss>
