388 lines
18 KiB
HTML
388 lines
18 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en" dir="auto">
|
||
|
||
<head><meta charset="utf-8">
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||
<meta name="robots" content="index, follow">
|
||
<title>New Favorite Website! | Norm-working Packets 💾</title>
|
||
<meta name="keywords" content="resources, shell, commandline">
|
||
<meta name="description" content="Regex101 has long been one of my favorite reference tools. As of today, I will be adding ExplainShell to the list of must-use tools!.">
|
||
<meta name="author" content="Me">
|
||
<link rel="canonical" href="../posts/new-favorite-website.html">
|
||
<link crossorigin="anonymous" href="../assets/css/stylesheet.5cfc680b1eeaeef9efbced92d46c2a9e876b72ee14fba85846afc4cff9e6e6f8.css" integrity="sha256-XPxoCx7q7vnvvO2S1Gwqnodrcu4U+6hYRq/Ez/nm5vg=" rel="preload stylesheet" as="style">
|
||
<script defer crossorigin="anonymous" src="../assets/js/highlight.f413e19d0714851f6474e7ee9632408e58ac146fbdbe62747134bea2fa3415e0.js" integrity="sha256-9BPhnQcUhR9kdOfuljJAjlisFG+9vmJ0cTS+ovo0FeA="
|
||
onload="hljs.initHighlightingOnLoad();"></script>
|
||
<link rel="icon" href="../favicon.ico">
|
||
<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
|
||
<link rel="icon" type="image/png" sizes="32x32" href="../rsmsncircles.ico">
|
||
<link rel="apple-touch-icon" href="../apple-touch-icon.png">
|
||
<link rel="mask-icon" href="../safari-pinned-tab.svg">
|
||
<meta name="theme-color" content="#2e2e33">
|
||
<meta name="msapplication-TileColor" content="#2e2e33">
|
||
<noscript>
|
||
<style>
|
||
#theme-toggle,
|
||
.top-link {
|
||
display: none;
|
||
}
|
||
|
||
</style>
|
||
</noscript>
|
||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-X8VR5M0K20"></script>
|
||
<script>
|
||
var doNotTrack = false;
|
||
if (!doNotTrack) {
|
||
window.dataLayer = window.dataLayer || [];
|
||
function gtag(){dataLayer.push(arguments);}
|
||
gtag('js', new Date());
|
||
gtag('config', 'G-X8VR5M0K20', { 'anonymize_ip': false });
|
||
}
|
||
</script>
|
||
<meta property="og:title" content="New Favorite Website!" />
|
||
<meta property="og:description" content="Regex101 has long been one of my favorite reference tools. As of today, I will be adding ExplainShell to the list of must-use tools!." />
|
||
<meta property="og:type" content="article" />
|
||
<meta property="og:url" content="/posts/new-favorite-website.html" />
|
||
<meta property="og:image" content="/new-website-cover.png" /><meta property="article:section" content="posts" />
|
||
<meta property="article:published_time" content="2023-09-27T10:07:01-04:00" />
|
||
<meta property="article:modified_time" content="2023-09-27T10:07:01-04:00" /><meta property="og:site_name" content="Norm-working Packets" />
|
||
|
||
<meta name="twitter:card" content="summary_large_image" />
|
||
<meta name="twitter:image" content="/new-website-cover.png" />
|
||
<meta name="twitter:title" content="New Favorite Website!"/>
|
||
<meta name="twitter:description" content="Regex101 has long been one of my favorite reference tools. As of today, I will be adding ExplainShell to the list of must-use tools!."/>
|
||
|
||
|
||
<script type="application/ld+json">
|
||
{
|
||
"@context": "https://schema.org",
|
||
"@type": "BreadcrumbList",
|
||
"itemListElement": [
|
||
{
|
||
"@type": "ListItem",
|
||
"position": 1 ,
|
||
"name": "New Favorite Website!",
|
||
"item": "/posts/new-favorite-website.html"
|
||
}
|
||
]
|
||
}
|
||
</script>
|
||
<script type="application/ld+json">
|
||
{
|
||
"@context": "https://schema.org",
|
||
"@type": "BlogPosting",
|
||
"headline": "New Favorite Website!",
|
||
"name": "New Favorite Website!",
|
||
"description": "Regex101 has long been one of my favorite reference tools. As of today, I will be adding ExplainShell to the list of must-use tools!.",
|
||
"keywords": [
|
||
"resources", "shell", "commandline"
|
||
],
|
||
"articleBody": "For the longest time, I had Regex101 as a bookmarked website for (almost) daily use. Not only does it help me build muscle memory for using regex queries without banging my head against the wall with a bunch of print and debug statements, but if I happen to be in a different language - say in javascript instead of python - it gives you the correct syntax for using regex in that language. There are even spin-off projects to use this tool while offline.\nYou can even test it again the strings you do (or don’t!) want to verify against. This website is beyond cool.\nSo this morning, when I saw Jérémy Garniaux ask if there was an “explain shell” for Vim or Neovim, this was the Regex101 but for shell commands.\nSide Note: it took me way too long how to figure out how to embed an iframe directly into Hugo without creating a new shortcode template and other suggestions. I’ll be sure to post about that in the future.\nWhen you first load ExplainShell.com, you’re greeted with a clean, minimal interface with some explanation and a very obvious search bar.\nFor those new to the command line, it also shares some suggested queries to search with. As you read over the results, you can hover on the different elements of the command and it will highlight the explanation below. I mean, look at how clean and nice that is!\nAs many other command line users are apt to do, I use the man page all the time for commands and flags I’m unsure of, or need a refresher on. While knowing what a certain flag is and what it does for a specific command is supremely helpful, I find the man pages a tad bit overwhelming. You can always grep for what you’re looking for, but even then I’ve found times where it only pulls out half of the full description, or even just the line the definition is on.\nSo the fact that this resources can extract exactly what you need in your command from a man page without digging through every line, is extremely useful! Going back to Jérémy’s original toot and question… who is going to make this same tool for Neovim?\n",
|
||
"wordCount" : "377",
|
||
"inLanguage": "en",
|
||
"image":"/new-website-cover.png","datePublished": "2023-09-27T10:07:01-04:00",
|
||
"dateModified": "2023-09-27T10:07:01-04:00",
|
||
"author":{
|
||
"@type": "Person",
|
||
"name": "Me"
|
||
},
|
||
"mainEntityOfPage": {
|
||
"@type": "WebPage",
|
||
"@id": "/posts/new-favorite-website.html"
|
||
},
|
||
"publisher": {
|
||
"@type": "Organization",
|
||
"name": "Norm-working Packets 💾",
|
||
"logo": {
|
||
"@type": "ImageObject",
|
||
"url": "/favicon.ico"
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
</head>
|
||
|
||
<body class=" dark" id="top">
|
||
<script>
|
||
if (localStorage.getItem("pref-theme") === "light") {
|
||
document.body.classList.remove('dark')
|
||
}
|
||
|
||
</script>
|
||
|
||
<header class="header">
|
||
<nav class="nav">
|
||
<div class="logo">
|
||
<a href="../" accesskey="h" title="Norm-working Packets 💾 (Alt + H)">Norm-working Packets 💾</a>
|
||
<div class="logo-switches">
|
||
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
|
||
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
|
||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
|
||
stroke-linejoin="round">
|
||
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
|
||
</svg>
|
||
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
|
||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
|
||
stroke-linejoin="round">
|
||
<circle cx="12" cy="12" r="5"></circle>
|
||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||
</svg>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<ul id="menu">
|
||
</ul>
|
||
</nav>
|
||
</header>
|
||
<main class="main">
|
||
|
||
<article class="post-single">
|
||
<header class="post-header">
|
||
<div class="breadcrumbs"><a href="../">Home</a></div>
|
||
<h1 class="post-title">
|
||
New Favorite Website!
|
||
</h1>
|
||
<div class="post-description">
|
||
Regex101 has long been one of my favorite reference tools. As of today, I will be adding ExplainShell to the list of must-use tools!.
|
||
</div>
|
||
<div class="post-meta"><span title='2023-09-27 10:07:01 -0400 EDT'>September 27, 2023</span> · 2 min · 377 words · Me
|
||
|
||
</div>
|
||
</header>
|
||
<div class="post-content"><p>For the longest time, I had <a href="www.regex101.com">Regex101</a> as a bookmarked website for (almost) daily use. Not only does it
|
||
help me build muscle memory for using regex queries without banging my head against the wall with a bunch of print and debug
|
||
statements, but if I happen to be in a different language - say in javascript instead of python - it gives you the correct
|
||
syntax for using regex in that language. There are even <a href="https://github.com/nedrysoft/regex101">spin-off projects</a> to use
|
||
this tool while offline.</p>
|
||
<p>You can even test it again the strings you do (or don’t!) want to verify against. This website is beyond cool.</p>
|
||
<p>So this morning, when I saw <a href="https://mapstodon.space/@jeremy">Jérémy Garniaux</a> ask if there was an “explain shell” for Vim or
|
||
Neovim, this was the Regex101 but for shell commands.</p>
|
||
<iframe
|
||
src="https://mapstodon.space/@jeremy/111135981133166060/embed"
|
||
width="100%" height="400px" style="border:none;"></iframe>
|
||
|
||
|
||
<style type="text/css">
|
||
.box-shortcode {
|
||
padding: 1.6em;
|
||
padding-top: 1.4em;
|
||
line-height: 1.4em;
|
||
margin-top: 1em;
|
||
margin-bottom: 2em;
|
||
border-radius: 4px;
|
||
color: #444;
|
||
background: #f3ebe850;
|
||
}
|
||
|
||
.box-title {
|
||
margin: -18px -18px 12px;
|
||
padding: 4px 18px;
|
||
border-radius: 4px 4px 0 0;
|
||
font-weight: 700;
|
||
color: #fff;
|
||
background: #6ab0de;
|
||
}
|
||
.box-shortcode.warning .box-title {
|
||
background: #ff6b6b;
|
||
}
|
||
.box-shortcode.warning {
|
||
background: #ff6b6b4f;
|
||
}
|
||
.box-shortcode.info .box-title {
|
||
background: #0089e488;
|
||
}
|
||
.box-shortcode.info {
|
||
background: #0089e41c;
|
||
box-shadow: 3px 3px 5px #0089e410;
|
||
}
|
||
.box-shortcode.important .box-title {
|
||
background: #f7ec2c;
|
||
}
|
||
.box-shortcode.important {
|
||
background: #f7ec2c7d;
|
||
}
|
||
.box-shortcode.tip .box-title {
|
||
background: #a3ffa34d;
|
||
}
|
||
.box-shortcode.tip {
|
||
background: #a3ffa34d;
|
||
box-shadow: 3px 3px 5px #0089e410;
|
||
}
|
||
.icon-box {
|
||
display: inline-flex;
|
||
align-self: center;
|
||
margin-right: 8px;
|
||
}
|
||
.icon-box img,
|
||
.icon-box svg {
|
||
height: 1em;
|
||
width: 1em;
|
||
fill: currentColor;
|
||
}
|
||
.icon-box img,
|
||
.icon-box.baseline svg {
|
||
top: 0.125em;
|
||
position: relative;
|
||
}
|
||
.box-shortcode p {
|
||
margin-bottom: 0.6em;
|
||
}
|
||
.box-shortcode p:first-of-type {
|
||
display: inline;
|
||
}
|
||
.box-shortcode p:nth-of-type(2) {
|
||
margin-top: 0.6em;
|
||
}
|
||
.box-shortcode p:last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
</style>
|
||
|
||
|
||
<svg width="0" height="0" display="none" xmlns="http://www.w3.org/2000/svg">
|
||
<symbol id="tip-box" viewBox="0 0 512 512" preserveAspectRatio="xMidYMid meet">
|
||
<path
|
||
d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"/>
|
||
</symbol>
|
||
<symbol id="important-box" viewBox="0 0 512 512" preserveAspectRatio="xMidYMid meet">
|
||
<path
|
||
d="M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/>
|
||
</symbol>
|
||
<symbol id="warning-box" viewBox="0 0 576 512" preserveAspectRatio="xMidYMid meet">
|
||
<path
|
||
d="M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/>
|
||
</symbol>
|
||
<symbol id="info-box" viewBox="0 0 512 512" preserveAspectRatio="xMidYMid meet">
|
||
<path
|
||
d="M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"/>
|
||
</symbol>
|
||
</svg><div class="box box-shortcode info" >
|
||
<span class="icon-box baseline">
|
||
<svg><use href="#info-box"></use></svg>
|
||
</span>
|
||
<p><em>Side Note: it took me way too long how to figure out how to embed an iframe directly into Hugo without creating a new shortcode template and other suggestions. I’ll be sure to post about that in the future.</em></p>
|
||
</div>
|
||
|
||
<p>When you first load ExplainShell.com, you’re greeted with a clean, minimal interface with some explanation and a very obvious
|
||
search bar.</p>
|
||
<p><img loading="lazy" src="../posts/img/explain-shell-homepage.png" alt="ExplainShell Homepage" />
|
||
</p>
|
||
<p>For those new to the command line, it also shares some suggested queries to search with. As you read over the results, you
|
||
can hover on the different elements of the command and it will highlight the explanation below. I mean, look at how clean and
|
||
nice that is!</p>
|
||
<p><img loading="lazy" src="../posts/img/explain-shell-interface.png" alt="ExplainShell Results" />
|
||
</p>
|
||
<p>As many other command line users are apt to do, I use the man page all the time for commands and flags I’m unsure of, or need
|
||
a refresher on. While knowing what a certain flag is and what it does for a specific command is supremely helpful, I find the
|
||
man pages a tad bit overwhelming. You can always <code>grep</code> for what you’re looking for, but even then I’ve found times where it
|
||
only pulls out half of the full description, or even just the line the definition is on.</p>
|
||
<p>So the fact that this resources can extract exactly what you need in your command from a man page without digging through
|
||
every line, is extremely useful! Going back to Jérémy’s original toot and question… who is going to make this same tool for
|
||
Neovim?</p>
|
||
<style>
|
||
.box-shortcode {
|
||
color: #e8e8e8;
|
||
border: none;
|
||
}
|
||
</style>
|
||
|
||
|
||
</div>
|
||
|
||
<footer class="post-footer">
|
||
<ul class="post-tags">
|
||
<li><a href="../tags/resources.html">resources</a></li>
|
||
<li><a href="../tags/shell.html">shell</a></li>
|
||
<li><a href="../tags/commandline.html">commandline</a></li>
|
||
</ul>
|
||
<nav class="paginav">
|
||
<a class="next" href="../posts/multiple_git_remotes.html">
|
||
<span class="title">Next »</span>
|
||
<br>
|
||
<span>Pushing a Single Local Git Repo to Multiple Remote Repos</span>
|
||
</a>
|
||
</nav>
|
||
|
||
</footer>
|
||
</article>
|
||
</main>
|
||
|
||
<footer class="footer">
|
||
<span>© 2023 <a href="../">Norm-working Packets 💾</a></span>
|
||
<span>
|
||
Powered by
|
||
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
|
||
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
|
||
</span>
|
||
</footer>
|
||
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
|
||
<path d="M12 6H0l6-6z" />
|
||
</svg>
|
||
</a>
|
||
|
||
<script>
|
||
let menu = document.getElementById('menu')
|
||
if (menu) {
|
||
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
|
||
menu.onscroll = function () {
|
||
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
|
||
}
|
||
}
|
||
|
||
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
||
anchor.addEventListener("click", function (e) {
|
||
e.preventDefault();
|
||
var id = this.getAttribute("href").substr(1);
|
||
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
|
||
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
|
||
behavior: "smooth"
|
||
});
|
||
} else {
|
||
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
|
||
}
|
||
if (id === "top") {
|
||
history.replaceState(null, null, " ");
|
||
} else {
|
||
history.pushState(null, null, `#${id}`);
|
||
}
|
||
});
|
||
});
|
||
|
||
</script>
|
||
<script>
|
||
var mybutton = document.getElementById("top-link");
|
||
window.onscroll = function () {
|
||
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
|
||
mybutton.style.visibility = "visible";
|
||
mybutton.style.opacity = "1";
|
||
} else {
|
||
mybutton.style.visibility = "hidden";
|
||
mybutton.style.opacity = "0";
|
||
}
|
||
};
|
||
|
||
</script>
|
||
<script>
|
||
document.getElementById("theme-toggle").addEventListener("click", () => {
|
||
if (document.body.className.includes("dark")) {
|
||
document.body.classList.remove('dark');
|
||
localStorage.setItem("pref-theme", 'light');
|
||
} else {
|
||
document.body.classList.add('dark');
|
||
localStorage.setItem("pref-theme", 'dark');
|
||
}
|
||
})
|
||
|
||
</script>
|
||
</body>
|
||
|
||
</html>
|