diff --git a/.github/actions/spelling/README.md b/.github/actions/spelling/README.md new file mode 100644 index 0000000..1f699f3 --- /dev/null +++ b/.github/actions/spelling/README.md @@ -0,0 +1,17 @@ +# check-spelling/check-spelling configuration + +File | Purpose | Format | Info +-|-|-|- +[dictionary.txt](dictionary.txt) | Replacement dictionary (creating this file will override the default dictionary) | one word per line | [dictionary](https://github.com/check-spelling/check-spelling/wiki/Configuration#dictionary) +[allow.txt](allow.txt) | Add words to the dictionary | one word per line (only letters and `'`s allowed) | [allow](https://github.com/check-spelling/check-spelling/wiki/Configuration#allow) +[reject.txt](reject.txt) | Remove words from the dictionary (after allow) | grep pattern matching whole dictionary words | [reject](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-reject) +[excludes.txt](excludes.txt) | Files to ignore entirely | perl regular expression | [excludes](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-excludes) +[only.txt](only.txt) | Only check matching files (applied after excludes) | perl regular expression | [only](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-only) +[patterns.txt](patterns.txt) | Patterns to ignore from checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns) +[candidate.patterns](candidate.patterns) | Patterns that might be worth adding to [patterns.txt](patterns.txt) | perl regular expression with optional comment block introductions (all matches will be suggested) | [candidates](https://github.com/check-spelling/check-spelling/wiki/Feature:-Suggest-patterns) +[line_forbidden.patterns](line_forbidden.patterns) | Patterns to flag in checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns) +[expect.txt](expect.txt) | Expected words that aren't in the dictionary | one word per line (sorted, alphabetically) | [expect](https://github.com/check-spelling/check-spelling/wiki/Configuration#expect) +[advice.md](advice.md) | Supplement for GitHub comment when unrecognized words are found | GitHub Markdown | [advice](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice) + +Note: you can replace any of these files with a directory by the same name (minus the suffix) +and then include multiple files inside that directory (with that suffix) to merge multiple files together. diff --git a/.github/actions/spelling/advice.md b/.github/actions/spelling/advice.md new file mode 100644 index 0000000..a32d109 --- /dev/null +++ b/.github/actions/spelling/advice.md @@ -0,0 +1,31 @@ + +
If the flagged items are :exploding_head: false positives + +If items relate to a ... +* binary file (or some other file you wouldn't want to check at all). + + Please add a file path to the `excludes.txt` file matching the containing file. + + File paths are Perl 5 Regular Expressions - you can [test]( +https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your files. + + `^` refers to the file's path from the root of the repository, so `^README\.md$` would exclude [README.md]( +../tree/HEAD/README.md) (on whichever branch you're using). + +* well-formed pattern. + + If you can write a [pattern]( +https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns +) that would match it, + try adding it to the `patterns.txt` file. + + Patterns are Perl 5 Regular Expressions - you can [test]( +https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your lines. + + Note that patterns can't match multiline strings. + +
+ + +:steam_locomotive: If you're seeing this message and your PR is from a branch that doesn't have check-spelling, +please merge to your PR's base branch to get the version configured for your repository. diff --git a/.github/actions/spelling/allow.txt b/.github/actions/spelling/allow.txt new file mode 100644 index 0000000..eac02a5 --- /dev/null +++ b/.github/actions/spelling/allow.txt @@ -0,0 +1,53 @@ +actionsearch +appmenu +appmenumodel +appmenuwidget +batterywidget +blurwindow +CMake +cmake +controlwidget +cpp +datetime +datetimewidget +dbusmenu +dbusmenuimporter +dbusmenushortcut +dbusmenutypes +dbustypes +extensionwidget +github +https +kde +lineediteventfilter +logout +mainpanel +mainwindow +menubar +menuimporter +menuimporteradaptor +pluginmanager +pluginsinterface +popupwindow +pri +qml +qrc +qtlocalpeer +qtlockedfile +qtsingleapplication +qtsinglecoreapplication +README +src +ssh +statusnotifier +statusnotifierbutton +statusnotifieriteminterface +statusnotifierwatcher +statusnotifierwidget +ubuntu +unix +utils +volumewidget +workarounds +xml +yml diff --git a/.github/actions/spelling/candidate.patterns b/.github/actions/spelling/candidate.patterns new file mode 100644 index 0000000..25011ce --- /dev/null +++ b/.github/actions/spelling/candidate.patterns @@ -0,0 +1,642 @@ +# marker to ignore all code on line +^.*/\* #no-spell-check-line \*/.*$ +# marker to ignore all code on line +^.*\bno-spell-check(?:-line|)(?:\s.*|)$ + +# https://cspell.org/configuration/document-settings/ +# cspell inline +^.*\b[Cc][Ss][Pp][Ee][Ll]{2}:\s*[Dd][Ii][Ss][Aa][Bb][Ll][Ee]-[Ll][Ii][Nn][Ee]\b + +# patch hunk comments +^\@\@ -\d+(?:,\d+|) \+\d+(?:,\d+|) \@\@ .* +# git index header +index (?:[0-9a-z]{7,40},|)[0-9a-z]{7,40}\.\.[0-9a-z]{7,40} + +# file permissions +['"`\s][-bcdLlpsw](?:[-r][-w][-Ssx]){2}[-r][-w][-SsTtx]\+?['"`\s] + +# css url wrappings +\burl\([^)]+\) + +# cid urls +(['"])cid:.*?\g{-1} + +# data url in parens +\(data:(?:[^) ][^)]*?|)(?:[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,})[^)]*\) +# data url in quotes +([`'"])data:(?:[^ `'"].*?|)(?:[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,}).*\g{-1} +# data url +\bdata:[-a-zA-Z=;:/0-9+]*,\S* + +# https/http/file urls +(?:\b(?:https?|ftp|file)://)[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|] + +# mailto urls +mailto:[-a-zA-Z=;:/?%&0-9+@._]{3,} + +# magnet urls +magnet:[?=:\w]+ + +# magnet urls +"magnet:[^"]+" + +# obs: +"obs:[^"]*" + +# The `\b` here means a break, it's the fancy way to handle urls, but it makes things harder to read +# In this examples content, I'm using a number of different ways to match things to show various approaches +# asciinema +\basciinema\.org/a/[0-9a-zA-Z]+ + +# asciinema v2 +^\[\d+\.\d+, "[io]", ".*"\]$ + +# apple +\bdeveloper\.apple\.com/[-\w?=/]+ +# Apple music +\bembed\.music\.apple\.com/fr/playlist/usr-share/[-\w.]+ + +# appveyor api +\bci\.appveyor\.com/api/projects/status/[0-9a-z]+ +# appveyor project +\bci\.appveyor\.com/project/(?:[^/\s"]*/){2}builds?/\d+/job/[0-9a-z]+ + +# Amazon + +# Amazon +\bamazon\.com/[-\w]+/(?:dp/[0-9A-Z]+|) +# AWS S3 +\b\w*\.s3[^.]*\.amazonaws\.com/[-\w/&#%_?:=]* +# AWS execute-api +\b[0-9a-z]{10}\.execute-api\.[-0-9a-z]+\.amazonaws\.com\b +# AWS ELB +\b\w+\.[-0-9a-z]+\.elb\.amazonaws\.com\b +# AWS SNS +\bsns\.[-0-9a-z]+.amazonaws\.com/[-\w/&#%_?:=]* +# AWS VPC +vpc-\w+ + +# While you could try to match `http://` and `https://` by using `s?` in `https?://`, sometimes there +# YouTube url +\b(?:(?:www\.|)youtube\.com|youtu.be)/(?:channel/|embed/|user/|playlist\?list=|watch\?v=|v/|)[-a-zA-Z0-9?&=_%]* +# YouTube music +\bmusic\.youtube\.com/youtubei/v1/browse(?:[?&]\w+=[-a-zA-Z0-9?&=_]*) +# YouTube tag +<\s*youtube\s+id=['"][-a-zA-Z0-9?_]*['"] +# YouTube image +\bimg\.youtube\.com/vi/[-a-zA-Z0-9?&=_]* +# Google Accounts +\baccounts.google.com/[-_/?=.:;+%&0-9a-zA-Z]* +# Google Analytics +\bgoogle-analytics\.com/collect.[-0-9a-zA-Z?%=&_.~]* +# Google APIs +\bgoogleapis\.(?:com|dev)/[a-z]+/(?:v\d+/|)[a-z]+/[-@:./?=\w+|&]+ +# Google Storage +\b[-a-zA-Z0-9.]*\bstorage\d*\.googleapis\.com(?:/\S*|) +# Google Calendar +\bcalendar\.google\.com/calendar(?:/u/\d+|)/embed\?src=[@./?=\w&%]+ +\w+\@group\.calendar\.google\.com\b +# Google DataStudio +\bdatastudio\.google\.com/(?:(?:c/|)u/\d+/|)(?:embed/|)(?:open|reporting|datasources|s)/[-0-9a-zA-Z]+(?:/page/[-0-9a-zA-Z]+|) +# The leading `/` here is as opposed to the `\b` above +# ... a short way to match `https://` or `http://` since most urls have one of those prefixes +# Google Docs +/docs\.google\.com/[a-z]+/(?:ccc\?key=\w+|(?:u/\d+|d/(?:e/|)[0-9a-zA-Z_-]+/)?(?:edit\?[-\w=#.]*|/\?[\w=&]*|)) +# Google Drive +\bdrive\.google\.com/(?:file/d/|open)[-0-9a-zA-Z_?=]* +# Google Groups +\bgroups\.google\.com(?:/[a-z]+/(?:#!|)[^/\s"]+)* +# Google Maps +\bmaps\.google\.com/maps\?[\w&;=]* +# Google themes +themes\.googleusercontent\.com/static/fonts/[^/\s"]+/v\d+/[^.]+. +# Google CDN +\bclients2\.google(?:usercontent|)\.com[-0-9a-zA-Z/.]* +# Goo.gl +/goo\.gl/[a-zA-Z0-9]+ +# Google Chrome Store +\bchrome\.google\.com/webstore/detail/[-\w]*(?:/\w*|) +# Google Books +\bgoogle\.(?:\w{2,4})/books(?:/\w+)*\?[-\w\d=&#.]* +# Google Fonts +\bfonts\.(?:googleapis|gstatic)\.com/[-/?=:;+&0-9a-zA-Z]* +# Google Forms +\bforms\.gle/\w+ +# Google Scholar +\bscholar\.google\.com/citations\?user=[A-Za-z0-9_]+ +# Google Colab Research Drive +\bcolab\.research\.google\.com/drive/[-0-9a-zA-Z_?=]* + +# GitHub SHAs (api) +\bapi.github\.com/repos(?:/[^/\s"]+){3}/[0-9a-f]+\b +# GitHub SHAs (markdown) +(?:\[`?[0-9a-f]+`?\]\(https:/|)/(?:www\.|)github\.com(?:/[^/\s"]+){2,}(?:/[^/\s")]+)(?:[0-9a-f]+(?:[-0-9a-zA-Z/#.]*|)\b|) +# GitHub SHAs +\bgithub\.com(?:/[^/\s"]+){2}[@#][0-9a-f]+\b +# GitHub SHA refs +\[([0-9a-f]+)\]\(https://(?:www\.|)github.com/[-\w]+/[-\w]+/commit/\g{-1}[0-9a-f]* +# GitHub wiki +\bgithub\.com/(?:[^/]+/){2}wiki/(?:(?:[^/]+/|)_history|[^/]+(?:/_compare|)/[0-9a-f.]{40,})\b +# githubusercontent +/[-a-z0-9]+\.githubusercontent\.com/[-a-zA-Z0-9?&=_\/.]* +# githubassets +\bgithubassets.com/[0-9a-f]+(?:[-/\w.]+) +# gist github +\bgist\.github\.com/[^/\s"]+/[0-9a-f]+ +# git.io +\bgit\.io/[0-9a-zA-Z]+ +# GitHub JSON +"node_id": "[-a-zA-Z=;:/0-9+_]*" +# Contributor +\[[^\]]+\]\(https://github\.com/[^/\s"]+/?\) +# GHSA +GHSA(?:-[0-9a-z]{4}){3} + +# GitLab commit +\bgitlab\.[^/\s"]*/\S+/\S+/commit/[0-9a-f]{7,16}#[0-9a-f]{40}\b +# GitLab merge requests +\bgitlab\.[^/\s"]*/\S+/\S+/-/merge_requests/\d+/diffs#[0-9a-f]{40}\b +# GitLab uploads +\bgitlab\.[^/\s"]*/uploads/[-a-zA-Z=;:/0-9+]* +# GitLab commits +\bgitlab\.[^/\s"]*/(?:[^/\s"]+/){2}commits?/[0-9a-f]+\b + +# binance +accounts\.binance\.com/[a-z/]*oauth/authorize\?[-0-9a-zA-Z&%]* + +# bitbucket diff +\bapi\.bitbucket\.org/\d+\.\d+/repositories/(?:[^/\s"]+/){2}diff(?:stat|)(?:/[^/\s"]+){2}:[0-9a-f]+ +# bitbucket repositories commits +\bapi\.bitbucket\.org/\d+\.\d+/repositories/(?:[^/\s"]+/){2}commits?/[0-9a-f]+ +# bitbucket commits +\bbitbucket\.org/(?:[^/\s"]+/){2}commits?/[0-9a-f]+ + +# bit.ly +\bbit\.ly/\w+ + +# bitrise +\bapp\.bitrise\.io/app/[0-9a-f]*/[\w.?=&]* + +# bootstrapcdn.com +\bbootstrapcdn\.com/[-./\w]+ + +# cdn.cloudflare.com +\bcdnjs\.cloudflare\.com/[./\w]+ + +# circleci +\bcircleci\.com/gh(?:/[^/\s"]+){1,5}.[a-z]+\?[-0-9a-zA-Z=&]+ + +# gitter +\bgitter\.im(?:/[^/\s"]+){2}\?at=[0-9a-f]+ + +# gravatar +\bgravatar\.com/avatar/[0-9a-f]+ + +# ibm +[a-z.]*ibm\.com/[-_#=:%!?~.\\/\d\w]* + +# imgur +\bimgur\.com/[^.]+ + +# Internet Archive +\barchive\.org/web/\d+/(?:[-\w.?,'/\\+&%$#_:]*) + +# discord +/discord(?:app\.com|\.gg)/(?:invite/)?[a-zA-Z0-9]{7,} + +# Disqus +\bdisqus\.com/[-\w/%.()!?&=_]* + +# medium link +\blink\.medium\.com/[a-zA-Z0-9]+ +# medium +\bmedium\.com/\@?[^/\s"]+/[-\w]+ + +# microsoft +\b(?:https?://|)(?:(?:download\.visualstudio|docs|msdn2?|research)\.microsoft|blogs\.msdn)\.com/[-_a-zA-Z0-9()=./%]* +# powerbi +\bapp\.powerbi\.com/reportEmbed/[^"' ]* +# vs devops +\bvisualstudio.com(?::443|)/[-\w/?=%&.]* +# microsoft store +\bmicrosoft\.com/store/apps/\w+ + +# mvnrepository.com +\bmvnrepository\.com/[-0-9a-z./]+ + +# now.sh +/[0-9a-z-.]+\.now\.sh\b + +# oracle +\bdocs\.oracle\.com/[-0-9a-zA-Z./_?#&=]* + +# chromatic.com +/\S+.chromatic.com\S*[")] + +# codacy +\bapi\.codacy\.com/project/badge/Grade/[0-9a-f]+ + +# compai +\bcompai\.pub/v1/png/[0-9a-f]+ + +# mailgun api +\.api\.mailgun\.net/v3/domains/[0-9a-z]+\.mailgun.org/messages/[0-9a-zA-Z=@]* +# mailgun +\b[0-9a-z]+.mailgun.org + +# /message-id/ +/message-id/[-\w@./%]+ + +# Reddit +\breddit\.com/r/[/\w_]* + +# requestb.in +\brequestb\.in/[0-9a-z]+ + +# sched +\b[a-z0-9]+\.sched\.com\b + +# Slack url +slack://[a-zA-Z0-9?&=]+ +# Slack +\bslack\.com/[-0-9a-zA-Z/_~?&=.]* +# Slack edge +\bslack-edge\.com/[-a-zA-Z0-9?&=%./]+ +# Slack images +\bslack-imgs\.com/[-a-zA-Z0-9?&=%.]+ + +# shields.io +\bshields\.io/[-\w/%?=&.:+;,]* + +# stackexchange -- https://stackexchange.com/feeds/sites +\b(?:askubuntu|serverfault|stack(?:exchange|overflow)|superuser).com/(?:questions/\w+/[-\w]+|a/) + +# Sentry +[0-9a-f]{32}\@o\d+\.ingest\.sentry\.io\b + +# Twitter markdown +\[\@[^[/\]:]*?\]\(https://twitter.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|)\) +# Twitter hashtag +\btwitter\.com/hashtag/[\w?_=&]* +# Twitter status +\btwitter\.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|) +# Twitter profile images +\btwimg\.com/profile_images/[_\w./]* +# Twitter media +\btwimg\.com/media/[-_\w./?=]* +# Twitter link shortened +\bt\.co/\w+ + +# facebook +\bfburl\.com/[0-9a-z_]+ +# facebook CDN +\bfbcdn\.net/[\w/.,]* +# facebook watch +\bfb\.watch/[0-9A-Za-z]+ + +# dropbox +\bdropbox\.com/sh?/[^/\s"]+/[-0-9A-Za-z_.%?=&;]+ + +# ipfs protocol +ipfs://[0-9a-zA-Z]{3,} +# ipfs url +/ipfs/[0-9a-zA-Z]{3,} + +# w3 +\bw3\.org/[-0-9a-zA-Z/#.]+ + +# loom +\bloom\.com/embed/[0-9a-f]+ + +# regex101 +\bregex101\.com/r/[^/\s"]+/\d+ + +# figma +\bfigma\.com/file(?:/[0-9a-zA-Z]+/)+ + +# freecodecamp.org +\bfreecodecamp\.org/[-\w/.]+ + +# image.tmdb.org +\bimage\.tmdb\.org/[/\w.]+ + +# mermaid +\bmermaid\.ink/img/[-\w]+|\bmermaid-js\.github\.io/mermaid-live-editor/#/edit/[-\w]+ + +# Wikipedia +\ben\.wikipedia\.org/wiki/[-\w%.#]+ + +# gitweb +[^"\s]+/gitweb/\S+;h=[0-9a-f]+ + +# HyperKitty lists +/archives/list/[^@/]+\@[^/\s"]*/message/[^/\s"]*/ + +# lists +/thread\.html/[^"\s]+ + +# list-management +\blist-manage\.com/subscribe(?:[?&](?:u|id)=[0-9a-f]+)+ + +# kubectl.kubernetes.io/last-applied-configuration +"kubectl.kubernetes.io/last-applied-configuration": ".*" + +# pgp +\bgnupg\.net/pks/lookup[?&=0-9a-zA-Z]* + +# Spotify +\bopen\.spotify\.com/embed/playlist/\w+ + +# Mastodon +\bmastodon\.[-a-z.]*/(?:media/|\@)[?&=0-9a-zA-Z_]* + +# scastie +\bscastie\.scala-lang\.org/[^/]+/\w+ + +# images.unsplash.com +\bimages\.unsplash\.com/(?:(?:flagged|reserve)/|)[-\w./%?=%&.;]+ + +# pastebin +\bpastebin\.com/[\w/]+ + +# heroku +\b\w+\.heroku\.com/source/archive/\w+ + +# quip +\b\w+\.quip\.com/\w+(?:(?:#|/issues/)\w+)? + +# badgen.net +\bbadgen\.net/badge/[^")\]'\s]+ + +# statuspage.io +\w+\.statuspage\.io\b + +# media.giphy.com +\bmedia\.giphy\.com/media/[^/]+/[\w.?&=]+ + +# tinyurl +\btinyurl\.com/\w+ + +# codepen +\bcodepen\.io/[\w/]+ + +# registry.npmjs.org +\bregistry\.npmjs\.org/(?:@[^/"']+/|)[^/"']+/-/[-\w@.]+ + +# getopts +\bgetopts\s+(?:"[^"]+"|'[^']+') + +# ANSI color codes +(?:\\(?:u00|x)1[Bb]|\x1b|\\u\{1[Bb]\})\[\d+(?:;\d+|)m + +# URL escaped characters +\%[0-9A-F][A-F](?=[A-Za-z]) +# lower URL escaped characters +\%[0-9a-f][a-f](?=[a-z]{2,}) +# IPv6 +\b(?:[0-9a-fA-F]{0,4}:){3,7}[0-9a-fA-F]{0,4}\b +# c99 hex digits (not the full format, just one I've seen) +0x[0-9a-fA-F](?:\.[0-9a-fA-F]*|)[pP] +# Punycode +\bxn--[-0-9a-z]+ +# sha +sha\d+:[0-9]*[a-f]{3,}[0-9a-f]* +# sha-... -- uses a fancy capture +(\\?['"]|")[0-9a-f]{40,}\g{-1} +# hex runs +\b[0-9a-fA-F]{16,}\b +# hex in url queries +=[0-9a-fA-F]*?(?:[A-F]{3,}|[a-f]{3,})[0-9a-fA-F]*?& +# ssh +(?:ssh-\S+|-nistp256) [-a-zA-Z=;:/0-9+]{12,} + +# PGP +\b(?:[0-9A-F]{4} ){9}[0-9A-F]{4}\b +# GPG keys +\b(?:[0-9A-F]{4} ){5}(?: [0-9A-F]{4}){5}\b +# Well known gpg keys +.well-known/openpgpkey/[\w./]+ + +# pki +-----BEGIN.*-----END + +# uuid: +\b[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}\b +# hex digits including css/html color classes: +(?:[\\0][xX]|\\u|[uU]\+|#x?|\%23)[0-9_a-fA-FgGrR]*?[a-fA-FgGrR]{2,}[0-9_a-fA-FgGrR]*(?:[uUlL]{0,3}|[iu]\d+)\b +# integrity +integrity=(['"])(?:\s*sha\d+-[-a-zA-Z=;:/0-9+]{40,})+\g{-1} + +# https://www.gnu.org/software/groff/manual/groff.html +# man troff content +\\f[BCIPR] +# '/" +\\\([ad]q + +# .desktop mime types +^MimeTypes?=.*$ +# .desktop localized entries +^[A-Z][a-z]+\[[a-z]+\]=.*$ +# Localized .desktop content +Name\[[^\]]+\]=.* + +# IServiceProvider / isAThing +\b(?:I|isA)(?=(?:[A-Z][a-z]{2,})+(?:[A-Z]|\b)) + +# crypt +(['"])\$2[ayb]\$.{56}\g{-1} + +# scrypt / argon +\$(?:scrypt|argon\d+[di]*)\$\S+ + +# go.sum +\bh1:\S+ + +# scala modules +("[^"]+"\s*%%?\s*){2,3}"[^"]+" + +# Input to GitHub JSON +content: (['"])[-a-zA-Z=;:/0-9+]*=\g{-1} + +# This does not cover multiline strings, if your repository has them, +# you'll want to remove the `(?=.*?")` suffix. +# The `(?=.*?")` suffix should limit the false positives rate +# printf +%(?:(?:(?:hh?|ll?|[jzt])?[diuoxn]|l?[cs]|L?[fega]|p)(?=[a-z]{2,})|(?:X|L?[FEGA]|p)(?=[a-zA-Z]{2,}))(?!%)(?=[_a-zA-Z]+(?!%)\b)(?=.*?['"]) + +# Python string prefix / binary prefix +# Note that there's a high false positive rate, remove the `?=` and search for the regex to see if the matches seem like reasonable strings +(?|m([|!/@#,;']).*?\g{-1}) + +# perl qr regex +(?|\(.*?\)|([|!/@#,;']).*?\g{-1}) + +# perl run +perl(?:\s+-[a-zA-Z]\w*)+ + +# Go regular expressions +regexp?\.MustCompile\(`[^`]*`\) + +# regex choice +\(\?:[^)]+\|[^)]+\) + +# proto +^\s*(\w+)\s\g{-1} = + +# sed regular expressions +sed 's/(?:[^/]*?[a-zA-Z]{3,}[^/]*?/){2} + +# node packages +(["'])\@[^/'" ]+/[^/'" ]+\g{-1} + +# go install +go install(?:\s+[a-z]+\.[-@\w/.]+)+ + +# jetbrains schema https://youtrack.jetbrains.com/issue/RSRP-489571 +urn:shemas-jetbrains-com + +# kubernetes pod status lists +# https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase +\w+(?:-\w+)+\s+\d+/\d+\s+(?:Running|Pending|Succeeded|Failed|Unknown)\s+ + +# kubectl - pods in CrashLoopBackOff +\w+-[0-9a-f]+-\w+\s+\d+/\d+\s+CrashLoopBackOff\s+ + +# kubernetes object suffix +-[0-9a-f]{10}-\w{5}\s + +# posthog secrets +([`'"])phc_[^"',]+\g{-1} + +# xcode + +# xcodeproject scenes +(?:Controller|destination|ID|id)="\w{3}-\w{2}-\w{3}" + +# xcode api botches +customObjectInstantitationMethod + +# configure flags +.* \| --\w{2,}.*?(?=\w+\s\w+) + +# font awesome classes +\.fa-[-a-z0-9]+ + +# bearer auth +(['"])Bear[e][r] .*?\g{-1} + +# basic auth +(['"])Basic [-a-zA-Z=;:/0-9+]{3,}\g{-1} + +# base64 encoded content +([`'"])[-a-zA-Z=;:/0-9+]+=\g{-1} +# base64 encoded content in xml/sgml +>[-a-zA-Z=;:/0-9+]+== 0.0.22) +\\\w{2,}\{ + +# eslint +"varsIgnorePattern": ".+" + +# Windows short paths +[/\\][^/\\]{5,6}~\d{1,2}[/\\] + +# in check-spelling@v0.0.22+, printf markers aren't automatically consumed +# printf markers +(?v# +(?:(?<=[A-Z]{2})V|(?<=[a-z]{2}|[A-Z]{2})v)\d+(?:\b|(?=[a-zA-Z_])) + +# Compiler flags (Unix, Java/Scala) +# Use if you have things like `-Pdocker` and want to treat them as `docker` +#(?:^|[\t ,>"'`=(])-(?:(?:J-|)[DPWXY]|[Llf])(?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,}) + +# Compiler flags (Windows / PowerShell) +# This is a subset of the more general compiler flags pattern. +# It avoids matching `-Path` to prevent it from being treated as `ath` +#(?:^|[\t ,"'`=(])-(?:[DPL](?=[A-Z]{2,})|[WXYlf](?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,})) + +# Compiler flags (linker) +,-B + +# curl arguments +\b(?:\\n|)curl(?:\s+-[a-zA-Z]{1,2}\b)*(?:\s+-[a-zA-Z]{3,})(?:\s+-[a-zA-Z]+)* +# set arguments +\bset(?:\s+-[abefimouxE]{1,2})*\s+-[abefimouxE]{3,}(?:\s+-[abefimouxE]+)* +# tar arguments +\b(?:\\n|)g?tar(?:\.exe|)(?:(?:\s+--[-a-zA-Z]+|\s+-[a-zA-Z]+|\s[ABGJMOPRSUWZacdfh-pr-xz]+\b)(?:=[^ ]*|))+ +# tput arguments -- https://man7.org/linux/man-pages/man5/terminfo.5.html -- technically they can be more than 5 chars long... +\btput\s+(?:(?:-[SV]|-T\s*\w+)\s+)*\w{3,5}\b +# macOS temp folders +/var/folders/\w\w/[+\w]+/(?:T|-Caches-)/ diff --git a/.github/actions/spelling/excludes.txt b/.github/actions/spelling/excludes.txt new file mode 100644 index 0000000..6e39dd0 --- /dev/null +++ b/.github/actions/spelling/excludes.txt @@ -0,0 +1,87 @@ +# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-excludes +(?:^|/)(?i)COPYRIGHT +(?:^|/)(?i)LICEN[CS]E +(?:^|/)3rdparty/ +(?:^|/)go\.sum$ +(?:^|/)package(?:-lock|)\.json$ +(?:^|/)Pipfile$ +(?:^|/)pyproject.toml +(?:^|/)requirements(?:-dev|-doc|-test|)\.txt$ +(?:^|/)vendor/ +\.a$ +\.ai$ +\.all-contributorsrc$ +\.avi$ +\.bmp$ +\.bz2$ +\.cer$ +\.class$ +\.coveragerc$ +\.crl$ +\.crt$ +\.csr$ +\.dll$ +\.docx?$ +\.drawio$ +\.DS_Store$ +\.eot$ +\.eps$ +\.exe$ +\.gif$ +\.git-blame-ignore-revs$ +\.gitattributes$ +\.gitkeep$ +\.graffle$ +\.gz$ +\.icns$ +\.ico$ +\.ipynb$ +\.jar$ +\.jks$ +\.jpe?g$ +\.key$ +\.lib$ +\.lock$ +\.map$ +\.min\.. +\.mo$ +\.mod$ +\.mp[34]$ +\.o$ +\.ocf$ +\.otf$ +\.p12$ +\.parquet$ +\.pdf$ +\.pem$ +\.pfx$ +\.png$ +\.psd$ +\.pyc$ +\.pylintrc$ +\.qm$ +\.s$ +\.sig$ +\.so$ +\.svgz?$ +\.sys$ +\.tar$ +\.tgz$ +\.tiff?$ +\.ttf$ +\.wav$ +\.webm$ +\.webp$ +\.woff2?$ +\.xcf$ +\.xlsx?$ +\.xpm$ +\.xz$ +\.zip$ +^\.github/actions/spelling/ +^\Q.github/workflows/spelling.yml\E$ +^\Qplugin-statusnotifier/statusnotifier.cpp\E$ +^\Qplugin-statusnotifier/statusnotifier.json\E$ +^\Qsrc/lineediteventfilter.cpp\E$ +_(?!en)..(?:_\w+|)\.ts$ +ignore$ diff --git a/.github/actions/spelling/expect.txt b/.github/actions/spelling/expect.txt new file mode 100644 index 0000000..162fb6a --- /dev/null +++ b/.github/actions/spelling/expect.txt @@ -0,0 +1,263 @@ +Ablage +albertlauncher +amd +Antialiasing +apk +appdir +appimage +applicationinfo +applicationwindow +apps +arandr +ARGB +armeabi +ASingle +ASKPASS +aurelien +autogen +AUTOMOC +AUTORCC +autoselection +AUTOUIC +backlight +balazsbela +balooctl +baloosearch +Bellegarde +broulik +buildlib +buildtools +CDeclaration +centralwidget +Chinmoy +chinmoyrp +chrono +CLASSINFO +cmap +cmath +constexpr +cpy +CXX +Datei +dbusaddons +dde +decr +DEPENDPATH +deregisters +DESTDIR +destinationlabel +Digia +dox +dpy +dsbmixer +endcode +evt +ewmh +extattr +Falkon +FHS +FILLCOM +FILLENV +Firefox +fontconfig +foxmail +freeargv +freeenvv +frontmost +fscompleter +fullscreen +gcc +gdbus +getactivewindow +getargv +getenvv +getprocs +ghr +globalaccel +globalkeyshortcuts +gmenudbusmenuproxy +gnumdk +Goffart +gpu +gtk +HCenter +hicolor +HMenu +horstretch +hsizetype +ias +icns +iconset +idc +idx +Ienabled +iiay +IID +INCLUDEPATH +initgfx +Inkscape +inmenu +Jesper +jsmdk +kdbusaddons +kenv +Keshav +keysym +KGlobal +kglobalaccel +kglobalshortcutsrc +killall +kinfo +Knutsson +krunner +kwin +KWindow +kwindowsystem +ldd +LDFLAGS +LIBDIR +LIBNAME +Lieuthier +lxqt +lxrandr +macmenu +mainwidget +Mbar +megabigbug +MENUPROXY +menuqcalc +milli +mmw +mountpoints +Mouridsen +mutexname +ncpu +NETWM +NONINFRINGEMENT +noquote +npos +nproc +nullfs +ogoffart +openproc +operatingsystem +pacman +pargs +paulolieuthier +picom +pids +pixmap +pkgconf +PLATFORMTHEME +platformthemeplugin +Plc +Popups +PProcess +Pradhan +privat +probono +procinfo +procps +procstat +PROCTAB +productname +prstat +pulseaudio +puredarwin +qalculate +QBENCHMARK +qdbus +qdbusxml +qdoc +qgetenv +qgtk +qint +QIO +qmake +qobject +QPA +qreal +qresource +qss +qstrlen +qtbase +qtdeclarative +qtmultimedia +qtproject +qtsingleapp +qttools +quickcontrols +qvariant +Ranjan +RDLCK +readproc +realmem +reclosed +rekols +revenmartin +rmutex +rmutexes +scriptable +searchprovider +searchstring +semiyucky +septemberhx +SETLK +SETLKW +sigaction +sigaddset +sigemptyset +sigset +SIGSUR +sizepolicy +smartgit +sni +sniasync +sourcelabel +SRCS +STREQUAL +syslimits +systemname +Taskbar +TCHAR +thelastlineislong +thumbnailer +Toolbar +Topmenu +typedef +unionfs +unistd +UNLCK +unminimize +Unregistration +uselib +Uwe +VCenter +vendorname +verstretch +Vetoniemi +vsizetype +WINAPI +windowswidget +windowsystem +wmutex +woboq +workflows +WRLCK +xcb +xcomposite +xdamage +xdg +xkill +XLarge +Xlib +XOpen +Xorg +xpm +xrandr +xrender +xresloader +XString +XWindow +xwininfo +zzz diff --git a/.github/actions/spelling/line_forbidden.patterns b/.github/actions/spelling/line_forbidden.patterns new file mode 100644 index 0000000..d2b5fa5 --- /dev/null +++ b/.github/actions/spelling/line_forbidden.patterns @@ -0,0 +1,134 @@ +# reject `m_data` as VxWorks defined it and that breaks things if it's used elsewhere +# see [fprime](https://github.com/nasa/fprime/commit/d589f0a25c59ea9a800d851ea84c2f5df02fb529) +# and [Qt](https://github.com/qtproject/qt-solutions/blame/fb7bc42bfcc578ff3fa3b9ca21a41e96eb37c1c7/qtscriptclassic/src/qscriptbuffer_p.h#L46) +# \bm_data\b + +# If you have a framework that uses `it()` for testing and `fit()` for debugging a specific test, +# you might not want to check in code where you were debugging w/ `fit()`, in which case, you might want +# to use this: +#\bfit\( + +# s.b. anymore +\bany more[,.] + +# s.b. cannot +\b[Cc]an not\b + +# s.b. GitHub +(?"'`=(])-(?:(?:J-|)[DPWXY]|[Lf])(?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,}) + +# hit-count: 7 file-count: 2 +# hex digits including css/html color classes: +(?:[\\0][xX]|\\u|[uU]\+|#x?|\%23)[0-9_a-fA-FgGrR]*?[a-fA-FgGrR]{2,}[0-9_a-fA-FgGrR]*(?:[uUlL]{0,3}|[iu]\d+)\b + +# hit-count: 4 file-count: 4 +# Non-English +[a-zA-Z]*[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź][a-zA-Z]{3}[a-zA-ZÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź]*|[a-zA-Z]{3,}[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź]|[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź][a-zA-Z]{3,} + +# hit-count: 3 file-count: 3 +# hex runs +\b[0-9a-fA-F]{16,}\b + +# hit-count: 1 file-count: 1 +# in check-spelling@v0.0.22+, printf markers aren't automatically consumed +# printf markers +(?v# +(?:(?<=[A-Z]{2})V|(?<=[a-z]{2}|[A-Z]{2})v)\d+(?:\b|(?=[a-zA-Z_])) + +GITHUB_TOKEN: .*$ + +# IServiceProvider / isAThing +(?:(?<=[a-z])|\b)(?:[IQ]|isA)(?=(?:[A-Z][a-z]{2,})+(?:[^a-z]|\b)) + +# libraries +libx +\blib(?=[a-qs-yz]) + +LIVEstep + +# subsidiaries +\(-ies\) + +# Questionably acceptable forms of `in to` +# Personally, I prefer `log into`, but people object +# https://www.tprteaching.com/log-into-log-in-to-login/ +\b(?:[Ll]og|[Ss]ign) in to\b + +# to opt in +\bto opt in\b + +# acceptable duplicates +# ls directory listings +[-bcdlpsw](?:[-r][-w][-SsTtx]){3}[\.+*]?\s+\d+\s+\S+\s+\S+\s+\d+\s+ +# mount +\bmount\s+-t\s+(\w+)\s+\g{-1}\b +# C types and repeated CSS values +\s(auto|center|div|inherit|long|LONG|none|normal|solid|thin|transparent|very)(?: \g{-1})+\s +# C struct +\bstruct\s+(\w+)\s+\g{-1}\b +# go templates +\s(\w+)\s+\g{-1}\s+\`(?:graphql|inject|json|yaml): +# doxygen / javadoc / .net +(?:[\\@](?:brief|groupname|t?param|return|retval)|(?:public|private|\[Parameter(?:\(.+\)|)\])(?:\s+static|\s+override|\s+readonly)*)(?:\s+\{\w+\}|)\s+(\w+)\s+\g{-1}\s + +# Commit message -- Signed-off-by and friends +^\s*(?:(?:Based-on-patch|Co-authored|Helped|Mentored|Reported|Reviewed|Signed-off)-by|Thanks-to): (?:[^<]*<[^>]*>|[^<]*)\s*$ + +# Autogenerated revert commit message +^This reverts commit [0-9a-f]{40}\.$ + +# ignore long runs of a single character: +\b([A-Za-z])\g{-1}{3,}\b diff --git a/.github/actions/spelling/reject.txt b/.github/actions/spelling/reject.txt new file mode 100644 index 0000000..e5e4c3e --- /dev/null +++ b/.github/actions/spelling/reject.txt @@ -0,0 +1,11 @@ +^attache$ +^bellow$ +benefitting +occurences? +^dependan.* +^oer$ +Sorce +^[Ss]pae.* +^untill$ +^untilling$ +^wether.* diff --git a/.github/workflows/spelling.yml b/.github/workflows/spelling.yml new file mode 100644 index 0000000..813a9b9 --- /dev/null +++ b/.github/workflows/spelling.yml @@ -0,0 +1,140 @@ +name: Check Spelling + +# Comment management is handled through a secondary job, for details see: +# https://github.com/check-spelling/check-spelling/wiki/Feature%3A-Restricted-Permissions +# +# `jobs.comment-push` runs when a push is made to a repository and the `jobs.spelling` job needs to make a comment +# (in odd cases, it might actually run just to collapse a comment, but that's fairly rare) +# it needs `contents: write` in order to add a comment. +# +# `jobs.comment-pr` runs when a pull_request is made to a repository and the `jobs.spelling` job needs to make a comment +# or collapse a comment (in the case where it had previously made a comment and now no longer needs to show a comment) +# it needs `pull-requests: write` in order to manipulate those comments. + +# Updating pull request branches is managed via comment handling. +# For details, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-expect-list +# +# These elements work together to make it happen: +# +# `on.issue_comment` +# This event listens to comments by users asking to update the metadata. +# +# `jobs.update` +# This job runs in response to an issue_comment and will push a new commit +# to update the spelling metadata. +# +# `with.experimental_apply_changes_via_bot` +# Tells the action to support and generate messages that enable it +# to make a commit to update the spelling metadata. +# +# `with.ssh_key` +# In order to trigger workflows when the commit is made, you can provide a +# secret (typically, a write-enabled github deploy key). +# +# For background, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-with-deploy-key + +# Sarif reporting +# +# Access to Sarif reports is generally restricted (by GitHub) to members of the repository. +# +# Requires enabling `security-events: write` +# and configuring the action with `use_sarif: 1` +# +# For information on the feature, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Sarif-output + +# Minimal workflow structure: +# +# on: +# push: +# ... +# pull_request_target: +# ... +# jobs: +# # you only want the spelling job, all others should be omitted +# spelling: +# # remove `security-events: write` and `use_sarif: 1` +# # remove `experimental_apply_changes_via_bot: 1` +# ... otherwise adjust the `with:` as you wish + +on: + push: + branches: + - "**" + tags-ignore: + - "**" + pull_request_target: + branches: + - "**" + types: + - 'opened' + - 'reopened' + - 'synchronize' + issue_comment: + types: + - 'created' + +jobs: + spelling: + name: Check Spelling + permissions: + contents: read + pull-requests: read + actions: read + security-events: write + outputs: + followup: ${{ steps.spelling.outputs.followup }} + runs-on: ubuntu-latest + if: ${{ contains(github.event_name, 'pull_request') || github.event_name == 'push' }} + concurrency: + group: spelling-${{ github.event.pull_request.number || github.ref }} + # note: If you use only_check_changed_files, you do not want cancel-in-progress + cancel-in-progress: true + steps: + - name: check-spelling + id: spelling + uses: check-spelling/check-spelling@v0.0.22 + with: + suppress_push_for_open_pull_request: ${{ github.actor != 'dependabot[bot]' && 1 }} + checkout: true + check_file_names: 1 + spell_check_this: helloSystem/Menu@main + post_comment: 0 + use_magic_file: 1 + report-timing: 1 + warnings: bad-regex,binary-file,deprecated-feature,ignored-expect-variant,large-file,limited-references,no-newline-at-eof,noisy-file,non-alpha-in-dictionary,token-is-substring,unexpected-line-ending,whitespace-in-dictionary,minified-file,unsupported-configuration,no-files-to-check + experimental_apply_changes_via_bot: ${{ github.repository_owner != 'helloSystem' && 1 }} + use_sarif: ${{ (!github.event.pull_request || (github.event.pull_request.head.repo.full_name == github.repository)) && 1 }} + check_extra_dictionaries: '' + extra_dictionaries: + cspell:software-terms/dict/softwareTerms.txt + cspell:php/dict/php.txt + cspell:python/src/python/python-lib.txt + cspell:cpp/src/stdlib-c.txt + cspell:node/dict/node.txt + cspell:fullstack/dict/fullstack.txt + cspell:cpp/src/compiler-msvc.txt + cspell:shell/dict/shell-all-words.txt + + update: + name: Update PR + permissions: + contents: write + pull-requests: write + actions: read + runs-on: ubuntu-latest + if: ${{ + github.repository_owner != 'helloSystem' && + github.event_name == 'issue_comment' && + github.event.issue.pull_request && + contains(github.event.comment.body, '@check-spelling-bot apply') + }} + concurrency: + group: spelling-update-${{ github.event.issue.number }} + cancel-in-progress: false + steps: + - name: apply spelling updates + uses: check-spelling/check-spelling@v0.0.22 + with: + experimental_apply_changes_via_bot: 1 + checkout: true + ssh_key: "${{ secrets.CHECK_SPELLING }}" diff --git a/CMakeLists.txt b/CMakeLists.txt index 47b6bf5..b5dfe2d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.0) project(Menu) -# Disable depreciation warnings +# Disable deprecation warnings set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations") set(CMAKE_INSTALL_PREFIX "/System/Menu.app") diff --git a/Shutdown/main.cpp b/Shutdown/main.cpp index b91c336..abea6eb 100644 --- a/Shutdown/main.cpp +++ b/Shutdown/main.cpp @@ -14,7 +14,7 @@ void ignoreUnixSignals(std::initializer_list ignoreSignals) { void catchUnixSignals(std::initializer_list quitSignals) { auto handler = [](int sig) -> void { - // blocking and not aysnc-signal-safe func are valid + // blocking and not async-signal-safe func are valid printf("\nquit the application by signal(%d).\n", sig); QCoreApplication::quit(); }; diff --git a/interfaces/pluginsiterface.h b/interfaces/pluginsinterface.h similarity index 100% rename from interfaces/pluginsiterface.h rename to interfaces/pluginsinterface.h diff --git a/plugin-battery/plugin.h b/plugin-battery/plugin.h index 7b2bc1c..a53ce81 100644 --- a/plugin-battery/plugin.h +++ b/plugin-battery/plugin.h @@ -1,7 +1,7 @@ #ifndef PLUGIN_H #define PLUGIN_H -#include "pluginsiterface.h" +#include "pluginsinterface.h" #include "batterywidget.h" #include diff --git a/plugin-datetime/datetime.h b/plugin-datetime/datetime.h index 03f1933..2f710ba 100644 --- a/plugin-datetime/datetime.h +++ b/plugin-datetime/datetime.h @@ -1,7 +1,7 @@ #ifndef DATETIME_H #define DATETIME_H -#include "pluginsiterface.h" +#include "pluginsinterface.h" #include "datetimewidget.h" #include diff --git a/plugin-datetime/datetimewidget.cpp b/plugin-datetime/datetimewidget.cpp index 0e1a3d5..bd9790e 100644 --- a/plugin-datetime/datetimewidget.cpp +++ b/plugin-datetime/datetimewidget.cpp @@ -48,7 +48,7 @@ void DateTimeWidget::updateCurrentTimeString() void DateTimeWidget::change() { - qDebug() << "pronbono: To be implemented"; + qDebug() << "probono: To be implemented"; QProcess *p = new QProcess(); p->setArguments({ "Date and Time" }); p->setProgram("launch"); diff --git a/plugin-statusnotifier/statusnotifier.h b/plugin-statusnotifier/statusnotifier.h index acbc79d..8ff08db 100644 --- a/plugin-statusnotifier/statusnotifier.h +++ b/plugin-statusnotifier/statusnotifier.h @@ -1,7 +1,7 @@ #ifndef STATUSNOTIFIER_H #define STATUSNOTIFIER_H -#include "pluginsiterface.h" +#include "pluginsinterface.h" #include "statusnotifierwidget.h" #include diff --git a/plugin-statusnotifier/statusnotifierwidget.cpp b/plugin-statusnotifier/statusnotifierwidget.cpp index a5e0fae..38f90f2 100644 --- a/plugin-statusnotifier/statusnotifierwidget.cpp +++ b/plugin-statusnotifier/statusnotifierwidget.cpp @@ -83,7 +83,7 @@ void StatusNotifierWidget::itemAdded(QString serviceAndPath) m_layout->insertWidget(0, button); button->show(); - // FIXME: The follwoing can crash. Why? Likely because when this is fist called, + // FIXME: The following can crash. Why? Likely because when this is fist called, // the objects that this tries to manipulate are not there yet. Race condition? // reinterpret_cast(parent()->parent())->hideApplicationName(); // diff --git a/plugin-volume/plugin.h b/plugin-volume/plugin.h index 05cd469..db81595 100644 --- a/plugin-volume/plugin.h +++ b/plugin-volume/plugin.h @@ -1,7 +1,7 @@ #ifndef DATETIME_H #define DATETIME_H -#include "pluginsiterface.h" +#include "pluginsinterface.h" #include "controlwidget.h" #include diff --git a/plugin-windows/windows.h b/plugin-windows/windows.h index 9eeb0b6..4fc8faa 100644 --- a/plugin-windows/windows.h +++ b/plugin-windows/windows.h @@ -1,7 +1,7 @@ #ifndef WINDOWS_H #define WINDOWS_H -#include "pluginsiterface.h" +#include "pluginsinterface.h" #include "windowswidget.h" #include diff --git a/plugin-windows/windowswidget.cpp b/plugin-windows/windowswidget.cpp index 1ed3db8..3c78542 100644 --- a/plugin-windows/windowswidget.cpp +++ b/plugin-windows/windowswidget.cpp @@ -68,7 +68,7 @@ void WindowsWidget::updateWindows() // we could keep some internal state and change just what needs to be changed; // but writing the code for this would be significantly more complex // and error-prone; so let's see whether we can get away with this. -// Looks like preformance is good since we use X11 atoms to store the kind of +// Looks like performance is good since we use X11 atoms to store the kind of // information we need directly on the windows themselves, so that we don't have // to re-compute it each time windows are switched. @@ -182,7 +182,7 @@ void WindowsWidget::updateWindows() m_menu->addSeparator(); - // Add one menu item for each appliction + // Add one menu item for each application for (WId id : distinctApps) { @@ -265,7 +265,7 @@ void WindowsWidget::updateWindows() } else { // If there are multiple windows for the same PID, then add a submenu (a QMenu with // QActions) So don't add an action here, but a submenu which contains all windows that - // beloong to that PID + // belong to that PID QMenu *subMenu = m_menu->addMenu(niceName); subMenu->setToolTipsVisible(true); diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 53e943c..da85332 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -65,7 +65,7 @@ find_package(PkgConfig REQUIRED) find_package(Qt5 COMPONENTS Network REQUIRED) # probono: For qtsingleapplication find_package(dbusmenu-qt5 REQUIRED) find_package(KF5GlobalAccel REQUIRED) -pkg_check_modules(QCALCULATE REQUIRED libqalculate) +pkg_check_modules(QALCULATE REQUIRED libqalculate) target_include_directories(${TARGET} PUBLIC ${dbusmenu-qt5_INCLUDE_DIRS}) target_link_libraries(${TARGET} @@ -85,7 +85,7 @@ target_link_libraries(${TARGET} ${XCB_LIBRARIES} ${XCB_EWMH_LIBRARIES} ${XCB_EWMH_LIBRARIES} - ${QCALCULATE_LIBRARIES} + ${QALCULATE_LIBRARIES} dbusmenu-qt5 ) if("${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD") diff --git a/src/applicationinfo.cpp b/src/applicationinfo.cpp index 0d040d6..6e38017 100644 --- a/src/applicationinfo.cpp +++ b/src/applicationinfo.cpp @@ -46,7 +46,7 @@ // directly on the window itself, so that it can be easily // retrieved next time we need it. And fast! // -// Similarly for information that is intreresting about files and directories, +// Similarly for information that is interesting about files and directories, // in which case we may do a similar thing using extended attributes. ApplicationInfo::ApplicationInfo() { } @@ -163,7 +163,7 @@ QString ApplicationInfo::environmentVariableForPId(unsigned int pid, } path = ""; #else - path = "NotImplemeted"; + path = "NotImplemented"; #endif return path; diff --git a/src/appmenu/appmenumodel.cpp b/src/appmenu/appmenumodel.cpp index c52ce45..b750744 100644 --- a/src/appmenu/appmenumodel.cpp +++ b/src/appmenu/appmenumodel.cpp @@ -460,7 +460,7 @@ void AppMenuModel::onActiveWindowChanged(WId id) if (info.hasState(NET::SkipTaskbar) || info.windowType(NET::UtilityMask) == NET::Utility) { - //! hide when the windows or their transiet(s) do not have a menu + //! hide when the windows or their transient(s) do not have a menu if (filterByActive()) { KWindowInfo transientInfo = KWindowInfo( @@ -558,7 +558,7 @@ void AppMenuModel::filterWindow(KWindowInfo &info) { if (m_currentWindowId == info.win()) { //! HACK: if the user has enabled screen scaling under X11 environment - //! then the window and screen geometries can not be trusted for comparison + //! then the window and screen geometries cannot be trusted for comparison //! before windows coordinates be adjusted properly. //! BUG: 404500 QPoint windowCenter = info.geometry().center(); diff --git a/src/appmenu/appmenumodel.h b/src/appmenu/appmenumodel.h index 4698de8..42a4ab4 100644 --- a/src/appmenu/appmenumodel.h +++ b/src/appmenu/appmenumodel.h @@ -97,7 +97,7 @@ class HDBusMenuImporter : public DBusMenuImporter QMenu *createMenu(QWidget *parent) override { HMenu *menu = new HMenu(parent); - // Make some workarounds for focus loss which calls closeAllPoupus(); + // Make some workarounds for focus loss which calls closeAllPopups(); if (parent && qobject_cast(parent->parent())) { connect(menu, &QMenu::aboutToShow, this, [this] { recent = qobject_cast(sender()); @@ -114,7 +114,7 @@ class HDBusMenuImporter : public DBusMenuImporter std::chrono::duration dur = std::chrono::high_resolution_clock::now() - reshow->lastOpened; - if (dur.count() < 350) // start reshow timer on fastly reclosed menus + if (dur.count() < 350) // start reshow timer on quickly reclosed menus m_reshowTimer->start(); }); } @@ -346,7 +346,7 @@ private Q_SLOTS: //! there are apps that are not releasing their menu properly after closing //! and as such their menu is still shown even though the app does not exist - //! any more. Such apps are Java based e.g. smartgit + //! anymore. Such apps are Java based e.g. smartgit void onWindowRemoved(WId id); void filterWindow(KWindowInfo &info); diff --git a/src/appmenu/com.canonical.AppMenu.Registrar.xml b/src/appmenu/com.canonical.AppMenu.Registrar.xml index bc2be43..67c7598 100644 --- a/src/appmenu/com.canonical.AppMenu.Registrar.xml +++ b/src/appmenu/com.canonical.AppMenu.Registrar.xml @@ -4,7 +4,7 @@ @mainpage   An interface to register menus that are associated with a window in an application.  The - main interface is docuemented here: @ref com::canonical::AppMenu::Registrar. + main interface is documented here: @ref com::canonical::AppMenu::Registrar.      The actual menus are transported using the dbusmenu protocol which is available here: @ref com::canonical::dbusmenu. @@ -21,7 +21,7 @@       /note this method assumes that the connection from the caller is the DBus connection to use for the object.  Applications that use multiple DBus connections will need to - ensure this method is called with the same connection that implmenets the object. + ensure this method is called with the same connection that implements the object. ]]> The XWindow ID of the window diff --git a/src/appmenuwidget.cpp b/src/appmenuwidget.cpp index 2e38cd3..949b3df 100644 --- a/src/appmenuwidget.cpp +++ b/src/appmenuwidget.cpp @@ -358,7 +358,7 @@ void AppMenuWidget::addAppToMenu(QString candidate, QMenu *submenu) action->setToolTip(file.absoluteFilePath()); action->setProperty("path", file.absoluteFilePath()); // action->setDisabled(true); // As a reminder that we consider those legacy and - // encourage people to swtich + // encourage people to switch } } else if (file.fileName().endsWith(".AppImage") || file.fileName().endsWith(".appimage")) { @@ -476,7 +476,7 @@ void AppMenuWidget::findAppsInside(QStringList locationsContainingApps) continue; } - // Use QDir::entryList() insted of QDirIterator because it supports sorting + // Use QDir::entryList() instead of QDirIterator because it supports sorting QStringList candidates = dir.entryList(); QString candidate; foreach (candidate, candidates) { @@ -735,9 +735,9 @@ void AppMenuWidget::searchEditingDone() { if (m_searchMenu && m_searchMenu->actions().count() > 1) { searchLineEdit->clearFocus(); - for (QAction *findActivateeCanidcate : m_searchMenu->actions()) - if (!findActivateeCanidcate->isSeparator()) { - m_searchMenu->setActiveAction(findActivateeCanidcate); + for (QAction *findCandidateAction : m_searchMenu->actions()) + if (!findCandidateAction->isSeparator()) { + m_searchMenu->setActiveAction(findCandidateAction); break; } } @@ -798,7 +798,7 @@ void AppMenuWidget::updateActionSearch() // TODO: https://stackoverflow.com/a/33790639 // We could customize more aspects of the list view of the completer by //setting the CompletionMode to InlineCompletion, so there will be no popup. - // Then make your QListView indepedant of the QLineEdit; + // Then make your QListView independent of the QLineEdit; // just react to signals that indicate when a view types some text,... KWindowSystem::setType(actionCompleter->popup()->winId(), NET::DropdownMenu); @@ -874,7 +874,7 @@ void AppMenuWidget::searchMenu() qDebug() << result; return; } - // Only initialize fscompleter if searhcstring hints a path; + // Only initialize fscompleter if searchstring hints a path; if (searchString.startsWith("/") || searchString == "~") { if (searchString == "~") { @@ -1043,7 +1043,7 @@ void AppMenuWidget::searchMenu() return; // Don't show any other results in this case } - std::function setResultVisbileMbar = [this, searchString]( + std::function setResultVisibleMbar = [this, searchString]( QModelIndex idx, int depth) { QAction *action = idx.data().value(); @@ -1125,7 +1125,7 @@ void AppMenuWidget::searchMenu() searchResults << m_searchMenu->addSeparator(); // The items in searchResults get removed when // search results change - iterate(QModelIndex(), m_appMenuModel, setResultVisbileMbar); + iterate(QModelIndex(), m_appMenuModel, setResultVisibleMbar); m_isSearching = false; searchResults << m_searchMenu->addSeparator(); // The items in searchResults get removed when @@ -1298,7 +1298,7 @@ void AppMenuWidget::searchMenu() number_of_enabled_actions++; } qDebug() << "probono: number_of_enabled_actions" << number_of_enabled_actions; - // QUESITON: Unclear whether it is 2 or 3, depending on whether one menu action or one Baloo + // QUESTION: Unclear whether it is 2 or 3, depending on whether one menu action or one Baloo // search result is there... if (number_of_enabled_actions == 2 || (number_of_enabled_actions == 3 && m_appMenuModel->filteredActions().count() == 1)) { @@ -1442,7 +1442,7 @@ void AppMenuWidget::toggleMaximizeWindow() if (isMax) { restoreWindow(); } else { - maxmizeWindow(); + maximizeWindow(); } } @@ -1548,7 +1548,7 @@ void AppMenuWidget::closeWindow() .closeWindowRequest(KWindowSystem::activeWindow()); } -void AppMenuWidget::maxmizeWindow() +void AppMenuWidget::maximizeWindow() { KWindowSystem::setState(KWindowSystem::activeWindow(), NET::Max); } @@ -1654,7 +1654,7 @@ void AppMenuWidget::actionMinimizeAll() << "0x" + QString::number(KWindowSystem::activeWindow(), 16); // NOTE: This always prints the window ID of the menu itself, rather than the one of the // otherwise frontmost application window Hence we would need to store a variable somewhere that - // contains the window ID of the last non-menu window... or is there a btter way? + // contains the window ID of the last non-menu window... or is there a better way? const auto &windows = KWindowSystem::windows(); for (WId wid : windows) { KWindowSystem::minimizeWindow(wid); @@ -1669,7 +1669,7 @@ void AppMenuWidget::actionMaximizeAll() << "0x" + QString::number(KWindowSystem::activeWindow(), 16); // NOTE: This always prints the window ID of the menu itself, rather than the one of the // otherwise frontmost application window Hence we would need to store a variable somewhere that - // contains the window ID of the last non-menu window... or is there a btter way? + // contains the window ID of the last non-menu window... or is there a better way? const auto &windows = KWindowSystem::windows(); for (WId wid : windows) { KWindowSystem::activateWindow(wid); @@ -1748,7 +1748,7 @@ bool AppMenuWidget::eventFilter(QObject *watched, QEvent *event) QMenu *submenu = qobject_cast( watched); // Workaround for: no member named 'toolTip' in 'QObject' if (!submenu->rect().contains( - mouseEvent->pos())) { // Prevent the Menu action from getting triggred when user + mouseEvent->pos())) { // Prevent the Menu action from getting triggered when user // click on actions in submenu // Gets executed when the submenu is clicked qDebug() << "Submenu clicked:" << submenu->property("path").toString(); diff --git a/src/appmenuwidget.h b/src/appmenuwidget.h index d58f69c..0e20cad 100644 --- a/src/appmenuwidget.h +++ b/src/appmenuwidget.h @@ -112,7 +112,7 @@ class AppMenuWidget : public QWidget void onWindowChanged(WId id, NET::Properties properties, NET::Properties2 properties2); void minimizeWindow(); void closeWindow(); - void maxmizeWindow(); + void maximizeWindow(); void restoreWindow(); public slots: diff --git a/src/extensionwidget.h b/src/extensionwidget.h index a8689b1..dca807f 100644 --- a/src/extensionwidget.h +++ b/src/extensionwidget.h @@ -24,7 +24,7 @@ #include #include "blurwindow.h" #include "popupwindow.h" -#include "../interfaces/pluginsiterface.h" +#include "../interfaces/pluginsinterface.h" class ExtensionWidget : public QWidget { diff --git a/src/mainwidget.h b/src/mainwidget.h index 4bb920e..ab7e591 100644 --- a/src/mainwidget.h +++ b/src/mainwidget.h @@ -22,7 +22,7 @@ #include #include -#include "../interfaces/pluginsiterface.h" +#include "../interfaces/pluginsinterface.h" #include "pluginmanager.h" #include "appmenuwidget.h" diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index fe50fb1..ec6e902 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -368,7 +368,7 @@ QString MainWindow::showApplicationName(const QString &arg) } */ - // This seeme to be a reasonable compromise in terms of speed, + // This seems to be a reasonable compromise in terms of speed, // but we are not showing the second of two applications with the same name // being launched from two different locations. Maybe this is good enough for now ApplicationInfo *ai = new ApplicationInfo(); diff --git a/src/pluginmanager.h b/src/pluginmanager.h index 3f0a7e3..839437b 100644 --- a/src/pluginmanager.h +++ b/src/pluginmanager.h @@ -23,7 +23,7 @@ #include #include #include "extensionwidget.h" -#include "../interfaces/pluginsiterface.h" +#include "../interfaces/pluginsinterface.h" class PluginManager : public QObject { diff --git a/src/qtsingleapplication/qtlockedfile.cpp b/src/qtsingleapplication/qtlockedfile.cpp index c142a86..b1d71f7 100644 --- a/src/qtsingleapplication/qtlockedfile.cpp +++ b/src/qtsingleapplication/qtlockedfile.cpp @@ -158,8 +158,8 @@ QtLockedFile::LockMode QtLockedFile::lockMode() const can be locked. If \a block is true, this function will block until the lock is - aquired. If \a block is false, this function returns \e false - immediately if the lock cannot be aquired. + acquired. If \a block is false, this function returns \e false + immediately if the lock cannot be acquired. If this object already has a lock of type \a mode, this function returns \e true immediately. If this object has a lock of a diff --git a/src/qtsingleapplication/qtsingleapplication.cpp b/src/qtsingleapplication/qtsingleapplication.cpp index d0fb15d..56336ca 100644 --- a/src/qtsingleapplication/qtsingleapplication.cpp +++ b/src/qtsingleapplication/qtsingleapplication.cpp @@ -52,7 +52,7 @@ This class allows you to create applications where only one instance should be running at a time. I.e., if the user tries to launch another instance, the already running instance will be - activated instead. Another usecase is a client-server system, + activated instead. Another use case is a client-server system, where the first started instance will assume the role of server, and the later instances will act as clients of that server. @@ -144,7 +144,7 @@ void QtSingleApplication::sysInit(const QString &appId) /*! Creates a QtSingleApplication object. The application identifier will be QCoreApplication::applicationFilePath(). \a argc, \a - argv, and \a GUIenabled are passed on to the QAppliation constructor. + argv, and \a GUIenabled are passed on to the QApplication constructor. If you are creating a console application (i.e. setting \a GUIenabled to false), you may consider using @@ -161,7 +161,7 @@ QtSingleApplication::QtSingleApplication(int &argc, char **argv, bool GUIenabled /*! Creates a QtSingleApplication object with the application identifier \a appId. \a argc and \a argv are passed on to the - QAppliation constructor. + QApplication constructor. */ QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char **argv) @@ -175,7 +175,7 @@ QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char * /*! Creates a QtSingleApplication object. The application identifier will be QCoreApplication::applicationFilePath(). \a argc, \a - argv, and \a type are passed on to the QAppliation constructor. + argv, and \a type are passed on to the QApplication constructor. */ QtSingleApplication::QtSingleApplication(int &argc, char **argv, Type type) : QApplication(argc, argv, type) diff --git a/src/qtsingleapplication/qtsinglecoreapplication.cpp b/src/qtsingleapplication/qtsinglecoreapplication.cpp index 5634537..18de5d1 100644 --- a/src/qtsingleapplication/qtsinglecoreapplication.cpp +++ b/src/qtsingleapplication/qtsinglecoreapplication.cpp @@ -67,7 +67,7 @@ /*! Creates a QtSingleCoreApplication object. The application identifier will be QCoreApplication::applicationFilePath(). \a argc and \a - argv are passed on to the QCoreAppliation constructor. + argv are passed on to the QCoreApplication constructor. */ QtSingleCoreApplication::QtSingleCoreApplication(int &argc, char **argv) @@ -81,7 +81,7 @@ QtSingleCoreApplication::QtSingleCoreApplication(int &argc, char **argv) /*! Creates a QtSingleCoreApplication object with the application identifier \a appId. \a argc and \a argv are passed on to the - QCoreAppliation constructor. + QCoreApplication constructor. */ QtSingleCoreApplication::QtSingleCoreApplication(const QString &appId, int &argc, char **argv) : QCoreApplication(argc, argv)