pax_global_header00006660000000000000000000000064151671456260014527gustar00rootroot0000000000000052 comment=4b6b0a24c10f6dfad56ced6b472749d03707c0ff QtPass-1.6.0/000077500000000000000000000000001516714562600127465ustar00rootroot00000000000000QtPass-1.6.0/.appveyor.yml000066400000000000000000000045761516714562600154300ustar00rootroot00000000000000version: "{build}" image: Visual Studio 2022 branches: only: - main skip_tags: false environment: QT_VERSION: 6.9.3 QT_ARCH: win64_mingw QT_ROOT: C:\Qt INNO_DIR: C:\Program Files (x86)\Inno Setup 6 install: - choco install -y innosetup - py -3 -m pip install --upgrade pip - py -3 -m pip install aqtinstall - if not exist %QT_ROOT% mkdir %QT_ROOT% - set PATH=C:\Python314-x64\Scripts;%PATH% - py -3 -m aqt install-qt windows desktop %QT_VERSION% %QT_ARCH% -O %QT_ROOT% - py -3 -m aqt install-tool -O %QT_ROOT% windows desktop tools_mingw1310 - set QTDIR=%QT_ROOT%\%QT_VERSION%\mingw_64 - set MINGW_ROOT=%QT_ROOT%\Tools\mingw1310_64 - set PATH=%QTDIR%\bin;%MINGW_ROOT%\bin;%INNO_DIR%;%PATH% - echo ==== PATH ==== - echo %PATH% - echo ==== QT TREE ==== - dir %QT_ROOT% - dir %QT_ROOT%\%QT_VERSION% - dir %QTDIR% - dir %QTDIR%\bin - dir %QT_ROOT%\Tools - dir %MINGW_ROOT% - dir %MINGW_ROOT%\bin - echo ==== TOOL RESOLUTION ==== - where qmake - where mingw32-make - where gcc - where g++ - where ld - where windres - where windeployqt - where iscc - echo ==== TOOL VERSIONS ==== - qmake -v - gcc --version - g++ --version - ld --version - echo ==== SANITY C BUILD ==== - echo int main(void){return 0;} > sanity.c - gcc sanity.c -o sanity.exe - if not exist sanity.exe exit /b 1 build_script: - qmake qtpass.pro CONFIG+=release - mingw32-make V=1 - if exist dist rmdir /s /q dist - mkdir dist\qtpass - if exist main\release\qtpass.exe (copy main\release\qtpass.exe dist\qtpass\qtpass.exe) else (copy src\release\qtpass.exe dist\qtpass\qtpass.exe) - if not exist dist\qtpass\qtpass.exe exit /b 1 - windeployqt --release --dir dist\qtpass dist\qtpass\qtpass.exe - copy README.md dist\qtpass\README.txt - copy LICENSE dist\qtpass\LICENSE.txt - if not exist dist\qtpass\README.txt exit /b 1 - if not exist dist\qtpass\LICENSE.txt exit /b 1 - dir dist\qtpass - if "%APPVEYOR_REPO_TAG%"=="true" (iscc /DMyAppVersion=%APPVEYOR_REPO_TAG_NAME% qtpass.iss) else (iscc qtpass.iss) artifacts: - path: Output\qtpass-*.exe name: installer - path: dist\qtpass\qtpass.exe name: binary deploy: - provider: GitHub auth_token: secure: YfscG1DR0+kApThPXxQSr+ZEjUOUlIG0Tqc5+90IFsUInyICRRMdbJsbxR2qhq/p artifact: installer draft: true prerelease: false on: APPVEYOR_REPO_TAG: true QtPass-1.6.0/.clang-format000066400000000000000000000070741516714562600153310ustar00rootroot00000000000000--- Language: Cpp # BasedOnStyle: LLVM AccessModifierOffset: -2 AlignAfterOpenBracket: Align AlignConsecutiveAssignments: false AlignConsecutiveDeclarations: false AlignEscapedNewlines: Right AlignOperands: true AlignTrailingComments: true AllowAllArgumentsOnNextLine: true AllowAllConstructorInitializersOnNextLine: true AllowAllParametersOfDeclarationOnNextLine: true AllowShortBlocksOnASingleLine: false AllowShortCaseLabelsOnASingleLine: false AllowShortFunctionsOnASingleLine: All AllowShortLambdasOnASingleLine: All AllowShortIfStatementsOnASingleLine: Never AllowShortLoopsOnASingleLine: false AlwaysBreakAfterDefinitionReturnType: None AlwaysBreakAfterReturnType: None AlwaysBreakBeforeMultilineStrings: false AlwaysBreakTemplateDeclarations: MultiLine BinPackArguments: true BinPackParameters: true BraceWrapping: AfterCaseLabel: false AfterClass: false AfterControlStatement: false AfterEnum: false AfterFunction: false AfterNamespace: false AfterObjCDeclaration: false AfterStruct: false AfterUnion: false AfterExternBlock: false BeforeCatch: false BeforeElse: false IndentBraces: false SplitEmptyFunction: true SplitEmptyRecord: true SplitEmptyNamespace: true BreakBeforeBinaryOperators: None BreakBeforeBraces: Attach BreakBeforeInheritanceComma: false BreakInheritanceList: BeforeColon BreakBeforeTernaryOperators: true BreakConstructorInitializersBeforeComma: false BreakConstructorInitializers: BeforeColon BreakAfterJavaFieldAnnotations: false BreakStringLiterals: true ColumnLimit: 80 CommentPragmas: '^ IWYU pragma:' CompactNamespaces: false ConstructorInitializerAllOnOneLineOrOnePerLine: false ConstructorInitializerIndentWidth: 4 ContinuationIndentWidth: 4 Cpp11BracedListStyle: true DerivePointerAlignment: false DisableFormat: false ExperimentalAutoDetectBinPacking: false FixNamespaceComments: true ForEachMacros: - foreach - Q_FOREACH - BOOST_FOREACH IncludeBlocks: Preserve IncludeCategories: - Regex: '^"(llvm|llvm-c|clang|clang-c)/' Priority: 2 - Regex: '^(<|"(gtest|gmock|isl|json)/)' Priority: 3 - Regex: '.*' Priority: 1 IncludeIsMainRegex: '(Test)?$' IndentCaseLabels: false IndentPPDirectives: None IndentWidth: 2 IndentWrappedFunctionNames: false JavaScriptQuotes: Leave JavaScriptWrapImports: true KeepEmptyLinesAtTheStartOfBlocks: true MacroBlockBegin: '' MacroBlockEnd: '' MaxEmptyLinesToKeep: 1 NamespaceIndentation: None ObjCBinPackProtocolList: Auto ObjCBlockIndentWidth: 2 ObjCSpaceAfterProperty: false ObjCSpaceBeforeProtocolList: true PenaltyBreakAssignment: 2 PenaltyBreakBeforeFirstCallParameter: 19 PenaltyBreakComment: 300 PenaltyBreakFirstLessLess: 120 PenaltyBreakString: 1000 PenaltyBreakTemplateDeclaration: 10 PenaltyExcessCharacter: 1000000 PenaltyReturnTypeOnItsOwnLine: 60 PointerAlignment: Right ReflowComments: true SortIncludes: true SortUsingDeclarations: true SpaceAfterCStyleCast: false SpaceAfterLogicalNot: false SpaceAfterTemplateKeyword: true SpaceBeforeAssignmentOperators: true SpaceBeforeCpp11BracedList: false SpaceBeforeCtorInitializerColon: true SpaceBeforeInheritanceColon: true SpaceBeforeParens: ControlStatements SpaceBeforeRangeBasedForLoopColon: true SpaceInEmptyParentheses: false SpacesBeforeTrailingComments: 1 SpacesInAngles: false SpacesInContainerLiterals: true SpacesInCStyleCastParentheses: false SpacesInParentheses: false SpacesInSquareBrackets: false Standard: Cpp11 StatementMacros: - Q_UNUSED - QT_REQUIRE_VERSION TabWidth: 8 UseTab: Never ... QtPass-1.6.0/.clang-tidy000066400000000000000000000000721516714562600150010ustar00rootroot00000000000000Checks: 'modernize-*,performance-*' WarningsAsErrors: '*' QtPass-1.6.0/.coafile000066400000000000000000000003351516714562600143520ustar00rootroot00000000000000[Default] bears = SpaceConsistencyBear files = *.cpp, *.h, *.ui use_spaces = true default_actions = SpaceConsistencyBear: ApplyPatchAction [DOCS] bears = SpaceConsistencyBear files = *.md [commit] bears = GitCommitBear QtPass-1.6.0/.codecov.yml000066400000000000000000000001411516714562600151650ustar00rootroot00000000000000--- coverage: ignore: - tests/* - src/qrc_*.cpp patch: default: target: 0% QtPass-1.6.0/.codefactor.json000066400000000000000000000000341516714562600160250ustar00rootroot00000000000000{ "ignore": ["**/*.ts"] } QtPass-1.6.0/.github/000077500000000000000000000000001516714562600143065ustar00rootroot00000000000000QtPass-1.6.0/.github/FUNDING.yml000066400000000000000000000000241516714562600161170ustar00rootroot00000000000000--- github: annejan QtPass-1.6.0/.github/ISSUE_TEMPLATE/000077500000000000000000000000001516714562600164715ustar00rootroot00000000000000QtPass-1.6.0/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000012201516714562600211560ustar00rootroot00000000000000--- name: Bug report about: Create a report to help us improve title: "" labels: bug assignees: "" --- **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: 1. Open '...' 2. Click on '....' 3. Scroll down to '....' 4. See error **Expected behavior** A clear and concise description of what you expected to happen. **Screenshots** If applicable, add screenshots to help explain your problem. **Desktop (please complete the following information):** - OS/Distribution: [e.g. Ubuntu 20.04] - Version [e.g. 1.2.3] **Additional context** Add any other context about the problem here. QtPass-1.6.0/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000011371516714562600222200ustar00rootroot00000000000000--- name: Feature request about: Suggest an idea for this project title: "" labels: feature_request assignees: "" --- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. QtPass-1.6.0/.github/PULL_REQUEST_TEMPLATE/000077500000000000000000000000001516714562600175655ustar00rootroot00000000000000QtPass-1.6.0/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md000066400000000000000000000011111516714562600245200ustar00rootroot00000000000000# Summary ## Testing - [ ] Tests pass locally: `make check` - [ ] Linter passes locally: `act push -W .github/workflows/linter.yml -j build` ## DCO - [ ] I've signed off all commits in this pull request in accordance with the [Developer Certificate of Origin (DCO)](https://developercertificate.org) > Tip: use `git commit -s` to add the required `Signed-off-by:` line to each commit. --- By submitting this pull request, I agree to release my contribution under the GPL-3.0-or-later license. QtPass-1.6.0/.github/dependabot.yml000066400000000000000000000003001516714562600171270ustar00rootroot00000000000000version: 2 updates: - package-ecosystem: "github-actions" directory: "/" schedule: interval: "weekly" commit-message: prefix: "ci" open-pull-requests-limit: 5 QtPass-1.6.0/.github/super-linter.env000066400000000000000000000003001516714562600174420ustar00rootroot00000000000000VALIDATE_ALL_CODEBASE=true VALIDATE_CPP=false VALIDATE_JSCPD=false VALIDATE_TYPESCRIPT=false VALIDATE_TYPESCRIPT_ES=false VALIDATE_TYPESCRIPT_PRETTIER=false VALIDATE_TYPESCRIPT_STANDARD=false QtPass-1.6.0/.github/workflows/000077500000000000000000000000001516714562600163435ustar00rootroot00000000000000QtPass-1.6.0/.github/workflows/ccpp.yml000066400000000000000000000057131516714562600200210ustar00rootroot00000000000000--- name: QMake on: push: branches: ["main"] pull_request: branches: ["main"] merge_group: permissions: {} jobs: changes: runs-on: ubuntu-latest outputs: src: ${{ steps.filter.outputs.src }} tests: ${{ steps.filter.outputs.tests }} qt: ${{ steps.filter.outputs.qt }} localization: ${{ steps.filter.outputs.localization }} icons: ${{ steps.filter.outputs.icons }} docs: ${{ steps.filter.outputs.docs }} steps: - uses: actions/checkout@v6 - uses: dorny/paths-filter@v4 id: filter with: base: main filters: | src: - "src/**" - "**.cpp" - "**.h" - "**.hpp" - "**.ui" - "**.qrc" tests: - "tests/**" qt: - "**.pro" - "**.pri" localization: - "localization/**" icons: - "icons/**" docs: - "docs/**" build: needs: changes permissions: contents: read runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] qt: ["6.8"] include: - os: ubuntu-latest qt: "5.15" steps: - name: Check if build needed id: need_build shell: bash run: | if [[ "${{ needs.changes.outputs.src }}" == "true" ]] || \ [[ "${{ needs.changes.outputs.tests }}" == "true" ]] || \ [[ "${{ needs.changes.outputs.qt }}" == "true" ]] || \ [[ "${{ needs.changes.outputs.localization }}" == "true" ]] || \ [[ "${{ needs.changes.outputs.icons }}" == "true" ]] || \ [[ "${{ needs.changes.outputs.docs }}" == "true" ]] || \ [[ "${{ github.event_name }}" == "merge_group" ]]; then echo "run_build=true" >> "$GITHUB_OUTPUT" else echo "run_build=false" >> "$GITHUB_OUTPUT" fi - name: No changes - skipping if: steps.need_build.outputs.run_build != 'true' run: echo "No relevant changes - skipping build" - uses: actions/checkout@v6 if: steps.need_build.outputs.run_build == 'true' - uses: ilammy/msvc-dev-cmd@v1 if: steps.need_build.outputs.run_build == 'true' - name: Install Qt if: steps.need_build.outputs.run_build == 'true' uses: jurplel/install-qt-action@v4 with: version: ${{ matrix.qt }} - name: qmake if: steps.need_build.outputs.run_build == 'true' run: qmake - name: make if: steps.need_build.outputs.run_build == 'true' run: ${{ runner.os == 'Windows' && 'nmake' || 'make' }} - name: make check if: steps.need_build.outputs.run_build == 'true' run: ${{ runner.os == 'Windows' && 'nmake' || 'make' }} check TESTARGS="--platform offscreen" QtPass-1.6.0/.github/workflows/codeql.yml000066400000000000000000000045401516714562600203400ustar00rootroot00000000000000--- name: "CodeQL" on: push: branches: ["main"] pull_request: branches: ["main"] schedule: - cron: "24 8 * * 2" merge_group: permissions: {} jobs: changes: runs-on: ubuntu-latest outputs: src: ${{ steps.filter.outputs.src }} tests: ${{ steps.filter.outputs.tests }} steps: - uses: actions/checkout@v6 - uses: dorny/paths-filter@v4 id: filter with: base: main filters: | src: - "src/**" - "**.cpp" - "**.h" - "**.hpp" - "**.c" tests: - "tests/**" analyze: needs: changes name: Analyze runs-on: ubuntu-latest permissions: actions: read contents: read security-events: write strategy: fail-fast: false matrix: language: ["cpp"] steps: - name: Check if analysis needed id: need_analysis shell: bash run: | if [[ "${{ needs.changes.outputs.src }}" == "true" ]] || \ [[ "${{ needs.changes.outputs.tests }}" == "true" ]] || \ [[ "${{ github.event_name }}" == "merge_group" ]] || \ [[ "${{ github.event_name }}" == "schedule" ]]; then echo "run_analysis=true" >> "$GITHUB_OUTPUT" else echo "run_analysis=false" >> "$GITHUB_OUTPUT" fi - name: No changes - skipping if: steps.need_analysis.outputs.run_analysis != 'true' run: echo "No relevant changes - skipping CodeQL analysis" - name: Checkout repository if: steps.need_analysis.outputs.run_analysis == 'true' uses: actions/checkout@v6 - name: Initialize CodeQL if: steps.need_analysis.outputs.run_analysis == 'true' uses: github/codeql-action/init@v4 with: languages: ${{ matrix.language }} - name: Install Qt if: steps.need_analysis.outputs.run_analysis == 'true' uses: jurplel/install-qt-action@v4 - name: Autobuild if: steps.need_analysis.outputs.run_analysis == 'true' uses: github/codeql-action/autobuild@v4 - name: Perform CodeQL Analysis if: steps.need_analysis.outputs.run_analysis == 'true' uses: github/codeql-action/analyze@v4 with: category: "/language:${{matrix.language}}" QtPass-1.6.0/.github/workflows/coverity.yml000066400000000000000000000046751516714562600207460ustar00rootroot00000000000000name: Coverity Scan on: workflow_dispatch: push: branches: - coverity_scan schedule: - cron: "0 3 * * 1" permissions: contents: read jobs: coverity: if: github.repository == 'IJHack/QtPass' runs-on: ubuntu-latest timeout-minutes: 60 env: COVERITY_PROJECT: IJHack/qtpass steps: - name: Checkout uses: actions/checkout@v6 - name: Install Qt uses: jurplel/install-qt-action@v4 with: version: "6.9.3" - name: Install system dependencies run: | sudo apt-get update sudo apt-get install -y \ build-essential \ qmake6 \ qt6-base-dev \ qt6-tools-dev-tools \ libqt6svg6-dev \ libqrencode-dev \ zlib1g-dev \ curl \ xz-utils \ tar - name: Download Coverity build tool env: TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} run: | set -euxo pipefail test -n "${TOKEN}" curl -fL \ --data-urlencode "token=${TOKEN}" \ --data-urlencode "project=${COVERITY_PROJECT}" \ https://scan.coverity.com/download/linux64 \ -o coverity_tool.tgz rm -rf coverity_tool mkdir -p coverity_tool tar xzf coverity_tool.tgz --strip 1 -C coverity_tool test -x coverity_tool/bin/cov-build - name: Configure run: | set -euxo pipefail qmake6 qtpass.pro - name: Build under Coverity run: | set -euxo pipefail export PATH="${GITHUB_WORKSPACE}/coverity_tool/bin:${PATH}" cov-build --dir cov-int make -j"$(nproc)" - name: Archive analysis bundle run: | set -euxo pipefail tar -caf qtpass-coverity.tar.xz cov-int - name: Submit to Coverity Scan env: TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} EMAIL: ${{ secrets.COVERITY_SCAN_EMAIL }} run: | set -euxo pipefail test -n "${TOKEN}" test -n "${EMAIL}" curl -fL \ --form token="${TOKEN}" \ --form email="${EMAIL}" \ --form file=@qtpass-coverity.tar.xz \ --form version="${GITHUB_SHA}" \ --form description="GitHub Actions build from ${GITHUB_REF_NAME}" \ "https://scan.coverity.com/builds?project=${COVERITY_PROJECT}" QtPass-1.6.0/.github/workflows/docs.yml000066400000000000000000000100751516714562600200210ustar00rootroot00000000000000name: Documentation and public code coverage on: push: branches: [main] pull_request: branches: [main] merge_group: permissions: contents: read jobs: changes: runs-on: ubuntu-latest outputs: src: ${{ steps.filter.outputs.src }} tests: ${{ steps.filter.outputs.tests }} docs: ${{ steps.filter.outputs.docs }} steps: - uses: actions/checkout@v6 - uses: dorny/paths-filter@v4 id: filter with: base: main filters: | src: - "src/**" - "**.cpp" - "**.h" - "**.hpp" - "**.ui" - "**.qrc" - "**.pro" - "**.pri" tests: - "tests/**" docs: - "docs/**" docs: needs: changes runs-on: ubuntu-latest permissions: contents: write steps: - name: Check if docs needed id: need_docs shell: bash run: | if [[ "${{ needs.changes.outputs.src }}" == "true" ]] || \ [[ "${{ needs.changes.outputs.tests }}" == "true" ]] || \ [[ "${{ needs.changes.outputs.docs }}" == "true" ]] || \ [[ "${{ github.event_name }}" == "merge_group" ]]; then echo "run_docs=true" >> "$GITHUB_OUTPUT" else echo "run_docs=false" >> "$GITHUB_OUTPUT" fi - name: No changes - skipping if: steps.need_docs.outputs.run_docs != 'true' run: echo "No relevant changes - skipping docs and coverage" - uses: actions/checkout@v6 if: steps.need_docs.outputs.run_docs == 'true' - name: Install Qt if: steps.need_docs.outputs.run_docs == 'true' uses: jurplel/install-qt-action@v4 - name: Install Doxygen if: steps.need_docs.outputs.run_docs == 'true' run: sudo apt-get update && sudo apt-get install -y doxygen graphviz - name: Generate documentation if: steps.need_docs.outputs.run_docs == 'true' run: doxygen - name: Install lcov if: steps.need_docs.outputs.run_docs == 'true' run: sudo apt-get update && sudo apt-get install -y lcov - name: qmake if: steps.need_docs.outputs.run_docs == 'true' run: qmake CONFIG+=coverage - name: Build if: steps.need_docs.outputs.run_docs == 'true' run: make - name: Run tests and generate coverage if: steps.need_docs.outputs.run_docs == 'true' run: | make lcov TESTARGS="--platform offscreen -o qtpass.junit.xml,junitxml" - name: Upload coverage to Codecov if: steps.need_docs.outputs.run_docs == 'true' && !cancelled() uses: codecov/codecov-action@v6 with: files: ./docs/coverage/.lcov.total flags: qtpass name: qtpass-lcov fail_ci_if_error: false verbose: true token: ${{ secrets.CODECOV_TOKEN }} - name: Upload test results to Codecov if: steps.need_docs.outputs.run_docs == 'true' && !cancelled() uses: codecov/codecov-action@v6 with: token: ${{ secrets.CODECOV_TOKEN }} files: "tests/auto/*/qtpass.junit.xml" report_type: test_results fail_ci_if_error: true - name: Upload coverage to Coveralls if: steps.need_docs.outputs.run_docs == 'true' && !cancelled() uses: coverallsapp/github-action@v2 with: github-token: ${{ secrets.GITHUB_TOKEN }} files: ./docs/coverage/.lcov.total format: lcov fail-on-error: false - name: Deploy to GitHub Pages if: steps.need_docs.outputs.run_docs == 'true' && github.ref == 'refs/heads/main' && github.event_name == 'push' uses: peaceiris/actions-gh-pages@v4 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_branch: gh-pages publish_dir: ./docs destination_dir: docs keep_files: true user_name: "GitHub Actions" user_email: "github-actions[bot]@users.noreply.github.com" QtPass-1.6.0/.github/workflows/linter.yml000066400000000000000000000061571516714562600203740ustar00rootroot00000000000000--- name: Lint Code Base on: push: branches: ["main"] pull_request: branches: ["main"] merge_group: permissions: {} jobs: changes: runs-on: ubuntu-latest outputs: src: ${{ steps.filter.outputs.src }} tests: ${{ steps.filter.outputs.tests }} code: ${{ steps.filter.outputs.code }} qt: ${{ steps.filter.outputs.qt }} yaml: ${{ steps.filter.outputs.yaml }} markdown: ${{ steps.filter.outputs.markdown }} scripts: ${{ steps.filter.outputs.scripts }} json: ${{ steps.filter.outputs.json }} github: ${{ steps.filter.outputs.github }} localization: ${{ steps.filter.outputs.localization }} steps: - uses: actions/checkout@v6 - uses: dorny/paths-filter@v4 id: filter with: base: main filters: | src: - "src/**" tests: - "tests/**" code: - "**.cpp" - "**.h" - "**.hpp" qt: - "**.pro" - "**.pri" yaml: - "**.yml" - "**.yaml" markdown: - "**.md" scripts: - "**.sh" json: - "**.json" github: - ".github/**" localization: - "localization/**" build: needs: changes name: Lint Code Base runs-on: ubuntu-latest permissions: actions: read contents: read steps: - name: Check if lint needed id: need_lint shell: bash run: | if [[ "${{ needs.changes.outputs.src }}" == "true" ]] || \ [[ "${{ needs.changes.outputs.tests }}" == "true" ]] || \ [[ "${{ needs.changes.outputs.code }}" == "true" ]] || \ [[ "${{ needs.changes.outputs.qt }}" == "true" ]] || \ [[ "${{ needs.changes.outputs.yaml }}" == "true" ]] || \ [[ "${{ needs.changes.outputs.markdown }}" == "true" ]] || \ [[ "${{ needs.changes.outputs.scripts }}" == "true" ]] || \ [[ "${{ needs.changes.outputs.json }}" == "true" ]] || \ [[ "${{ needs.changes.outputs.github }}" == "true" ]] || \ [[ "${{ needs.changes.outputs.localization }}" == "true" ]] || \ [[ "${{ github.event_name }}" == "merge_group" ]]; then echo "run_lint=true" >> "$GITHUB_OUTPUT" else echo "run_lint=false" >> "$GITHUB_OUTPUT" fi - name: No changes - skipping if: steps.need_lint.outputs.run_lint != 'true' run: echo "No relevant changes - skipping lint" - name: Checkout Code if: steps.need_lint.outputs.run_lint == 'true' uses: actions/checkout@v6 with: fetch-depth: 0 - if: steps.need_lint.outputs.run_lint == 'true' run: cat .github/super-linter.env >> "$GITHUB_ENV" - name: Lint Code Base if: steps.need_lint.outputs.run_lint == 'true' uses: github/super-linter@v7 env: DEFAULT_BRANCH: main GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} QtPass-1.6.0/.github/workflows/publiccode-yml-validation.yml000066400000000000000000000026351516714562600241340ustar00rootroot00000000000000name: publiccode.yml validation on: push: branches: ["main"] pull_request: branches: ["main"] merge_group: permissions: {} jobs: changes: runs-on: ubuntu-latest outputs: publiccode: ${{ steps.filter.outputs.publiccode }} steps: - uses: actions/checkout@v6 - uses: dorny/paths-filter@v4 id: filter with: base: main filters: | publiccode: - "publiccode.yml" publiccode_yml_validation: needs: changes runs-on: ubuntu-latest permissions: contents: read steps: - name: Check if validation needed id: need_validation shell: bash run: | if [[ "${{ needs.changes.outputs.publiccode }}" == "true" ]] || \ [[ "${{ github.event_name }}" == "merge_group" ]]; then echo "run_validation=true" >> "$GITHUB_OUTPUT" else echo "run_validation=false" >> "$GITHUB_OUTPUT" fi - name: No changes - skipping if: steps.need_validation.outputs.run_validation != 'true' run: echo "No relevant changes - skipping publiccode validation" - uses: actions/checkout@v6 if: steps.need_validation.outputs.run_validation == 'true' - uses: italia/publiccode-parser-action@v1 if: steps.need_validation.outputs.run_validation == 'true' with: publiccode: "publiccode.yml" QtPass-1.6.0/.github/workflows/release-installers.yml000066400000000000000000000145021516714562600226660ustar00rootroot00000000000000name: Release Build on: pull_request: branches: - main push: tags: - "v*" merge_group: permissions: contents: read jobs: changes: runs-on: ubuntu-latest outputs: src: ${{ steps.filter.outputs.src }} tests: ${{ steps.filter.outputs.tests }} qt: ${{ steps.filter.outputs.qt }} steps: - uses: actions/checkout@v6 - uses: dorny/paths-filter@v4 id: filter with: base: main filters: | src: - "src/**" - "**.cpp" - "**.h" - "**.hpp" - "**.ui" - "**.qrc" tests: - "tests/**" qt: - "**.pro" - "**.pri" build-windows: needs: changes runs-on: windows-latest steps: - name: Check if build needed id: need_build shell: bash run: | if [[ "${{ needs.changes.outputs.src }}" == "true" ]] || \ [[ "${{ needs.changes.outputs.tests }}" == "true" ]] || \ [[ "${{ needs.changes.outputs.qt }}" == "true" ]] || \ [[ "${{ github.event_name }}" == "merge_group" ]] || \ [[ "${{ github.ref }}" =~ ^refs/tags/v ]]; then echo "run_build=true" >> "$GITHUB_OUTPUT" else echo "run_build=false" >> "$GITHUB_OUTPUT" fi - name: No changes - skipping if: steps.need_build.outputs.run_build != 'true' run: echo "No relevant changes - skipping Windows build" - uses: actions/checkout@v6 if: steps.need_build.outputs.run_build == 'true' - uses: ilammy/msvc-dev-cmd@v1 if: steps.need_build.outputs.run_build == 'true' - uses: jurplel/install-qt-action@v4 if: steps.need_build.outputs.run_build == 'true' - name: Install Inno Setup if: steps.need_build.outputs.run_build == 'true' run: choco install --yes innosetup - name: Resolve installer version if: steps.need_build.outputs.run_build == 'true' id: version shell: pwsh run: | $ErrorActionPreference = "Stop" $version = "1.5.1" if ($env:GITHUB_REF -like 'refs/tags/v*') { $version = $env:GITHUB_REF_NAME -replace '^v', '' } else { $line = Get-Content qtpass.pri | Where-Object { $_ -match '^VERSION\s*=' } | Select-Object -First 1 if ($line -and ($line -match '=\s*([0-9]+\.[0-9]+\.[0-9]+)')) { $version = $matches[1] } } Write-Output "version=$version" >> $env:GITHUB_OUTPUT - name: Build Windows installer if: steps.need_build.outputs.run_build == 'true' shell: pwsh run: | $ErrorActionPreference = "Stop" qmake qtpass.pro CONFIG+=release nmake New-Item -ItemType Directory -Force -Path dist\qtpass | Out-Null if (Test-Path "main\release\qtpass.exe") { Copy-Item "main\release\qtpass.exe" "dist\qtpass\qtpass.exe" } elseif (Test-Path "src\release\qtpass.exe") { Copy-Item "src\release\qtpass.exe" "dist\qtpass\qtpass.exe" } else { throw "Could not locate built qtpass.exe" } Copy-Item "README.md" "dist\qtpass\README.txt" Copy-Item "LICENSE" "dist\qtpass\LICENSE.txt" windeployqt --release --dir dist\qtpass dist\qtpass\qtpass.exe iscc "/DMyAppVersion=${{ steps.version.outputs.version }}" qtpass.iss - name: Upload installer artifact if: steps.need_build.outputs.run_build == 'true' uses: actions/upload-artifact@v7 with: name: qtpass-windows-installer-${{ steps.version.outputs.version }} path: Output/qtpass-*.exe build-macos: needs: changes runs-on: macos-latest steps: - name: Check if build needed id: need_build shell: bash run: | if [[ "${{ needs.changes.outputs.src }}" == "true" ]] || \ [[ "${{ needs.changes.outputs.tests }}" == "true" ]] || \ [[ "${{ needs.changes.outputs.qt }}" == "true" ]] || \ [[ "${{ github.event_name }}" == "merge_group" ]] || \ [[ "${{ github.ref }}" =~ ^refs/tags/v ]]; then echo "run_build=true" >> "$GITHUB_OUTPUT" else echo "run_build=false" >> "$GITHUB_OUTPUT" fi - name: No changes - skipping if: steps.need_build.outputs.run_build != 'true' run: echo "No relevant changes - skipping macOS build" - uses: actions/checkout@v6 if: steps.need_build.outputs.run_build == 'true' - uses: jurplel/install-qt-action@v4 if: steps.need_build.outputs.run_build == 'true' - name: Install dmg helper if: steps.need_build.outputs.run_build == 'true' run: brew install create-dmg - name: Resolve dmg version if: steps.need_build.outputs.run_build == 'true' id: version shell: bash run: | set -euo pipefail version="1.5.1" if [[ "${GITHUB_REF}" == refs/tags/v* ]]; then version="${GITHUB_REF_NAME#v}" else version_from_pri="$(awk -F '=' '/^VERSION[[:space:]]*=/{ gsub(/[[:space:]]/, "", $2); print $2; exit }' qtpass.pri)" if [[ -n "${version_from_pri}" ]]; then version="${version_from_pri}" fi fi echo "version=$version" >> "$GITHUB_OUTPUT" - name: Build macOS app and dmg if: steps.need_build.outputs.run_build == 'true' run: | set -euo pipefail qmake qtpass.pro CONFIG+=release make APP_PATH="main/QtPass.app" if [ ! -d "$APP_PATH" ]; then if [ -d "src/QtPass.app" ]; then APP_PATH="src/QtPass.app" else echo "QtPass.app not found" >&2 exit 1 fi fi macdeployqt "$APP_PATH" DMG_NAME="QtPass-${{ steps.version.outputs.version }}.dmg" create-dmg "$DMG_NAME" "$APP_PATH" - name: Upload dmg artifact if: steps.need_build.outputs.run_build == 'true' uses: actions/upload-artifact@v7 with: name: qtpass-macos-dmg-${{ steps.version.outputs.version }} path: QtPass-*.dmg QtPass-1.6.0/.github/workflows/reuse.yml000066400000000000000000000010661516714562600202140ustar00rootroot00000000000000# SPDX-FileCopyrightText: 2026 Anne Jan Brouwer # SPDX-License-Identifier: CC0-1.0 name: REUSE compliance check # Note: REUSE is a repository-wide compliance check - no path filtering # to catch licensing issues in any newly added files (scripts, docs, etc.) on: push: branches: ["main"] pull_request: branches: ["main"] merge_group: permissions: {} jobs: reuse: runs-on: ubuntu-latest permissions: contents: read steps: - uses: actions/checkout@v6 - name: REUSE Compliance Check uses: fsfe/reuse-action@v6 QtPass-1.6.0/.gitignore000066400000000000000000000017421516714562600147420ustar00rootroot00000000000000Makefile debian/qtpass* debian/files build-stamp qtpass QtPass.app QtPass.dmg qtpass.pro.user qtpass.xcodeproj/project.xcworkspace/xcuserdata/* qtpass.xcodeproj/xcuserdata/* qtpass.xcworkspace/xcuserdata/* .DS_Store .qmake.stash *.o moc_*.cpp qrc_*.cpp ui_*.h localization/*.qm build/ .idea .vscode src/libqtpass.a src/moc_predefs.h tests/auto/*/moc_predefs.h tests/auto/*/target_wrapper.sh tests/auto/*/*.moc tests/auto/util/tst_util tests/auto/ui/tst_ui tests/auto/model/tst_model tests/auto/settings/tst_settings tests/auto/executor/tst_executor tests/auto/passwordconfig/tst_passwordconfig tests/auto/simpletransaction/tst_simpletransaction tests/auto/filecontent/tst_filecontent tests/auto/gpgkeystate/tst_gpgkeystate **/*.gc* *.bak README.c* README.faq README.rtf html/** rtf/** latex/** qmake_qmake_qm_files.qrc src/.qm/ weblate artwork/qtpass-icon.png .aider* compile_commands.json .cache linter-output.log release-artifacts node_modules docs opencode.json .opencode/package-lock.json QtPass-1.6.0/.jscpd.json000066400000000000000000000000401516714562600150140ustar00rootroot00000000000000{ "ignore": ["**/tests/**"] } QtPass-1.6.0/.linthub.yml000066400000000000000000000003611516714562600152140ustar00rootroot00000000000000--- platform: linux | osx build: - qmake - make analyzers: - cpplint: true include: ["*.cpp", "*.h", "*.hpp", "*.c"] path: ./ filters: - -whitespace - +whitespace/braces style: google - markdownlint: true QtPass-1.6.0/.opencode/000077500000000000000000000000001516714562600146205ustar00rootroot00000000000000QtPass-1.6.0/.opencode/skills/000077500000000000000000000000001516714562600161215ustar00rootroot00000000000000QtPass-1.6.0/.opencode/skills/qtpass-docs/000077500000000000000000000000001516714562600203625ustar00rootroot00000000000000QtPass-1.6.0/.opencode/skills/qtpass-docs/SKILL.md000066400000000000000000000073171516714562600215720ustar00rootroot00000000000000--- name: qtpass-docs description: Documentation guide for QtPass - README, FAQ, localization license: GPL-3.0-or-later compatibility: opencode metadata: audience: developers workflow: documentation --- # Project Documentation ## QtPass Documentation Files | File | Purpose | | ------------------ | ------------------------------------------- | | README.md | Main documentation, installation, usage | | FAQ.md | Frequently asked questions, troubleshooting | | CHANGELOG.md | Release history, changes | | CONTRIBUTING.md | Developer contribution guidelines | | CODE_OF_CONDUCT.md | Community code of conduct | | Doxyfile | API documentation configuration | | Windows.md | Windows-specific installation and build | ## README.md Sections - Badges (build, license, version) - Description - Features - Installation (Linux, macOS, Windows) - Usage / Getting Started - Configuration - Acknowledgments ## FAQ.md Sections - Installation issues - Configuration issues - GPG/Key issues - Git integration - Platform-specific (macOS, Windows, Linux) ### FAQ Template ```markdown ## Question Title **Problem:** Description of the issue **Solution:** Step-by-step solution **Related:** Links to relevant issues ``` ## Localization See [qtpass-localization](../qtpass-localization/SKILL.md) skill for comprehensive guide. ## Docs Build ### API Documentation ```bash # Generate API docs doxygen Doxyfile # Or use project-specific docs command # View open html/index.html ``` ## Linting **THIS IS THE PATTERN - always run before pushing:** ```bash # Check formatting (this is the pattern) npx prettier --check "**/*.md" # Format all markdown files npx prettier --write "**/*.md" # Format specific file npx prettier --write README.md ``` ### Markdown (prettier) ```bash npx prettier --write npx prettier --write .opencode/skills/*/SKILL.md ``` ### YAML (prettier) ```bash npx prettier --write npx prettier --write .github/workflows/*.yml ``` ## Updating Documentation ### Adding New FAQ Entry 1. Edit `FAQ.md` 2. Use the FAQ template section above 3. Run prettier: `npx prettier --write FAQ.md` 4. Test the changes render correctly ### Updating Version in readme When releasing a new version, update download links: ```bash # Find version strings in README grep -n "1\.5\|download" README.md ``` Update: - Download links for each platform - Badge version numbers - Any version-specific instructions ### Building API Docs ```bash # Generate with doxygen doxygen Doxyfile # Output goes to docs/html/ ls docs/html/index.html ``` ## Common Pitfalls ### Forgetting to Run Prettier Always format Markdown with prettier before committing: ```bash # Wrong - may fail CI git commit -m "Update FAQ" # Correct npx prettier --write FAQ.md git commit -m "Update FAQ" ``` ### Broken Links When adding links to issues or PRs: ```bash # Use full GitHub URLs (they redirect correctly) [Issue #123](https://github.com/IJHack/QtPass/issues/123) # Not relative paths [Issue #123](issues/123) # Broken ``` ### Outdated Platform Instructions QtPass changes frequently. When updating installation instructions: - Verify the commands still work - Check for new dependencies - Update screenshots if UI changed ### CHANGELOG Format Keep CHANGELOG entries consistent: ```markdown ## [1.5.1] - 2026-03-30 ### Fixed - Issue #123: Description of fix ### Added - New feature description ``` ### Doxygen Comments in Code When adding new public APIs: ```cpp /** * @brief Brief description * @param param1 Description of first parameter * @return Description of return value */ ``` QtPass-1.6.0/.opencode/skills/qtpass-fixing/000077500000000000000000000000001516714562600207165ustar00rootroot00000000000000QtPass-1.6.0/.opencode/skills/qtpass-fixing/SKILL.md000066400000000000000000000242671516714562600221310ustar00rootroot00000000000000--- name: qtpass-fixing description: Bug fixing workflow for QtPass - find, fix, test, PR license: GPL-3.0-or-later compatibility: opencode metadata: audience: developers workflow: bugfix --- # Bugfix Workflow for QtPass ## Bugfix Workflow ### 1. Investigate - Search existing issues: `gh issue list --search ""` - Check CHANGELOG.md for related fixes - Search code: `grep -r "pattern" src/` ### 2. Reproduce - Read issue details, logs, and stack traces - Locate relevant source files - Identify root cause ### 3. Fix - Make minimal, targeted changes in source files - Keep changes focused on the root cause ### 4. Add Tests - Add unit tests for the bugfix - Follow project testing conventions (see `qtpass-testing` skill) - Place tests in `tests/auto//` ### 5. Verify ```bash # Build and run tests make check # Build binary make -j4 ``` ### 6. Commit & PR ```bash # Create branch git checkout -b fix/-short-description # Commit with issue reference (always use -S for signing) git commit -S -m "Fix (#issue)" # Push and create PR git push origin fix/ gh pr create --title "Fix " --body "## Summary\n- Fix description" ``` ### Handling Static Analysis Findings When CodeRabbit/CodeAnt-AI flag issues in PRs: 1. **Verify the finding** - Check if it's a real issue or false positive 2. **If correct, fix it** - Make minimal changes to address 3. **Push update** - Force push to update the PR 4. **Respond to comments** - Comment that fix is applied ```bash # After fixing, amend commit and force push git add -A git commit -S --amend --no-edit git push --force ``` ## Common Fix Patterns ### Null Pointer Checks Qt classes like `QGuiApplication::screenAt()` can return null on some platforms. Always verify pointers before dereferencing: ```cpp QScreen *screen = QGuiApplication::screenAt(pos); if (!screen) return; ``` ### CLI Argument Parsing Use `QCoreApplication::arguments()` instead of raw `argv[]` to let Qt normalize paths and handle quoting: ```cpp QStringList args = QCoreApplication::arguments(); ``` ### External Tool Availability Before using optional tools like `pass-otp`, check availability: ```cpp if (!passOTPexists) { showError("pass-otp is required for OTP features"); return; } ``` ### Cross-Platform Path Handling Use `QDir` for path normalization to handle `/` vs `\` and `.`/`..` components: ```cpp QDir dir; QString normalized = dir.cleanPath(gpgIdPath); ``` ### String Parsing Edge Cases For regular expression patterns matching URLs or special characters, use `\\S+` for non-whitespace to avoid matching spaces: ```cpp QRegularExpression urlRegex("(\\S+)://(\\S+)"); ``` ### UI Font Consistency For monospace fonts in tables/lists, use `setStyleHint(QFont::Monospace)` to avoid platform-specific defaults. ### Tautology Assertions in Tests Avoid assertions that always evaluate to true: ```cpp // Bad - always true QVERIFY(profiles.isEmpty() || !profiles.isEmpty()); QVERIFY(!store.isEmpty() || store.isEmpty()); // Good - meaningful check QVERIFY(profiles.isEmpty()); QVERIFY2(store.isEmpty() || store.startsWith("/"), "Pass store should be empty or a plausible path"); ``` ### Verify Test Setup Return Values Always verify that test setup operations succeed: ```cpp // Bad - ignores return value (void)QDir(srcDir.path()).mkdir("source"); (void)f1.open(QFile::WriteOnly); // Good - verify success QVERIFY(QDir(srcDir.path()).mkdir("source")); QVERIFY(f1.open(QFile::WriteOnly)); ``` ### Contractions in Comments Use "cannot" instead of "can't" for formal consistency: ```cpp // Bad // On Windows, we can't safely backup // Good // On Windows, we cannot safely backup ``` ### Copyright Year in Templates Use `YYYY` as placeholder instead of current year: ```cpp // Bad // SPDX-FileCopyrightText: 2026 Your Name // Good // SPDX-FileCopyrightText: YYYY Your Name ``` ### Return After Dialog Rejection When showing an error dialog followed by `reject()` in a constructor, add `return` to prevent the constructor from continuing with invalid state: ```cpp // After error dialog in constructor if (users.isEmpty()) { QMessageBox::critical(parent, tr("Error"), tr("No users found")); reject(); return; // Prevent constructor from continuing } ``` ### Index Instead of Pointer When storing references to list items in UI (e.g., Qt::UserRole), prefer indices over pointers to avoid dangling references: ```cpp // Instead of storing pointer to local reference for (const auto &user : m_userList) { item->setData(Qt::UserRole, QVariant::fromValue(&user)); // DANGLING! } // Store index instead for (int i = 0; i < m_userList.size(); ++i) { item->setData(Qt::UserRole, QVariant::fromValue(i)); } ``` // Good - store index for (int i = 0; i < m_userList.size(); ++i) { item->setData(Qt::UserRole, QVariant::fromValue(i)); } // Later, lookup by index bool success = false; const int index = item->data(Qt::UserRole).toInt(&success); if (success && index >= 0 && index < m_userList.size()) { m_userList[index].enabled = item->checkState() == Qt::Checked; } } ### Theme-Aware Colors For list items or labels indicating status (e.g., secret keys), prefer `QPalette` colors over hardcoded values for better accessibility: ```cpp // Hardcoded may have poor contrast on some themes item->setForeground(Qt::blue); // Theme-aware alternative const QPalette palette = QApplication::palette(); item->setForeground(palette.color(QPalette::Link)); ``` ### Accessibility: Color + Text When indicating status through colors (invalid, expired, partial), add text prefixes or tooltips for color blind users: ```cpp // Color only - not accessible item->setBackground(Qt::darkRed); // Color + text + tooltip - accessible item->setBackground(Qt::darkRed); item->setText(tr("[INVALID] ") + originalText); item->setToolTip(tr("Invalid key")); ``` ### Debug Logging Add debug logging for validation failures using `#ifdef QT_DEBUG`: ```cpp bool success = false; const int index = item->data(Qt::UserRole).toInt(&success); if (!success) { #ifdef QT_DEBUG qWarning() << "UsersDialog::itemChange: invalid user index data for item"; #endif return; } if (index < 0 || index >= m_userList.size()) { #ifdef QT_DEBUG qWarning() << "UsersDialog::itemChange: user index out of range:" << index; #endif return; } ``` ### Boolean Logic Bugs When comparing booleans, use `&&` instead of `==` to avoid unexpected true values: ```cpp // Bad - yields true when both are false (e.g., public key case) bool secret = false; bool isSec = (type == GpgRecordType::Sec); // false handlePubSecRecord(props, secret == isSec); // false == false = true! // Good - requires both conditions to be true handlePubSecRecord(props, secret && (type == GpgRecordType::Sec)); ``` ## Key Source Files | File | Purpose | | -------------------- | --------------------------------------- | | src/mainwindow.cpp | Main UI, tree view, dialogs | | src/pass.cpp | GPG operations, path handling | | src/util.cpp | Utilities, regular expression, file ops | | src/filecontent.cpp | Password file parsing | | src/imitatepass.cpp | CLI pass imitation | | src/configdialog.cpp | Settings dialog | | src/executor.cpp | Command execution | ## Linting See `qtpass-linting` skill for full CI workflow. Pattern: ```bash # Run linter locally BEFORE pushing act push -W .github/workflows/linter.yml -j build ``` ### Config Files (prettier) ```bash npx prettier --write npx prettier --write .github/workflows/*.yml npx prettier --write .opencode/skills/*/SKILL.md ``` ### C++ (clang-format) ```bash # Check formatting clang-format --style=file --dry-run # Apply formatting clang-format --style=file -i ``` ## Bug Type Playbooks ### UI Bugs (mainwindow.cpp, dialogs) UI bugs often involve signal/slot connections, widget state, or clipboard operations. **Common patterns:** - Check signal connections are properly connected - Verify widget parent/ownership - Clipboard operations may fail on some platforms (GNOME, KDE) - Theme-aware colors vs hardcoded (see above) **Debugging:** ```cpp // Add debug output qDebug() << "Button clicked, state:" << ui->someWidget->isVisible(); ``` ### GPG/Pass Bugs (pass.cpp, executor.cpp) GPG-related bugs often involve command execution, path handling, or key operations. **Common patterns:** - Check executor return codes - Verify GPG binary is in PATH - Watch for path normalization issues (QDir::cleanPath) - GPG may lock the keyring - handle retries **Debugging:** ```cpp // Enable verbose GPG output // Check /tmp for temporary GPG files ``` ### Path/Model Bugs (storemodel.cpp, configdialog.cpp) Path handling bugs often involve separators, encoding, or model indexing. **Common patterns:** - Use QDir for path operations (handles / vs \) - Store indices, not pointers (see above) - Check model filter/sort state **Debugging:** ```cpp qDebug() << "Path:" << path << "Cleaned:" << QDir::cleanPath(path); ``` ## IDE/LSP Setup For proper code analysis (resolving Qt types like `QString`), generate `compile_commands.json`: ```bash ./scripts/generate-compile-commands.sh ``` This enables clangd/LSP to provide accurate completions and catch real issues. Without it, the LSP shows false positives about missing Qt headers. ### Using Editor Fix Suggestions When the LSP shows "(fix available)" on errors: 1. **Visual Studio Code**: Click the 💡 lightbulb or press `Ctrl+.` (Quick Fix) 2. **JetBrains**: Press `Alt+Enter` on the error 3. **vim/neovim**: Use clangd's `textDocument/codeAction` via your LSP plugin **Note:** LSP suggestions are just that - suggestions. Always verify the fix makes sense before applying, especially for complex refactoring. ### Running Clangd from CLI To check a file directly for issues: ```bash # Generate compile_commands.json first (required for Qt headers) ./scripts/generate-compile-commands.sh # Check a specific file clangd --check=/path/to/file.cpp ``` Common clangd diagnostics: - `[performance-unnecessary-copy-initialization]` - Use `const T&` instead of `const T` - `[readability-static-definition]` - Consider making static definitions inline QtPass-1.6.0/.opencode/skills/qtpass-github/000077500000000000000000000000001516714562600207145ustar00rootroot00000000000000QtPass-1.6.0/.opencode/skills/qtpass-github/SKILL.md000066400000000000000000000232661516714562600221250ustar00rootroot00000000000000--- name: qtpass-github description: QtPass GitHub interaction - PRs, issues, branches, merging license: GPL-3.0-or-later metadata: audience: developers workflow: github --- # QtPass GitHub Interaction ## Checking PR Status ```bash # Check specific PR gh pr checks # Check all PRs gh pr view --json state,mergeable # View PR comments gh api repos///pulls//comments ``` ## Creating Branches ```bash # Create and switch to new branch git checkout -b # Push and set upstream git push -u origin ``` ## Creating PRs ```bash # Create PR with title and body gh pr create --title "Fix description (#issue)" --body "## Summary\n- Fix details\n\nFixes #issue" # Create PR with specific base branch gh pr create --base main --title "Fix" --body "Fixes #issue" ``` ## Updating Branches **Before pushing or merging, always update with latest main:** ```bash # (If not already set) add upstream remote pointing to main repository git remote add upstream https://github.com/IJHack/QtPass.git # Fetch and rebase on main git fetch upstream git pull upstream main --rebase # Force push if needed git push -f ``` This prevents "branch is out-of-date with base branch" errors. ## Signed Commits Always sign your commits with `-S` flag: ```bash git commit -S -m "Fix description" ``` If a PR has unsigned commits (e.g., from bots), recreate the changes on a new branch with signed commits: ```bash # Fetch original branch git fetch origin git checkout FETCH_HEAD # Make changes, commit with signing git add -A git commit -S -m "chore: description" # Push and create new PR git push -u origin new-branch-name ``` ## Merging PRs ```bash # Merge via GitHub CLI (if you have admin rights) gh pr merge --admin --merge # Or squash merge gh pr merge --squash --auto --delete-branch ``` ## Commenting on Issues/PRs ```bash # Comment on issue gh issue comment --body "Comment text" # Comment on PR gh pr comment --body "## Summary\n- Details" ``` ### Using HEREDOC for Multi-line Comments For complex comments with Markdown formatting, HEREDOC avoids shell interpretation issues: ```bash # Comment on issue/PR using HEREDOC gh pr comment --body "$(cat <<'EOF' ## Changes in this PR ### .gitignore additions - Added test binaries to prevent accidentally committing test executables - Added *.bak for test settings backup files ### New skill: qtpass-github A comprehensive skill for GitHub interaction workflows: - Reading issues and PRs - Responding to users - CI debugging EOF )" ``` **Key points:** - Use `$(cat <<'EOF' ... EOF)` to capture the content - Quote the `EOF` delimiter (`'EOF'`) to prevent variable expansion - Use `\n` for newlines in inline strings (less readable) - Use HEREDOC for complex/long comments (more readable) ## Reading Issues and PRs ```bash # View issue details gh issue view # View issue with comments gh issue view --comments # View issue body only gh issue view --json body # View PR details gh pr view # View PR with comments gh pr view --json comments # Get all PR comments via API gh api repos///pulls//comments # Get all issue comments via API gh api repos///issues//comments ``` ## Answering User Questions When responding to users on issues or PRs: 1. **Read the full context** - Check previous comments and related issues 2. **Be clear and concise** - Answer directly 3. **Provide next steps** - Let user know what to expect 4. **Use Markdown** - Format for readability Example response templates: ```markdown ## Investigation I've looked into this issue. The root cause is... ## Fix I've implemented a fix that... ## Next Steps - Review the PR when ready - Test on your machine - Let me know if you have questions ``` ### Good Practices - Always acknowledge user's report/feedback - Explain technical details in simple terms - Provide actionable next steps - Follow up on unanswered questions - Thank contributors for their input ## Common Patterns ### Pre-PR Checklist ```bash # 1. Format files npx prettier --write "**/*.md" "**/*.yml" # 2. Verify formatting npx prettier --check "**/*.md" # 3. Update with main git fetch upstream git pull upstream main --rebase # 4. Push git push ``` ### Post-Merge Cleanup ```bash # Switch to main and update git checkout main git pull upstream main # Delete merged branch git branch -d ``` ## Debugging CI Failures When CI checks fail on GitHub: ```bash # Get run details gh run view # Get full log gh run view --log # Filter for errors gh run view --log | grep -iE "error|fail" # Check specific job logs gh run view --job --log ``` ### Common CI Failures | Failure | Likely Cause | Fix | | ------------------------- | ---------------------- | ----------------------------------- | | Linting errors | Formatting issues | Run `npx prettier --write` | | Test failures | Bug in code or test | Run tests locally with `make check` | | Build failures | Missing deps or syntax | Build locally with `make -j4` | | act fails on new branches | `HEAD~0` error | Skip act, rely on prettier check | ## Resolving Merge Conflicts When branch is behind main and has conflicts: ```bash # Fetch and rebase git fetch upstream git checkout git rebase upstream/main # Resolve conflicts in editor, then: git add git rebase --continue # Force push (since we rewrote history) git push -f ``` ## Fork Workflow If you don't have push access: ```bash # Fork repository on GitHub first # Add your fork as remote git remote add myfork git@github.com:/QtPass.git # Push to your fork git push -u myfork # Create PR from your fork to upstream gh pr create --base upstream/main --head : ``` Note: When working with forks, use `myfork` for pushing and `upstream` for syncing with main repository. ## Troubleshooting ### "Branch is out-of-date" ```bash git checkout git pull upstream main --rebase git push -f ``` ### Merge Failed Check if: 1. Branch is behind main → rebase and push 2. CI still running → wait for checks 3. Conflicts → resolve locally ### Can't Merge PR - Check branch protection rules - Ensure all CI checks pass - You may need admin rights to bypass some checks ### Blocked by Unresolved Review Comments When PR shows "All comments must be resolved" but you've fixed the issues: **1. Identify unresolved threads via GraphQL:** ```bash gh api graphql -f query='{ repository(owner: "OWNER", name: "REPO") { pullRequest(number: N) { id reviewThreads(first: 20) { nodes { id isResolved } } } } }' | jq -r '.data.repository.pullRequest.reviewThreads.nodes[] | "\(.id) \(.isResolved)"' ``` **2. Resolve threads programmatically:** ```bash # Get thread IDs and resolve them THREAD_ID="PRRT_xxx" gh api graphql -f query="mutation { resolveReviewThread(input: {threadId: \"$THREAD_ID\"}) { thread { isResolved } } }" ``` **3. Alternative: Submit a review to clear blocking comments:** ```bash # Submit a COMMENT review (not APPROVE if it's your own PR) gh api "repos/OWNER/REPO/pulls/N/reviews" -X POST -f "body"="All issues addressed in recent commits" -f "event"="COMMENT" ``` **4. Common causes:** - Old CodeRabbit review comments not marked resolved - Reviewer requested changes but didn't re-review after fixes - Branch protection requires all conversations resolved ## GitHub AI-Powered Bug Detection GitHub provides AI-generated code quality suggestions under **Security → AI findings**. ### Common AI Findings 1. **Tautology assertions** - Tests that always pass 2. **Ignored return values** - Test setup not verified 3. **Spelling corrections** - Typos in comments/strings 4. **Formatting consistency** - Backticks, spacing 5. **Contractions** - "can't" vs "cannot" 6. **Copyright years** - Use "YYYY" placeholder ### Fixing AI Findings 1. Create a branch for fixes: ```bash git checkout -b fix/ai-findings ``` 2. Apply the suggested fixes 3. Test locally if possible 4. Push and create PR: ```bash git push -u origin fix/ai-findings cat <<'EOF' > /tmp/ai-findings-body.md ## Summary Found by GitHub AI-powered bug detection. - Fixed tautology assertions in tests - Added return value verification - Corrected spelling typos EOF gh pr create --title "fix: resolve AI findings" --body-file /tmp/ai-findings-body.md ``` ### Checking AI Findings ```bash # View repo security settings (requires admin) # Go to: https://github.com///security/ai-findings # Or check via API (if enabled) gh api repos///code-scanning/alerts ``` ## Checking PR Status Before Merging Before merging, always verify: ```bash # 1. Check if PR is mergeable gh pr view --json state,mergeable # 2. Check CI status gh pr checks # 3. Check for approvals gh pr view --json reviews # 4. Check if branch is up to date gh pr view --json baseRefName,headRefName ``` ## Pre-Merge Checklist Before merging a PR: - [ ] CI checks pass (`gh pr checks`) - [ ] At least one approval (for non-trivial changes) - [ ] Branch is up to date with main - [ ] No unresolved conversations - [ ] Tests pass locally (`make check`) - [ ] Linter passes (`act push -W .github/workflows/linter.yml`) ```bash # Run local CI checks before pushing act push -W .github/workflows/linter.yml -j build # Update with latest main before merging git fetch upstream git checkout git pull upstream main --rebase git push -f ``` QtPass-1.6.0/.opencode/skills/qtpass-linting/000077500000000000000000000000001516714562600210765ustar00rootroot00000000000000QtPass-1.6.0/.opencode/skills/qtpass-linting/SKILL.md000066400000000000000000000200631516714562600222770ustar00rootroot00000000000000--- name: qtpass-linting description: QtPass CI/CD workflow - run GitHub Actions locally with act, linters, formatters license: GPL-3.0-or-later compatibility: opencode metadata: audience: developers workflow: linting --- # QtPass Linting and CI Workflow ## The Act Pattern **Always run local CI before pushing PRs.** Use `act` to run GitHub Actions workflows locally. ### Why Use act? - Catch linter failures **before** pushing - Validate changes without waiting for CI - Faster iteration loop ### The Workflow ```bash # 1. Make your changes git add . # 2. Run linter locally (this is the pattern) act push -W .github/workflows/linter.yml -j build # 3. Fix any issues # 4. Push only when act passes ``` ### Quick Reference | Task | Command | | ------------------------- | --------------------------------------------------- | | Run linter | `act push -W .github/workflows/linter.yml` | | Run linter (specific job) | `act push -W .github/workflows/linter.yml -j build` | | Run build & tests | `act push -W .github/workflows/ccpp.yml` | | Run docs | `act push -W .github/workflows/docs.yml` | | Run reuse check | `act push -W .github/workflows/reuse.yml` | ## Available Workflows ### Linter Workflow (.github/workflows/linter.yml) Runs super-linter with many linters: - **GITLEAKS** - Secret detection - **CHECKOV** - Infrastructure scanning - **CLANG_FORMAT** - C++ formatting - **ACTIONLINT** - GitHub Actions YAML - **PRETTIER** - Web/config file formatting - **Markdown** - Markdown linting - **NATURAL_LANGUAGE** - Natural language checks - **YAML** - YAML linting ```bash # Run linter locally act push -W .github/workflows/linter.yml -j build ``` ### Build & Test Workflow (.github/workflows/ccpp.yml) QtPass build with Qt5/Qt6 matrix, runs unit tests, generates coverage: ```bash # Run build workflow act push -W .github/workflows/ccpp.yml ``` Tests against: - Ubuntu + Qt 6.8 - macOS + Qt 6.8 - Windows + Qt 6.8 - Ubuntu + Qt 5.15 Note: Qt installation may fail in act due to environment limitations. Real CI handles this. ### Documentation Workflow (.github/workflows/docs.yml) ```bash # Run docs workflow act push -W .github/workflows/docs.yml ``` ### Reuse Compliance (.github/workflows/reuse.yml) Check license headers and REUSE compliance: ```bash # Run reuse check act push -W .github/workflows/reuse.yml ``` ## Common Linters ### Gitleaks (Secret Detection) Detects API keys, tokens, passwords in code. ```bash # Scan for secrets gitleaks detect ``` **Common Fixes:** - Don't use test values that look like API keys (e.g., "ABC123DEF456", "sk-xxx") - Use generic test strings: "testkey123", "/usr/bin/pass", "example.com" ### Clang Format (C++) ```bash # Check formatting clang-format --style=file --dry-run src/main.cpp # Apply formatting clang-format --style=file -i src/main.cpp ``` ### Shfmt (Shell Scripts) Formats shell scripts in `scripts/` folder. Uses LLVM style (matches clang-format). **Installation:** ```bash # macOS brew install shfmt # Go go install mvdan.cc/sh/v3/cmd/shfmt@latest ``` ```bash # Check formatting shfmt -d scripts/*.sh # Apply formatting shfmt -w scripts/*.sh ``` ### Clangd (LSP Analysis) Clangd provides deep static analysis via LSP. Requires `compile_commands.json`: ```bash # Generate compile_commands.json (required for Qt headers) ./scripts/generate-compile-commands.sh # Check a specific file for issues clangd --check=src/gpgkeystate.cpp ``` Common diagnostics: - `[performance-unnecessary-copy-initialization]` - Use `const T&` instead of `const T` - `[readability-static-definition]` - Consider making static definitions inline **Using "(fix available)" in editors:** | Editor | Command | | ------------------ | -------------------------------- | | Visual Studio Code | Click 💡 or `Ctrl+.` | | JetBrains | `Alt+Enter` | | Neovim | `:lua vim.lsp.buf.code_action()` | ### Prettier (Web/Config) ```bash # Format markdown, YAML, JSON, etc. npx prettier --write README.md npx prettier --write .github/workflows/*.yml npx prettier --write FAQ.md npx prettier --write .opencode/skills/*/SKILL.md ``` ## Prettier Patterns Prettier auto-fixes many linting issues. Run before `act`: ```bash # Format all common file types npx prettier --write "**/*.md" "**/*.yml" "**/*.json" "**/*.html" "**/*.css" ``` ### Markdown Natural Language Issues If NATURAL_LANGUAGE fails: - Use single-word forms instead of two-word combinations - Use full terms instead of abbreviations - Use proper spacing and punctuation ```bash # Run prettier first npx prettier --write README.md # Then check again act push -W .github/workflows/linter.yml -j build ``` ## Troubleshooting ### Qt Installation Fails in act The `install-qt-action` may fail in local act due to missing downloads. This is expected - real CI works fine. ### Linter Fails Due to Missing Files Some checks need files generated during CI. Run full build first: ```bash qmake6 -r CONFIG+=coverage make -j4 ``` ### Gitleaks False Positives If gitleaks flags test data: 1. Use generic test values (not like "ABC123DEF456") 2. Add to `.gitleaksignore` if truly non-sensitive ### act Unknown Flag Error Make sure act is installed and up to date: ```bash # Check version act --version # Update if needed brew upgrade act # or your package manager ``` ## CI Environment Variables Some linters need secrets or tokens. In local act, these may not be available: ```bash # Pass fake token for codecov act push -W .github/workflows/ccpp.yml --secret-map "CODECOV_TOKEN=fake" ``` ## GitHub Actions Files | File | Purpose | | ------------------------------ | -------------------------- | | `.github/workflows/linter.yml` | Super-linter (many checks) | | `.github/workflows/ccpp.yml` | Build & test with Qt | | `.github/workflows/docs.yml` | Doxygen docs generation | | `.github/workflows/reuse.yml` | REUSE compliance | | `.github/super-linter.env` | Linter configuration | ## Run Before PR Checklist **THIS IS THE PATTERN - always run before pushing:** ```bash # 1. Format files with prettier (always do this) npx prettier --write "**/*.md" "**/*.yml" # 2. Verify formatting passes (REQUIRED - catches linting issues) npx prettier --check "**/*.md" # 3. Run act linter (recommended before opening PR) act push -W .github/workflows/linter.yml -j build # 4. Update with latest main (if branch is behind) git fetch upstream git pull upstream main --rebase # 5. Then push git push ``` **Note:** Prettier catches most issues. act is recommended but may fail on new branches (see below). ### Note on act **`act` may fail on new branches with error:** `fatal: ambiguous argument 'HEAD~0'` This is a known issue with the tool, not your code. When this happens: - Skip the act step - The `prettier --check` step is sufficient for most cases - Trust that formatting is correct - The real GitHub CI will pass **Recommended alternative - use prettier --check directly:** ```bash # This catches most linting issues without needing act npx prettier --check "**/*.md" npx prettier --check "**/*.yml" ``` ### Before Merging **Before merging a PR, always update it with latest main:** ```bash git checkout git pull upstream main --rebase git push -f ``` This prevents "branch is out-of-date with base branch" errors when merging. ## IDE/LSP Setup For proper code completion and analysis in editors like Visual Studio Code with clangd, generate `compile_commands.json`: ```bash # Generate compile_commands.json using bear ./scripts/generate-compile-commands.sh ``` This provides Qt include paths so the LSP can resolve types like `QString`, `QProcess`, etc. **Note:** `compile_commands.json` is in `.gitignore` - regenerate after cleaning or re-configuring. ## Related Skills - **qtpass-testing** - For testing patterns and `make check` - **qtpass-fixing** - For bugfix workflow with tests - **qtpass-releasing** - For release process QtPass-1.6.0/.opencode/skills/qtpass-localization/000077500000000000000000000000001516714562600221225ustar00rootroot00000000000000QtPass-1.6.0/.opencode/skills/qtpass-localization/SKILL.md000066400000000000000000000142161516714562600233260ustar00rootroot00000000000000--- name: qtpass-localization description: QtPass localization workflow - translation files, updating, adding languages license: GPL-3.0-or-later compatibility: opencode metadata: audience: developers workflow: localization --- # QtPass Localization ## Translation Files Location: `localization/localization_.ts` Qt uses Qt Linguist (`.ts` files) for translations. ### Existing Languages ```bash ls localization/localization_*.ts ``` Currently includes: af_ZA, ar_MA, bg_BG, ca_ES, cs_CZ, cy_GB, da_DK, de_DE, de_LU, el_GR, en_GB, en_US, es_ES, et_EE, fi_FI, fr_BE, fr_FR, fr_LU, gl_ES, he_IL, hr_HR, hu_HU, it_IT, ja_JP, ko_KR, lb_LU, nb_NO, nl_BE, nl_NL, pl_PL, pt_PT, ro_RO, ru_RU, sk_SK, sl_SI, sq_AL, sr_RS, sv_SE, ta, tr_TR, uk_UA, zh_CN, zh_Hant ## Updating Translations ### After Code Changes When source files change (strings added, moved, or refactored), run qmake to update translations: ```bash # IMPORTANT: Run distclean first to avoid stale generated files (ui_*.h) in translations make distclean # Run qmake to update translations (uses lupdate internally) qmake6 ``` This updates all `.ts` files with: - Source file line numbers - File references (if files renamed) - **Source text** (if changed in source files - important!) - Translation status (set to "unfinished" when source changed) ### What Stays the Same - Translated text (in `` tags) - Completed translations remain as-is until re-translated ### Creating a PR for Updates ```bash # Create branch git checkout -b chore/update-localization # Add and commit git add localization/ git commit -m "chore: update localization source references" # Push and create PR git push -u origin chore/update-localization gh pr create --title "chore: update localization source references" --body "## Summary - Updated translation files with current source texts and line numbers - Translations marked unfinished where source text changed " ``` ## Adding New Strings When you add new user-facing strings in C++: ```cpp // Use tr() for translatable strings ui->label->setText(tr("New text here")); ``` ### Qt Linguist Workflow 1. Open `localization/localization_en_US.ts` in Qt Linguist 2. Find untranslated strings 3. Fill in translations 4. Save (automatically updates the .ts file) ### Key Conventions - Use `tr()` for all user-facing strings - Don't translate placeholders like `%1`, `%2`, `%3` - Preserve `\n` for line breaks - Keep technical terms consistent (e.g., "GPG", "clipboard") - Use context comments to help translators understand usage ### String Formatting ```cpp // Good tr("Delete %1?").arg(filename) tr("Found %n password(s)", count) // Avoid tr("Delete " + filename + "?") // Can't be translated properly ``` ## Adding New Language 1. Copy base translation file: ```bash cp localization/localization_en_US.ts localization/localization_XX_YY.ts ``` 2. Update language code (ISO 639-1 + country code) 3. Add to build config in `qtpass.pro`: ```pro TRANSLATIONS += localization/localization_XX_YY.ts ``` 4. Run qmake to register: ```bash qmake6 ``` 5. Translate strings using Qt Linguist ## Building Translations ### Generate .qm Files ```bash # For development (or part of build process) lrelease localization/*.ts # Or via qmake make translations ``` ### .qm Files - Binary format, loaded at runtime - Generated from .ts files - Typically not committed (generated during build) ## Localization Testing ### Switch Language QtPass uses system locale. To test: ```bash # Linux LANG=nl_NL ./qtpass # Or set in QtPass settings ``` ### Debug Translation Issues ```cpp // Enable verbose translation debugging QTranslator translator; if (translator.load(QLocale(), "qtpass", "_", ":/languages")) { qDebug() << "Loaded translation for:" << QLocale().name(); } ``` ## Common Issues ### Strings Not Showing Translated 1. String not wrapped in `tr()` - fix in source 2. Translation file not loaded - check .pro TRANSLATIONS 3. .qm file not generated - run lrelease 4. Wrong locale - check system language settings ### Translation File Conflicts When merging PRs with translation updates: ```bash # Fetch and rebase git fetch origin git pull origin main --rebase # Resolve conflicts in .ts files (usually just XML merge) # Test with qmake6 ``` ## Linting ```bash # Format with prettier if needed npx prettier --write localization/*.ts ``` ## Common Pitfalls ### Forgetting distclean Before qmake Always run `make distclean` before `qmake6` when updating translations: ```bash # Wrong - may include stale generated files in translations qmake6 # Correct - starts fresh make distclean qmake6 ``` ### New Strings Not Showing in Qt Linguist If you added new `tr()` strings but they don't appear: 1. Run `qmake6` to update the `.ts` files 2. Close and reopen Qt Linguist 3. Check the file was actually saved after previous edit ### Translation Files Showing as "Finished" When source strings change, translations are marked "unfinished" but may still appear correct. Always check: - The source text in Qt Linguist matches your code - Any placeholder formatting (`%1`, `%2`) matches ### Merging Translation Conflicts When merging translation PRs that conflict: ```bash # Use theirs strategy for .ts files (they're XML, prefer incoming) git checkout --theirs localization/localization_*.ts git add localization/ git commit -m "Resolve merge conflict - use theirs for translations" ``` ### Weblate vs Local Editing QtPass uses Weblate for translations. Don't manually edit `.ts` files for translations - let Weblate handle it. Only run `qmake6` locally to update source references. ## Fixing Translation Issues in PRs When static analysis flags translation issues (e.g., filename preservation): ```bash # Fetch the PR branch git fetch origin refs/pull//head:pr/-fix git checkout pr/-fix # Fix the translation # Edit the .ts file to preserve exact filename/token # Commit with signing and push git add localization/localization_.ts git commit -S -m "fix: preserve .gpg-id filename in translation" git push -u origin pr/-fix ``` ### Squash Merge Pattern Translation PRs often use squash merge: ```bash gh pr merge --squash --auto --delete-branch ``` QtPass-1.6.0/.opencode/skills/qtpass-releasing/000077500000000000000000000000001516714562600214035ustar00rootroot00000000000000QtPass-1.6.0/.opencode/skills/qtpass-releasing/SKILL.md000066400000000000000000000061541516714562600226110ustar00rootroot00000000000000--- name: qtpass-releasing description: Release workflow for QtPass - versioning, builds, publishing license: GPL-3.0-or-later compatibility: opencode metadata: audience: developers workflow: release --- # Release Workflow for QtPass ## Release Checklist ### 1. Version Bump Update version in all build files: - `qtpass.pro` - `VERSION = "x.y.z"` - `qtpass.spec` - `Version:` - `qtpass.appdata.xml` - `` - `qtpass.iss` - `AppVerName=` - `appdmg.json` - `version` - `README.md` - Download links ```bash # Find version strings grep -rn "1\.5" qtpass.pro qtpass.spec qtpass.appdata.xml qtpass.iss appdmg.json ``` ### 2. Changelog Update `CHANGELOG.md`: - Add release date - List all merged PRs and fixed issues - Group by: Added, Changed, Fixed, Removed ### 3. Tests ```bash # Run full test suite make check ``` ### 4. Build Artifacts #### Linux ```bash # Create source tarball ./scripts/release-linux.sh # Or manually: git archive --prefix=qtpass-x.y.z/ -o qtpass-x.y.z.tar.gz HEAD ``` #### macOS ```bash ./scripts/release-mac.sh ``` #### Windows ```bash # Via GitHub Actions or locally with Inno Setup qtpass.iss ``` ### 5. Git Tags ```bash git tag -a v1.5.1 -m "QtPass 1.5.1 Release" git push origin v1.5.1 ``` ### 6. GitHub Release ```bash gh release create v1.5.1 \ --title "QtPass 1.5.1" \ --notes-file CHANGELOG.md \ qtpass-x.y.z.tar.gz ``` ### 7. GitHub Pages (if needed) ```bash # Update stable version git checkout gh-pages # Update download links git commit -m "Release v1.5.1" git push origin gh-pages ``` ## Version Numbering Follow semantic versioning: MAJOR.MINOR.PATCH - MAJOR: Breaking changes - MINOR: New features, backward compatible - PATCH: Bugfixes, backward compatible ## Build Locations | Platform | Output | | -------- | ------------------------ | | Linux | `qtpass-x.y.z.tar.gz` | | macOS | `QtPass-x.y.z.dmg` | | Windows | `QtPass-Setup-x.y.z.exe` | ## CI/CD Release workflow via GitHub Actions: `.github/workflows/release-installers.yml` ## Linting See `qtpass-linting` skill for full CI workflow. Pattern: ```bash # Run linter locally BEFORE pushing act push -W .github/workflows/linter.yml -j build ``` ## Script Best Practices ### Dry Run Option For scripts that modify remote state (uploading releases, signing files), add a `--dryrun` flag to enable testing without making changes: ```bash # Parse arguments at the start dryrun=false while [ $# -gt 0 ]; do case "$1" in --dryrun) dryrun=true shift ;; *) break ;; esac done # Use in conditional if [ "$dryrun" = true ]; then echo "[dryrun] Would upload files: ${files[*]}" else gh release upload ... fi ``` ### Glob Handling When iterating over files matched by a glob pattern, use array assignment to handle the case where no files match: ```bash # Without nullglob, loops over literal "*" when no files exist for file in *; do [ -f "$file" ] || continue # With array assignment, iterates over empty array when no files files=(*) for file in "${files[@]}"; do [ -f "$file" ] || continue ``` QtPass-1.6.0/.opencode/skills/qtpass-testing/000077500000000000000000000000001516714562600211075ustar00rootroot00000000000000QtPass-1.6.0/.opencode/skills/qtpass-testing/SKILL.md000066400000000000000000000321621516714562600223130ustar00rootroot00000000000000--- name: qtpass-testing description: Comprehensive guide for QtPass unit testing with Qt Test license: GPL-3.0-or-later compatibility: opencode metadata: audience: developers workflow: testing --- # QtPass Testing Guide ## Project Overview QtPass is a Qt6/C++ password manager GUI for `pass`. Tests use Qt Test framework. ## Quick Start ```bash # Build and run all tests make check # Build with coverage qmake6 -r CONFIG+=coverage make -j4 # Generate coverage report make lcov ``` ## Existing Test Suites (8 total) ### tests/auto/gpgkeystate/tst_gpgkeystate.cpp Tests for `src/gpgkeystate.cpp`: - `parseMultiKeyPublic()` - Multiple public keys parsing - `parseSecretKeys()` - Secret key detection (have_secret flag) - `parseSingleKey()` - Single key with and without fingerprint - `parseKeyRollover()` - Multiple keys in sequence - `classifyRecordTypes()` - GPG record type classification (pub, sec, uid, fpr, etc.) ### Test Fixtures Store sample test data in `tests/fixtures/`: ```bash ls tests/fixtures/ # gpg-colons-multi-key.txt # gpg-colons-public.txt # gpg-colons-secret.txt ``` These contain real GPG `--with-colons` output for deterministic testing. ### tests/auto/util/tst_util.cpp Tests for `src/util.cpp`: - `normalizeFolderPath()` - Path normalization - `fileContent()` / `fileContentEdgeCases()` - FileContent parsing - `regexPatterns()` / `regexPatternEdgeCases()` - URL detection regular expression - `totpHiddenFromDisplay()` - OTP field hiding - `userInfoValidity()` - User key validation - `passwordConfigurationCharacters()` - Password character sets - `simpleTransaction*()` - SimpleTransaction tests ### tests/auto/filecontent/tst_filecontent.cpp Tests for `src/filecontent.h`: - `parsePlainPassword()` - Single-line password - `parsePasswordWithNamedFields()` - Password with key:value - `parseWithTemplateFields()` - Template field parsing - `parseWithAllFields()` - All fields mode - `getRemainingData()` - Non-template fields - `getRemainingDataForDisplay()` - Hides otpauth:// - `namedValuesTakeValue()` / `namedValuesTakeValueNotFound()` ### tests/auto/passwordconfig/tst_passwordconfig.cpp Tests for `src/passwordconfiguration.h`: - `passwordConfigurationDefaults()` - Default values - `passwordConfigurationSetters()` - Setter methods - `passwordConfigurationCharacterSets()` - Character set config ### tests/auto/executor/tst_executor.cpp Tests for `src/executor.h`: - `executeBlockingEcho()` - Basic execution - `executeBlockingWithArgs()` - Arguments handling - `executeBlockingExitCode()` - Exit code checking (Unix only) - `executeBlockingStderr()` - Error output capture (Unix only) ### tests/auto/model/tst_storemodel.cpp Tests for `src/storemodel.h`: - `dataRemovesGpgExtension()` - Display name filtering - `flagsWithValidIndex()` / `flagsWithInvalidIndex()` - Item flags - `mimeTypes()` - Drag/drop MIME types - `lessThan()` - Sorting comparison - `supportedDropActions()` / `supportedDragActions()` - `filterAcceptsRowHidden()` / `filterAcceptsRowVisible()` ### tests/auto/settings/tst_settings.cpp Tests for `src/qtpasssettings.h`: - Uses set+get pattern for each setting - Tests isUseGit(), setUseGit(), etc. ### tests/auto/ui/tst_ui.cpp UI tests: - `contentRemainsSame()` - Password content integrity - `emptyPassword()` - Empty password handling - `multilineRemainingData()` - Multiline field handling ## Test File Template ```cpp // SPDX-FileCopyrightText: YYYY Your Name // SPDX-License-Identifier: GPL-3.0-or-later #include #include "../../../src/mymodule.h" class tst_mymodule : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void testBasicFunction(); void testEdgeCase(); void cleanupTestCase(); }; void tst_mymodule::initTestCase() {} void tst_mymodule::testBasicFunction() { // Use set+get pattern or direct input/output QString result = MyModule::process("input"); QVERIFY2(result == "expected", "Should return expected output"); } void tst_mymodule::testEdgeCase() { // Test empty, null, boundary conditions QVERIFY(MyModule::process("").isEmpty()); } void tst_mymodule::cleanupTestCase() {} QTEST_MAIN(tst_mymodule) #include "tst_mymodule.moc" ``` ## .pro File Template ```pro !include(../auto.pri) { error("Couldn't find the auto.pri file!") } SOURCES += tst_mymodule.cpp LIBS = -L"$$OUT_PWD/../../../src/$(OBJECTS_DIR)" -lqtpass $$LIBS clang|gcc:PRE_TARGETDEPS += "$$OUT_PWD/../../../src/$(OBJECTS_DIR)/libqtpass.a" HEADERS += mymodule.h OBJ_PATH += ../../../src/$(OBJECTS_DIR) VPATH += ../../../src INCLUDEPATH += ../../../src win32 { RC_FILE = ../../../windows.rc QMAKE_LINK_OBJECT_MAX=24 } ``` ## Test plist File Template (qtpass.plist) ```xml QMTestSpecification Type Bundle UIElement Modified SystemEntity Test ``` ## Adding a New Test Suite 1. Create directory: `tests/auto//` 2. Add `.pro` file (copy pattern above) 3. Add `qtpass.plist` (copy from model/) 4. Add `tst_.cpp` test file 5. Add to `tests/auto/auto.pro`: `SUBDIRS += ` 6. Rebuild: `qmake6 -r && make -j4` 7. Run: `make check` ## Best Practices ### Test Naming - Test file: `tst_.cpp` - Test class: `tst_` - Test methods: `testMethodName()` or `methodDoesWhat()` ### Test Organization - `initTestCase()` - Setup (runs once before all tests) - `init()` - Setup before each test - Test methods in logical order - `cleanupTestCase()` - Teardown (runs once after all tests) ### Assertions ```cpp // Basic QVERIFY(condition); QVERIFY2(condition, "failure message"); // Equality QCOMPARE(actual, expected); QCOMPARE2(actual, expected, "message"); // String matching QVERIFY2(output.contains("needle"), "should contain needle"); QCOMPARE(QString("hello").toUpper(), QString("HELLO")); ``` ### Never use `||` in assertions Bad (tautology or ambiguous): ```cpp QVERIFY(result == expected || result == INVALID); // unclear intent QVERIFY(result != INVALID || result == INVALID); // ALWAYS TRUE - tautology! ``` Good - just call the method to verify it doesn't crash: ```cpp simpleTransaction trans; trans.transactionAdd(Enums::PASS_INSERT); trans.transactionIsOver(Enums::PASS_INSERT); // verify it runs without crash ``` Or use deterministic setup with `QCOMPARE`: ```cpp simpleTransaction st; st.transactionAdd(Enums::PASS_INSERT); Enums::PROCESS result = st.transactionIsOver(Enums::PASS_INSERT); QCOMPARE(result, Enums::PASS_INSERT); // deterministic ``` ### QtTest Macros - `QFAIL("message")` - Fail with message - `QSKIP("message")` - Skip test - `QCOMPARE(a, b)` - Assert equality - `QVERIFY(a)` - Assert true - `QVERIFY2(a, msg)` - Assert with message ### Windows Compatibility ```cpp void tst_executor::unixOnlyTest() { #ifndef Q_OS_WIN // Test code here #endif } ``` ### Path Comparison on Windows Windows uses backslashes (`\`) while Unix uses forward slashes (`/`). When comparing paths, use `QDir::cleanPath()` to normalize: ```cpp void tst_util::testPathComparison() { QString path = Pass::getGpgIdPath(passStore); QString expected = passStore + "/.gpg-id"; // Use cleanPath to normalize for cross-platform compatibility QVERIFY2(QDir::cleanPath(path) == QDir::cleanPath(expected), qPrintable(QString("Expected %1, got %2") .arg(QDir::cleanPath(expected), QDir::cleanPath(path)))); } ``` ### Test Settings Pollution Tests that modify QtPass settings can pollute the user's live config. This is especially problematic on Windows where settings use the registry. **Solution: Backup and restore settings in tests** ```cpp // In tst_settings::initTestCase() void tst_settings::initTestCase() { // Check for portable mode (qtpass.ini in app directory) QString portable_ini = QCoreApplication::applicationDirPath() + QDir::separator() + "qtpass.ini"; bool isPortableMode = QFile::exists(portable_ini); if (isPortableMode) { // Backup settings file QtPassSettings::getInstance()->sync(); QString settingsFile = QtPassSettings::getInstance()->fileName(); m_settingsBackupPath = settingsFile + ".bak"; QFile::remove(m_settingsBackupPath); QFile::copy(settingsFile, m_settingsBackupPath); } else { // Warn on non-portable mode (registry on Windows) qWarning() << "Non-portable mode detected. Tests may modify registry settings."; } } // In tst_settings::cleanupTestCase() void tst_settings::cleanupTestCase() { // Restore original settings after all tests if (isPortableMode && !m_settingsBackupPath.isEmpty()) { QString settingsFile = QtPassSettings::getInstance()->fileName(); QFile::remove(settingsFile); QFile::copy(m_settingsBackupPath, settingsFile); QFile::remove(m_settingsBackupPath); } } ``` **Key points:** - Only backup in portable mode (file-based settings) - On registry mode (Windows non-portable), warn but cannot back up - Always restore after tests to prevent pollution ### Gitleaks-Safe Test Values - DON'T: "ABC123DEF456", "sk-xxx", real API keys - DO: "testkey123", "/usr/bin/pass", "example.com" ### Qt5/Qt6 Compatibility When checking variant types, prefer `canConvert()` over `metaType().id()` for broader compatibility: ```cpp // Qt6-only (fails on Qt5) QVERIFY(displayData.metaType().id() == QMetaType::QString); // Qt5/Qt6 compatible QVERIFY(displayData.canConvert()); ``` ### Temporary Files/Directories ```cpp void tst_mymodule::testWithTempFile() { QTemporaryDir tempDir; QString filePath = tempDir.path() + "/test.txt"; QFile file(filePath); QVERIFY(file.open(QIODevice::WriteOnly)); file.write("test data"); file.close(); // Test reads/modifies file } ``` ### Testing Getters with Default Parameters When testing settings that have getters with default parameters, pass a _different_ default value to verify persistence: ```cpp // Bad - returns default if persistence fails setter(testValue); QCOMPARE(getter(testValue), testValue); // Good - uses different default, must return stored value setter(testValue); QCOMPARE(getter(!testValue), testValue); // bool: use negation QCOMPARE(getter(-1), testValue); // int: use sentinel QCOMPARE(getter(QString()), testValue); // string: use empty ``` ### Compound Types Don't Always Fit Data-Driven Data-driven tests work well for simple bool/int/string settings. Compound types like `PasswordConfiguration` often don't fit: - Different tests test different fields (length vs selected vs characters) - Nested data (QMap, structs) complicates the table - Keep tests explicit and readable over forcing a pattern ### Qt Test Macro Reminder Always use the proper Qt Test macros: ```cpp // Good QCOMPARE(actual, expected); QVERIFY(condition); QVERIFY2(condition, "failure message"); // Bad - won't compile or is confusing COMPARE(actual, expected); // missing Q QQCOMPARE(actual, expected); // extra Q ``` ## Testable Source Files ### src/util.h/cpp - `normalizeFolderPath()` - Path normalization - `protocolRegex()` - URL detection - `endsWithGpg()` - Extension matching - `newLinesRegex()` - Newline detection ### src/filecontent.h/cpp - `FileContent::parse()` - Parse password file - `getPassword()` - Get main password - `getNamedValues()` - Get key:value fields - `getRemainingData()` - Non-template fields - `getRemainingDataForDisplay()` - Display-safe (hides OTP) - `NamedValues::takeValue()` - Extract and remove value ### src/passwordconfiguration.h - `PasswordConfiguration` class - Character set definitions - Length configuration ### src/executor.h/cpp - `Executor::executeBlocking()` - Run command synchronously - Returns exit code, captures output/stderr ### src/storemodel.h/cpp - `StoreModel` extends QFileSystemModel - `setModelAndStore()` - Initialize with model and path - `data()` - Returns display name (removes .gpg) - `flags()` - Item flags - `lessThan()` - Sorting ### src/qtpasssettings.h - 26+ settings: isUseGit(), setUseGit(), isUseMonospace(), etc. ## CI Integration Tests run via `make check` in CI. Coverage reported with `make lcov`. ## Linting See `qtpass-linting` skill for full CI workflow. Pattern: ```bash # Run linter locally BEFORE pushing act push -W .github/workflows/linter.yml -j build ``` ### Web/Config Files (prettier) Formats: .md, .yml, .html, .css, .js, .json, etc. ```bash npx prettier --write npx prettier --write .github/workflows/*.yml npx prettier --write .opencode/skills/*/SKILL.md ``` ### C++ (clang-format) ```bash # Check formatting clang-format --style=file --dry-run src/main.cpp # Apply formatting clang-format --style=file -i src/main.cpp ``` ### Project Lint ```bash make check # Runs tests and builds ``` ## Debugging Failed Tests ```bash # Run single test ./tests/auto/util/tst_util testName # Verbose output ./tests/auto/util/tst_util -v2 # Detailed timing ./tests/auto/util/tst_util -vs ``` QtPass-1.6.0/.textlintrc000066400000000000000000000001161516714562600151450ustar00rootroot00000000000000{ "rules": { "common-misspellings": true, "terminology": true } } QtPass-1.6.0/.transifex.yml000066400000000000000000000003451516714562600155540ustar00rootroot00000000000000git: filters: - filter_type: dir file_format: QT source_file_extension: ts source_language: en_GB source_file_dir: localization translation_files_expression: "localization/localization_" QtPass-1.6.0/.yaml-lint.yml000066400000000000000000000002161516714562600154540ustar00rootroot00000000000000--- extends: default rules: # 80 chars should be enough, but don't fail if a line is longer line-length: max: 120 level: warning QtPass-1.6.0/AGENTS.md000066400000000000000000000053161516714562600142560ustar00rootroot00000000000000# Agent Instructions for QtPass This file provides guidance for AI agents working on QtPass development. ## Build ```bash # Full build qmake6 && make -j4 # With tests make check # With coverage qmake6 -r CONFIG+=coverage make -j4 make lcov ``` ## Linting **Before pushing, always run:** ```bash # Format all markdown/config files npx prettier --write "**/*.md" "**/*.yml" # Verify formatting passes npx prettier --check "**/*.md" "**/*.yml" # Local CI check (may fail on new branches due to git issues) act push -W .github/workflows/linter.yml -j build ``` **C++ formatting:** ```bash clang-format --style=file -i ``` ## Git Workflow - **Create branch:** `git checkout -b fix/description` - **Commit (always sign):** `git commit -S -m "description"` - **Push:** `git push -u origin branch-name` - **Create PR:** `gh pr create --title "description" --body "## Summary\n- details"` - **Update with main before merging:** ```bash git fetch upstream git pull upstream main --rebase git push -f ``` ## Key Conventions - Use `QCoreApplication::arguments()` instead of raw `argv[]` for CLI parsing - Use `QDir::cleanPath()` for cross-platform path normalization - Check for null from `screenAt()` before dereferencing - Use `tr()` for all user-facing strings - Store indices, not pointers, in Qt::UserRole data - Use `QPalette` colors instead of hardcoded values for theme-aware UI - Use `std::as_const()` instead of deprecated `qAsConst()` for Qt iterations ## Handling AI Findings When CodeRabbit/CodeAnt AI flags issues in PRs: 1. **Verify the finding** - Check if it's a real issue or false positive 2. **If correct, fix it** - Make minimal changes to address 3. **Push update** - Force push to update the PR 4. **Respond to comments** - Comment that fix is applied If a finding is incorrect (e.g., code is already correct, or finding is outdated), explain why in a comment and mark as resolved. ## Testing QtPass uses Qt Test framework. Test files are in `tests/auto/`. ```bash # Run specific test ./tests/auto/util/tst_util testName # Verbose output ./tests/auto/util/tst_util -v2 ``` ## Localization QtPass uses Qt Linguist (`.ts` files) in `localization/`. Don't manually edit translations - Weblate handles that. Run `qmake6` after source changes to update translation source references. See `qtpass-localization` skill for details. ## Skills - `qtpass-fixing` - Common bugfix patterns - `qtpass-testing` - Qt Test framework and test structure - `qtpass-linting` - CI/CD and linters - `qtpass-localization` - Translation workflow - `qtpass-github` - PRs, issues, merging - `qtpass-releasing` - Release process - `qtpass-docs` - Documentation guide ## Release See `qtpass-releasing` skill for release process. QtPass-1.6.0/CHANGELOG.md000066400000000000000000002113531516714562600145640ustar00rootroot00000000000000# Changelog ## [1.6.0](https://github.com/IJHack/QtPass/tree/v1.6.0) (2026-04-13) ### Highlights - Auto-detect git in existing password-store [#804](https://github.com/IJHack/QtPass/pull/804) - Use ed25519 for GPG key generation when available [#790](https://github.com/IJHack/QtPass/pull/790) - Improved GPG key parsing with new `gpgkeystate` module ### New Features - Added auto-detect git in existing password-store - Use ed25519 (ECC) for GPG key generation when GPG supports it - Added compile_commands.json generation script for IDE tooling ### Improvements - Improved GPG key parsing with new `gpgkeystate` module [#979](https://github.com/IJHack/QtPass/pull/979) - Improved WSL path handling for gpgconf resolution - Re-encryption security improvements [#815](https://github.com/IJHack/QtPass/issues/815) - Kill stale GPG agents before key generation [#815](https://github.com/IJHack/QtPass/issues/815) - Consolidated release scripts into `scripts/` folder - UsersDialog performance optimizations [#977](https://github.com/IJHack/QtPass/pull/977) ### Bug Fixes - Fixed path separator check in gpgconf resolution - Fixed .gpg-id path construction for cross-platform [#780](https://github.com/IJHack/QtPass/issues/780) - Fixed re-encryption security issues - Fixed GPG key generation timeout handling [#815](https://github.com/IJHack/QtPass/issues/815) - Fixed clipboard history password exclusion [#970](https://github.com/IJHack/QtPass/pull/970) - Fixed transparent context menu in dark mode [#967](https://github.com/IJHack/QtPass/pull/967) - Fixed window positioning with window manager [#947](https://github.com/IJHack/QtPass/pull/947) - Fixed theme colors for button icons [#949](https://github.com/IJHack/QtPass/pull/949) - Fixed hardcoded black text in dark mode [#946](https://github.com/IJHack/QtPass/pull/946) ### Testing - Added `gpgkeystate` test suite (8 test suites total) [#979](https://github.com/IJHack/QtPass/pull/979) - Added GPG colon output fixtures - Improved test assertions and coverage [#978](https://github.com/IJHack/QtPass/pull/978), [#981](https://github.com/IJHack/QtPass/pull/981), [#982](https://github.com/IJHack/QtPass/pull/982) ### Documentation & Maintenance - Added AGENTS.md for AI agent guidance - Added security policy (SECURITY.md) - Extensive doxygen documentation improvements - CI/CD improvements and optimizations ### Localization - Updated translations via Weblate ### Release, CI and Maintenance - Consolidated release scripts into `scripts/` folder - Added compile_commands.json generation script - Extensive code quality improvements via AI-assisted review - CI/CD workflow optimizations [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.5.1...v1.6.0) ## [Unreleased](https://github.com/IJHack/QtPass/tree/HEAD) [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.6.0...HEAD) ## [1.5.1](https://github.com/IJHack/QtPass/tree/v1.5.1) (2026-03-22) ### Fixes - Fixed crash on Wayland when screenAt() returns null [#706](https://github.com/IJHack/QtPass/issues/706), [#663](https://github.com/IJHack/QtPass/issues/663) - Fixed CLI arguments being parsed as password search [#652](https://github.com/IJHack/QtPass/issues/652) - Fixed OTP error handling with better messages and pass-otp availability check [#677](https://github.com/IJHack/QtPass/issues/677) - Fixed window icon not showing on dialog boxes [#671](https://github.com/IJHack/QtPass/issues/671) - Fixed Slovak translation GPG keygen script [#667](https://github.com/IJHack/QtPass/issues/667) - Suppressed qApp deprecation warnings on Qt6 ## [1.5.0](https://github.com/IJHack/QtPass/tree/v1.5.0) (2026-03-21) ### Highlights - `1.5.0` release metadata and packaging preparation across the desktop app, installer, and CI configuration. - Windows release pipeline reliability improvements for AppVeyor and Inno Setup packaging. - Modernized C++/Qt build pipeline with clang-tidy and wider lint/test hardening. ### Fixes & Improvements - Fixed profile handling issues in Qt6 compatibility scenarios and improved profile selection behavior [#681](https://github.com/IJHack/QtPass/pull/681), [#695](https://github.com/IJHack/QtPass/pull/695). - Preserved existing application behavior when launching `qtpass` without parameters [#704](https://github.com/IJHack/QtPass/pull/704). - Removed a regression where gpg_id comments could be altered [#658](https://github.com/IJHack/QtPass/pull/658). - Added missing include path fixes and small reliability hardening in core code paths [#690](https://github.com/IJHack/QtPass/pull/690), [#716](https://github.com/IJHack/QtPass/pull/716). ### Release, CI and Maintenance - Added/updated PublicCode and CI workflows, including release-time validation and action upgrades [#701](https://github.com/IJHack/QtPass/pull/701), [#709](https://github.com/IJHack/QtPass/pull/709), [#710](https://github.com/IJHack/QtPass/pull/710), [#711](https://github.com/IJHack/QtPass/pull/711), [#712](https://github.com/IJHack/QtPass/pull/712). - Completed the AppVeyor/Inno Setup modernization and packaging updates [#722](https://github.com/IJHack/QtPass/pull/722). - Updated readme status badges and branch links to current workflow targets [#724](https://github.com/IJHack/QtPass/pull/724). ### Localization - Synchronised a large set of translation updates through Weblate and translation automation to improve language coverage and keep localization current [#659](https://github.com/IJHack/QtPass/pull/659), [#664](https://github.com/IJHack/QtPass/pull/664), [#666](https://github.com/IJHack/QtPass/pull/666), [#669](https://github.com/IJHack/QtPass/pull/669), [#670](https://github.com/IJHack/QtPass/pull/670), [#673](https://github.com/IJHack/QtPass/pull/673), [#676](https://github.com/IJHack/QtPass/pull/676), [#685](https://github.com/IJHack/QtPass/pull/685), [#689](https://github.com/IJHack/QtPass/pull/689), [#691](https://github.com/IJHack/QtPass/pull/691), [#699](https://github.com/IJHack/QtPass/pull/699), [#702](https://github.com/IJHack/QtPass/pull/702), [#703](https://github.com/IJHack/QtPass/pull/703), [#707](https://github.com/IJHack/QtPass/pull/707), [#713](https://github.com/IJHack/QtPass/pull/713), [#723](https://github.com/IJHack/QtPass/pull/723). **New Contributors** - @Vascom made their first contribution in [#656](https://github.com/IJHack/QtPass/pull/656). - @shemeshg made their first contribution in [#658](https://github.com/IJHack/QtPass/pull/658). - @ruimaciel made their first contribution in [#672](https://github.com/IJHack/QtPass/pull/672). - @vdchuyen made their first contribution in [#680](https://github.com/IJHack/QtPass/pull/680). - @souk4711 made their first contribution in [#681](https://github.com/IJHack/QtPass/pull/681). - @principis made their first contribution in [#690](https://github.com/IJHack/QtPass/pull/690). - @stkw0 made their first contribution in [#695](https://github.com/IJHack/QtPass/pull/695). - @publiccode-pr-bot made their first contribution in [#701](https://github.com/IJHack/QtPass/pull/701). - @transifex-integration[bot] made their first contribution in [#698](https://github.com/IJHack/QtPass/pull/698). - @basil made their first contribution in [#704](https://github.com/IJHack/QtPass/pull/704). - @dependabot[bot] made their first contribution in [#709](https://github.com/IJHack/QtPass/pull/709). [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.4.0...v1.5.0) ## [v1.4.0](https://github.com/IJHack/QtPass/tree/v1.4.0) (2023-09-17) [Full Changelog](https://github.com/IJHack/QtPass/compare/1.4.0-rc2...v1.4.0) **Fixed bugs:** - Update site to reflect new brew command syntax [\#601](https://github.com/IJHack/QtPass/issues/601) - QtPass - not asking for password [\#585](https://github.com/IJHack/QtPass/issues/585) - Missing menu [\#574](https://github.com/IJHack/QtPass/issues/574) **Merged pull requests:** - Initial Korean from Weblate [\#655](https://github.com/IJHack/QtPass/pull/655) ([annejan](https://github.com/annejan)) - Natural language fixes [\#654](https://github.com/IJHack/QtPass/pull/654) ([annejan](https://github.com/annejan)) - Translations update from Hosted Weblate [\#650](https://github.com/IJHack/QtPass/pull/650) ([weblate](https://github.com/weblate)) - Added Serbian and Estonian to project file [\#649](https://github.com/IJHack/QtPass/pull/649) ([annejan](https://github.com/annejan)) - Translations update from Hosted Weblate [\#648](https://github.com/IJHack/QtPass/pull/648) ([weblate](https://github.com/weblate)) - Translations update from Hosted Weblate [\#647](https://github.com/IJHack/QtPass/pull/647) ([weblate](https://github.com/weblate)) - Version bump and cleanup [\#646](https://github.com/IJHack/QtPass/pull/646) ([annejan](https://github.com/annejan)) ## [1.4.0-rc2](https://github.com/IJHack/QtPass/tree/1.4.0-rc2) (2023-08-31) [Full Changelog](https://github.com/IJHack/QtPass/compare/1.4.0-rc1...1.4.0-rc2) **Fixed bugs:** - OTP function stopped working [\#630](https://github.com/IJHack/QtPass/issues/630) - Cannot decrypt own passwords; No secret key [\#580](https://github.com/IJHack/QtPass/issues/580) - gpg not found on macOS [\#575](https://github.com/IJHack/QtPass/issues/575) - Installation is failed using latest Homebrew in macOS [\#564](https://github.com/IJHack/QtPass/issues/564) - Deleting a directory sometimes deletes the entire password store including Git repositories [\#556](https://github.com/IJHack/QtPass/issues/556) **Closed issues:** - \[Windows\] Git repository not working [\#638](https://github.com/IJHack/QtPass/issues/638) - support `PASSWORD_STORE_SIGNING_KEY` with profiles [\#624](https://github.com/IJHack/QtPass/issues/624) - Support multiple branches via "Profiles" feature [\#545](https://github.com/IJHack/QtPass/issues/545) **Merged pull requests:** - clang-format -i src/\*.cpp src/\*.h [\#645](https://github.com/IJHack/QtPass/pull/645) ([annejan](https://github.com/annejan)) - Translations update from Hosted Weblate [\#644](https://github.com/IJHack/QtPass/pull/644) ([weblate](https://github.com/weblate)) - Fix taborder and add buddies in keygen dialog [\#643](https://github.com/IJHack/QtPass/pull/643) ([svuorela](https://github.com/svuorela)) - Restore licensing info for QProgressIndicator [\#642](https://github.com/IJHack/QtPass/pull/642) ([svuorela](https://github.com/svuorela)) - Clazy cleanup and other minor fixes [\#641](https://github.com/IJHack/QtPass/pull/641) ([svuorela](https://github.com/svuorela)) - fix the unintended "running" of the entropy window in the keygen dial… [\#640](https://github.com/IJHack/QtPass/pull/640) ([lherschi](https://github.com/lherschi)) - Translations update from Hosted Weblate [\#636](https://github.com/IJHack/QtPass/pull/636) ([weblate](https://github.com/weblate)) - Add pass store signing key feature [\#634](https://github.com/IJHack/QtPass/pull/634) ([timegrid](https://github.com/timegrid)) - Translations update from Hosted Weblate [\#633](https://github.com/IJHack/QtPass/pull/633) ([weblate](https://github.com/weblate)) - Translations update from Hosted Weblate [\#632](https://github.com/IJHack/QtPass/pull/632) ([weblate](https://github.com/weblate)) - Translations update from Hosted Weblate [\#629](https://github.com/IJHack/QtPass/pull/629) ([weblate](https://github.com/weblate)) - Translations update from Hosted Weblate [\#628](https://github.com/IJHack/QtPass/pull/628) ([weblate](https://github.com/weblate)) - Translations update from Hosted Weblate [\#627](https://github.com/IJHack/QtPass/pull/627) ([weblate](https://github.com/weblate)) - Translations update from Hosted Weblate [\#626](https://github.com/IJHack/QtPass/pull/626) ([weblate](https://github.com/weblate)) - Translations update from Hosted Weblate [\#622](https://github.com/IJHack/QtPass/pull/622) ([weblate](https://github.com/weblate)) - markdownlint --fix && textlint --fix [\#621](https://github.com/IJHack/QtPass/pull/621) ([annejan](https://github.com/annejan)) - Document "Using profiles" [\#619](https://github.com/IJHack/QtPass/pull/619) ([buepro](https://github.com/buepro)) - Translations update from Hosted Weblate [\#618](https://github.com/IJHack/QtPass/pull/618) ([weblate](https://github.com/weblate)) - Translations update from Hosted Weblate [\#617](https://github.com/IJHack/QtPass/pull/617) ([weblate](https://github.com/weblate)) - super-linter ENV variables in shared location for local and automated [\#616](https://github.com/IJHack/QtPass/pull/616) ([annejan](https://github.com/annejan)) - fix bug =\> clipboard was not cleared when using primary selection [\#615](https://github.com/IJHack/QtPass/pull/615) ([pythcoiner](https://github.com/pythcoiner)) - Translations update from Hosted Weblate [\#614](https://github.com/IJHack/QtPass/pull/614) ([weblate](https://github.com/weblate)) - Translations update from Hosted Weblate [\#613](https://github.com/IJHack/QtPass/pull/613) ([weblate](https://github.com/weblate)) - Removed travis \(no longer free\) and lgtm \(migrated to GitHub\) [\#612](https://github.com/IJHack/QtPass/pull/612) ([annejan](https://github.com/annejan)) - Translations update from Hosted Weblate [\#611](https://github.com/IJHack/QtPass/pull/611) ([weblate](https://github.com/weblate)) - Super Linter added and fixing findings [\#610](https://github.com/IJHack/QtPass/pull/610) ([annejan](https://github.com/annejan)) - New Transifex integration yml [\#609](https://github.com/IJHack/QtPass/pull/609) ([annejan](https://github.com/annejan)) - Install QT in codeql workflow [\#608](https://github.com/IJHack/QtPass/pull/608) ([annejan](https://github.com/annejan)) - Translations update from Hosted Weblate [\#607](https://github.com/IJHack/QtPass/pull/607) ([weblate](https://github.com/weblate)) - Translation cleanup [\#606](https://github.com/IJHack/QtPass/pull/606) ([annejan](https://github.com/annejan)) - translations updated [\#605](https://github.com/IJHack/QtPass/pull/605) ([annejan](https://github.com/annejan)) - Fix accidental deletion of entire passwordstore [\#604](https://github.com/IJHack/QtPass/pull/604) ([FSMaxB](https://github.com/FSMaxB)) - Add more options for the password displaying [\#587](https://github.com/IJHack/QtPass/pull/587) ([l3u](https://github.com/l3u)) - Delete context menu after exec [\#578](https://github.com/IJHack/QtPass/pull/578) ([fasked](https://github.com/fasked)) - Translations update from Hosted Weblate [\#576](https://github.com/IJHack/QtPass/pull/576) ([weblate](https://github.com/weblate)) ## [1.4.0-rc1](https://github.com/IJHack/QtPass/tree/1.4.0-rc1) (2021-09-22) [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.3.2...1.4.0-rc1) **Implemented enhancements:** - Set correct WM_CLASS for the qr-code popup [\#506](https://github.com/IJHack/QtPass/issues/506) **Fixed bugs:** - QtPass does not detect current $GNUPGHOME and causes it to fail decryption [\#569](https://github.com/IJHack/QtPass/issues/569) - \ ... \ included in password text [\#542](https://github.com/IJHack/QtPass/issues/542) - Markup tags are left in password and clipboard [\#533](https://github.com/IJHack/QtPass/issues/533) - Renaming passwords and directories fail [\#487](https://github.com/IJHack/QtPass/issues/487) - Will not run on Windows 10 1903 b18362.418 [\#486](https://github.com/IJHack/QtPass/issues/486) **Closed issues:** - Hide results on search [\#551](https://github.com/IJHack/QtPass/issues/551) - QtPass 1.3.2 freezes on macOS 10.15.6 when trying to display password [\#544](https://github.com/IJHack/QtPass/issues/544) - Icons are blurry when fractional scaling is enabled [\#525](https://github.com/IJHack/QtPass/issues/525) - \[Request\] clear search password when change profile [\#524](https://github.com/IJHack/QtPass/issues/524) - Copying not possible on Ubuntu 20.04 [\#521](https://github.com/IJHack/QtPass/issues/521) - UI can't handle passwords with periods in their name [\#520](https://github.com/IJHack/QtPass/issues/520) - Display passwords in mono space font [\#514](https://github.com/IJHack/QtPass/issues/514) - QtPass 1.3.2 for Ubuntu 19.10 \(eoan\) [\#512](https://github.com/IJHack/QtPass/issues/512) - Default password visibility [\#511](https://github.com/IJHack/QtPass/issues/511) - Consider mentioning export abilities in migration docs, if any are present [\#505](https://github.com/IJHack/QtPass/issues/505) - Enable out-of-source \(shadow\) builds. [\#501](https://github.com/IJHack/QtPass/issues/501) - password visiblity can't be fully hidden [\#496](https://github.com/IJHack/QtPass/issues/496) - Translations need updating and checking [\#488](https://github.com/IJHack/QtPass/issues/488) - Frontend doesn't work well with HiDPI screen [\#464](https://github.com/IJHack/QtPass/issues/464) - How to let QtPass use the real "pass" on windows [\#458](https://github.com/IJHack/QtPass/issues/458) - Fresh install of Antergos with Deepin - High DPI scaling is not working [\#417](https://github.com/IJHack/QtPass/issues/417) - Strange behavior when clearing filter [\#402](https://github.com/IJHack/QtPass/issues/402) - Tray icon remains after quitting program [\#401](https://github.com/IJHack/QtPass/issues/401) - QtPass doesn't work will pass in WSL [\#375](https://github.com/IJHack/QtPass/issues/375) - UI is blurry on HiDPI screens on macOS \(retina\) since 1.2.x [\#355](https://github.com/IJHack/QtPass/issues/355) - No prompt for passphrase for Git key on windows. [\#317](https://github.com/IJHack/QtPass/issues/317) - Config dialog's Password Generation field got crowded between 1.1.3 and 1.1.6 [\#278](https://github.com/IJHack/QtPass/issues/278) **Merged pull requests:** - Translations update from Weblate [\#573](https://github.com/IJHack/QtPass/pull/573) ([weblate](https://github.com/weblate)) - Fix keys created/expires dates in the users dialog window \(fix: 571\) [\#572](https://github.com/IJHack/QtPass/pull/572) ([nfetisov](https://github.com/nfetisov)) - Correct a typo in pass.cpp [\#570](https://github.com/IJHack/QtPass/pull/570) ([felixonmars](https://github.com/felixonmars)) - Fix installation instructions in README.md [\#565](https://github.com/IJHack/QtPass/pull/565) ([kawarimidoll](https://github.com/kawarimidoll)) - Translations update from Weblate [\#563](https://github.com/IJHack/QtPass/pull/563) ([weblate](https://github.com/weblate)) - Translations update from Weblate [\#562](https://github.com/IJHack/QtPass/pull/562) ([weblate](https://github.com/weblate)) - Translations update from Weblate [\#560](https://github.com/IJHack/QtPass/pull/560) ([weblate](https://github.com/weblate)) - Keep suffices when moving \(to\) a directory while imitiating pass [\#559](https://github.com/IJHack/QtPass/pull/559) ([ichthyosaurus](https://github.com/ichthyosaurus)) - Explicitly only remove ".gpg" when renaming files [\#558](https://github.com/IJHack/QtPass/pull/558) ([ichthyosaurus](https://github.com/ichthyosaurus)) - Translations update from Weblate [\#554](https://github.com/IJHack/QtPass/pull/554) ([weblate](https://github.com/weblate)) - Translations update from Weblate [\#553](https://github.com/IJHack/QtPass/pull/553) ([weblate](https://github.com/weblate)) - Translations update from Weblate [\#552](https://github.com/IJHack/QtPass/pull/552) ([weblate](https://github.com/weblate)) - Translations update from Weblate [\#548](https://github.com/IJHack/QtPass/pull/548) ([weblate](https://github.com/weblate)) - Move MainWindow to the screen the cursor is on [\#547](https://github.com/IJHack/QtPass/pull/547) ([inhinias](https://github.com/inhinias)) - Translations update from Weblate [\#541](https://github.com/IJHack/QtPass/pull/541) ([weblate](https://github.com/weblate)) - Translations update from Weblate [\#535](https://github.com/IJHack/QtPass/pull/535) ([weblate](https://github.com/weblate)) - Fix issues with renaming passwords and moving folders [\#532](https://github.com/IJHack/QtPass/pull/532) ([ChaoticEnigma](https://github.com/ChaoticEnigma)) - Translations update from Weblate [\#531](https://github.com/IJHack/QtPass/pull/531) ([weblate](https://github.com/weblate)) - Translations update from Weblate [\#530](https://github.com/IJHack/QtPass/pull/530) ([weblate](https://github.com/weblate)) - Clear search on profile change [\#529](https://github.com/IJHack/QtPass/pull/529) ([cmol](https://github.com/cmol)) - \#514 Show password with a monospace font [\#528](https://github.com/IJHack/QtPass/pull/528) ([cmol](https://github.com/cmol)) - Update minimum Qt version [\#527](https://github.com/IJHack/QtPass/pull/527) ([cmol](https://github.com/cmol)) - Fix blurry icons when fractional scaling is enabled [\#526](https://github.com/IJHack/QtPass/pull/526) ([mthw0](https://github.com/mthw0)) - Spelling: Git pull, Git push [\#516](https://github.com/IJHack/QtPass/pull/516) ([comradekingu](https://github.com/comradekingu)) - Enable ubuntu, windows and macOS based builds for CI [\#508](https://github.com/IJHack/QtPass/pull/508) ([boppybibbles](https://github.com/boppybibbles)) - Enable out-of-source build [\#503](https://github.com/IJHack/QtPass/pull/503) ([boppybibbles](https://github.com/boppybibbles)) - Use new stable version of `install-qt-action`. [\#502](https://github.com/IJHack/QtPass/pull/502) ([boppybibbles](https://github.com/boppybibbles)) - Don't base pass-otp availability decision on hardcoded /usr/lib [\#499](https://github.com/IJHack/QtPass/pull/499) ([nh2](https://github.com/nh2)) - Spelling: Search for users, , [\#495](https://github.com/IJHack/QtPass/pull/495) ([comradekingu](https://github.com/comradekingu)) - Spelling: Keylist missing, Could not fetch, GPG [\#493](https://github.com/IJHack/QtPass/pull/493) ([comradekingu](https://github.com/comradekingu)) - Spelling: Git, GPG, PWGen, etc. [\#492](https://github.com/IJHack/QtPass/pull/492) ([comradekingu](https://github.com/comradekingu)) - Don't use a deprecated method [\#491](https://github.com/IJHack/QtPass/pull/491) ([amarsman](https://github.com/amarsman)) - Issue \#402: 'deselect\(\)' on clearing filter [\#490](https://github.com/IJHack/QtPass/pull/490) ([petr-nehez](https://github.com/petr-nehez)) ## [v1.3.2](https://github.com/IJHack/QtPass/tree/v1.3.2) (2019-10-09) [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.3.1...v1.3.2) **Fixed bugs:** - QtPass could not run on Windows7 thin [\#485](https://github.com/IJHack/QtPass/issues/485) - Segfault on application startup \(macOS\) [\#481](https://github.com/IJHack/QtPass/issues/481) - Application crashes on empty password store [\#466](https://github.com/IJHack/QtPass/issues/466) - App is completely broken [\#423](https://github.com/IJHack/QtPass/issues/423) **Closed issues:** - Edit window on Gnome has no padding around [\#484](https://github.com/IJHack/QtPass/issues/484) - Buttons width on RHEL 8 [\#483](https://github.com/IJHack/QtPass/issues/483) - `Start minimized' no longer works [\#471](https://github.com/IJHack/QtPass/issues/471) - Editor doesn't wait for PGP key to decrypt [\#470](https://github.com/IJHack/QtPass/issues/470) - v1.3.0 Data Not Showing [\#465](https://github.com/IJHack/QtPass/issues/465) - Hangs on macOS after Security Update 2019-003 10.12.6 [\#461](https://github.com/IJHack/QtPass/issues/461) - No public key [\#308](https://github.com/IJHack/QtPass/issues/308) **Merged pull requests:** - Don't call QtPass::setup\(\) from QtPass class constructor \(should fix \#466\) [\#482](https://github.com/IJHack/QtPass/pull/482) ([maciejsszmigiero](https://github.com/maciejsszmigiero)) ## [v1.3.1](https://github.com/IJHack/QtPass/tree/v1.3.1) (2019-10-01) [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.3.0...v1.3.1) **Implemented enhancements:** - Renaming password [\#463](https://github.com/IJHack/QtPass/issues/463) - \[Feature Request\] Edit main title field [\#446](https://github.com/IJHack/QtPass/issues/446) **Fixed bugs:** - build: dependency issue [\#467](https://github.com/IJHack/QtPass/issues/467) - is running but no GUI [\#451](https://github.com/IJHack/QtPass/issues/451) **Closed issues:** - Additional lines \(notes\) are not shown [\#474](https://github.com/IJHack/QtPass/issues/474) - Bundle ID is literally `$(PRODUCT_BUNDLE_IDENTIFIER)` [\#448](https://github.com/IJHack/QtPass/issues/448) **Merged pull requests:** - Add license scan report and status [\#480](https://github.com/IJHack/QtPass/pull/480) ([fossabot](https://github.com/fossabot)) - Build tooling related fixes [\#479](https://github.com/IJHack/QtPass/pull/479) ([maciejsszmigiero](https://github.com/maciejsszmigiero)) - Add missing overrides [\#478](https://github.com/IJHack/QtPass/pull/478) ([amarsman](https://github.com/amarsman)) - Main window entry details improvements [\#477](https://github.com/IJHack/QtPass/pull/477) ([maciejsszmigiero](https://github.com/maciejsszmigiero)) - Fix HTML links color and NL translation building error [\#476](https://github.com/IJHack/QtPass/pull/476) ([a-andreyev](https://github.com/a-andreyev)) - Restore directories-first order of passwords tree view on non-Mac platforms [\#475](https://github.com/IJHack/QtPass/pull/475) ([maciejsszmigiero](https://github.com/maciejsszmigiero)) - Add missing finishedShow\(\) signal connection in PasswordDialog constructor \(fixes the "Edit password" function\) [\#473](https://github.com/IJHack/QtPass/pull/473) ([maciejsszmigiero](https://github.com/maciejsszmigiero)) - Sorted profiles dropdown as in \#404 [\#472](https://github.com/IJHack/QtPass/pull/472) ([Noettore](https://github.com/Noettore)) - Add support for passwords and directories renaming as requested in \#463 [\#469](https://github.com/IJHack/QtPass/pull/469) ([Noettore](https://github.com/Noettore)) - Fix missing app ID and icon on Wayland. [\#468](https://github.com/IJHack/QtPass/pull/468) ([lightbulbjim](https://github.com/lightbulbjim)) ## [v1.3.0](https://github.com/IJHack/QtPass/tree/v1.3.0) (2019-08-20) [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.2.3...v1.3.0) **Implemented enhancements:** - Localization makes commits absolutely unreadable [\#405](https://github.com/IJHack/QtPass/issues/405) - Add otp \(two factor authentication\) support [\#327](https://github.com/IJHack/QtPass/issues/327) - Open specific entry from command-line parameter [\#32](https://github.com/IJHack/QtPass/issues/32) **Fixed bugs:** - Windows sigsev issues [\#326](https://github.com/IJHack/QtPass/issues/326) - Access to the / \(root\) directory form within the application window on macOS [\#302](https://github.com/IJHack/QtPass/issues/302) - PRNG seeding is done totally wrong [\#238](https://github.com/IJHack/QtPass/issues/238) - Context menu on transparent fields is transparent too . . [\#227](https://github.com/IJHack/QtPass/issues/227) **Closed issues:** - various issues with Info.plist file on macOS [\#457](https://github.com/IJHack/QtPass/issues/457) - Can not add new passwords for some reason [\#454](https://github.com/IJHack/QtPass/issues/454) - GnuPG not found on Linux Mint [\#433](https://github.com/IJHack/QtPass/issues/433) - How to clean up the app [\#429](https://github.com/IJHack/QtPass/issues/429) - LAN sync request [\#427](https://github.com/IJHack/QtPass/issues/427) - Profiles can not be removed [\#415](https://github.com/IJHack/QtPass/issues/415) - Compilation error in \(K\)ubuntu 16.04.5 with sources tar.gz from version 1.2.3 [\#408](https://github.com/IJHack/QtPass/issues/408) - Prevent from removing whole password-store directory and hidden directories and files [\#400](https://github.com/IJHack/QtPass/issues/400) - Version information string/s [\#398](https://github.com/IJHack/QtPass/issues/398) - We should select a C++ std too [\#372](https://github.com/IJHack/QtPass/issues/372) - We should select a minimum Qt version [\#371](https://github.com/IJHack/QtPass/issues/371) - Problem with GNUpg not found on macOS [\#362](https://github.com/IJHack/QtPass/issues/362) - Compiling for Linux Mint 18 Ubuntu 16 [\#357](https://github.com/IJHack/QtPass/issues/357) - make qtpass portable in windows [\#356](https://github.com/IJHack/QtPass/issues/356) - Unable to see main application window \(applicationn runs minimized to tray only\) [\#286](https://github.com/IJHack/QtPass/issues/286) - Startup variables and parameters [\#212](https://github.com/IJHack/QtPass/issues/212) - \[macOS\] Password input dialog suddenly stopped popping up [\#191](https://github.com/IJHack/QtPass/issues/191) - MainWindow is a giant monolithic mess [\#107](https://github.com/IJHack/QtPass/issues/107) **Merged pull requests:** - Use key fingerprint as ID instead of “long†ID. [\#452](https://github.com/IJHack/QtPass/pull/452) ([Natureshadow](https://github.com/Natureshadow)) - Typo: dialouge to dialogue. [\#444](https://github.com/IJHack/QtPass/pull/444) ([georgjaehnig](https://github.com/georgjaehnig)) - Scripts and logic specific to Windows Store releases [\#439](https://github.com/IJHack/QtPass/pull/439) ([rdoeffinger](https://github.com/rdoeffinger)) - For config check, check that the selected binary is available. [\#438](https://github.com/IJHack/QtPass/pull/438) ([rdoeffinger](https://github.com/rdoeffinger)) - Fix character encoding issues for non-UTF-8 locales. [\#435](https://github.com/IJHack/QtPass/pull/435) ([rdoeffinger](https://github.com/rdoeffinger)) - Fixes and improvments for config dialog [\#432](https://github.com/IJHack/QtPass/pull/432) ([rdoeffinger](https://github.com/rdoeffinger)) - Support for using WSL binaries on Windows [\#431](https://github.com/IJHack/QtPass/pull/431) ([rdoeffinger](https://github.com/rdoeffinger)) - Bugfixes and Windows compatibility improvements [\#430](https://github.com/IJHack/QtPass/pull/430) ([mrsch](https://github.com/mrsch)) - Semi-automatic code cleanup [\#425](https://github.com/IJHack/QtPass/pull/425) ([annejan](https://github.com/annejan)) - Update to prevent the installer requesting admin [\#424](https://github.com/IJHack/QtPass/pull/424) ([hughwilliams94](https://github.com/hughwilliams94)) - Display passwords as QR codes [\#421](https://github.com/IJHack/QtPass/pull/421) ([frawi](https://github.com/frawi)) - Tested working on macOS HS with pinentry-mac [\#419](https://github.com/IJHack/QtPass/pull/419) ([riccardocossu](https://github.com/riccardocossu)) - Dutch \(nl\) translation improvements [\#418](https://github.com/IJHack/QtPass/pull/418) ([equaeghe](https://github.com/equaeghe)) - Bugfixes [\#413](https://github.com/IJHack/QtPass/pull/413) ([rdoeffinger](https://github.com/rdoeffinger)) - pwgen: fix inverted "Generate ... less secure passwords" checkbox [\#409](https://github.com/IJHack/QtPass/pull/409) ([ahippo](https://github.com/ahippo)) - Continuing refactoring [\#407](https://github.com/IJHack/QtPass/pull/407) ([FiloSpaTeam](https://github.com/FiloSpaTeam)) - \#390 make box cheched when opening a folder users panel [\#403](https://github.com/IJHack/QtPass/pull/403) ([kenji21](https://github.com/kenji21)) ## [v1.2.3](https://github.com/IJHack/QtPass/tree/v1.2.3) (2018-06-04) [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.2.2...v1.2.3) **Closed issues:** - Consider repology badges [\#396](https://github.com/IJHack/QtPass/issues/396) - Unable to create new password [\#391](https://github.com/IJHack/QtPass/issues/391) - Duplicate prefix in installation of tests directory in v1.2.2. [\#389](https://github.com/IJHack/QtPass/issues/389) - Compilation error on FreeBSD member access into incomplete type [\#388](https://github.com/IJHack/QtPass/issues/388) - No icons on macOS [\#377](https://github.com/IJHack/QtPass/issues/377) **Merged pull requests:** - Add support for OTP code generation on Linux as requested in \#327 [\#394](https://github.com/IJHack/QtPass/pull/394) ([Noettore](https://github.com/Noettore)) - Revert scroll bar changes [\#393](https://github.com/IJHack/QtPass/pull/393) ([destanyol](https://github.com/destanyol)) - Fix High Dpi Support. Works now under Windows and KDE/Plasma. [\#392](https://github.com/IJHack/QtPass/pull/392) ([hgraeber](https://github.com/hgraeber)) ## [v1.2.2](https://github.com/IJHack/QtPass/tree/v1.2.2) (2018-05-07) [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.2.1...v1.2.2) **Implemented enhancements:** - Cleaning \#includes [\#364](https://github.com/IJHack/QtPass/pull/364) ([FiloSpaTeam](https://github.com/FiloSpaTeam)) **Fixed bugs:** - Insecure Password Generation [\#338](https://github.com/IJHack/QtPass/issues/338) - Clipboard clearing timer is not reset when new passwords are copied to the clipboard [\#309](https://github.com/IJHack/QtPass/issues/309) - Removal of files outside of password-store [\#300](https://github.com/IJHack/QtPass/issues/300) - Some fixes and refactoring. [\#376](https://github.com/IJHack/QtPass/pull/376) ([FiloSpaTeam](https://github.com/FiloSpaTeam)) - Fix & make clearClipboard more robust [\#359](https://github.com/IJHack/QtPass/pull/359) ([lukedirtwalker](https://github.com/lukedirtwalker)) **Closed issues:** - Multiple question marks while trying to delete password [\#385](https://github.com/IJHack/QtPass/issues/385) - No button icons and text in "menu bar" [\#383](https://github.com/IJHack/QtPass/issues/383) - Cannot add a new password [\#380](https://github.com/IJHack/QtPass/issues/380) - Tiny bit of regression [\#379](https://github.com/IJHack/QtPass/issues/379) - Running qtPass remotelly not prompting for the GPG key passphrasse [\#374](https://github.com/IJHack/QtPass/issues/374) - Entire program is huge on High DPI screen on Linux [\#369](https://github.com/IJHack/QtPass/issues/369) - Two new issues since latest refactoring [\#368](https://github.com/IJHack/QtPass/issues/368) - Chocolatey package outdated [\#366](https://github.com/IJHack/QtPass/issues/366) - How do I change the language ? [\#352](https://github.com/IJHack/QtPass/issues/352) - Parallel make issue in qtpass-1.2.1: ld: cannot find -lqtpass [\#350](https://github.com/IJHack/QtPass/issues/350) - "copy" icon has disappeared in v1.2.1 [\#344](https://github.com/IJHack/QtPass/issues/344) - No password entry prompt [\#343](https://github.com/IJHack/QtPass/issues/343) - Can't install on macOS Sierra [\#337](https://github.com/IJHack/QtPass/issues/337) - No icon on macOS [\#333](https://github.com/IJHack/QtPass/issues/333) - Font and spacing used for URL links on right in main window absurdly large [\#329](https://github.com/IJHack/QtPass/issues/329) - QtPass don't display all lines with templates [\#273](https://github.com/IJHack/QtPass/issues/273) **Merged pull requests:** - 2 simple fixes [\#386](https://github.com/IJHack/QtPass/pull/386) ([FiloSpaTeam](https://github.com/FiloSpaTeam)) - Should fix \#383 [\#384](https://github.com/IJHack/QtPass/pull/384) ([FiloSpaTeam](https://github.com/FiloSpaTeam)) - Move connect action to main.cpp. Default search text as parameter of… [\#382](https://github.com/IJHack/QtPass/pull/382) ([FiloSpaTeam](https://github.com/FiloSpaTeam)) - fix \#380 [\#381](https://github.com/IJHack/QtPass/pull/381) ([FiloSpaTeam](https://github.com/FiloSpaTeam)) - Small refactoring. [\#378](https://github.com/IJHack/QtPass/pull/378) ([FiloSpaTeam](https://github.com/FiloSpaTeam)) - Sorry for last error :\) [\#370](https://github.com/IJHack/QtPass/pull/370) ([FiloSpaTeam](https://github.com/FiloSpaTeam)) - Optimizations :\) [\#367](https://github.com/IJHack/QtPass/pull/367) ([FiloSpaTeam](https://github.com/FiloSpaTeam)) - Removed comment out \#includes [\#365](https://github.com/IJHack/QtPass/pull/365) ([FiloSpaTeam](https://github.com/FiloSpaTeam)) - fix for \#300 [\#363](https://github.com/IJHack/QtPass/pull/363) ([FiloSpaTeam](https://github.com/FiloSpaTeam)) - Translated all missing content to Italian, created Release of transla… [\#361](https://github.com/IJHack/QtPass/pull/361) ([FiloSpaTeam](https://github.com/FiloSpaTeam)) - Refactoring [\#360](https://github.com/IJHack/QtPass/pull/360) ([lukedirtwalker](https://github.com/lukedirtwalker)) - Display all fields when using template setting, fixes \#273 [\#358](https://github.com/IJHack/QtPass/pull/358) ([lukedirtwalker](https://github.com/lukedirtwalker)) - Update CONTRIBUTING.md [\#354](https://github.com/IJHack/QtPass/pull/354) ([5bentz](https://github.com/5bentz)) - Add two entries in FAQ about the language [\#353](https://github.com/IJHack/QtPass/pull/353) ([5bentz](https://github.com/5bentz)) - Fix typo in french translation [\#349](https://github.com/IJHack/QtPass/pull/349) ([babolivier](https://github.com/babolivier)) - New scroll bar on large files [\#347](https://github.com/IJHack/QtPass/pull/347) ([destanyol](https://github.com/destanyol)) - Fix nested template argument list compile error [\#346](https://github.com/IJHack/QtPass/pull/346) ([martinburchell](https://github.com/martinburchell)) - Honor PREFIX during tests install [\#345](https://github.com/IJHack/QtPass/pull/345) ([SpiderX](https://github.com/SpiderX)) ## [v1.2.1](https://github.com/IJHack/QtPass/tree/v1.2.1) (2018-01-04) [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.2.0...v1.2.1) **Closed issues:** - Question: is it possible to mass import passes? [\#339](https://github.com/IJHack/QtPass/issues/339) - Version 1.2.0 leaks passwords [\#334](https://github.com/IJHack/QtPass/issues/334) - signed release files [\#332](https://github.com/IJHack/QtPass/issues/332) - 2017 [\#330](https://github.com/IJHack/QtPass/issues/330) - When importing settings from 1.1.5 or older clipboard settings revert to No Clipboard [\#232](https://github.com/IJHack/QtPass/issues/232) **Merged pull requests:** - Insecure password generation [\#342](https://github.com/IJHack/QtPass/pull/342) ([annejan](https://github.com/annejan)) - Add Catalan translation [\#336](https://github.com/IJHack/QtPass/pull/336) ([rbuj](https://github.com/rbuj)) ## [v1.2.0](https://github.com/IJHack/QtPass/tree/v1.2.0) (2017-11-08) [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.1.6...v1.2.0) **Implemented enhancements:** - Icon tray from system icon theme [\#318](https://github.com/IJHack/QtPass/issues/318) - Copy button for each custom field [\#291](https://github.com/IJHack/QtPass/issues/291) - Feature Request: Use primary selection instead of clipboard [\#280](https://github.com/IJHack/QtPass/issues/280) - Add primary selection as clipboard option [\#281](https://github.com/IJHack/QtPass/pull/281) ([annejan](https://github.com/annejan)) - Feature: CTRL/CMD + Q closes the mainwindow \#258 [\#259](https://github.com/IJHack/QtPass/pull/259) ([YoshiMan](https://github.com/YoshiMan)) - Feature/testing moved sources to src added tests [\#257](https://github.com/IJHack/QtPass/pull/257) ([annejan](https://github.com/annejan)) - enabled drag and drop support for passwords and passwordfolders [\#245](https://github.com/IJHack/QtPass/pull/245) ([YoshiMan](https://github.com/YoshiMan)) - Password dialog decoupling from MW [\#242](https://github.com/IJHack/QtPass/pull/242) ([tezeb](https://github.com/tezeb)) - Refactoring of qpushbuttonwithclipboard and timers [\#241](https://github.com/IJHack/QtPass/pull/241) ([tezeb](https://github.com/tezeb)) - added a copy button for each line to paste the content into the clipboard, "pass init -- path=" command with right path-parameter, lupdate qtpass.pro [\#218](https://github.com/IJHack/QtPass/pull/218) ([YoshiMan](https://github.com/YoshiMan)) **Fixed bugs:** - Do not hide passwords and no generator [\#267](https://github.com/IJHack/QtPass/issues/267) - Weird behavior when turning on Git support \(auto push/pull\) with non-clean Git dir [\#128](https://github.com/IJHack/QtPass/issues/128) - SingleApplication implementation buggy [\#26](https://github.com/IJHack/QtPass/issues/26) **Closed issues:** - Tab order is wrong in password dialog [\#331](https://github.com/IJHack/QtPass/issues/331) - Missing icons since split to static lib [\#325](https://github.com/IJHack/QtPass/issues/325) - "-session XXX" upon session restore taken as search string [\#320](https://github.com/IJHack/QtPass/issues/320) - Instructions to install it on OSX maybe outdated [\#315](https://github.com/IJHack/QtPass/issues/315) - QtPass hangs when trying to decrypt entry [\#313](https://github.com/IJHack/QtPass/issues/313) - Unable to locate package \(Linux Mint 17.3\) [\#310](https://github.com/IJHack/QtPass/issues/310) - Git commit signing [\#303](https://github.com/IJHack/QtPass/issues/303) - Add to Linux brew [\#301](https://github.com/IJHack/QtPass/issues/301) - Pass 1.7 testing [\#299](https://github.com/IJHack/QtPass/issues/299) - Measure unit-test code coverage [\#298](https://github.com/IJHack/QtPass/issues/298) - Config dialog: Propose "Password behaviour" label change [\#294](https://github.com/IJHack/QtPass/issues/294) - make install currently broken. [\#289](https://github.com/IJHack/QtPass/issues/289) - Unable to locate package \(Raspbian\) [\#287](https://github.com/IJHack/QtPass/issues/287) - There is no `git cp` [\#272](https://github.com/IJHack/QtPass/issues/272) - pass is apparently switching out pwgen [\#264](https://github.com/IJHack/QtPass/issues/264) - Bugs since refactoring [\#262](https://github.com/IJHack/QtPass/issues/262) - pass working fine but qtprocess failure with qtpass [\#260](https://github.com/IJHack/QtPass/issues/260) - Feature: CTRL/CMD + Q closes the mainwindow [\#258](https://github.com/IJHack/QtPass/issues/258) - Refactoring: removal of lastDecrypt [\#256](https://github.com/IJHack/QtPass/issues/256) - Pass environment not set-up correctly [\#250](https://github.com/IJHack/QtPass/issues/250) - Make fails - std c++11 not set [\#244](https://github.com/IJHack/QtPass/issues/244) - Double-clicking might open previous entry instead of one double-clicked on [\#243](https://github.com/IJHack/QtPass/issues/243) - Clean up ConfigDialog [\#235](https://github.com/IJHack/QtPass/issues/235) **Merged pull requests:** - Extract static library and separate main function [\#324](https://github.com/IJHack/QtPass/pull/324) ([tezeb](https://github.com/tezeb)) - galego actualizado [\#323](https://github.com/IJHack/QtPass/pull/323) ([xmgz](https://github.com/xmgz)) - Add sftp, ftps, webdav and webdavs as supported links [\#322](https://github.com/IJHack/QtPass/pull/322) ([cgonzalez](https://github.com/cgonzalez)) - Ignore cmdline arguments if -session is used. [\#321](https://github.com/IJHack/QtPass/pull/321) ([Achimh3011](https://github.com/Achimh3011)) - Finished French translation \(and proof-read the already translated strings\). [\#311](https://github.com/IJHack/QtPass/pull/311) ([Marcool04](https://github.com/Marcool04)) - Once again, code coverage [\#305](https://github.com/IJHack/QtPass/pull/305) ([tezeb](https://github.com/tezeb)) - Fixed path of resources.qrc [\#297](https://github.com/IJHack/QtPass/pull/297) ([sideeffect42](https://github.com/sideeffect42)) - Add pt_PT translation [\#295](https://github.com/IJHack/QtPass/pull/295) ([keitalbame](https://github.com/keitalbame)) - Update README.md [\#293](https://github.com/IJHack/QtPass/pull/293) ([joostruis](https://github.com/joostruis)) - small band aid fix for password generation on windows [\#276](https://github.com/IJHack/QtPass/pull/276) ([treat1](https://github.com/treat1)) - Final step in process mgmt refactoring [\#275](https://github.com/IJHack/QtPass/pull/275) ([tezeb](https://github.com/tezeb)) - Fix pwgen and refactor Pass::finished [\#271](https://github.com/IJHack/QtPass/pull/271) ([tezeb](https://github.com/tezeb)) - Process specific signals for process management [\#270](https://github.com/IJHack/QtPass/pull/270) ([tezeb](https://github.com/tezeb)) - \#239 reencrypting after a drag and drop action [\#261](https://github.com/IJHack/QtPass/pull/261) ([YoshiMan](https://github.com/YoshiMan)) - this if evaluetes ervery time to true [\#255](https://github.com/IJHack/QtPass/pull/255) ([YoshiMan](https://github.com/YoshiMan)) - executeing pass show before editpassword dialog shows up [\#254](https://github.com/IJHack/QtPass/pull/254) ([YoshiMan](https://github.com/YoshiMan)) - Minor fix for filenames and Git push [\#251](https://github.com/IJHack/QtPass/pull/251) ([tezeb](https://github.com/tezeb)) - Process management refactoring part 2 [\#249](https://github.com/IJHack/QtPass/pull/249) ([tezeb](https://github.com/tezeb)) - refactoring - pass ifce, process mgmt [\#234](https://github.com/IJHack/QtPass/pull/234) ([tezeb](https://github.com/tezeb)) - Solve double-click issue [\#230](https://github.com/IJHack/QtPass/pull/230) ([jounathaen](https://github.com/jounathaen)) - refactoring, new QtPassSettings class, all settings should be read and written here [\#224](https://github.com/IJHack/QtPass/pull/224) ([YoshiMan](https://github.com/YoshiMan)) - Moved @YoshiMan 's copy buttons inside the line Edit [\#222](https://github.com/IJHack/QtPass/pull/222) ([jounathaen](https://github.com/jounathaen)) - UI Improvements [\#220](https://github.com/IJHack/QtPass/pull/220) ([jounathaen](https://github.com/jounathaen)) - creating password store directory, if it doesnot exists, de_DE translation fixes and removed obsolete translations [\#216](https://github.com/IJHack/QtPass/pull/216) ([YoshiMan](https://github.com/YoshiMan)) ## [v1.1.6](https://github.com/IJHack/QtPass/tree/v1.1.6) (2016-12-02) [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.1.5...v1.1.6) **Implemented enhancements:** - Feedback on copy button use [\#229](https://github.com/IJHack/QtPass/issues/229) - Clickable URLs + open in default browser [\#226](https://github.com/IJHack/QtPass/issues/226) - Deselecting password re-opens the file [\#221](https://github.com/IJHack/QtPass/issues/221) - Copy password button should include tooltip to say why, when disabled [\#214](https://github.com/IJHack/QtPass/issues/214) - QtPass starts by searching for -psn_0_12345 on macOS [\#213](https://github.com/IJHack/QtPass/issues/213) - Copy after timeout [\#189](https://github.com/IJHack/QtPass/issues/189) - Feature Request: Copy template fields with button [\#133](https://github.com/IJHack/QtPass/issues/133) - Cannot create top level folder [\#127](https://github.com/IJHack/QtPass/issues/127) - Feature: moving items \(reordering folders\) [\#116](https://github.com/IJHack/QtPass/issues/116) **Fixed bugs:** - Regression with new view mode when using templates and URLs [\#223](https://github.com/IJHack/QtPass/issues/223) - Problems with high dpi screen [\#217](https://github.com/IJHack/QtPass/issues/217) - Hangs forever on Generate GnuPG keypair [\#215](https://github.com/IJHack/QtPass/issues/215) - recent change to passworddialog.cpp [\#188](https://github.com/IJHack/QtPass/issues/188) - Re-opening entry in QtPass on Windows does not put login or URL values back in the right place [\#183](https://github.com/IJHack/QtPass/issues/183) **Closed issues:** - Click does not stick [\#233](https://github.com/IJHack/QtPass/issues/233) - double-click on Treeview does not open the edit dialouge [\#228](https://github.com/IJHack/QtPass/issues/228) - Windows - Enable GPG SSH Authentication [\#225](https://github.com/IJHack/QtPass/issues/225) - We need autotype . . [\#65](https://github.com/IJHack/QtPass/issues/65) ## [v1.1.5](https://github.com/IJHack/QtPass/tree/v1.1.5) (2016-10-19) [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.1.4...v1.1.5) **Implemented enhancements:** - I translated for Simplified Chinese. [\#208](https://github.com/IJHack/QtPass/issues/208) - Short fullname hangs QtPass keypair generation process for infinite time [\#202](https://github.com/IJHack/QtPass/issues/202) - More options for password generation [\#98](https://github.com/IJHack/QtPass/issues/98) - Git hangs on windows [\#71](https://github.com/IJHack/QtPass/issues/71) **Fixed bugs:** - view box is trimming whitespace [\#210](https://github.com/IJHack/QtPass/issues/210) **Closed issues:** - PREFIX is now really a prefix [\#185](https://github.com/IJHack/QtPass/issues/185) - QtPass, Git and windows [\#173](https://github.com/IJHack/QtPass/issues/173) **Merged pull requests:** - Allow SSH links [\#211](https://github.com/IJHack/QtPass/pull/211) ([cgonzalez](https://github.com/cgonzalez)) - Increase maximum password length to 255 [\#209](https://github.com/IJHack/QtPass/pull/209) ([vladimiroff](https://github.com/vladimiroff)) - Password templates [\#207](https://github.com/IJHack/QtPass/pull/207) ([jounathaen](https://github.com/jounathaen)) - Updated German Translation [\#206](https://github.com/IJHack/QtPass/pull/206) ([jounathaen](https://github.com/jounathaen)) - Italian translation [\#204](https://github.com/IJHack/QtPass/pull/204) ([dakk](https://github.com/dakk)) - keygendialog email and name validition \(issue 202\) [\#203](https://github.com/IJHack/QtPass/pull/203) ([dakk](https://github.com/dakk)) - Lookup validity field to check if keys are valid [\#201](https://github.com/IJHack/QtPass/pull/201) ([thotypous](https://github.com/thotypous)) - Fix spelling error [\#200](https://github.com/IJHack/QtPass/pull/200) ([innir](https://github.com/innir)) ## [v1.1.4](https://github.com/IJHack/QtPass/tree/v1.1.4) (2016-09-26) [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.1.3...v1.1.4) **Implemented enhancements:** - Re-assign permissions when adding users [\#161](https://github.com/IJHack/QtPass/issues/161) - Main window immediately closes upon app launch [\#139](https://github.com/IJHack/QtPass/issues/139) **Fixed bugs:** - German umlauts fails [\#192](https://github.com/IJHack/QtPass/issues/192) - Error after change configuration [\#190](https://github.com/IJHack/QtPass/issues/190) - Bug: Special characters in Template [\#131](https://github.com/IJHack/QtPass/issues/131) - Character encoding issue with GPG key [\#101](https://github.com/IJHack/QtPass/issues/101) - saved password '§' turns to '§' when copied to clipboard or shown when editing [\#91](https://github.com/IJHack/QtPass/issues/91) **Closed issues:** - Signed releases [\#186](https://github.com/IJHack/QtPass/issues/186) - Why it's not listed in wikipedia.org/wiki/List_of_password_managers ? [\#164](https://github.com/IJHack/QtPass/issues/164) - Bitdefender blocks installation and quarantines the .exe and .ink [\#138](https://github.com/IJHack/QtPass/issues/138) **Merged pull requests:** - issue 91 bugfix [\#199](https://github.com/IJHack/QtPass/pull/199) ([asalamon74](https://github.com/asalamon74)) - issue 101 bugfix [\#198](https://github.com/IJHack/QtPass/pull/198) ([asalamon74](https://github.com/asalamon74)) - Czech translation [\#195](https://github.com/IJHack/QtPass/pull/195) ([svetlemodry](https://github.com/svetlemodry)) ## [v1.1.3](https://github.com/IJHack/QtPass/tree/v1.1.3) (2016-06-10) [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.1.2...v1.1.3) **Fixed bugs:** - edit of password broken with active "Automatically push" [\#177](https://github.com/IJHack/QtPass/issues/177) - Clipboard not cleared when quitting or killing application [\#171](https://github.com/IJHack/QtPass/issues/171) - Hide content doesn't work when using templates [\#160](https://github.com/IJHack/QtPass/issues/160) **Closed issues:** - Add a \(small\) manpage [\#174](https://github.com/IJHack/QtPass/issues/174) ## [v1.1.2](https://github.com/IJHack/QtPass/tree/v1.1.2) (2016-06-10) [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.1.1...v1.1.2) **Implemented enhancements:** - qtpass on windows, space in front of URL and Username [\#182](https://github.com/IJHack/QtPass/issues/182) **Fixed bugs:** - Deletion of folder doesn't work on Debian/GNU Linux [\#181](https://github.com/IJHack/QtPass/issues/181) **Closed issues:** - gpg: decryption failed: No secret key [\#179](https://github.com/IJHack/QtPass/issues/179) - "gpg-agent: command get_passphrase failed: No such file or directory" [\#156](https://github.com/IJHack/QtPass/issues/156) **Merged pull requests:** - add Appdata file and update desktop file [\#178](https://github.com/IJHack/QtPass/pull/178) ([daveol](https://github.com/daveol)) - HTTPS everywhere [\#176](https://github.com/IJHack/QtPass/pull/176) ([da2x](https://github.com/da2x)) - Fix build issues with MSVC2015 on Windows [\#175](https://github.com/IJHack/QtPass/pull/175) ([msvi](https://github.com/msvi)) ## [v1.1.1](https://github.com/IJHack/QtPass/tree/v1.1.1) (2016-04-04) [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.1.0...v1.1.1) **Implemented enhancements:** - Signed binaries [\#149](https://github.com/IJHack/QtPass/issues/149) - Icon theme and Cinnamon [\#146](https://github.com/IJHack/QtPass/issues/146) - Bind a key to the clear action [\#142](https://github.com/IJHack/QtPass/issues/142) - Installation dependencies [\#140](https://github.com/IJHack/QtPass/issues/140) - All text input fields need example text & edit dialogue changes [\#85](https://github.com/IJHack/QtPass/issues/85) - OSX: Qt-window closed only reappears when 'active' and using tray incon [\#77](https://github.com/IJHack/QtPass/issues/77) **Fixed bugs:** - Spelling bug: German translation of push and pull [\#110](https://github.com/IJHack/QtPass/issues/110) - gpg: decryption failed: No secret key [\#92](https://github.com/IJHack/QtPass/issues/92) **Closed issues:** - Remove outdated Debian packaging [\#165](https://github.com/IJHack/QtPass/issues/165) - Same name for file and folder [\#159](https://github.com/IJHack/QtPass/issues/159) - Icons don't work on nixos [\#157](https://github.com/IJHack/QtPass/issues/157) - gpg: Sorry, we are in batchmode - can't get input [\#151](https://github.com/IJHack/QtPass/issues/151) **Merged pull requests:** - lupdate and Russian translation [\#170](https://github.com/IJHack/QtPass/pull/170) ([ahippo](https://github.com/ahippo)) - Remove path to password store in commit message and a leading space. [\#169](https://github.com/IJHack/QtPass/pull/169) ([ahippo](https://github.com/ahippo)) - Use --secure for pwgen and add more configurable options [\#168](https://github.com/IJHack/QtPass/pull/168) ([ahippo](https://github.com/ahippo)) - Remove Debian packaging [\#166](https://github.com/IJHack/QtPass/pull/166) ([innir](https://github.com/innir)) - update gl_Es [\#162](https://github.com/IJHack/QtPass/pull/162) ([xmgz](https://github.com/xmgz)) - Two UI Tweaks [\#158](https://github.com/IJHack/QtPass/pull/158) ([lftl](https://github.com/lftl)) - configwindow.ui default/start tab set to "settings" [\#154](https://github.com/IJHack/QtPass/pull/154) ([jounathaen](https://github.com/jounathaen)) - FAQ update concerning button-icons on cinnamon [\#153](https://github.com/IJHack/QtPass/pull/153) ([jounathaen](https://github.com/jounathaen)) ## [v1.1.0](https://github.com/IJHack/QtPass/tree/v1.1.0) (2016-01-25) [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.0.6...v1.1.0) **Implemented enhancements:** - Clear text input: use system icon instead of x [\#84](https://github.com/IJHack/QtPass/issues/84) - System Icons on Buttons and double-click on treeView [\#124](https://github.com/IJHack/QtPass/pull/124) ([jounathaen](https://github.com/jounathaen)) **Closed issues:** - \[resolved\] Error in compiling macOS El capitan [\#148](https://github.com/IJHack/QtPass/issues/148) **Merged pull requests:** - Pre 1.1 mixing [\#145](https://github.com/IJHack/QtPass/pull/145) ([annejan](https://github.com/annejan)) - RPM Spec file updates [\#137](https://github.com/IJHack/QtPass/pull/137) ([muff1nman](https://github.com/muff1nman)) - swedish translations [\#135](https://github.com/IJHack/QtPass/pull/135) ([ralphtheninja](https://github.com/ralphtheninja)) ## [v1.0.6](https://github.com/IJHack/QtPass/tree/v1.0.6) (2016-01-03) [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.0.5...v1.0.6) **Implemented enhancements:** - Feature: Always on top [\#118](https://github.com/IJHack/QtPass/issues/118) - Option to show minimized instance [\#99](https://github.com/IJHack/QtPass/issues/99) **Fixed bugs:** - Bug: deleted record stays in memory [\#117](https://github.com/IJHack/QtPass/issues/117) **Closed issues:** - SIGSEGV in MainWindow::executeWrapper on clean install [\#122](https://github.com/IJHack/QtPass/issues/122) **Merged pull requests:** - improved the German translation [\#134](https://github.com/IJHack/QtPass/pull/134) ([retokromer](https://github.com/retokromer)) - qrand always generating the same sequence of passwords [\#129](https://github.com/IJHack/QtPass/pull/129) ([treat1](https://github.com/treat1)) - some improvements [\#126](https://github.com/IJHack/QtPass/pull/126) ([retokromer](https://github.com/retokromer)) - added one translation [\#125](https://github.com/IJHack/QtPass/pull/125) ([retokromer](https://github.com/retokromer)) - initial attempt to create a RPM spec file [\#121](https://github.com/IJHack/QtPass/pull/121) ([bram-ivs](https://github.com/bram-ivs)) - Cleanup and coding standards [\#120](https://github.com/IJHack/QtPass/pull/120) ([annejan](https://github.com/annejan)) - Modified the clipboard logic to allow for on-demand copy to clipboard. [\#119](https://github.com/IJHack/QtPass/pull/119) ([jonhanks](https://github.com/jonhanks)) ## [v1.0.5](https://github.com/IJHack/QtPass/tree/v1.0.5) (2015-11-18) [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.0.4...v1.0.5) **Fixed bugs:** - using pwgen adds carriage-return [\#115](https://github.com/IJHack/QtPass/issues/115) - Enhancement: color code Git results [\#111](https://github.com/IJHack/QtPass/issues/111) **Merged pull requests:** - Fix bug that prints "Unknown error" to the terminal [\#113](https://github.com/IJHack/QtPass/pull/113) ([dvaerum](https://github.com/dvaerum)) ## [v1.0.4](https://github.com/IJHack/QtPass/tree/v1.0.4) (2015-11-03) [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.0.3...v1.0.4) **Implemented enhancements:** - Add support for RightToLeft languages [\#108](https://github.com/IJHack/QtPass/issues/108) ## [v1.0.3](https://github.com/IJHack/QtPass/tree/v1.0.3) (2015-10-25) [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.0.2...v1.0.3) **Implemented enhancements:** - Get PREFIX variable from environment [\#106](https://github.com/IJHack/QtPass/issues/106) - Password file named `git` returns error [\#105](https://github.com/IJHack/QtPass/issues/105) **Merged pull requests:** - Get PREFIX variable from environment [\#104](https://github.com/IJHack/QtPass/pull/104) ([jorti](https://github.com/jorti)) - spanish translations added [\#103](https://github.com/IJHack/QtPass/pull/103) ([mrpnkt](https://github.com/mrpnkt)) ## [v1.0.2](https://github.com/IJHack/QtPass/tree/v1.0.2) (2015-09-24) [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.0.1...v1.0.2) **Closed issues:** - Generate password: Floating point exception \(core dumped\) [\#102](https://github.com/IJHack/QtPass/issues/102) - A way to indicate the installation prefix is needed [\#100](https://github.com/IJHack/QtPass/issues/100) - IPv4 URLs are non-clickable [\#97](https://github.com/IJHack/QtPass/issues/97) - app crashes when "Use pwgen" is unselected, and "Generate" is clicked. [\#95](https://github.com/IJHack/QtPass/issues/95) - Some minor improvements on the templating part [\#93](https://github.com/IJHack/QtPass/issues/93) - app crashes with variant of "pwgen" app [\#90](https://github.com/IJHack/QtPass/issues/90) ## [v1.0.1](https://github.com/IJHack/QtPass/tree/v1.0.1) (2015-08-09) [Full Changelog](https://github.com/IJHack/QtPass/compare/v1.0.0...v1.0.1) **Implemented enhancements:** - Users setup - key colours could be improved [\#82](https://github.com/IJHack/QtPass/issues/82) **Closed issues:** - When QtPass starts, focus search input box [\#89](https://github.com/IJHack/QtPass/issues/89) - Clear the password display after some time [\#86](https://github.com/IJHack/QtPass/issues/86) - Auto push/pull [\#83](https://github.com/IJHack/QtPass/issues/83) - qtpass doesn't commit deletes to Git [\#81](https://github.com/IJHack/QtPass/issues/81) - Always crashes while using the quick-search input [\#79](https://github.com/IJHack/QtPass/issues/79) - Git initialisation [\#72](https://github.com/IJHack/QtPass/issues/72) - Initialising new repo's doesn't work correctly [\#55](https://github.com/IJHack/QtPass/issues/55) - gpg: Sorry, no terminal at all requested - can't get input [\#18](https://github.com/IJHack/QtPass/issues/18) **Merged pull requests:** - Issue 86 clear panel [\#87](https://github.com/IJHack/QtPass/pull/87) ([karlgrz](https://github.com/karlgrz)) - Update FAQ for Yubikey NEO helper in .bashrc for Ubuntu [\#80](https://github.com/IJHack/QtPass/pull/80) ([karlgrz](https://github.com/karlgrz)) - \[WIP\] Call 'pass Git init' on creation of password-store when useGit [\#78](https://github.com/IJHack/QtPass/pull/78) ([dennisdegreef](https://github.com/dennisdegreef)) ## [v1.0.0](https://github.com/IJHack/QtPass/tree/v1.0.0) (2015-08-01) [Full Changelog](https://github.com/IJHack/QtPass/compare/v0.9.2...v1.0.0) **Closed issues:** - Yubikey Neo Pin entry not working properly on Ubuntu 15.04 [\#73](https://github.com/IJHack/QtPass/issues/73) **Merged pull requests:** - Updating hungarian localisation [\#76](https://github.com/IJHack/QtPass/pull/76) ([damnlie](https://github.com/damnlie)) - added DE translations [\#74](https://github.com/IJHack/QtPass/pull/74) ([Friedy](https://github.com/Friedy)) ## [v0.9.2](https://github.com/IJHack/QtPass/tree/v0.9.2) (2015-07-30) [Full Changelog](https://github.com/IJHack/QtPass/compare/v0.9.1...v0.9.2) **Closed issues:** - Show expiration date in key setup [\#70](https://github.com/IJHack/QtPass/issues/70) ## [v0.9.1](https://github.com/IJHack/QtPass/tree/v0.9.1) (2015-07-29) [Full Changelog](https://github.com/IJHack/QtPass/compare/v0.9.0...v0.9.1) **Closed issues:** - Minimize on startup. [\#69](https://github.com/IJHack/QtPass/issues/69) - tray icon in xfce [\#58](https://github.com/IJHack/QtPass/issues/58) - Git intergration [\#57](https://github.com/IJHack/QtPass/issues/57) - Weird characters in filenames breaks loading gpg files [\#10](https://github.com/IJHack/QtPass/issues/10) ## [v0.9.0](https://github.com/IJHack/QtPass/tree/v0.9.0) (2015-07-17) [Full Changelog](https://github.com/IJHack/QtPass/compare/v0.8.6...v0.9.0) **Closed issues:** - Request: Integrate qtpass with pwgen for generating passwords. [\#68](https://github.com/IJHack/QtPass/issues/68) ## [v0.8.6](https://github.com/IJHack/QtPass/tree/v0.8.6) (2015-07-17) [Full Changelog](https://github.com/IJHack/QtPass/compare/v0.8.5.1...v0.8.6) **Closed issues:** - Copy password by Ctrl+C [\#60](https://github.com/IJHack/QtPass/issues/60) - Remember window size and vertical pane width [\#59](https://github.com/IJHack/QtPass/issues/59) - Multiline Editing [\#34](https://github.com/IJHack/QtPass/issues/34) **Merged pull requests:** - To make building successfull wi Desktop Qt 5.4.0 MSVC2012 OpenGL 32bit [\#67](https://github.com/IJHack/QtPass/pull/67) ([annejan](https://github.com/annejan)) ## [v0.8.5.1](https://github.com/IJHack/QtPass/tree/v0.8.5.1) (2015-07-08) [Full Changelog](https://github.com/IJHack/QtPass/compare/v0.8.5...v0.8.5.1) ## [v0.8.5](https://github.com/IJHack/QtPass/tree/v0.8.5) (2015-07-08) [Full Changelog](https://github.com/IJHack/QtPass/compare/v0.8.4...v0.8.5) **Closed issues:** - Won't compile on Kubuntu 15.10 [\#61](https://github.com/IJHack/QtPass/issues/61) - Hanging process gives weird effects [\#56](https://github.com/IJHack/QtPass/issues/56) - Directory separator actually broken by 208171fd09c55ad765fdf4fa1de9a7f0757fa72d [\#53](https://github.com/IJHack/QtPass/issues/53) **Merged pull requests:** - Many deadlocks and other nasty bugfixes [\#64](https://github.com/IJHack/QtPass/pull/64) ([annejan](https://github.com/annejan)) - Mention qt5-default package in readme [\#62](https://github.com/IJHack/QtPass/pull/62) ([lorrin](https://github.com/lorrin)) - Some hacks I needed for portable gpg4win release [\#54](https://github.com/IJHack/QtPass/pull/54) ([rdoeffinger](https://github.com/rdoeffinger)) ## [v0.8.4](https://github.com/IJHack/QtPass/tree/v0.8.4) (2015-06-11) [Full Changelog](https://github.com/IJHack/QtPass/compare/v0.8.3...v0.8.4) **Closed issues:** - QtPass does not detect GPG installation [\#50](https://github.com/IJHack/QtPass/issues/50) - Cannot create new folders [\#48](https://github.com/IJHack/QtPass/issues/48) - Better error handling when no pass or gpg found initially [\#13](https://github.com/IJHack/QtPass/issues/13) **Merged pull requests:** - Develop [\#52](https://github.com/IJHack/QtPass/pull/52) ([annejan](https://github.com/annejan)) - Minor thingies [\#51](https://github.com/IJHack/QtPass/pull/51) ([beefcurtains](https://github.com/beefcurtains)) ## [v0.8.3](https://github.com/IJHack/QtPass/tree/v0.8.3) (2015-06-09) [Full Changelog](https://github.com/IJHack/QtPass/compare/v0.8.2...v0.8.3) **Merged pull requests:** - Bugfixes [\#49](https://github.com/IJHack/QtPass/pull/49) ([rdoeffinger](https://github.com/rdoeffinger)) ## [v0.8.2](https://github.com/IJHack/QtPass/tree/v0.8.2) (2015-05-27) [Full Changelog](https://github.com/IJHack/QtPass/compare/v0.8.1...v0.8.2) **Closed issues:** - Typo in 37f17f3808c1c97bd72c165a530c67a4bfb82edb? [\#45](https://github.com/IJHack/QtPass/issues/45) - Signing of keys from user management [\#41](https://github.com/IJHack/QtPass/issues/41) **Merged pull requests:** - Provide more information in user list. [\#47](https://github.com/IJHack/QtPass/pull/47) ([rdoeffinger](https://github.com/rdoeffinger)) - Enable C++11 and use it to simplify loops. [\#46](https://github.com/IJHack/QtPass/pull/46) ([rdoeffinger](https://github.com/rdoeffinger)) ## [v0.8.1](https://github.com/IJHack/QtPass/tree/v0.8.1) (2015-05-06) [Full Changelog](https://github.com/IJHack/QtPass/compare/c2eb3dff58e4de577f6c250ad225d42f762b6c26...v0.8.1) **Fixed bugs:** - Some items not found on first search [\#8](https://github.com/IJHack/QtPass/issues/8) **Closed issues:** - compiling qtpass on ubuntu 15.04 - fails due to newer qmake version [\#43](https://github.com/IJHack/QtPass/issues/43) - QProcess::start: Process is already running [\#40](https://github.com/IJHack/QtPass/issues/40) - Extra line breaks seem to be added to the \(HTML\) output [\#39](https://github.com/IJHack/QtPass/issues/39) - Missing develop branch and release testing [\#38](https://github.com/IJHack/QtPass/issues/38) - Windows WebDAV broken by 24f8dec3c203921f765e923e6ae6a4069b8cf50a [\#36](https://github.com/IJHack/QtPass/issues/36) - .gpg-id file not added to Git [\#35](https://github.com/IJHack/QtPass/issues/35) - Icon filenames [\#31](https://github.com/IJHack/QtPass/issues/31) - `GNUPGHOME` environment variable [\#30](https://github.com/IJHack/QtPass/issues/30) - Feature: webdav alternative to Git [\#28](https://github.com/IJHack/QtPass/issues/28) - Windows: not working due to pointless use of "sh" [\#16](https://github.com/IJHack/QtPass/issues/16) - Windows: support static build and enable ASLR and NX [\#15](https://github.com/IJHack/QtPass/issues/15) - Some paths to executables are printed when starting up [\#11](https://github.com/IJHack/QtPass/issues/11) **Merged pull requests:** - SingleApplication per user and leading newline removed from output [\#44](https://github.com/IJHack/QtPass/pull/44) ([annejan](https://github.com/annejan)) - User filtering and many fixes [\#42](https://github.com/IJHack/QtPass/pull/42) ([annejan](https://github.com/annejan)) - Re-enable Windows WebDAV support. [\#37](https://github.com/IJHack/QtPass/pull/37) ([rdoeffinger](https://github.com/rdoeffinger)) - User robustness [\#33](https://github.com/IJHack/QtPass/pull/33) ([rdoeffinger](https://github.com/rdoeffinger)) - Add WebDAV support. [\#29](https://github.com/IJHack/QtPass/pull/29) ([rdoeffinger](https://github.com/rdoeffinger)) - Add nosingleapp config. [\#27](https://github.com/IJHack/QtPass/pull/27) ([rdoeffinger](https://github.com/rdoeffinger)) - Add Makefile with commands to make a binary release ZIP file. [\#25](https://github.com/IJHack/QtPass/pull/25) ([rdoeffinger](https://github.com/rdoeffinger)) - Start process only after we finished disabling UI elements etc. [\#24](https://github.com/IJHack/QtPass/pull/24) ([rdoeffinger](https://github.com/rdoeffinger)) - Support for editing .gpg-id via GUI with public keyring list. [\#23](https://github.com/IJHack/QtPass/pull/23) ([rdoeffinger](https://github.com/rdoeffinger)) - More proper support for subdirectories. [\#22](https://github.com/IJHack/QtPass/pull/22) ([rdoeffinger](https://github.com/rdoeffinger)) - Russian translation \(+typo fixed\) [\#20](https://github.com/IJHack/QtPass/pull/20) ([mexus](https://github.com/mexus)) - Windows-related fixes. [\#17](https://github.com/IJHack/QtPass/pull/17) ([rdoeffinger](https://github.com/rdoeffinger)) - Deal with "special" characters [\#14](https://github.com/IJHack/QtPass/pull/14) ([JiCiT](https://github.com/JiCiT)) - galician and spanish localization files created [\#12](https://github.com/IJHack/QtPass/pull/12) ([xmgz](https://github.com/xmgz)) - Update localization_hu_HU.ts [\#9](https://github.com/IJHack/QtPass/pull/9) ([damnlie](https://github.com/damnlie)) - Replace which invocations with actual path resolution code [\#7](https://github.com/IJHack/QtPass/pull/7) ([shitbangs](https://github.com/shitbangs)) - Added Swedish and Polish localization to resources [\#6](https://github.com/IJHack/QtPass/pull/6) ([iamtew](https://github.com/iamtew)) - Swedish localization [\#5](https://github.com/IJHack/QtPass/pull/5) ([iamtew](https://github.com/iamtew)) - Update localization_hu_HU.ts [\#4](https://github.com/IJHack/QtPass/pull/4) ([reesenemesis](https://github.com/reesenemesis)) - Update localization_hu_HU.ts [\#3](https://github.com/IJHack/QtPass/pull/3) ([reesenemesis](https://github.com/reesenemesis)) - [pass](http://www.passwordstore.org/) [\#2](https://github.com/IJHack/QtPass/pull/2) ([guaka](https://github.com/guaka)) - Beginning of German translation [\#1](https://github.com/IJHack/QtPass/pull/1) ([mwfc](https://github.com/mwfc)) QtPass-1.6.0/CODE_OF_CONDUCT.md000066400000000000000000000063161516714562600155530ustar00rootroot00000000000000# Contributor Covenant Code of Conduct ## Our Pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards Examples of behavior that contributes to creating a positive environment include: - Using welcoming and inclusive language - Being respectful of differing viewpoints and experiences - Gracefully accepting constructive criticism - Focusing on what is best for the community - Showing empathy towards other community members Examples of unacceptable behavior by participants include: - The use of sexualized language or imagery and unwelcome sexual attention or advances - Public or private harassment - Publishing others' private information, such as a physical or electronic address, without explicit permission - Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project email address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at . All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [homepage]: https://www.contributor-covenant.org For answers to common questions about this code of conduct, see QtPass-1.6.0/CONTRIBUTING.md000066400000000000000000000026651516714562600152100ustar00rootroot00000000000000# Contributing Make sure you have read the [FAQ](FAQ.md) Thank you for wanting to contribute to making QtPass awesome. ## Pull Request Process 1. Ensure install or build dependencies and artifacts are not committed. 2. When adding big new features or changes to the build tool, update the [README.md](README.md) to reflect those. 3. Make sure you update all of the CI configs if needed. These run on every Pull Request. 4. Increase the version numbers in relevant files when applicable. The versioning scheme we use is [SemVer](https://semver.org/). 5. You may merge the Pull Request once you have the sign-off of one other developer, or if you do not have permission to do that, you may request a reviewer to merge it for you. ## Translations QtPass uses [Weblate](https://hosted.weblate.org/projects/qtpass/qtpass/) for translations. To add a new language: - Add your language code to `src/qtpass.pro` under TRANSLATIONS - Run `qmake6` to generate the translation files - Edit the `.ts` file with Qt Linguist: `linguist localization/qtpass_xx_YY.ts` Qt Linguist has helpful [in-context translation options](https://doc.qt.io/qt-5/linguist-translators.html). ## Getting Help - Open an [issue](https://github.com/IJHack/QtPass/issues) for bugs or feature requests - Email [help@qtpass.org](mailto:help@qtpass.org) for general questions ## License QtPass is released under the GNU GPL v3.0 license. QtPass-1.6.0/Doxyfile000066400000000000000000004071361516714562600144670ustar00rootroot00000000000000# Doxyfile 1.16.1 # This file describes the settings to be used by the documentation system # Doxygen (www.doxygen.org) for a project. # # All text after a double hash (##) is considered a comment and is placed in # front of the TAG it is preceding. # # All text after a single hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). # # Note: # # Use Doxygen to compare the used configuration file with the template # configuration file: # doxygen -x [configFile] # Use Doxygen to compare the used configuration file with the template # configuration file without replacing the environment variables or CMake type # replacement variables: # doxygen -x_noenv [configFile] #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the configuration # file that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # https://www.gnu.org/software/libiconv/ for the list of possible encodings. # The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by # double-quotes, unless you are using Doxywizard) that should identify the # project for which the documentation is generated. This name is used in the # title of most generated pages and in a few other places. # The default value is: My Project. PROJECT_NAME = QtPass # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version # control system is used. PROJECT_NUMBER = 1.5.1 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewers a # quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = "Multi-platform GUI for pass, the standard unix password manager." # With the PROJECT_LOGO tag one can specify a logo or an icon that is included # in the documentation. The maximum height of the logo should not exceed 55 # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. PROJECT_LOGO = ./artwork/doc-icon.png # With the PROJECT_ICON tag one can specify an icon that is included in the tabs # when the HTML document is shown. Doxygen will copy the logo to the output # directory. PROJECT_ICON = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where Doxygen was started. If # left blank the current directory will be used. OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES then Doxygen will create up to 4096 # sub-directories (in 2 levels) under the output directory of each output format # and will distribute the generated files over these directories. Enabling this # option can be useful when feeding Doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise cause # performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to # control the number of sub-directories. # The default value is: NO. CREATE_SUBDIRS = NO # Controls the number of sub-directories that will be created when # CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every # level increment doubles the number of directories, resulting in 4096 # directories at level 8 which is the default and also the maximum value. The # sub-directories are organized in 2 levels, the first level always has a fixed # number of 16 directories. # Minimum value: 0, maximum value: 8, default value: 8. # This tag requires that the tag CREATE_SUBDIRS is set to YES. CREATE_SUBDIRS_LEVEL = 8 # If the ALLOW_UNICODE_NAMES tag is set to YES, Doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode # U+3044. # The default value is: NO. ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by Doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian, # Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English # (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek, # Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with # English messages), Korean, Korean-en (Korean with English messages), Latvian, # Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, # Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, # Swedish, Turkish, Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES, Doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES, Doxygen will prepend the brief # description of a member or function before the detailed description # # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. # The default value is: YES. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator that is # used to form the text in various listings. Each string in this list, if found # as the leading text of the brief description, will be stripped from the text # and the result, after processing the whole list, is used as the annotated # text. Otherwise, the brief description is used as-is. If left blank, the # following values are used ($name is automatically replaced with the name of # the entity):The $name class, The $name widget, The $name file, is, provides, # specifies, contains, represents, a, an and the. ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. # The default value is: NO. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, Doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. # The default value is: NO. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES, Doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. FULL_PATH_NAMES = YES # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. # Stripping is only done if one of the specified strings matches the left-hand # part of the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which Doxygen is run is used as the path to # strip. # # Note that you can specify absolute paths here, but also relative paths, which # will be relative from the directory where Doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # path mentioned in the documentation of a class, which tells the reader which # header file to include in order to use a class. If left blank only the name of # the header file containing the class definition is used. Otherwise one should # specify the list of include paths that are normally passed to the compiler # using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, Doxygen will generate much shorter (but # less readable) file names. This can be useful if your file system doesn't # support long names like on DOS, Mac, or CD-ROM. # The default value is: NO. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen will interpret the # first line (until the first dot, question mark or exclamation mark) of a # Javadoc-style comment as the brief description. If set to NO, the Javadoc- # style will behave just like regular Qt-style comments (thus requiring an # explicit @brief command for a brief description.) # The default value is: NO. JAVADOC_AUTOBRIEF = NO # If the JAVADOC_BANNER tag is set to YES then Doxygen will interpret a line # such as # /*************** # as being the beginning of a Javadoc-style comment "banner". If set to NO, the # Javadoc-style will behave just like regular comments and it will not be # interpreted by Doxygen. # The default value is: NO. JAVADOC_BANNER = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will interpret the first # line (until the first dot, question mark or exclamation mark) of a Qt-style # comment as the brief description. If set to NO, the Qt-style will behave just # like regular Qt-style comments (thus requiring an explicit \brief command for # a brief description.) # The default value is: NO. QT_AUTOBRIEF = YES # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen treat a # multi-line C++ special comment block (i.e. a block of //! or /// comments) as # a brief description. This used to be the default behavior. The new default is # to treat a multi-line C++ comment block as a detailed description. Set this # tag to YES if you prefer the old behavior instead. # # Note that setting this tag to YES also means that rational rose comments are # not recognized any more. # The default value is: NO. MULTILINE_CPP_IS_BRIEF = NO # By default Python docstrings are displayed as preformatted text and Doxygen's # special commands cannot be used. By setting PYTHON_DOCSTRING to NO the # Doxygen's special commands can be used and the contents of the docstring # documentation blocks is shown as Doxygen documentation. # The default value is: YES. PYTHON_DOCSTRING = YES # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES then Doxygen will produce a new # page for each member. If set to NO, the documentation of a member will be part # of the file/class/namespace that contains it. # The default value is: NO. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen # uses this value to replace tabs by spaces in code fragments. # Minimum value: 1, maximum value: 16, default value: 4. TAB_SIZE = 4 # This tag can be used to specify a number of aliases that act as commands in # the documentation. An alias has the form: # name=value # For example adding # "sideeffect=@par Side Effects:^^" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading # "Side Effects:". Note that you cannot put \n's in the value part of an alias # to insert newlines (in the resulting output). You can put ^^ in the value part # of an alias to insert a newline as if a physical newline was in the original # file. When you need a literal { or } or , in the value part of an alias you # have to escape them by means of a backslash (\), this can lead to conflicts # with the commands \{ and \} for these it is advised to use the version @{ and # @} or use a double escape (\\{ and \\}) ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all # members will be omitted, etc. # The default value is: NO. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or # Python sources only. Doxygen will then generate output that is more tailored # for that language. For instance, namespaces will be presented as packages, # qualified scopes will look different, etc. # The default value is: NO. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources. Doxygen will then generate output that is tailored for Fortran. # The default value is: NO. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for VHDL. # The default value is: NO. OPTIMIZE_OUTPUT_VHDL = NO # Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice # sources only. Doxygen will then generate output that is more tailored for that # language. For instance, namespaces will be presented as modules, types will be # separated into more groups, etc. # The default value is: NO. OPTIMIZE_OUTPUT_SLICE = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by Doxygen: IDL, Java, JavaScript, # Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice, # VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: # FortranFree, unknown formatted Fortran: Fortran. In the later case the parser # tries to guess whether the code is fixed or free formatted code, this is the # default for Fortran type files). For instance to make Doxygen treat .inc files # as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by Doxygen. When specifying no_extension you should add # * to the FILE_PATTERNS. # # Note see also the list of default file extension mappings. EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then Doxygen pre-processes all comments # according to the Markdown format, which allows for more readable # documentation. See https://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by Doxygen, so you can # mix Doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. # The default value is: YES. MARKDOWN_SUPPORT = YES # If the MARKDOWN_STRICT tag is enabled then Doxygen treats text in comments as # Markdown formatted also in cases where Doxygen's native markup format # conflicts with that of Markdown. This is only relevant in cases where # backticks are used. Doxygen's native markup style allows a single quote to end # a text fragment started with a backtick and then treat it as a piece of quoted # text, whereas in Markdown such text fragment is treated as verbatim and only # ends when a second matching backtick is found. Also, Doxygen's native markup # format requires double quotes to be escaped when they appear in a backtick # section, whereas this is not needed for Markdown. # The default value is: YES. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. MARKDOWN_STRICT = YES # When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up # to that level are automatically included in the table of contents, even if # they do not have an id attribute. # Note: This feature currently applies only to Markdown headings. # Minimum value: 0, maximum value: 99, default value: 6. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. TOC_INCLUDE_HEADINGS = 0 # The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to # generate identifiers for the Markdown headings. Note: Every identifier is # unique. # Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a # sequence number starting at 0 and GITHUB use the lower case version of title # with any whitespace replaced by '-' and punctuation characters removed. # The default value is: DOXYGEN. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. MARKDOWN_ID_STYLE = DOXYGEN # When enabled Doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by putting a % sign in front of the word or # globally by setting AUTOLINK_SUPPORT to NO. Words listed in the # AUTOLINK_IGNORE_WORDS tag are excluded from automatic linking. # The default value is: YES. AUTOLINK_SUPPORT = YES # This tag specifies a list of words that, when matching the start of a word in # the documentation, will suppress auto links generation, if it is enabled via # AUTOLINK_SUPPORT. This list does not affect links explicitly created using # # or the \link or \ref commands. # This tag requires that the tag AUTOLINK_SUPPORT is set to YES. AUTOLINK_IGNORE_WORDS = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this # tag to YES in order to let Doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); # versus func(std::string) {}). This also makes the inheritance and # collaboration diagrams that involve STL classes more complete and accurate. # The default value is: NO. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. # The default value is: NO. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: # https://www.riverbankcomputing.com/software) sources only. Doxygen will parse # them like normal C++ but will assume all classes use public instead of private # inheritance when no explicit protection keyword is present. # The default value is: NO. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate # getter and setter methods for a property. Setting this option to YES will make # Doxygen to replace the get and set methods by a property in the documentation. # This will only work if the methods are indeed getting or setting a simple # type. If this is not the case, or you want to show the methods anyway, you # should set this option to NO. # The default value is: YES. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES then Doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. # The default value is: NO. DISTRIBUTE_GROUP_DOC = NO # If one adds a struct or class to a group and this option is enabled, then also # any nested class or struct is added to the same group. By default this option # is disabled and one has to add nested compounds explicitly via \ingroup. # The default value is: NO. GROUP_NESTED_COMPOUNDS = NO # Set the SUBGROUPING tag to YES to allow class member groups of the same type # (for instance a group of public functions) to be put as a subgroup of that # type (e.g. under the Public Functions section). Set it to NO to prevent # subgrouping. Alternatively, this can be done per class using the # \nosubgrouping command. # The default value is: YES. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions # are shown inside the group in which they are included (e.g. using \ingroup) # instead of on a separate page (for HTML and Man pages) or section (for LaTeX # and RTF). # # Note that this feature does not work in combination with # SEPARATE_MEMBER_PAGES. # The default value is: NO. INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions # with only public data fields or simple typedef fields will be shown inline in # the documentation of the scope in which they are defined (i.e. file, # namespace, or group documentation), provided this scope is documented. If set # to NO, structs, classes, and unions are shown on a separate page (for HTML and # Man pages) or section (for LaTeX and RTF). # The default value is: NO. INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or # enum is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically be # useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. # The default value is: NO. TYPEDEF_HIDES_STRUCT = NO # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This # cache is used to resolve symbols given their name and scope. Since this can be # an expensive process and often the same symbol appears multiple times in the # code, Doxygen keeps a cache of pre-resolved symbols. If the cache is too small # Doxygen will become slower. If the cache is too large, memory is wasted. The # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 # symbols. At the end of a run Doxygen will report the cache usage and suggest # the optimal cache size from a speed point of view. # Minimum value: 0, maximum value: 9, default value: 0. LOOKUP_CACHE_SIZE = 0 # The NUM_PROC_THREADS specifies the number of threads Doxygen is allowed to use # during processing. When set to 0 Doxygen will based this on the number of # cores available in the system. You can set it explicitly to a value larger # than 0 to get more control over the balance between CPU load and processing # speed. At this moment only the input processing can be done using multiple # threads. Since this is still an experimental feature the default is set to 1, # which effectively disables parallel processing. Please report any issues you # encounter. Generating dot graphs in parallel is controlled by the # DOT_NUM_THREADS setting. # Minimum value: 0, maximum value: 512, default value: 1. NUM_PROC_THREADS = 1 # If the TIMESTAMP tag is set different from NO then each generated page will # contain the date or date and time when the page was generated. Setting this to # NO can help when comparing the output of multiple runs. # Possible values are: YES, NO, DATETIME and DATE. # The default value is: NO. TIMESTAMP = NO #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES, Doxygen will assume all entities in # documentation are documented, even if no documentation was available. Private # class members and static file members will be hidden unless the # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. # Note: This will also disable the warnings about undocumented members that are # normally produced when WARNINGS is set to YES. # The default value is: NO. EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will # be included in the documentation. # The default value is: NO. EXTRACT_PRIVATE = NO # If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual # methods of a class will be included in the documentation. # The default value is: NO. EXTRACT_PRIV_VIRTUAL = NO # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. EXTRACT_PACKAGE = NO # If the EXTRACT_STATIC tag is set to YES, all static members of a file will be # included in the documentation. # The default value is: NO. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined # locally in source files will be included in the documentation. If set to NO, # only classes defined in header files are included. Does not have any effect # for Java sources. # The default value is: YES. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. If set to YES, local methods, # which are defined in the implementation section but not in the interface are # included in the documentation. If set to NO, only methods in the interface are # included. # The default value is: NO. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base name of # the file that contains the anonymous namespace. By default anonymous namespace # are hidden. # The default value is: NO. EXTRACT_ANON_NSPACES = NO # If this flag is set to YES, the name of an unnamed parameter in a declaration # will be determined by the corresponding definition. By default unnamed # parameters remain unnamed in the output. # The default value is: YES. RESOLVE_UNNAMED_PARAMS = YES # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation # section is generated. This option has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO, these classes will be included in the various overviews. This option # will also hide undocumented C++ concepts if enabled. This option has no effect # if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO # If the HIDE_UNDOC_NAMESPACES tag is set to YES, Doxygen will hide all # undocumented namespaces that are normally visible in the namespace hierarchy. # If set to NO, these namespaces will be included in the various overviews. This # option has no effect if EXTRACT_ALL is enabled. # The default value is: YES. HIDE_UNDOC_NAMESPACES = YES # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all friend # declarations. If set to NO, these declarations will be included in the # documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. If set to NO, these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation that is typed after a # \internal command is included. If the tag is set to NO then the documentation # will be excluded. Set it to YES to include the internal documentation. # The default value is: NO. INTERNAL_DOCS = NO # With the correct setting of option CASE_SENSE_NAMES Doxygen will better be # able to match the capabilities of the underlying filesystem. In case the # filesystem is case sensitive (i.e. it supports files in the same directory # whose names only differ in casing), the option must be set to YES to properly # deal with such files in case they appear in the input. For filesystems that # are not case sensitive the option should be set to NO to properly deal with # output files written for symbols that only differ in casing, such as for two # classes, one named CLASS and the other named Class, and to also support # references to files without having to specify the exact matching casing. On # Windows (including Cygwin) and macOS, users should typically set this option # to NO, whereas on Linux or other Unix flavors it should typically be set to # YES. # Possible values are: SYSTEM, NO and YES. # The default value is: SYSTEM. CASE_SENSE_NAMES = NO # If the HIDE_SCOPE_NAMES tag is set to NO then Doxygen will show members with # their full class and namespace scopes in the documentation. If set to YES, the # scope will be hidden. # The default value is: NO. HIDE_SCOPE_NAMES = NO # If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then Doxygen will # append additional text to a page's title, such as Class Reference. If set to # YES the compound reference will be hidden. # The default value is: NO. HIDE_COMPOUND_REFERENCE= NO # If the SHOW_HEADERFILE tag is set to YES then the documentation for a class # will show which file needs to be included to use the class. # The default value is: YES. SHOW_HEADERFILE = YES # If the SHOW_INCLUDE_FILES tag is set to YES then Doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. SHOW_INCLUDE_FILES = YES # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each # grouped member an include statement to the documentation, telling the reader # which file to include in order to use the member. # The default value is: NO. SHOW_GROUPED_MEMB_INC = NO # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. # The default value is: NO. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the # documentation for inline members. # The default value is: YES. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES then Doxygen will sort the # (detailed) documentation of file and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then Doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. Note that # this will also influence the order of the classes in the class list. # The default value is: NO. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then Doxygen will sort the # (brief and detailed) documentation of class members so that constructors and # destructors are listed first. If set to NO the constructors will appear in the # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief # member documentation. # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting # detailed member documentation. # The default value is: NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then Doxygen will sort the hierarchy # of group names into alphabetical order. If set to NO the group names will # appear in their defined order. # The default value is: NO. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by # fully-qualified names, including namespaces. If set to NO, the class list will # be sorted only by class name, not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the alphabetical # list. # The default value is: NO. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and Doxygen fails to do proper # type resolution of all parameters of a function it will reject a match between # the prototype and the implementation of a member function even if there is # only one candidate or it is obvious which candidate to choose by doing a # simple string match. By disabling STRICT_PROTO_MATCHING Doxygen will still # accept a match between prototype and implementation in such cases. # The default value is: NO. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo # list. This list is created by putting \todo commands in the documentation. # The default value is: YES. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test # list. This list is created by putting \test commands in the documentation. # The default value is: YES. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug # list. This list is created by putting \bug commands in the documentation. # The default value is: YES. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) # the deprecated list. This list is created by putting \deprecated commands in # the documentation. # The default value is: YES. GENERATE_DEPRECATEDLIST= YES # The GENERATE_REQUIREMENTS tag can be used to enable (YES) or disable (NO) the # requirements page. When enabled, this page is automatically created when at # least one comment block with a \requirement command appears in the input. # The default value is: YES. GENERATE_REQUIREMENTS = YES # The REQ_TRACEABILITY_INFO tag controls if traceability information is shown on # the requirements page (only relevant when using \requirement comment blocks). # The setting NO will disable the traceablility information altogether. The # setting UNSATISFIED_ONLY will show a list of requirements that are missing a # satisfies relation (through the command: \satisfies). Similarly the setting # UNVERIFIED_ONLY will show a list of requirements that are missing a verifies # relation (through the command: \verifies). Setting the tag to YES (the # default) will show both lists if applicable. # Possible values are: YES, NO, UNSATISFIED_ONLY and UNVERIFIED_ONLY. # The default value is: YES. # This tag requires that the tag GENERATE_REQUIREMENTS is set to YES. REQ_TRACEABILITY_INFO = YES # The ENABLED_SECTIONS tag can be used to enable conditional documentation # sections, marked by \if ... \endif and \cond # ... \endcond blocks. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the # initial value of a variable or macro / define can have for it to appear in the # documentation. If the initializer consists of more lines than specified here # it will be hidden. Use a value of 0 to hide initializers completely. The # appearance of the value of individual variables and macros / defines can be # controlled using \showinitializer or \hideinitializer command in the # documentation regardless of this setting. # Minimum value: 0, maximum value: 10000, default value: 30. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at # the bottom of the documentation of classes and structs. If set to YES, the # list will mention the files that were used to generate the documentation. # The default value is: YES. SHOW_USED_FILES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This # will remove the Files entry from the Quick Index and from the Folder Tree View # (if specified). # The default value is: YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces # page. This will remove the Namespaces entry from the Quick Index and from the # Folder Tree View (if specified). # The default value is: YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # Doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command command input-file, where command is the value of the # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided # by Doxygen. Whatever the program writes to standard output is used as the file # version. For an example see the documentation. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by Doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. To create the layout file # that represents Doxygen's defaults, run Doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml # will be used as the name of the layout file. See also section "Changing the # layout of pages" for information. # # Note that if you run Doxygen from a directory containing a file called # DoxygenLayout.xml, Doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib # extension is automatically appended if omitted. This requires the bibtex tool # to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # search path. See also \cite for info how to create references. CITE_BIB_FILES = # The EXTERNAL_TOOL_PATH tag can be used to extend the search path (PATH # environment variable) so that external tools such as latex and gs can be # found. # Note: Directories specified with EXTERNAL_TOOL_PATH are added in front of the # path already specified by the PATH variable, and are added in the order # specified. # Note: This option is particularly useful for macOS version 14 (Sonoma) and # higher, when running Doxygen from Doxywizard, because in this case any user- # defined changes to the PATH are ignored. A typical example on macOS is to set # EXTERNAL_TOOL_PATH = /Library/TeX/texbin /usr/local/bin # together with the standard path, the full search path used by doxygen when # launching external tools will then become # PATH=/Library/TeX/texbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin EXTERNAL_TOOL_PATH = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated to # standard output by Doxygen. If QUIET is set to YES this implies that the # messages are off. # The default value is: NO. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated to standard error (stderr) by Doxygen. If WARNINGS is set to YES # this implies that the warnings are on. # # Tip: Turn warnings on while writing the documentation. # The default value is: YES. WARNINGS = YES # If the WARN_IF_UNDOCUMENTED tag is set to YES then Doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, Doxygen will generate warnings for # potential errors in the documentation, such as documenting some parameters in # a documented function twice, or documenting parameters that don't exist or # using markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES # If WARN_IF_INCOMPLETE_DOC is set to YES, Doxygen will warn about incomplete # function parameter documentation. If set to NO, Doxygen will accept that some # parameters have no documentation without warning. # The default value is: YES. WARN_IF_INCOMPLETE_DOC = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return # value. If set to NO, Doxygen will only warn about wrong parameter # documentation, but not about the absence of documentation. If EXTRACT_ALL is # set to YES then this flag will automatically be disabled. See also # WARN_IF_INCOMPLETE_DOC # The default value is: NO. WARN_NO_PARAMDOC = NO # If WARN_IF_UNDOC_ENUM_VAL option is set to YES, Doxygen will warn about # undocumented enumeration values. If set to NO, Doxygen will accept # undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: NO. WARN_IF_UNDOC_ENUM_VAL = NO # If WARN_LAYOUT_FILE option is set to YES, Doxygen will warn about issues found # while parsing the user defined layout file, such as missing or wrong elements. # See also LAYOUT_FILE for details. If set to NO, problems with the layout file # will be suppressed. # The default value is: YES. WARN_LAYOUT_FILE = YES # If the WARN_AS_ERROR tag is set to YES then Doxygen will immediately stop when # a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS # then Doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but # at the end of the Doxygen process Doxygen will return with a non-zero status. # If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then Doxygen behaves # like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined Doxygen will not # write the warning messages in between other messages but write them at the end # of a run, in case a WARN_LOGFILE is defined the warning messages will be # besides being in the defined file also be shown at the end of a run, unless # the WARN_LOGFILE is defined as - i.e. standard output (stdout) in that case # the behavior will remain as with the setting FAIL_ON_WARNINGS. # Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT. # The default value is: NO. WARN_AS_ERROR = NO # The WARN_FORMAT tag determines the format of the warning messages that Doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) # See also: WARN_LINE_FORMAT # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" # In the $text part of the WARN_FORMAT command it is possible that a reference # to a more specific place is given. To make it easier to jump to this place # (outside of Doxygen) the user can define a custom "cut" / "paste" string. # Example: # WARN_LINE_FORMAT = "'vi $file +$line'" # See also: WARN_FORMAT # The default value is: at line $line of file $file. WARN_LINE_FORMAT = "at line $line of file $file" # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard # error (stderr). In case the file specified cannot be opened for writing the # warning and error messages are written to standard error. When as file - is # specified the warning and error messages are written to standard output # (stdout). WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag is used to specify the files and/or directories that contain # documented source files. You may enter file names like myfile.cpp or # directories like /usr/src/myproject. Separate the files or directories with # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. INPUT = . # This tag can be used to specify the character encoding of the source files # that Doxygen parses. Internally Doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv # documentation (see: # https://www.gnu.org/software/libiconv/) for the list of possible encodings. # See also: INPUT_FILE_ENCODING # The default value is: UTF-8. INPUT_ENCODING = UTF-8 # This tag can be used to specify the character encoding of the source files # that Doxygen parses. The INPUT_FILE_ENCODING tag can be used to specify # character encoding on a per file pattern basis. Doxygen will compare the file # name with each pattern and apply the encoding instead of the default # INPUT_ENCODING if there is a match. The character encodings are a list of the # form: pattern=encoding (like *.php=ISO-8859-1). # See also: INPUT_ENCODING for further information on supported encodings. INPUT_FILE_ENCODING = # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # read by Doxygen. # # Note the list of default checked file patterns might differ from the list of # default file extension mappings. # # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm, # *.cpp, *.cppm, *.ccm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, # *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, # *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be # provided as Doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, # *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = *.cpp \ *.h \ *.md # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. # The default value is: NO. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # # Note that relative paths are relative to the directory from which Doxygen is # run. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. # The default value is: NO. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # ANamespace::AClass, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include # command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank all # files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude commands # irrespective of the value of the RECURSIVE tag. # The default value is: NO. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or directories # that contain images that are to be included in the documentation (see the # \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that Doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command: # # # # where is the value of the INPUT_FILTER tag, and is the # name of an input file. Doxygen will then use the output that the filter # program writes to standard output. If FILTER_PATTERNS is specified, this tag # will be ignored. # # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. # # Note that Doxygen will use the data processed and written to standard output # for further processing, therefore nothing else, like debug statements or used # commands (so in case of a Windows batch file always use @echo OFF), should be # written to standard output. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by Doxygen. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: pattern=filter # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by Doxygen. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will also be used to filter the input files that are used for # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). # The default value is: NO. FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and # it is also possible to disable source filtering for a specific pattern using # *.ext= (so without naming a filter). # This tag requires that the tag FILTER_SOURCE_FILES is set to YES. FILTER_SOURCE_PATTERNS = # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that # is part of the input, its contents will be placed on the main page # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the Doxygen output. USE_MDFILE_AS_MAINPAGE = # If the IMPLICIT_DIR_DOCS tag is set to YES, any README.md file found in sub- # directories of the project's root, is used as the documentation for that sub- # directory, except when the README.md starts with a \dir, \page or \mainpage # command. If set to NO, the README.md file needs to start with an explicit \dir # command in order to be used as directory documentation. # The default value is: YES. IMPLICIT_DIR_DOCS = YES # The Fortran standard specifies that for fixed formatted Fortran code all # characters from position 72 are to be considered as comment. A common # extension is to allow longer lines before the automatic comment starts. The # setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can # be processed before the automatic comment starts. # Minimum value: 7, maximum value: 10000, default value: 72. FORTRAN_COMMENT_AFTER = 72 #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will be # generated. Documented entities will be cross-referenced with these sources. # # Note: To get rid of all source code in the generated output, make sure that # also VERBATIM_HEADERS is set to NO. # The default value is: NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body of functions, # multi-line macros, enums or list initialized variables directly into the # documentation. # The default value is: NO. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES will instruct Doxygen to hide any # special comment blocks from generated source code fragments. Normal C, C++ and # Fortran comments will always remain visible. # The default value is: YES. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented # entity all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES then for each documented function # all documented entities called/used by that function will be listed. # The default value is: NO. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set # to YES then the hyperlinks from functions in REFERENCES_RELATION and # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will # link to the documentation. # The default value is: YES. REFERENCES_LINK_SOURCE = YES # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the # source code will show a tooltip with additional information such as prototype, # brief description and links to the definition and documentation. Since this # will make the HTML file larger and loading of large files a bit slower, you # can opt to disable this feature. # The default value is: YES. # This tag requires that the tag SOURCE_BROWSER is set to YES. SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of Doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system # (see https://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. # # To use it do the following: # - Install the latest version of global # - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # # Doxygen will invoke htags (and that will in turn invoke gtags), so these # tools must be available from the command line (i.e. in the search path). # # The result: instead of the source browser generated by Doxygen, the links to # source code will now point to the output of htags. # The default value is: NO. # This tag requires that the tag SOURCE_BROWSER is set to YES. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set the YES then Doxygen will generate a # verbatim copy of the header file for each class for which an include is # specified. Set to NO to disable this. # See also: Section \class. # The default value is: YES. VERBATIM_HEADERS = YES # If the CLANG_ASSISTED_PARSING tag is set to YES then Doxygen will use the # clang parser (see: # http://clang.llvm.org/) for more accurate parsing at the cost of reduced # performance. This can be particularly helpful with template rich C++ code for # which Doxygen's built-in parser lacks the necessary type information. # Note: The availability of this option depends on whether or not Doxygen was # generated with the -Duse_libclang=ON option for CMake. # The default value is: NO. CLANG_ASSISTED_PARSING = NO # If the CLANG_ASSISTED_PARSING tag is set to YES and the CLANG_ADD_INC_PATHS # tag is set to YES then Doxygen will add the directory of each input to the # include path. # The default value is: YES. # This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. CLANG_ADD_INC_PATHS = YES # If clang assisted parsing is enabled you can provide the compiler with command # line options that you would normally use when invoking the compiler. Note that # the include paths will already be set by Doxygen for the files and directories # specified with INPUT and INCLUDE_PATH. # This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. CLANG_OPTIONS = # If clang assisted parsing is enabled you can provide the clang parser with the # path to the directory containing a file called compile_commands.json. This # file is the compilation database (see: # http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the # options used when the source files were built. This is equivalent to # specifying the -p option to a clang tool, such as clang-check. These options # will then be passed to the parser. Any options specified with CLANG_OPTIONS # will be added as well. # Note: The availability of this option depends on whether or not Doxygen was # generated with the -Duse_libclang=ON option for CMake. CLANG_DATABASE_PATH = #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all # compounds will be generated. Enable this if the project contains a lot of # classes, structs, unions or interfaces. # The default value is: YES. ALPHABETICAL_INDEX = YES # The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes) # that should be ignored while generating the index headers. The IGNORE_PREFIX # tag works for classes, function and member names. The entity will be placed in # the alphabetical list under the first letter of the entity name that remains # after removing the prefix. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES, Doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of # it. # The default directory is: html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_OUTPUT = docs # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each # generated HTML page (for example: .htm, .php, .asp). # The default value is: .html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a user-defined HTML header file for # each generated HTML page. If the tag is left blank Doxygen will generate a # standard header. # # To get valid HTML the header file that includes any scripts and style sheets # that Doxygen needs, which is dependent on the configuration options used (e.g. # the setting GENERATE_TREEVIEW). It is highly recommended to start with a # default header using # doxygen -w html new_header.html new_footer.html new_stylesheet.css # YourConfigFile # and then modify the file new_header.html. See also section "Doxygen usage" # for information on how to generate the default header that Doxygen normally # uses. # Note: The header is subject to change so you typically have to regenerate the # default header when upgrading to a newer version of Doxygen. For a description # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank Doxygen will generate a standard # footer. See HTML_HEADER for more information on how to generate a default # footer and what special commands can be used inside the footer. See also # section "Doxygen usage" for information on how to generate the default footer # that Doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of # the HTML output. If left blank Doxygen will generate a default style sheet. # See also section "Doxygen usage" for information on how to generate the style # sheet that Doxygen normally uses. # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as # it is more robust and this tag (HTML_STYLESHEET) will in the future become # obsolete. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined # cascading style sheets that are included after the standard style sheets # created by Doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the # standard style sheet and is therefore more robust against future updates. # Doxygen will copy the style sheet files to the output directory. # Note: The order of the extra style sheet files is of importance (e.g. the last # style sheet in the list overrules the setting of the previous ones in the # list). # Note: Since the styling of scrollbars can currently not be overruled in # Webkit/Chromium, the styling will be left out of the default doxygen.css if # one or more extra stylesheets have been specified. So if scrollbar # customization is desired it has to be added explicitly. For an example see the # documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that the # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_FILES = # The HTML_COLORSTYLE tag can be used to specify if the generated HTML output # should be rendered with a dark or light theme. # Possible values are: LIGHT always generates light mode output, DARK always # generates dark mode output, AUTO_LIGHT automatically sets the mode according # to the user preference, uses light mode if no preference is set (the default), # AUTO_DARK automatically sets the mode according to the user preference, uses # dark mode if no preference is set and TOGGLE allows a user to switch between # light and dark mode via a button. # The default value is: AUTO_LIGHT. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE = AUTO_LIGHT # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to # this color. Hue is specified as an angle on a color-wheel, see # https://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. # Minimum value: 0, maximum value: 359, default value: 220. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors # in the HTML output. For a value of 0 the output will use gray-scales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the # luminance component of the colors in the HTML output. Values below 100 # gradually make the output lighter, whereas values above 100 make the output # darker. The value divided by 100 is the actual gamma applied, so 80 represents # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not # change the gamma. # Minimum value: 40, maximum value: 240, default value: 80. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that # are dynamically created via JavaScript. If disabled, the navigation index will # consists of multiple levels of tabs that are statically embedded in every HTML # page. Disable this option to support browsers that do not have JavaScript, # like the Qt help browser. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_MENUS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_SECTIONS = YES # If the HTML_CODE_FOLDING tag is set to YES then classes and functions can be # dynamically folded and expanded in the generated HTML source code. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_CODE_FOLDING = YES # If the HTML_COPY_CLIPBOARD tag is set to YES then Doxygen will show an icon in # the top right corner of code and text fragments that allows the user to copy # its content to the clipboard. Note this only works if supported by the browser # and the web page is served via a secure context (see: # https://www.w3.org/TR/secure-contexts/), i.e. using the https: or file: # protocol. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COPY_CLIPBOARD = YES # Doxygen stores a couple of settings persistently in the browser (via e.g. # cookies). By default these settings apply to all HTML pages generated by # Doxygen across all projects. The HTML_PROJECT_COOKIE tag can be used to store # the settings under a project specific key, such that the user preferences will # be stored separately. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_PROJECT_COOKIE = # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to # such a level that at most the specified number of entries are visible (unless # a fully collapsed tree already exceeds this amount). So setting the number of # entries 1 will produce a full collapsed tree by default. 0 is a special value # representing an infinite number of entries and will result in a full expanded # tree by default. # Minimum value: 0, maximum value: 9999, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development # environment (see: # https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To # create a documentation set, Doxygen will generate a Makefile in the HTML # output directory. Running make will produce the docset in that directory and # running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy # genXcode/_index.html for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_DOCSET = NO # This tag determines the name of the docset feed. A documentation feed provides # an umbrella under which multiple documentation sets from a single provider # (such as a company or product suite) can be grouped. # The default value is: Doxygen generated docs. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_FEEDNAME = "Doxygen generated docs" # This tag determines the URL of the docset feed. A documentation feed provides # an umbrella under which multiple documentation sets from a single provider # (such as a company or product suite) can be grouped. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_FEEDURL = # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_BUNDLE_ID = org.doxygen.Project # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. # The default value is: org.doxygen.Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. # The default value is: Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then Doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop # on Windows. In the beginning of 2021 Microsoft took the original page, with # a.o. the download links, offline (the HTML help workshop was already many # years in maintenance mode). You can download the HTML help workshop from the # web archives at Installation executable (see: # http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo # ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe). # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by Doxygen into a single compiled HTML file (.chm). Compiled HTML # files are now used as the Windows 98 help format, and will replace the old # Windows help format (.hlp) on all Windows platforms in the future. Compressed # HTML files also contain an index, a table of contents, and you can search for # words in the documentation. The HTML workshop also contains a viewer for # compressed HTML files. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_HTMLHELP = NO # The CHM_FILE tag can be used to specify the file name of the resulting .chm # file. You can add a path in front of the file if the result should not be # written to the html output directory. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path # including file name) of the HTML help compiler (hhc.exe). If non-empty, # Doxygen will try to run the HTML help compiler on the generated index.hhp. # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated # (YES) or that it should be included in the main .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO # The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = # The BINARY_TOC flag controls whether a binary table of contents is generated # (YES) or a normal table of contents (NO) in the .chm file. Furthermore it # enables the Previous and Next buttons. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members to # the table of contents of the HTML help documentation and to the tree view. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. TOC_EXPAND = NO # The SITEMAP_URL tag is used to specify the full URL of the place where the # generated documentation will be placed on the server by the user during the # deployment of the documentation. The generated sitemap is called sitemap.xml # and placed on the directory specified by HTML_OUTPUT. In case no SITEMAP_URL # is specified no sitemap is generated. For information about the sitemap # protocol see https://www.sitemaps.org # This tag requires that the tag GENERATE_HTML is set to YES. SITEMAP_URL = # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help # (.qch) of the generated HTML documentation. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify # the file name of the resulting .qch file. The path specified is relative to # the HTML output folder. # This tag requires that the tag GENERATE_QHP is set to YES. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace # (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual # Folders (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom # Filters (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom # Filters (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = # The QHG_LOCATION tag can be used to specify the location (absolute path # including file name) of Qt's qhelpgenerator. If non-empty Doxygen will try to # run qhelpgenerator on the generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be # generated, together with the HTML files, they form an Eclipse help plugin. To # install this plugin and make it available under the help contents menu in # Eclipse, the contents of the directory containing the HTML and XML files needs # to be copied into the plugins directory of eclipse. The name of the directory # within the plugins directory should be the same as the ECLIPSE_DOC_ID value. # After copying Eclipse needs to be restarted before the help appears. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_ECLIPSEHELP = NO # A unique identifier for the Eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have this # name. Each documentation set should have its own identifier. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ECLIPSE_DOC_ID = org.doxygen.Project # If you want full control over the layout of the generated HTML pages it might # be necessary to disable the index and replace it with your own. The # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top # of each HTML page. A value of NO enables the index and the value YES disables # it. Since the tabs in the index contain the same information as the navigation # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. If the tag # value is set to YES, a side panel will be generated containing a tree-like # index structure (just like the one that is generated for HTML Help). For this # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can # further fine tune the look of the index (see "Fine-tuning the output"). As an # example, the default style sheet generated by Doxygen has an example that # shows how to put an image at the root of the tree instead of the PROJECT_NAME. # Since the tree basically has more details information than the tab index, you # could consider setting DISABLE_INDEX to YES when enabling this option. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = NO # When GENERATE_TREEVIEW is set to YES, the PAGE_OUTLINE_PANEL option determines # if an additional navigation panel is shown at the right hand side of the # screen, displaying an outline of the contents of the main page, similar to # e.g. https://developer.android.com/reference If GENERATE_TREEVIEW is set to # NO, this option has no effect. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. PAGE_OUTLINE_PANEL = YES # When GENERATE_TREEVIEW is set to YES, the FULL_SIDEBAR option determines if # the side bar is limited to only the treeview area (value NO) or if it should # extend to the full height of the window (value YES). Setting this to YES gives # a layout similar to e.g. https://docs.readthedocs.io with more room for # contents, but less room for the project logo, title, and description. If # GENERATE_TREEVIEW is set to NO, this option has no effect. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. FULL_SIDEBAR = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # Doxygen will group on one line in the generated HTML documentation. # # Note that a value of 0 will completely suppress the enum values from appearing # in the overview section. # Minimum value: 0, maximum value: 20, default value: 4. # This tag requires that the tag GENERATE_HTML is set to YES. ENUM_VALUES_PER_LINE = 4 # When the SHOW_ENUM_VALUES tag is set doxygen will show the specified # enumeration values besides the enumeration mnemonics. # The default value is: NO. SHOW_ENUM_VALUES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used # to set the initial width (in pixels) of the frame in which the tree is shown. # Minimum value: 0, maximum value: 1500, default value: 250. # This tag requires that the tag GENERATE_HTML is set to YES. TREEVIEW_WIDTH = 250 # If the EXT_LINKS_IN_WINDOW option is set to YES, Doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. EXT_LINKS_IN_WINDOW = NO # If the OBFUSCATE_EMAILS tag is set to YES, Doxygen will obfuscate email # addresses. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. OBFUSCATE_EMAILS = YES # If the HTML_FORMULA_FORMAT option is set to svg, Doxygen will use the pdf2svg # tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see # https://inkscape.org) to generate formulas as SVG images instead of PNGs for # the HTML output. These images will generally look nicer at scaled resolutions. # Possible values are: png (the default) and svg (looks nicer but requires the # pdf2svg or inkscape tool). # The default value is: png. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FORMULA_FORMAT = png # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful # Doxygen run you need to manually remove any form_*.png images from the HTML # output directory to force them to be regenerated. # Minimum value: 8, maximum value: 50, default value: 10. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_FONTSIZE = 10 # The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands # to create new LaTeX commands to be used in formulas as building blocks. See # the section "Including formulas" for details. FORMULA_MACROFILE = # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see # https://www.mathjax.org) which uses client side JavaScript for the rendering # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path # to it using the MATHJAX_RELPATH option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. USE_MATHJAX = NO # With MATHJAX_VERSION it is possible to specify the MathJax version to be used. # Note that the different versions of MathJax have different requirements with # regards to the different settings, so it is possible that also other MathJax # settings have to be changed when switching between the different MathJax # versions. # Possible values are: MathJax_2, MathJax_3 and MathJax_4. # The default value is: MathJax_2. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_VERSION = MathJax_2 # When MathJax is enabled you can set the default output format to be used for # the MathJax output. For more details about the output format see MathJax # version 2 (see: # https://docs.mathjax.org/en/v2.7/output.html), MathJax version 3 (see: # https://docs.mathjax.org/en/v3.2/output/index.html) and MathJax version 4 # (see: # https://docs.mathjax.org/en/v4.0/output/index.htm). # Possible values are: HTML-CSS (which is slower, but has the best # compatibility. This is the name for Mathjax version 2, for MathJax version 3 # this will be translated into chtml), NativeMML (i.e. MathML. Only supported # for MathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This # is the name for Mathjax version 3, for MathJax version 2 this will be # translated into HTML-CSS) and SVG. # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_FORMAT = HTML-CSS # When MathJax is enabled you need to specify the location relative to the HTML # output directory using the MATHJAX_RELPATH option. For Mathjax version 2 the # destination directory should contain the MathJax.js script. For instance, if # the mathjax directory is located at the same level as the HTML output # directory, then MATHJAX_RELPATH should be ../mathjax.s For Mathjax versions 3 # and 4 the destination directory should contain the tex-.js script # (where is either chtml or svg). The default value points to the # MathJax Content Delivery Network so you can quickly see the result without # installing MathJax. However, it is strongly recommended to install a local # copy of MathJax from https://www.mathjax.org before deployment. The default # value is: # - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2 # - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3 # - in case of MathJax version 4: https://cdn.jsdelivr.net/npm/mathjax@4 # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example # for MathJax version 2 (see https://docs.mathjax.org/en/v2.7/tex.html): # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # For example for MathJax version 3 (see # https://docs.mathjax.org/en/v3.2/input/tex/extensions/): # MATHJAX_EXTENSIONS = ams # For example for MathJax version 4 (see # https://docs.mathjax.org/en/v4.0/input/tex/extensions/): # MATHJAX_EXTENSIONS = units # Note that for Mathjax version 4 quite a few extensions are already # automatically loaded. To disable a package in Mathjax version 4 one can use # the package name prepended with a minus sign (- like MATHJAX_EXTENSIONS += # -textmacros) # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with JavaScript pieces # of code that will be used on startup of the MathJax code. See the Mathjax site # for more details: # - MathJax version 2 (see: # https://docs.mathjax.org/en/v2.7/) # - MathJax version 3 (see: # https://docs.mathjax.org/en/v3.2/) # - MathJax version 4 (see: # https://docs.mathjax.org/en/v4.0/) For an example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_CODEFILE = # When the SEARCHENGINE tag is enabled Doxygen will generate a search box for # the HTML output. The underlying search engine uses JavaScript and DHTML and # should work on any modern browser. Note that when using HTML help # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) # there is already a search function so this one should typically be disabled. # For large projects the JavaScript based search engine can be slow, then # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to # search using the keyboard; to jump to the search box use + S # (what the is depends on the OS and browser, but it is typically # , /