') + ')', 'gi');
if (regex.test(text)) {
found = true;
var frag = document.createDocumentFragment();
var parts = text.split(regex);
parts.forEach(function(part, i) {
if (i % 2 === 0) {
frag.appendChild(document.createTextNode(part));
} else {
var span = document.createElement('span');
span.className = 'userscript-highlight';
span.textContent = part;
frag.appendChild(span);
}
});
node.parentNode.replaceChild(frag, node);
}
});
} else if (node.nodeType === 1 && node.childNodes) { // element
var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];
if (!skipTags.includes(node.tagName)) {
Array.from(node.childNodes).forEach(highlight);
}
}
}
highlight(document.body);
// Re-highlight on dynamic content
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(m) {
m.addedNodes.forEach(function(node) {
if (node.nodeType === 1 || node.nodeType === 3) highlight(node);
});
});
});
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); }
})();
(function(){
try {
var __m = "*";
var __re = new RegExp('^' + ".*" + ', 'i');
if (__m === '*' || __re.test(location.href)) {
// Strip utm_, fbclid, gclid, etc. from all links on page
(function() {
var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',
'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',
'ref', 'ref_src', 'source', 'medium', 'campaign'];
function cleanUrl(url) {
try {
var u = new URL(url, window.location.origin);
var changed = false;
trackingParams.forEach(function(p) {
if (u.searchParams.has(p)) {
u.searchParams.delete(p);
changed = true;
}
});
return changed ? u.toString() : url;
} catch (e) {
return url;
}
}
function cleanLinks() {
document.querySelectorAll('a[href]').forEach(function(a) {
var clean = cleanUrl(a.href);
if (clean !== a.href) a.href = clean;
});
}
cleanLinks();
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(m) {
m.addedNodes.forEach(function(node) {
if (node.nodeType === 1) {
if (node.tagName === 'A') cleanLinks();
node.querySelectorAll('a[href]').forEach(function(a) {
var clean = cleanUrl(a.href);
if (clean !== a.href) a.href = clean;
});
}
});
});
});
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); }
})();
(function(){
try {
var __m = "youtube.com";
var __re = new RegExp('^' + "youtube\\.com" + ', 'i');
if (__m === '*' || __re.test(location.href)) {
// Auto-enable theater mode on YouTube
(function() {
function tryTheater() {
var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]');
if (btn && !btn.classList.contains('activated')) {
btn.click();
}
}
// Try immediately
tryTheater();
// Try after navigation (SPA)
var lastUrl = location.href;
setInterval(function() {
if (location.href !== lastUrl) {
lastUrl = location.href;
setTimeout(tryTheater, 500);
}
}, 1000);
// Also try on player load
var observer = new MutationObserver(tryTheater);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); }
})();
(function(){
try {
var __m = "*";
var __re = new RegExp('^' + ".*" + ', 'i');
if (__m === '*' || __re.test(location.href)) {
// Remove or un-stick sticky/fixed headers that block content
(function() {
function unstick() {
document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) {
if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {
el.style.position = 'static';
el.style.top = 'auto';
el.style.zIndex = 'auto';
}
});
}
unstick();
var observer = new MutationObserver(unstick);
observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });
})();
}
} catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); }
})();
})();
GitHub - marcotama/linux-json-based-tools: JSON outputting Linux tools · GitHub
Repository files navigation This suite of tools is meant to replace some of the Linux most commonly used commands.
The advantage is that all of these commands write their output on stdout in JSON format,
which allows for easy processing.
The suite contains the following tools:
ldc (List Directory Content): replaces ls.lp (List Processes): replaces psfilter: replaces greptab: prints the JSON input into a readable table formatlf: lists the fields in the JSON inputsort: sorts JSON lines on given fields: similar to sortAssuming the aliases in init.sh are setup, the following usages are possible:
$ ldc | lf
access-rights access_rights device ...
$ lp | lf
arg_end arg_start blocked ...
$ ldc | tab name is-file
.git 0
TODO.txt 1
filter.py 1
...
$ ldc | filter 'is-file == 1' | tab name size
TODO.txt 15
filter.py 5353
list_fields.py 712
...
$ ldc | tab name size --headers
name size
.git 4096
TODO.txt 15
filter.py 5789
...
$ lp | filter "real_uid == `id -u`" 'cmdline =~ "^python.+"' | tab pid cmdline
15173 python list_processes.py
15174 python filter.py real_uid == 1000 cmdline =~ "^python.+"
15176 python tab.py pid cmdline
$ ldc | tab `ldc | lf`
755 16877 2053 1 1 0 1000 5 1803287 0 0 0 1 0 0 0 0 1489801354 1489801354 1489801354 0 .git 8 1 1 0 5 . 0 0 4096 0 1 1 1 1000 7
644 33188 2053 0 1 0 1000 4 1720053 0 0 0 0 0 1 0 0 1489796819 1489796775 1489796775 0 TODO.txt 1 0 1 0 4 . 0 0 15 0 0 1 1 1000 6
644 33188 2053 0 1 0 1000 4 1720045 0 0 0 0 0 1 0 0 1489801163 1489801162 1489801162 0 filter.py 1 0 1 0 4 . 0 0 5789 0 0 1 1 1000 6
...
$ ldc | sort access_rights name | tab name access_rights
.git 16877
.idea 16877
.gitignore 33188
README.md 33188
...
$ ldc | sort access_rights "name desc" | tab name access_rights
.idea 16877
.git 16877
test.py 33188
tab.py 33188
...
You can’t perform that action at this time.