Unlock the power of mathematics within your notes with Math Mode plugin by Caleb John. It is perfect for inputting and evaluating math in Markdown code blocks, symbolic calculations, vector math and handling units. #productivity#plugins
Curious about how many Vim/Neovim plugins you’re rocking? 🤔 Jump into your terminal, navigate to your Vim or Neovim configuration directory, and run this command: ls -alp | wc -l. I currently have 41 plugins, but I’m aiming to slim down to 30-35. How about you? Share your plugin count below! #Vim#Neovim#Plugins”
🆕 blog! “WordPress GeSHi Highlighting for Markdown”
I've launched a WordPress Plugin for an extremely niche use-case. WP GeSHi Highlight Redux works with WordPress's Classic Editor to convert Markdown to syntax highlighted code. That allows me to write: php $a = "Hello"; $b = 5 * 2; echo $a . str($b); And have it displayed as: $a = "Hello"; $b = […]
I've launched a WordPress Plugin for an extremely niche use-case.
WP GeSHi Highlight Redux works with WordPress's Classic Editor to convert Markdown to syntax highlighted code.
That allows me to write:
php$a = "Hello";$b = 5 * 2;echo $a . str($b);
And have it displayed as:
$a = "Hello";$b = 5 * 2;echo $a . str($b);
I've previously written about the WP GeSHi Highlight plugin. My plugin is a fork of that. It has the following changes:
RSS & Atom feeds - disable code highlighting
Remove extra style wrappers
Markdown support
Remove line-numbers
Remove escape option (escape now permanent)
Remove TinyMCE changes
Remove custom CSS options
Improve default CSS
Improve HTML detection
These changes work for me, with my weird blogging set-up. If they work for you, feel free to use it. If they don't work for you, please fork and write your own code.
As I knew I was on holiday for soft freeze I got all my #qemu maintainer PRs in early for 9.0. It is now released to the wild. The big #arm64 update is FEAT_NV2 emulation as well as a number of enhancements to various board models (and some deprecations of the older unloved code). For #tcg#plugins we now support reading register values as well as a new thread-safe inline ops API. The #gdbstub also saw a number of tweaks. More to come for 9.1 and the tree is now open ;-) https://www.qemu.org/2024/04/23/qemu-9-0-0/
🚀 Excited to share Obsidian Plugins Review — 53 featuring a lineup of powerful tools to supercharge your note-taking experience! 🌟 Stay tuned to explore plugins like Note Companion Folder, Tab Selector, Metafolders, and more! 💡https://link.medium.com/9RpI9quQJIb
We all know how important it is to produce precise music. It's more important than anything else. Ideas, harmonies, and arrangement are overrated. If the kick drum doesn't bang precisely and the sidechain doesn't grab accurately, then all the effort is for nothing.
This new German plugin is very precise and therefore good.
Fellow Blenderheads, if you'd like to have a go at SDF modeling, a new add-on is calling for beta testers. According to the add-on developer, it works in Blender for macOS as well. 👍
I've been doing more Craft CMS 5 testing of my plugins this weekend and re-used a little trick I came up with when I made the jump from Craft 3 to Craft 4.
I wrote about how you can use the Guide plugin and Craft UI Elements to test out custom fields in your plugins and modules. Hope this comes in handy to other devs out there!
Private WordPress plugin repository with automatic updates
I’m probably not the only one who’d like to have my private WordPress plugins auto-update, just like the plugins from the standard repository.
It took some time to figure out the nitty-gritty details, but I now have a setup which works. Not only that, but it should also be adaptable for use by others, with minimal changes.
TL;DR
The short story here is that I have a system of two or three plugins, which combined will do the trick.
The back-end is a WordPress site, with a custom plugin to do the hidden back-end stuff. The plugin is ~1000 lines of code. There’s a new post type, a taxonomy, a number of new end-points, a wp-cli interface and some tools for generating meta-data and readme files from the site content.
The front-end is little more than a bit of glue to connect the WordPress Updates API with the back-end. It is less than 200 lines of code. It does basic search, installation and activation from the search result, manual updates from the updates page and the plugin list, pop-ups with plugin details, and automatic unattended updates.
The WordPress Updates API has been around for a while, but the documentation is a bit diffuse.
I found some small examples, and read the source, and the error logs 🙂
On the client side it is basically a matter of adding a few hooks, which either intercepts the communication between WordPress and the standard repository, or short circuits it.
All data structures are just what the standard plugin repository does, but curl’s your friend.
Setup your own repository
To have your own WordPress plugin repository with automatic updates, first make a blank site, then install the RS Base Plugin first, and then the WordPress Plugin Site.
Create a download folder in the document root. This is where you dump your ZIP files with versions of your plugins. How you get them there is your business — I use scp(1).
Now, for each plugin create a page in the Plugins section (that’s a custom post type). Make sure the slug matches the files you’ve uploaded and the slug of your plugin.
Most of the meta-data for the plugin comes from what you enter on the plugin page on the back-end. All the details about which information comes from where is on the back-end plugin page.
In the latter, either edit the source to change the URL of the back-end, or set the rs_updater_backend option to the URL. There’s no settings page for now, but wp-cli is your friend.
Again, that’s it.
You should be able to find your plugins (by slug only currently), and install, activate and update them. On the plugins list it should be possible to enable automatic updates.
At this point whenever you have a new version of one of your plugins, just upload it to the download folder on the back-end and forget about it. All the sites using that plugin will discover it and update it within twelve hours.
No need to hunt around on all your sites (or your clients’ sites) to do manual updates.
Scratching itches
I wrote this to scratch my own itch — too many home spun plugins on too many sites — and I’m quite satisfied with the result because I now have more time to do fun stuff.
If this can scratch somebody else’s itch too, the more the merrier.
Well my Mac Pro is back up and running. It took two days to install my plugins (the 290 Native Instruments plugins and libraries took the most time). And I’ve lost the vast majority of my Plugin Alliance and Harrison plugins due to their incompetence at integrating with their new parent companies install systems (Native Instruments and SSL respectively). Since I had older installers in both cases I was able to get the ones I use the most installed. #gearsquad#recording#plugins#Studio
@consint Oh yeah, that would be cool 😉️ As I understand their response, they are currently afraid of the effort and fear that the market is too small to justify it. Personally, I think it takes some idealism and a bit of good will to offer #audio#plugins for #linux as a #windows / #macos vendor. But I find it strange when vendors do not have at least some sympathy for Linux, #opensource and the #linuxaudio community in general. Which is not to say that I think the latter applies to d16.
Presenting: Quick send, a Misskey (and forks) plugin! (Tested in Sharkey)
This plugin lets you quickly send notes to select users! :blobcat_spin:
It works by adding users to a send list. Simply click the 3 dots on their profile (either on their profile page, or in the on hover preview), and at the very bottom you'll see an option to add them (or remove them).
Then, on any note, click on the 3 dots, and at the bottom you'll have a button for each user you've added. :neocat_bongo_down:
There are also options for clearing the list, and in the plugin's settings you can tell it to ask for confirmation, or to show a success dialog box.
To install go to settings > plugins > install and paste the source code:
/// @0.18.0
// This is licensed under MIT
### {
name: "Quick send"
version: "1.0.1"
author: "@linuxenjoyer@blahaj.zone"
description: "Send a note to your besties quickly"
permissions: [ "write:notes" ]
config: {
show_success: {
type: "boolean"
label: "Show success dialog"
description: "Makes a dialog pop up saying that it was sent. I'm not exactly sure how to do error handling, this is more to make sure the plugin didn't randomly crash."
default: false
}
ask_confirmation: {
type: "boolean"
label: "Ask for confirmation"
description: "Asks you if your really want to send the post."
default: false
}
}
}
@save(obj) {
Mk:save("user_send_list", obj)
}
@load() {
var ls = Mk:load("user_send_list")
if (ls == null) {
save({})
ls = {}
}
ls
}
// Simple function to format a username
@formatUsername(user) {
var username = `@{user.username}`
if (user.host != null) {
username = `{username}@{user.host}`
}
username
}
@sendNote(note, userId) {
// This is based on blahaj.zone's api-doc (sharkey)
let res = Mk:api("notes/create" {
visibility: "specified"
renoteId: note.id
visibleUserIds: [ userId ]
})
// TODO: Figure out error handling
true
}
@getAction(username, userId) {
@(note) {
var should_send = !Plugin:config.ask_confirmation
if (!should_send) {
should_send = Mk:confirm(`Send post to {user}?` "" "question")
}
if (should_send) {
let ok = sendNote(note, userId)
// This is a little ugly but idrk how to tidy it up
if (ok) {
if (Plugin:config.show_success) {
Mk:dialog(`Sent note to {username}`, "", "success")
}
} else {
Mk:dialog(`There was an error sending the note to {username}`, "", "error")
}
}
}
}
// Underscores bc it's in global scope
let __ls = load()
each (let usr, Obj:keys(__ls)) {
Plugin:register_note_action(`Send to {usr}`, getAction(usr, __ls[usr]))
}
Plugin:register_user_action("Add user to send list", @(user) {
let username = formatUsername(user)
let ls = load()
if (ls[username] != null) {
Mk:dialog(`{username} is already on the send list`, "", "error")
} else {
ls[username] = user.id
save(ls)
Mk:dialog(`Added {username} to the send list!`, "You might have to refresh to see the changes", "success")
}
})
Plugin:register_user_action("Remove user from send list" @(user) {
let username = formatUsername(user)
let ls = load()
if (ls[username] == null) {
Mk:dialog(`{username} is not on the send list`, "", "error")
} else {
ls[username] = null
save(ls)
Mk:dialog(`Removed {username} from the send list!`, "You might have to refresh to see the changes", "success")
}
})
Plugin:register_note_action("Clear user send list" @(note){
if (Mk:confirm("Are you sure you want to clear the list?", "There's no way to undo this", "warning")) {
save({})
Mk:dialog("List cleared", "You might have to refresh to see the changes", "success")
}
})
Plugin:register_user_action("Clear user send list" @(user){
if (Mk:confirm("Are you sure you want to clear the list?", "There's no way to undo this", "warning")) {
save({})
Mk:dialog("List cleared", "You might have to refresh to see the changes", "success")
}
})
It'll ask for permissions to create notes (it needs this to be able to send stuff) :blobcat_code:
If you found it useful or have feature ideas/patches let me know :neocat_melt_reach: