diff --git a/.github/workflows/hugo.yaml b/.github/workflows/hugo.yaml new file mode 100644 index 00000000..f9373e0b --- /dev/null +++ b/.github/workflows/hugo.yaml @@ -0,0 +1,77 @@ +# Sample workflow for building and deploying a Hugo site to GitHub Pages +name: Deploy Hugo site to ergol.org + +on: + # Runs on pushes targeting the default branch + push: + branches: + - main + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +# Default to bash +defaults: + run: + shell: bash + +jobs: + # Build job + build: + runs-on: ubuntu-latest + env: + HUGO_VERSION: 0.123.0 + steps: + - name: Install Hugo CLI + run: | + wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \ + && sudo dpkg -i ${{ runner.temp }}/hugo.deb + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: recursive + fetch-depth: 0 + - name: Setup Pages + id: pages + uses: actions/configure-pages@v4 + - name: Install Node.js dependencies + run: "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true" + - name: Build with Hugo + env: + # For maximum backward compatibility with Hugo modules + HUGO_ENVIRONMENT: production + HUGO_ENV: production + run: | + hugo \ + --gc \ + --minify \ + --baseURL "${{ steps.pages.outputs.base_url }}/" + - name: Upload artifact + uses: actions/upload-pages-artifact@v2 + with: + path: ./public + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v3 + diff --git a/.gitignore b/.gitignore index 00394718..a2e78499 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ build dist *.vim* *.custom +www/public diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..64c791a3 --- /dev/null +++ b/LICENSE @@ -0,0 +1,4 @@ +Copyright © 2024 Léo Cazenave +This work is free. You can redistribute it and/or modify it under the +terms of the Do What The Fuck You Want To Public License, Version 2, +as published by Sam Hocevar. See http://www.wtfpl.net/ for more details. diff --git a/Makefile b/Makefile index e55e0b45..c51e3332 100644 --- a/Makefile +++ b/Makefile @@ -1,16 +1,16 @@ all: - @for file in data/layouts/*.toml; do \ - kalamine build $$file --out "data/layouts/$$(basename $${file%.*}).json"; \ + @for file in layouts/*.toml; do \ + kalamine build $$file --out "layouts/$$(basename $${file%.*}).json"; \ done - @for file in data/layouts/*.yaml; do \ - kalamine build $$file --out "data/layouts/$$(basename $${file%.*}).json"; \ + @for file in layouts/*.yaml; do \ + kalamine build $$file --out "layouts/$$(basename $${file%.*}).json"; \ done watch: - @inotifywait -m data/layouts -e close_write | while read -r _path _action file; do \ + @inotifywait -m layouts -e close_write | while read -r _path _action file; do \ case $$file in \ - *yaml) kalamine build "data/layouts/$$file" --out "data/layouts/$$(basename "$${file%.*}").json";; \ - *toml) kalamine build "data/layouts/$$file" --out "data/layouts/$$(basename "$${file%.*}").json";; \ + *yaml) kalamine build "layouts/$$file" --out "layouts/$$(basename "$${file%.*}").json";; \ + *toml) kalamine build "layouts/$$file" --out "layouts/$$(basename "$${file%.*}").json";; \ esac \ done @@ -23,12 +23,12 @@ clean: # the install/uninstall targets below require Kalamine v0.4.2+ install: - @echo "Installer script for XKB (GNU/Linux). Requires super-user privileges." + @echo "Installer script for XKB (GNU/Linux)." @echo - xkalamine install data/layouts/ergol.yaml + xkalamine install layouts/ergol.toml uninstall: - @echo "Unistaller script for XKB (GNU/Linux). Requires super-user privileges." + @echo "Unistaller script for XKB (GNU/Linux)." @echo xkalamine remove fr/ergol @echo diff --git a/README.md b/README.md index 6df4f49c..c8193f58 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [**(in English hereinafter)**](#English) Une disposition de clavier ergonomique optimisée pour le français, l’anglais et -la programmation. +le code. - Disposition **optimisée pour le français _et_ l’anglais**; - Couche AltGr optionnelle, optimisée pour l’enchaînement des symboles de @@ -68,7 +68,7 @@ pipx install kalamine Download the [layouts/ergol.toml][4] file in this repo and build the layout : ```bash -kalamine ergol.toml +kalamine build ergol.toml ``` You’ll get a `dist` folder containing all of the drivers. @@ -76,8 +76,8 @@ You’ll get a `dist` folder containing all of the drivers. Then, to install Ergo‑L, follow the [install section of Kalamine’s repo][3], and you should be good to go ! -[2]: https://github.com/fabi1cazenave/kalamine -[3]: https://github.com/fabi1cazenave/kalamine#installing-distributable-layouts +[2]: https://github.com/OneDeadKey/kalamine +[3]: https://github.com/OneDeadKey/kalamine#installing-distributable-layouts [4]: https://github.com/Nuclear-Squid/ergol/blob/master/layouts/ergol.toml [5]: https://github.com/pypa/pipx?tab=readme-ov-file#install-pipx @@ -98,6 +98,7 @@ Then switch to Ergo‑L using the following command: setxkbmap fr -variant ergol # Switch your keyboard layout to ergol ``` + Make Your Own ! -------------------------------------------------------------------------------- diff --git a/code/LICENSE b/code/LICENSE new file mode 100644 index 00000000..a23ee566 --- /dev/null +++ b/code/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018-2024 Fabien & Léo Cazenave + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/code/README.md b/code/README.md new file mode 100644 index 00000000..1f32677e --- /dev/null +++ b/code/README.md @@ -0,0 +1,7 @@ +The code here is linked with the OneDeadKey project. + +- layout-analyser.js will be contributed to [kalamine][1] +- x-keyboard.js has been taken *as is* from [x-keyboard][2] + +[1]: https://github.com/OneDeadKey/kalamine +[2]: https://github.com/OneDeadKey/x-keyboard diff --git a/js/collapsable-table.js b/code/collapsable-table.js similarity index 100% rename from js/collapsable-table.js rename to code/collapsable-table.js diff --git a/js/demo.js b/code/demo.js similarity index 100% rename from js/demo.js rename to code/demo.js diff --git a/js/dactylo.js b/code/duck-typist.js similarity index 96% rename from js/dactylo.js rename to code/duck-typist.js index c877db3d..5c8b3744 100644 --- a/js/dactylo.js +++ b/code/duck-typist.js @@ -51,9 +51,9 @@ window.addEventListener('DOMContentLoaded', () => { const gLayout = document.querySelector('#layout'); const gDict = document.querySelector('#dict'); - const gKeyList = document.querySelector('header .key_list'); - const gStatus = document.querySelector('header .status'); - const gQuacks = document.querySelector('header .quacks'); + const gKeyList = document.querySelector('.key_list'); + const gStatus = document.querySelector('.status'); + const gQuacks = document.querySelector('.quacks'); const gLesson = document.querySelector('#lesson'); const gInput = document; @@ -74,7 +74,7 @@ window.addEventListener('DOMContentLoaded', () => { // fetch a kalamine corpus: symbols, bigrams, trigrams const fetchNgrams = () => { const ngrams = gDict.value.split(',')[0]; - return fetch(`data/corpus/${ngrams}.json`) + return fetch(`../corpus/${ngrams}.json`) .then(response => response.json()) .then(data => { gDictionary.trigrams = Object.keys(data.trigrams); @@ -85,7 +85,7 @@ window.addEventListener('DOMContentLoaded', () => { // fetch MonkeyType words const fetchWords = () => { const words = gDict.value.split(',')[1]; - return fetch(`data/dicts/${words}.json`) + return fetch(`./${words}.json`) .then(response => response.json()) .then(data => { gDictionary.words = data.words; @@ -94,7 +94,7 @@ window.addEventListener('DOMContentLoaded', () => { // fetch a kalamine keyboard layout const fetchLayout = () => { - return fetch(`data/layouts/${gLayout.value}.json`) + return fetch(`../layouts/${gLayout.value}.json`) .then(response => response.json()) .then(layout => { gKeyboard.setKeyboardLayout(layout.keymap, layout.deadkeys, gGeometry.value); @@ -269,6 +269,8 @@ window.addEventListener('DOMContentLoaded', () => { gLessonLevel = level ? Number(level) : STARTING_LEVEL; gQuackCount = quacks ? Number(quacks) : 1; + window.location.hash = `#${gLayout.value}`; + Promise.all([fetchNgrams(), fetchWords(), fetchLayout()]) .then(setLessonLevel); }; diff --git a/js/heatmap.js b/code/layout-analyzer.js similarity index 99% rename from js/heatmap.js rename to code/layout-analyzer.js index acbd8e5f..21cabcd3 100644 --- a/js/heatmap.js +++ b/code/layout-analyzer.js @@ -455,7 +455,7 @@ window.addEventListener('DOMContentLoaded', () => { const setProp = (key, value) => { if (key === 'layout') { if (value) { - fetch(`data/layouts/${value}.json`) + fetch(`../layouts/${value}.json`) .then(response => response.json()) .then(data => { inputField.placeholder = `Zone de saisie ${value}`; @@ -479,7 +479,7 @@ window.addEventListener('DOMContentLoaded', () => { } } else if (key === 'corpus') { if (value && value !== corpusName) { - fetch(`data/corpus/${value}.json`) + fetch(`../corpus/${value}.json`) .then(response => response.json()) .then(data => { corpus = data.symbols; diff --git a/js/svg.js b/code/svg.js similarity index 100% rename from js/svg.js rename to code/svg.js diff --git a/js/x-keyboard.js b/code/x-keyboard.js similarity index 100% rename from js/x-keyboard.js rename to code/x-keyboard.js diff --git a/corpus/LICENSE b/corpus/LICENSE new file mode 100644 index 00000000..27bf1b16 --- /dev/null +++ b/corpus/LICENSE @@ -0,0 +1,301 @@ +THE FULL PROJECT GUTENBERG LICENSE + +PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK + +To protect the Project Gutenberg-tm mission of promoting the free distribution +of electronic works, by using or distributing this work (or any other work +associated in any way with the phrase “Project Gutenberg”), you agree to comply +with all the terms of the Full Project Gutenberg-tm License available with this +file or online at www.gutenberg.org/license. Section 1. General Terms of Use and +Redistributing Project Gutenberg-tm electronic works + +1.A. By reading or using any part of this Project Gutenberg-tm electronic work, +you indicate that you have read, understand, agree to and accept all the terms +of this license and intellectual property (trademark/copyright) agreement. If +you do not agree to abide by all the terms of this agreement, you must cease +using and return or destroy all copies of Project Gutenberg-tm electronic works +in your possession. If you paid a fee for obtaining a copy of or access to a +Project Gutenberg-tm electronic work and you do not agree to be bound by the +terms of this agreement, you may obtain a refund from the person or entity to +whom you paid the fee as set forth in paragraph 1.E.8. + +1.B. “Project Gutenberg” is a registered trademark. It may only be used on or +associated in any way with an electronic work by people who agree to be bound by +the terms of this agreement. There are a few things that you can do with most +Project Gutenberg-tm electronic works even without complying with the full terms +of this agreement. See paragraph 1.C below. There are a lot of things you can do +with Project Gutenberg-tm electronic works if you follow the terms of this +agreement and help preserve free future access to Project Gutenberg-tm +electronic works. See paragraph 1.E below. + +1.C. The Project Gutenberg Literary Archive Foundation (“the Foundation” or +PGLAF), owns a compilation copyright in the collection of Project Gutenberg-tm +electronic works. Nearly all the individual works in the collection are in the +public domain in the United States. If an individual work is unprotected by +copyright law in the United States and you are located in the United States, we +do not claim a right to prevent you from copying, distributing, performing, + displaying or creating derivative works based on the work as long as all + references to Project Gutenberg are removed. Of course, we hope that you + will support the Project Gutenberg-tm mission of promoting free access + to electronic works by freely sharing Project Gutenberg-tm works in + compliance with the terms of this agreement for keeping the Project + Gutenberg-tm name associated with the work. You can easily comply with + the terms of this agreement by keeping this work in the same format with + its attached full Project Gutenberg-tm License when you share it without + charge with others. + +[*] This particular work is one of the few individual works protected by +copyright law in the United States and most of the remainder of the world, +included in the Project Gutenberg collection with the permission of the +copyright holder. Information on the copyright owner for this particular work +and the terms of use imposed by the copyright holder on this work are set forth +at the beginning of this work. + +1.D. The copyright laws of the place where you are located also govern what you +can do with this work. Copyright laws in most countries are in a constant state +of change. If you are outside the United States, check the laws of your country +in addition to the terms of this agreement before downloading, copying, +displaying, performing, distributing or creating derivative works based on this +work or any other Project Gutenberg-tm work. The Foundation makes no +representations concerning the copyright status of any work in any country +outside the United States. + +1.E. Unless you have removed all references to Project Gutenberg: + +1.E.1. The following sentence, with active links to, or other immediate access +to, the full Project Gutenberg-tm License must appear prominently whenever any +copy of a Project Gutenberg-tm work (any work on which the phrase “Project +Gutenberg” appears, or with which the phrase “Project Gutenberg” is associated) +is accessed, displayed, performed, viewed, copied or distributed: + +This eBook is for the use of anyone anywhere in the United States and most other +parts of the world at no cost and with almost no restrictions whatsoever. You +may copy it, give it away or re-use it under the terms of the Project Gutenberg +License included with this eBook or online at www.gutenberg.org. If you are not +located in the United States, you’ll have to check the laws of the country where +you are located before using this ebook. + +1.E.2. If an individual Project Gutenberg-tm electronic work is derived from +texts not protected by U.S. copyright law (does not contain a notice indicating +that it is posted with permission of the copyright holder), the work can be +copied and distributed to anyone in the United States without paying any fees or +charges. If you are redistributing or providing access to a work with the phrase +“Project Gutenberg” associated with or appearing on the work, you must comply +either with the requirements of paragraphs 1.E.1 through 1.E.7 or obtain +permission for the use of the work and the Project Gutenberg-tm trademark as set +forth in paragraphs 1.E.8 or 1.E.9. + +1.E.3. If an individual Project Gutenberg-tm electronic work is posted with the +permission of the copyright holder, your use and distribution must comply with +both paragraphs 1.E.1 through 1.E.7 and any additional terms imposed by the +copyright holder. Additional terms will be linked to the Project Gutenberg-tm +License for all works posted with the permission of the copyright holder found +at the beginning of this work. + +1.E.4. Do not unlink or detach or remove the full Project Gutenberg-tm License +terms from this work, or any files containing a part of this work or any other +work associated with Project Gutenberg-tm. + +1.E.5. Do not copy, display, perform, distribute or redistribute this electronic +work, or any part of this electronic work, without prominently displaying the +sentence set forth in paragraph 1.E.1 with active links or immediate access to +the full terms of the Project Gutenberg-tm License. + +1.E.6. You may convert to and distribute this work in any binary, compressed, +marked up, nonproprietary or proprietary form, including any word processing or +hypertext form. However, if you provide access to or distribute copies of a +Project Gutenberg-tm work in a format other than “Plain Vanilla ASCII” or other +format used in the official version posted on the official Project Gutenberg-tm +web site (www.gutenberg.org), you must, at no additional cost, fee or expense to +the user, provide a copy, a means of exporting a copy, or a means of obtaining a +copy upon request, of the work in its original “Plain Vanilla ASCII” or other +form. Any alternate format must include the full Project Gutenberg-tm License as +specified in paragraph 1.E.1. + +1.E.7. Do not charge a fee for access to, viewing, displaying, performing, +copying or distributing any Project Gutenberg-tm works unless you comply with +paragraph 1.E.8 or 1.E.9. + +1.E.8. You may charge a reasonable fee for copies of or providing access to or +distributing Project Gutenberg-tm electronic works provided that + + You pay a royalty fee of 20% of the gross profits you derive from the use of + Project Gutenberg-tm works calculated using the method you already use to + calculate your applicable taxes. The fee is owed to the owner of the Project + Gutenberg-tm trademark, but he has agreed to donate royalties under this + paragraph to the Project Gutenberg Literary Archive Foundation. Royalty + payments must be paid within 60 days following each date on which you + prepare (or are legally required to prepare) your periodic tax returns. + Royalty payments should be clearly marked as such and sent to the Project + Gutenberg Literary Archive Foundation at the address specified in Section 4, + “Information about donations to the Project Gutenberg Literary Archive + Foundation.” + + You provide a full refund of any money paid by a user who notifies you in + writing (or by e-mail) within 30 days of receipt that s/he does not agree to + the terms of the full Project Gutenberg-tm License. You must require such a + user to return or destroy all copies of the works possessed in a physical + medium and discontinue all use of and all access to other copies of Project + Gutenberg-tm works. + + You provide, in accordance with paragraph 1.F.3, a full refund of any money + paid for a work or a replacement copy, if a defect in the electronic work is + discovered and reported to you within 90 days of receipt of the work. + + You comply with all other terms of this agreement for free distribution of + Project Gutenberg-tm works. + +1.E.9. If you wish to charge a fee or distribute a Project Gutenberg-tm +electronic work or group of works on different terms than are set forth in this +agreement, you must obtain permission in writing from both the Project Gutenberg +Literary Archive Foundation and The Project Gutenberg Trademark LLC, the owner +of the Project Gutenberg-tm trademark. Contact the Foundation as set forth in +Section 3 below. + +1.F. + +1.F.1. Project Gutenberg volunteers and employees expend considerable effort to +identify, do copyright research on, transcribe and proofread works not protected +by U.S. copyright law in creating the Project Gutenberg-tm collection. Despite +these efforts, Project Gutenberg-tm electronic works, and the medium on which +they may be stored, may contain “Defects,” such as, but not limited to, +incomplete, inaccurate or corrupt data, transcription errors, a copyright or +other intellectual property infringement, a defective or damaged disk or other +medium, a computer virus, or computer codes that damage or cannot be read by +your equipment. + +1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the “Right of +Replacement or Refund” described in paragraph 1.F.3, the Project Gutenberg +Literary Archive Foundation, the owner of the Project Gutenberg-tm trademark, +and any other party distributing a Project Gutenberg-tm electronic work under +this agreement, disclaim all liability to you for damages, costs and expenses, +including legal fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE, STRICT +LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE PROVIDED IN +PARAGRAPH 1.F.3. YOU AGREE THAT THE FOUNDATION, THE TRADEMARK OWNER, AND ANY +DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE LIABLE TO YOU FOR ACTUAL, DIRECT, +INDIRECT, CONSEQUENTIAL, PUNITIVE OR INCIDENTAL DAMAGES EVEN IF YOU GIVE NOTICE +OF THE POSSIBILITY OF SUCH DAMAGE. + +1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a defect in this +electronic work within 90 days of receiving it, you can receive a refund of the +money (if any) you paid for it by sending a written explanation to the person +you received the work from. If you received the work on a physical medium, you +must return the medium with your written explanation. The person or entity that +provided you with the defective work may elect to provide a replacement copy in +lieu of a refund. If you received the work electronically, the person or entity +providing it to you may choose to give you a second opportunity to receive the +work electronically in lieu of a refund. If the second copy is also defective, +you may demand a refund in writing without further opportunities to fix the +problem. + +1.F.4. Except for the limited right of replacement or refund set forth in +paragraph 1.F.3, this work is provided to you ‘AS-IS’, WITH NO OTHER WARRANTIES +OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF +MERCHANTABILITY OR FITNESS FOR ANY PURPOSE. + +1.F.5. Some states do not allow disclaimers of certain implied warranties or the +exclusion or limitation of certain types of damages. If any disclaimer or +limitation set forth in this agreement violates the law of the state applicable +to this agreement, the agreement shall be interpreted to make the maximum +disclaimer or limitation permitted by the applicable state law. The invalidity +or unenforceability of any provision of this agreement shall not void the +remaining provisions. + +1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation, the trademark +owner, any agent or employee of the Foundation, anyone providing copies of +Project Gutenberg-tm electronic works in accordance with this agreement, and any +volunteers associated with the production, promotion and distribution of Project +Gutenberg-tm electronic works, harmless from all liability, costs and expenses, +including legal fees, that arise directly or indirectly from any of the +following which you do or cause to occur: (a) distribution of this or any +Project Gutenberg-tm work, (b) alteration, modification, or additions or +deletions to any Project Gutenberg-tm work, and (c) any Defect you cause. +Section 2. Information about the Mission of Project Gutenberg-tm + +Project Gutenberg-tm is synonymous with the free distribution of electronic +works in formats readable by the widest variety of computers including obsolete, +old, middle-aged and new computers. It exists because of the efforts of hundreds +of volunteers and donations from people in all walks of life. + +Volunteers and financial support to provide volunteers with the assistance they +need are critical to reaching Project Gutenberg-tm’s goals and ensuring that the +Project Gutenberg-tm collection will remain freely available for generations to +come. In 2001, the Project Gutenberg Literary Archive Foundation was created to +provide a secure and permanent future for Project Gutenberg-tm and future +generations. To learn more about the Project Gutenberg Literary Archive +Foundation and how your efforts and donations can help, see Sections 3 and 4 and +the Foundation information page at www.gutenberg.org Section 3. Information +about the Project Gutenberg Literary Archive Foundation + +The Project Gutenberg Literary Archive Foundation is a non profit 501(c)(3) +educational corporation organized under the laws of the state of Mississippi and +granted tax exempt status by the Internal Revenue Service. The Foundation’s EIN +or federal tax identification number is 64-6221541. Contributions to the Project +Gutenberg Literary Archive Foundation are tax deductible to the full extent +permitted by U.S. federal laws and your state’s laws. + +The Foundation’s principal office is located at 4557 Melan Dr. S. Fairbanks, AK, +99712., but its volunteers and employees are scattered throughout numerous +locations. Its business office is located at 809 North 1500 West, Salt Lake +City, UT 84116, (801) 596-1887. Email contact links and up to date contact +information can be found at the Foundation’s web site and official page at +www.gutenberg.org/contact + +For additional contact information: + + Dr. Gregory B. Newby Chief Executive and Director gbnewby@pglaf.org + +Section 4. Information about Donations to the Project Gutenberg Literary Archive +Foundation + +Project Gutenberg-tm depends upon and cannot survive without wide spread public +support and donations to carry out its mission of increasing the number of +public domain and licensed works that can be freely distributed in machine +readable form accessible by the widest array of equipment including outdated +equipment. Many small donations ($1 to $5,000) are particularly important to +maintaining tax exempt status with the IRS. + +The Foundation is committed to complying with the laws regulating charities and +charitable donations in all 50 states of the United States. Compliance +requirements are not uniform and it takes a considerable effort, much paperwork +and many fees to meet and keep up with these requirements. We do not solicit +donations in locations where we have not received written confirmation of +compliance. To SEND DONATIONS or determine the status of compliance for any +particular state visit www.gutenberg.org/donate + +While we cannot and do not solicit contributions from states where we have not +met the solicitation requirements, we know of no prohibition against accepting +unsolicited donations from donors in such states who approach us with offers to +donate. + +International donations are gratefully accepted, but we cannot make any +statements concerning tax treatment of donations received from outside the +United States. U.S. laws alone swamp our small staff. + +Please check the Project Gutenberg Web pages for current donation methods and +addresses. Donations are accepted in a number of other ways including checks, +online payments and credit card donations. To donate, please visit: +www.gutenberg.org/donate Section 5. General Information About Project +Gutenberg-tm electronic works. + +Professor Michael S. Hart was the originator of the Project Gutenberg-tm concept +of a library of electronic works that could be freely shared with anyone. For +forty years, he produced and distributed Project Gutenberg-tm eBooks with only a +loose network of volunteer support. + +Project Gutenberg-tm eBooks are often created from several printed editions, all +of which are confirmed as not protected by copyright in the U.S. unless a +copyright notice is included. Thus, we do not necessarily keep eBooks in +compliance with any particular paper edition. + +Most people start at our Web site which has the main PG search facility: +www.gutenberg.org + +This Web site includes information about Project Gutenberg-tm, including how to +make donations to the Project Gutenberg Literary Archive Foundation, how to help +produce our new eBooks, and how to subscribe to our email newsletter to hear +about new eBooks. + +[*] This paragraph, after 1.C., is included only for copyrighted works. For +those, you must contact the copyright holder before any non-free use or removal +of the Project Gutenberg header. diff --git a/data/corpus/chardict.py b/corpus/chardict.py similarity index 100% rename from data/corpus/chardict.py rename to corpus/chardict.py diff --git a/data/corpus/en+fr.json b/corpus/en+fr.json similarity index 100% rename from data/corpus/en+fr.json rename to corpus/en+fr.json diff --git a/data/corpus/en+fr.txt b/corpus/en+fr.txt similarity index 100% rename from data/corpus/en+fr.txt rename to corpus/en+fr.txt diff --git a/data/corpus/en.json b/corpus/en.json similarity index 100% rename from data/corpus/en.json rename to corpus/en.json diff --git a/data/corpus/en.txt b/corpus/en.txt similarity index 100% rename from data/corpus/en.txt rename to corpus/en.txt diff --git a/data/corpus/fr.json b/corpus/fr.json similarity index 100% rename from data/corpus/fr.json rename to corpus/fr.json diff --git a/data/corpus/fr.txt b/corpus/fr.txt similarity index 100% rename from data/corpus/fr.txt rename to corpus/fr.txt diff --git a/data/corpus/merge.py b/corpus/merge.py similarity index 100% rename from data/corpus/merge.py rename to corpus/merge.py diff --git a/css/images/forkme.png b/css/images/forkme.png deleted file mode 100644 index 9c5aecfe..00000000 Binary files a/css/images/forkme.png and /dev/null differ diff --git a/css/images/key-bksp.png b/css/images/key-bksp.png deleted file mode 100644 index e2c99a1e..00000000 Binary files a/css/images/key-bksp.png and /dev/null differ diff --git a/css/images/key-caps.png b/css/images/key-caps.png deleted file mode 100644 index 8f157f71..00000000 Binary files a/css/images/key-caps.png and /dev/null differ diff --git a/css/images/key-rtrn.png b/css/images/key-rtrn.png deleted file mode 100644 index 2b4af093..00000000 Binary files a/css/images/key-rtrn.png and /dev/null differ diff --git a/css/images/key-shift.png b/css/images/key-shift.png deleted file mode 100644 index 84499e6f..00000000 Binary files a/css/images/key-shift.png and /dev/null differ diff --git a/css/images/key-tab.png b/css/images/key-tab.png deleted file mode 100644 index 5c31f05c..00000000 Binary files a/css/images/key-tab.png and /dev/null differ diff --git a/css/layout.css b/css/layout.css deleted file mode 100644 index 6b876996..00000000 --- a/css/layout.css +++ /dev/null @@ -1,105 +0,0 @@ -html { - background-color: #ccc; -} - -body { - max-width: 58em; - margin: auto; - padding: 20px; - line-height: 1.4em; - font-family: sans-serif; - border-left: 1px solid #aaa; - border-right: 1px solid #aaa; - background-color: white; - color: black; - box-shadow: 0px 1px 10px #888; -} - -h1 { - margin-top: 0; - margin-bottom: 0; - padding-top: 30px; -} - -h1 + p { - margin-top: 0.5em; - color: #c8a; -} - -h1, -h2 { - color: brown; - border-bottom: 1px inset; -} - -img { - max-width: 100%; -} - -dd, -dt { - margin-bottom: 0.5em; -} - -li { - margin: 0.2em 0; -} - -table { - width: 100%; -} - -th { - /* font-weight: normal; */ -} - -footer { - border-top: 1px solid brown; - text-align: right; - padding: 0.2rem 0 0.5rem; -} - -footer small { - float: left; -} - -a { - color: brown; -} - -/****************************************************************************** - * Dark Mode - */ - -input, -select { - color-scheme: light dark; -} - -@media (prefers-color-scheme: dark) { - html { - background-color: #111; - } - - body { - background-color: #222; - border-color: #111; - box-shadow: 0px 1px 10px #111; - color: #ccc; - } - - h1, - h2, - header, - a { - color: #e74; - } - h1, - h2, - footer { - border-color: #e74; - } - h1 + p { - color: #e74b; - } -} diff --git a/dactylo.html b/dactylo.html deleted file mode 100644 index bf7ee79c..00000000 --- a/dactylo.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - Ergo‑L - - - - - - - -
-

🦆

-

·

-
- -
- -

- -

- - - - - -

-
- - - - diff --git a/img/charge_bepo_en.png b/img/charge_bepo_en.png deleted file mode 100644 index d5c6d9e8..00000000 Binary files a/img/charge_bepo_en.png and /dev/null differ diff --git a/img/charge_bepo_en_fr.png b/img/charge_bepo_en_fr.png deleted file mode 100644 index 09bd8542..00000000 Binary files a/img/charge_bepo_en_fr.png and /dev/null differ diff --git a/img/charge_bepo_fr.png b/img/charge_bepo_fr.png deleted file mode 100644 index d4725a3c..00000000 Binary files a/img/charge_bepo_fr.png and /dev/null differ diff --git a/img/charge_ergol_en.png b/img/charge_ergol_en.png deleted file mode 100644 index b3e619de..00000000 Binary files a/img/charge_ergol_en.png and /dev/null differ diff --git a/img/charge_ergol_en_fr.png b/img/charge_ergol_en_fr.png deleted file mode 100644 index 5e355a9a..00000000 Binary files a/img/charge_ergol_en_fr.png and /dev/null differ diff --git a/img/charge_ergol_fr.png b/img/charge_ergol_fr.png deleted file mode 100644 index cfd437d4..00000000 Binary files a/img/charge_ergol_fr.png and /dev/null differ diff --git a/index.html b/index.html deleted file mode 100644 index 96da8d38..00000000 --- a/index.html +++ /dev/null @@ -1,534 +0,0 @@ - - - - - - Ergo‑L - - - - - - - - -
-

Ergo‑L

-

Une disposition de clavier ergonomique optimisée pour le français, - l’anglais et le code.

-
- -
- -

- powered by x-keyboard - géométrie : - -

- -
- - - - - - -

Objectifs

- - -

Installation

-

- Voir le dépôt GitHub - pour les instructions d’installation. -

- -

Licence

-

- WTFPL - – Do What the Fuck You Want to Public License. -

- -

Optimisation

-

- L’optimisation d’une disposition de clavier francophone comprend deux - difficultés : -

- -

- TL;PL: Ergo‑L est une - disposition optimisée façon Colemak / - Workman, utilisant une touche - morte de type Lafayette pour - les caractères accentués. -

- -

- Ergo‑L est meilleur que Bépo pour le Français, meilleur que Dvorak pour - l’Anglais et meilleur que Qwerty pour la programmation ! -

- -

- heatmap de la disposition Ergo‑L sur un corpus francophone -
fréquence des touches en français -
-

-

- heatmap de la disposition Ergo‑L sur un corpus anglo-saxon -
fréquence des touches en anglais -
-

- -

Placement des lettres

-

- Il y a eu plusieurs projets anglo-saxons d’optimisation du clavier, tous - basés sur un réarrangement des touches du Qwerty visant à : -

- -

- Le plus connu et le plus ancien (finalisé en 1932) est - Dvorak. - Particularité : toutes les voyelles sont sous la main gauche. Mais avec la - généralisation de la bureautique, les raccourcis claviers - Ctrl-{Q,A,S,Z,X,C,V} - sont devenus indispensables et les projets récents d’optimisation de - disposition clavier ont cherché à les préserver. -

- -

- Ergo‑L reprend les principes de Colemak et Workman et concerve la plupart - des raccourcis usuels. Ctrl-C est déplacé mais reste - accessible d’une main. Nous pensons que le gain en ergonomie justifie ce - décalage. -

- -

Polyvalence français / anglais

-

- Les dispositions Dvorak, Colemak et Workman sont optimisées pour l’anglais - exclusivement. Les dispositions francophones - Dvorak-fr et - Bépo appliquent au français le principe de - Dvorak (donc sans support des raccourcis claviers usuels), quitte à - devenir pénalisantes pour l’anglais. -

-

- Pourtant, à une exception près, les 9 lettres les plus fréquentes sont les - mêmes en français (ESANITRUO) et en anglais (ETAOHNISR) : -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ESANITRUOH
fr14.44 %7.25 %7.14 %6.78 %6.74 %6.74 %6.52 %6.16 %5.29 %1.06 %
en11.72 %6.15 %7.97 %6.63 %6.50 %9.04 %5.33 %2.68 %7.85 %6.71 %
-

- Ergo‑L place donc ces lettres aux emplacements les plus confortables - (suivant les principes de Workman) et fait en sorte qu’aucun enchaînement - fréquent en français ou en anglais ne soit rédhibitoire. On obtient donc - une efficacité supérieure à Bépo ou Dvorak-fr, sans sacrifier la - programmation ou l’anglais. -

- -

Gestion des accents

-

- Azerty, Dvorak-fr et - Bépo gèrent les caractères accentués de - façon assez similaire : -

- -

C’est la source de deux défauts majeurs dont Qwerty est exempt :

- -

- Pour éviter cela, Ergo‑L utilise une touche morte de type - Qwerty-Lafayette pour tous les - caractères accentués et ponctuations spéciales. Cela occasionne environ - 4 % de frappes supplémentaires pour un texte francophone, ce qui est - négligeable comparé au gain de confort que cela apporte. La touche - AltGr peut ainsi être dédiée aux seuls symboles de - programmation. -

- -

Principes d’ergonomie

- -

Une approche moderne de la saisie de texte

-

- Il n’y a pas de lettres à l’extérieur des 3×10 touches du centre pour - éviter le manque de confort et de précision causé par les extensions. Cela - implique que : -

- - -

- La touche morte et la couche AltGr rendent la disposition - compatible avec les claviers ultra compacts (33 touches - minimum). -

- -

- La touche morte de la disposition. -

-

- La couche AltGr de la disposition. -

- -

- Les chiffres sont en accès direct, sans Shift, pour faciliter - leur enchaînement (= la saisie de nombres). Oubliez votre pavé numérique ! -

-

- Les raccourcis usuels - Ctrl-{Q,A,S,Z,X,V} - ont été conservés car le gain marginal d’ergonomie en mettant une autre - lettre à la place n’est pas suffisant pour compenser la perte de ces - raccourcis — loin s’en faut (une exception : Ctrl-C - qui a permis un gain important d’ergonomie, et a été modifié de sorte à - gêner le moins possible). -

-

- Beaucoup d’attention a été portée sur les enchaînements de lettres, avec - la plupart des enchaînements fréquents qui se font soit avec une - alternance main gauche / main droite, soit avec un roulement intérieur (se - terminant sur le majeur ou l’index). Les lettres fréquemment doublées - (e.g. L et M) sont placées sous les index. - On privilégie le confort sur la vitesse : il est possible - de taper vite avec n’importe quelle disposition de clavier. -

- -

Ergo‑L vs Bépo

-

- Ergo‑L poursuit les mêmes objectifs que - Bépo pour le français, mais d’une façon - différente. -

- - - - - - - - - - - - - - - - - - - - - - - -
- Comparaison des charges des doigts entre Ergo‑L et Bépo
- (cliquer sur l’image pour plus d’infos) -
Ergo‑LBépo
fr - - - -
fr
en
- - - -
en - - - -
- -

Expériences rejetées et évolutions possibles

-

- Le layout est encore en cours de développement, notamment pour améliorer - l’efficacité de la couche AltGr. Vous pouvez participer aux travaux en - rejoignant le - serveur Discord dédié. -

- -

- On a envisagé par le passé de placer le E sous l’index, comme - en Bépo, parce que c’est la lettre la plus fréquente en français ; mais - cela ruine l’équilibre de la charge des doigts et complique beaucoup - d’enchaînements. De même, on a essayé de mettre toutes les voyelles d’un - côté (comme Dvorak ou Bépo) mais cela engendrait plus de problèmes que - cela n’en résolvait. -

- - - - diff --git a/data/layouts/ISRT.json b/layouts/ISRT.json similarity index 100% rename from data/layouts/ISRT.json rename to layouts/ISRT.json diff --git a/data/layouts/ISRT.yaml b/layouts/ISRT.yaml similarity index 100% rename from data/layouts/ISRT.yaml rename to layouts/ISRT.yaml diff --git a/data/layouts/MTGAP.json b/layouts/MTGAP.json similarity index 100% rename from data/layouts/MTGAP.json rename to layouts/MTGAP.json diff --git a/data/layouts/MTGAP.yaml b/layouts/MTGAP.yaml similarity index 100% rename from data/layouts/MTGAP.yaml rename to layouts/MTGAP.yaml diff --git a/data/layouts/azerty.json b/layouts/azerty.json similarity index 100% rename from data/layouts/azerty.json rename to layouts/azerty.json diff --git a/data/layouts/azerty.yaml b/layouts/azerty.yaml similarity index 100% rename from data/layouts/azerty.yaml rename to layouts/azerty.yaml diff --git a/data/layouts/bepo.json b/layouts/bepo.json similarity index 100% rename from data/layouts/bepo.json rename to layouts/bepo.json diff --git a/data/layouts/bepo.yaml b/layouts/bepo.yaml similarity index 100% rename from data/layouts/bepo.yaml rename to layouts/bepo.yaml diff --git a/data/layouts/colemak-dh.json b/layouts/colemak-dh.json similarity index 100% rename from data/layouts/colemak-dh.json rename to layouts/colemak-dh.json diff --git a/data/layouts/colemak-dh.yaml b/layouts/colemak-dh.yaml similarity index 100% rename from data/layouts/colemak-dh.yaml rename to layouts/colemak-dh.yaml diff --git a/data/layouts/colemak.json b/layouts/colemak.json similarity index 100% rename from data/layouts/colemak.json rename to layouts/colemak.json diff --git a/data/layouts/colemak.yaml b/layouts/colemak.yaml similarity index 100% rename from data/layouts/colemak.yaml rename to layouts/colemak.yaml diff --git a/data/layouts/dvorak.json b/layouts/dvorak.json similarity index 100% rename from data/layouts/dvorak.json rename to layouts/dvorak.json diff --git a/data/layouts/dvorak.yaml b/layouts/dvorak.yaml similarity index 100% rename from data/layouts/dvorak.yaml rename to layouts/dvorak.yaml diff --git a/data/layouts/erglace.json b/layouts/erglace.json similarity index 100% rename from data/layouts/erglace.json rename to layouts/erglace.json diff --git a/data/layouts/erglace.toml b/layouts/erglace.toml similarity index 100% rename from data/layouts/erglace.toml rename to layouts/erglace.toml diff --git a/data/layouts/ergol.json b/layouts/ergol.json similarity index 100% rename from data/layouts/ergol.json rename to layouts/ergol.json diff --git a/data/layouts/ergol.toml b/layouts/ergol.toml similarity index 100% rename from data/layouts/ergol.toml rename to layouts/ergol.toml diff --git a/data/layouts/lafayette.json b/layouts/lafayette.json similarity index 100% rename from data/layouts/lafayette.json rename to layouts/lafayette.json diff --git a/data/layouts/lafayette.yaml b/layouts/lafayette.yaml similarity index 100% rename from data/layouts/lafayette.yaml rename to layouts/lafayette.yaml diff --git a/data/layouts/qwerty.json b/layouts/qwerty.json similarity index 100% rename from data/layouts/qwerty.json rename to layouts/qwerty.json diff --git a/data/layouts/qwerty.yaml b/layouts/qwerty.yaml similarity index 100% rename from data/layouts/qwerty.yaml rename to layouts/qwerty.yaml diff --git a/data/layouts/sturdy.json b/layouts/sturdy.json similarity index 100% rename from data/layouts/sturdy.json rename to layouts/sturdy.json diff --git a/data/layouts/sturdy.toml b/layouts/sturdy.toml similarity index 100% rename from data/layouts/sturdy.toml rename to layouts/sturdy.toml diff --git a/data/layouts/workman.json b/layouts/workman.json similarity index 100% rename from data/layouts/workman.json rename to layouts/workman.json diff --git a/data/layouts/workman.yaml b/layouts/workman.yaml similarity index 100% rename from data/layouts/workman.yaml rename to layouts/workman.yaml diff --git a/lts.html b/lts.html deleted file mode 100644 index eb2bab57..00000000 --- a/lts.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - Ergo‑L - - - - - - - -
- « accueil -

Ergo‑L

-

Une disposition de clavier ergonomique optimisée pour le français, - l’anglais et le code.

-
- -
- -

géométrie : - -

-
- -

Téléchargement

-
- -
- Windows, installeur : - ergol_KbdEditInstaller.exe -
-
-

Exécuter l’installeur et relancer la session. La disposition de - clavier apparaît dans la barre de langues (indicateur de la barre des - tâches).

-
- -
- Windows, version portable : - ergol_ahk.exe -
-
-

Après lancement, un indicateur apparaît dans la barre des tâches. - Le pilote peut être activé / désactivé avec le raccourci - Alt+AltGr -

Ne nécessite pas de droits d’administration, peut fonctionner depuis - une clé USB.

-
- -
- macOS : - ergol.keylayout -
-
-

Enregistrer dans /Library/Keyboard Layouts et relancer - la session. La disposition de clavier est disponible dans les préférences - « Langue et Texte », onglet « Méthodes de saisie ».

-

On peut aussi l’enregistrer dans ~/Library/Keyboard Layouts - (pour le seul utilisateur courant), mais la disposition ne sera pas - active au login.

-

Il est possible (et recommandé) d’utiliser Karabiner pour inverser les touches - ⌘ Command et ⌥ Option à droite, afin d’accéder plus - facilement à la couche de symboles.

-
- -
- GNU/Linux : - ergol.xkb_custom -
-
-

Copier le pilote dans xkb/symbols/custom :

-
-      wget https://ergol.org/0_7_0/ergol.xkb_custom
-      sudo mv ergol.xkb_custom ${XKB_CONFIG_ROOT:-/usr/share/X11/xkb}/symbols/custom 
-

La disposition de clavier est disponible dans le gestionnaire de - préférences du bureau sous un nom générique (« custom layout », - « disposition personnalisée », etc.). - Sous XOrg on peut aussi l’activer directement en ligne de commande :

-
-      setxkbmap custom 
-

D’autres méthodes d’installation sont possibles, en passant le fichier source à XKalamine. -

Remarque : avec certains bureaux (Gnome notamment), la touche morte - ne fonctionne que si Lafayette est définie comme disposition - de par défaut, i.e. en haut de la liste dans les préférences clavier.

-
- -
- -

Licence

-

WTFPL - – Do What the Fuck You Want to Public License.

- - - - diff --git a/stats.html b/stats.html deleted file mode 100644 index dab7d3b6..00000000 --- a/stats.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - Ergo-L - - - - - - - - - - -
- « accueil -

Heatmap

-

- Fréquences de touches obtenues avec le “Don Quichotte” de Cervantès. -

-
- -
- - -
- -
-
- - - -
-
- -

- - Cette disposition ne sait pas générer un nombre non-négligeable de - symboles, les résultats sont peu fiables. - -

- -

Charge des doigts

- / -
- -
-
- -

Digrammes à un doigt

- -
- -
-
- -

Touches doublées

- -
- -
-
- - - - - / / / - - - -
-
-
-
-
- - - - - / / - - -
-
-
-
- - - - - / / / - - - -
-
-
-
-
- - - - diff --git a/www/.hugo_build.lock b/www/.hugo_build.lock new file mode 100644 index 00000000..e69de29b diff --git a/www/archetypes/default.md b/www/archetypes/default.md new file mode 100644 index 00000000..c6f3fcef --- /dev/null +++ b/www/archetypes/default.md @@ -0,0 +1,5 @@ ++++ +title = '{{ replace .File.ContentBaseName "-" " " | title }}' +date = {{ .Date }} +draft = true ++++ diff --git a/css/heatmap.css b/www/assets/css/heatmap.css similarity index 56% rename from css/heatmap.css rename to www/assets/css/heatmap.css index 6fc9afea..de2c221d 100644 --- a/css/heatmap.css +++ b/www/assets/css/heatmap.css @@ -1,38 +1,9 @@ -html { - height: 100%; - width: 100%; - font-family: sans-serif; -} - -body { - display: flex; - flex-direction: column; - justify-content: space-between; - padding: 0 25px; - margin: auto; - max-width: 51em; - min-height: calc(100% - 50px); -} - -header { - font-size: 1rem; -} - -h1 { - margin-bottom: 0.2em; - font-size: 1.4rem; -} - -h3 { - border-bottom: 1px dotted; -} - h3 + small { text-align: right; margin-top: -1em; } -div { +main div { text-align: center; } @@ -42,12 +13,22 @@ div { margin-bottom: -0.75em; } +#sticky-select { + align-items: center; + position: sticky; + margin-bottom: 0; + top: 0; + z-index: 999; +} + input { box-sizing: border-box; + border-radius: 6px; width: 100%; - margin-bottom: 0.5em; + height: 2em; text-align: center; - font-size: 1.3em; + font-size: 1.5em; + margin-bottom: 1em; } canvas { @@ -81,7 +62,3 @@ th { .row td { width: 4em; } - -footer { - margin-top: 2em; -} diff --git a/css/demo.css b/www/assets/css/keyboard.css similarity index 51% rename from css/demo.css rename to www/assets/css/keyboard.css index 2a62a458..80f7bc12 100644 --- a/css/demo.css +++ b/www/assets/css/keyboard.css @@ -29,18 +29,6 @@ display: none; } -#sticky-select { - align-items: center; - position: sticky; - margin-bottom: 0; - top: 0; - z-index: 999; -} - -dialog::backdrop { - backdrop-filter: blur(5px); -} - #demo { max-width: 70em; width: 100%; @@ -63,55 +51,6 @@ dialog::backdrop { margin-bottom: 1em; } -h1 .quacks { - float: right; - transition: transform 1s; - user-select: none; - cursor: grab; -} - -h1.active .quacks { - transform: translateX(-1000%); -} - -.keyboard #lesson { - text-align: left; - font-family: monospace; - font-size: 2.5em; - height: 4em; - line-height: 1.2em; - margin: 0; - padding: 0; - text-wrap: break; -} - -.keyboard #current { - border-bottom: 2px solid; -} -.keyboard span { - box-sizing: border-box; - } -.keyboard #lesson { color: #333; } -.keyboard .done { color: #999; } -.keyboard .error { color: red; } -.keyboard .fixed { color: green; } -.keyboard .space::before { - content: "·"; - word-break: break-all; -} - -.key_list kbd { - font-family: monospace; - text-transform: uppercase; - display: inline-block; - margin: 0 2px; - cursor: pointer; -} - -.key_list kbd.inactive { - color: gray; -} - #demo p { margin: 1em 0; text-align: right; @@ -123,21 +62,14 @@ h1.active .quacks { } @media (prefers-color-scheme: dark) { - + #demo { + background-color: #222; + border: 5px solid #0004; + } .keyboard nav a, .keyboard nav button { color: #ccc; background-color: #444; border: 1px solid #7778; } - - .keyboard #lesson { color: white; } - .keyboard .error { color: #f44; } - .keyboard .fixed { color: #9e1; } - - #demo { - background-color: #222; - border: 5px solid #0004; - } - } diff --git a/www/assets/css/layout.css b/www/assets/css/layout.css new file mode 100644 index 00000000..5c582a0d --- /dev/null +++ b/www/assets/css/layout.css @@ -0,0 +1,168 @@ +html { + height: 100%; + width: 100%; + font-family: sans-serif; + background-color: #ccc; +} + +body { + display: flex; + flex-direction: column; + justify-content: space-between; + padding: 0 25px; + margin: auto; + max-width: 58em; + min-height: 100%; + + line-height: 1.4em; + border-left: 1px solid #aaa; + border-right: 1px solid #aaa; + box-shadow: 0px 1px 10px #888; + background-color: white; + color: black; +} + +h2 { + color: brown; + border-bottom: 1px inset; +} + +h3 { + border-bottom: 1px dotted; +} + +h2, h3, footer { + margin-top: 2em; +} + +dialog::backdrop { + backdrop-filter: blur(5px); +} + +.highlight { + max-width: 42em; + margin: auto; + padding: 1em; + border-radius: 1em; + background-color: #8882; +} + +img { + max-width: 100%; +} + +figure { + margin: 2em 0; + text-align: center; +} + +dd, +dt { + margin-bottom: 0.5em; +} + +li { + margin: 0.2em 0; +} + +table { + width: 100%; +} + +table caption { + caption-side: bottom; +} + +a { + color: brown; +} + + +/****************************************************************************** + * Header & Footer + */ + +#banner { + margin: 1em 0 0; + box-sizing: border-box; + background: left center no-repeat url(../favicon.svg); + background-size: 50px; + min-height: 50px; + padding-left: 60px; +} + +#banner p.title { + font-size: 2em; + font-weight: bold; +} + +#banner p { + margin: 0.4em 0 0; +} + +header, header a, +footer, footer a { + color: #544; /* matches the favicon #rocket color */ + text-decoration: none; +} + +header a:hover, +footer a:hover { + text-decoration: underline; +} + +header h1 { + text-align: center; + font-size: 2.5em; +} + +header nav { + border-top: 1px solid; + border-color: #544f; /* matches the favicon #rocket color */ + text-align: right; +} + +footer { + border-top: 1px solid brown; + text-align: right; + padding: 0.2rem 0 0.5rem; +} + +footer small { + float: left; +} + + +/****************************************************************************** + * Dark Mode + */ + +input, +select { + color-scheme: light dark; +} + +@media (prefers-color-scheme: dark) { + html { + background-color: #111; + } + + body { + background-color: #222; + border-color: #111; + box-shadow: 0px 1px 10px #111; + color: #ccc; + } + + header, header a, header nav, + footer, footer a, footer nav { + /* matches the favicon #rocket color */ + border-color: #cbb4; + color: #cbb; + } + + h2, a { + color: #f96; + border-color: #f96; + } +} diff --git a/www/assets/js b/www/assets/js new file mode 120000 index 00000000..d12c3c27 --- /dev/null +++ b/www/assets/js @@ -0,0 +1 @@ +../../code \ No newline at end of file diff --git a/www/content/_index.md b/www/content/_index.md new file mode 100644 index 00000000..c83c9bf2 --- /dev/null +++ b/www/content/_index.md @@ -0,0 +1,357 @@ ++++ +[params] +cssSheets = ["/css/keyboard.css"] +jsModules = ["/js/x-keyboard.js"] +jsScripts = ["/js/demo.js", "/js/svg.js"] ++++ + +{{< x-keyboard + name="Ergo‑L" + download="/lts" + src="/layouts/ergol.json" + image="/img/ergol.svg" >}} + +:::{.highlight} +- [Ergonomique avant tout !] +
– réduit les extensions de doigt, les déviations ulnaires, l’effort de saisie +
– compatible avec **tous** les claviers ergonomiques, de 33 à 105 touches +
– préserve les raccourcis clavier et les chiffres en direct +- [Plus optimisé que Dvorak et Bépo] +
deux fois moins de SFU que Bépo en français **et** que Dvorak en anglais +- [Impeccable en français] +
une seule touche morte pour produire tous les caractères spéciaux +- [Efficace en anglais] +
la première disposition francophone **réellement** optimisée pour l’anglais +- [Redoutable pour le code] +
une couche de symboles optionnelle et optimisée pour le code +::: + + +Ergonomique avant tout ! +-------------------------------------------------------------------------------- + +### 1DFH, “1u Distance From Home” + +Ergo-L intègre l’approche 1DFH, qui consiste à ne pas déplacer ses doigts de +plus d’une touche par rapport à la position de repos. Cela permet un gain de +confort important pour la saisie en méthode dactylo, évitant notamment les +extensions latérales de l’auriculaire droit qui sont typiques de Bépo pour les +lettres `MZWÇ` (« les quatre cavaliers de l’auriculaire »). + +![Ergo‑L sur un clavier compact (OLKB Plank)](img/ergol_1dfh.svg) + +C’est pour suivre cette approche que l’immense majorité des claviers +ergonomiques actuels ne proposent que 6 colonnes de touches par main, ce qui est : + +- compliqué avec AZERTY, qui a les touches [ù]{.kbd} et [`^`]{.kbd} en 6e + colonne, obligeant à déplacer [Entrée]{.kbd} et [Backspace]{.kbd} ; +- **très** compliqué avec Bépo, qui a des lettres en 7e colonne à déplacer + également ; +- trivial avec Ergo‑L, qui a été conçu pour ça. + +Les claviers ergonomiques modernes cherchent à limiter le nombre total de +touches, en utilisant différents *layers* pour amener les touches excentrées +sous les doigts plutôt que l’inverse. Nous avons donc décidé de n’utiliser +aucune touche en dehors du pavé de 3×10 touches centrales pour les lettres et +symboles de programation. Ergo‑L est ainsi compatible avec les claviers les +plus compacts (minimum 33 touches) sans ajustement majeur. + + +### Adapté à la bureautique + +Les raccourcis claviers usuels +[Ctrl]{.kbd}‑[Q]{.kbd}[A]{.kbd}[S]{.kbd}[Z]{.kbd}[X]{.kbd}[C]{.kbd}[V]{.kbd} +sont devenus indispensables, car ils sont accessibles de la main gauche pendant +que la main droite utilise la souris. Les approches de type [Dvorak][], très +antérieures à la généralisation de la bureautique (Dvorak a été finalisé en +1932), ignorent ces raccourcis clavier en plaçant toutes les voyelles sous la +main gauche ; mais les approches modernes comme Colemak et Workman permettent de +conserver ces raccourcis tout en obtenant de meilleures métriques que Dvorak. + +Ergo‑L suit cette approche [Colemak][] / [Workman][] et comme eux, s’autorise un +changement : le [C]{.kbd} est ainsi déplacé pour favoriser les enchaînements, +mais [Ctrl]{.kbd}‑[C]{.kbd} reste faisable d’une main à gauche. + + +### Réduction de la fatigue de saisie + +Ergo‑L veille à réduire autant que possible : + +- **les déviations ulnaires**, en proposant une alternative en [AltGr]{.kbd} à + tous les symboles placés sur des touches excentrées ; +- **la charge des doigts faibles**, surtout celle de l’auriculaire droit, + responsable de [Entrée]{.kbd} et [Backspace]{.kbd} sur la plupart des + claviers ; +- **le taux de digrammes de même doigt**, un type d’enchaînement très + inconfortable, notamment à haute vitesse de saisie. + +Ergo‑L privilégie le confort à la vitesse : on peut taper vite avec n’importe +quel clavier. Mais il est conçu pour que son confort et son ergonomie ne se +dégradent pas au fur et à mesure que la vitesse de saisie augmente. + + +Plus optimisé que Dvorak et Bépo +-------------------------------------------------------------------------------- + +[Dvorak][] est la disposition de clavier optimisée la plus connue. Elle fut +développée pendant l’entre-deux guerres pour les machines à écrire, qui ont +d’importantes contraintes physiques dont les claviers modernes sont exemptés : +typiquement, appuyer sur deux touches côte‑à‑côte est un excellent moyen de +coincer les marteaux. Cela implique qu’il fallait privilégier les alternances de +mains aux roulements, alors que +ces derniers sont très confortables sur un clavier d’ordinateur. + +Dvorak était un grand pas en avant, mais se base sur une philosophie qui +n’est plus pertinente aujourd’hui. Malheureusement, [Bépo][] et ses nombreuses +variantes la reprend sans chercher à la mettre à jour. + +Dvorak et Bépo ne sont optimisés que pour une seule langue (anglais et français, +respectivement), et sont très inconfortables dans l’autre. Pourtant, à une +exception près, les 9 lettres les plus fréquentes sont les mêmes en français +(ESANITRUO) et en anglais (ETAOHNISR) : + +:::{} +| | E | S | A | N | I | T | R | U | O | H | +| -:|:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:| +|**fr**| 14.4 % | 7.2 % | 7.1 % | 6.8 % | 6.7 % | 6.7 % | 6.5 % | 6.1 % | 5.3 % | 1.0 % | +|**en**| 11.7 % | 6.1 % | 8.0 % | 6.6 % | 6.5 % | 9.0 % | 5.3 % | 2.7 % | 7.8 % | 6.7 % | +: Fréquence des lettres les plus utilisées en français et en anglais. +::: + +Ergo‑L place donc ces lettres aux emplacements les plus confortables (au sens de +[Workman][]) et fait en sorte qu’aucun enchaînement fréquent en français ou en +anglais ne soit rédhibitoire. Comme [Colemak][], on cherche à limiter le plus +possible le taux de digrammes de même doigt, en favorisant les roulements au +même titre que les alternances de mains. + +Malgré le fait qu’il soit optimisé pour les **deux** langues, français **et** +anglais, Ergo‑L affiche de meilleures métriques d’optimisation, tant sur la +charge des doigts que sur le taux de digrammes de même doigt : + + +:::{.sfu} +| | AZERTY | Bépo | Ergo‑L | Dvorak | QWERTY | +| -:|:--------------------------------:|:------------------------------:|:-------------------------------:|:--------------------------------:|:--------------------------------:| +|**fr**| [7.97 %](/stats/#/azerty/iso/fr) | [2.55 %](/stats/#/bepo/iso/fr) | [1.23 %](/stats/#/Ergo‑L/iso/fr) | [3.31 %](/stats/#/dvorak/iso/fr) | [7.16 %](/stats/#/qwerty/iso/fr) | +|**en**| [6.31 %](/stats/#/azerty/iso/en) | [3.01 %](/stats/#/bepo/iso/en) | [1.40 %](/stats/#/Ergo‑L/iso/en) | [2.62 %](/stats/#/dvorak/iso/en) | [5.76 %](/stats/#/qwerty/iso/en) | +: Taux de digrammes de même doigts en français et anglais, extrait de la [page de comparaison avec Bépo](bepo). +::: + + +Impeccable en français +-------------------------------------------------------------------------------- + +### Caractères accentués + +La gestion des accents, diacritiques et symboles typographiques français +nécessite traditionnellement l’usage de touches excentrées (ce qui irait à +l’encontre de la philosophie 1DFH d’Ergo‑L) ou de [AltGr]{.kbd} (qui est prone à +l’erreur à haute vitesse car il faut relâcher la touche au bon moment) + +Ergo‑L utilise une touche morte de type [Lafayette][] (notée ★) pour tous les +caractères accentués, diacritiques et ponctuations spéciales. Actionner cette +« touche typo » donne accès à **tous** ces symboles dans le pavé de 3×10 +touches **sans** utiliser [AltGr]{.kbd}. Cela occasionne environ 4 % de frappes +supplémentaires pour un texte francophone, ce qui est négligeable comparé au +gain de confort que cela apporte. + +![La touche morte d’Ergo‑L.](img/ergol_1dk.svg) + +Maintenir shift après avoir actionné la touche typo permet de saisir des +lettres accentuées en majuscule (★ → [Shift]{.kbd} + `a` = `À`). Oubliez vos +alt codes ! Cette touche typo peut *parfois* donner l’accès à une autre touche +morte, comme le tréma mort, accessible en double‑cliquant la touche typo (donc +★ → ★ → `E` = `Ë`) + + +### Placement des lettres + +En français, les huit lettres les plus fréquentes (`esanitru`) sont toutes +réparties sur la position de repos des doigts, et le reste des lettres +fréquentes sont réparties sur les autres touches faciles d’accès. + +Une grande attention à été portée sur les enchaînements de lettres : + +- Les voyelles s’enchaînent fréquemment avec toutes les consonnes importantes, + donc elles sont soit : + - placées sur les auriculaires, avec des consonnes peu fréquentes autour + (comme `QAZ` et `FUK`) + - empilées sur des doigts forts pour celles qui ne s’enchaînent pas ensemble + (comme `EO` et ★`IY`). +- Le placement des lettres sur les positions de repos maximise les roulements + vers l’intérieur et minimise les redirections, qui sont source d’erreur à + haute vitesse. +- Le reste des lettres fréquentes sont placées de sorte à minimiser les + digrammes de même doigt (par exemple, `D` et `G` s’enchaînent très souvent + avec `N` ou `R`, mais très peu avec `T`) +- La touche morte est placée sur la main opposée à `EAC`, qui sont les lettres + les plus souvent diacritées en français. + +Pratiquement aucun enchaînement courant en français ne demande trop d’effort. + +:::{ style="text-align: center;" } + +![fréquence d’utilisation des touches en français](img/ergol_fr.svg) + fréquence d’utilisation des touches en français +::: + + +### Typographie + +Soigner la typographie demande souvent un effort (physique et mental) +supplémentaire non négligeable. Beaucoup l’ignore, ou laisse leur éditeur de +texte la gérer pour eux. Ergo‑L permet de soigner la typographie sans aucun +effort supplémentaire : + +- [Shift]{.kbd} + [Espace]{.kbd} = espace insécable fine +- ★ → [Espace]{.kbd} = apostrophe typographique +- les guillemets typographiques et ponctuations doublées (`:;?!`) en + [Shift]{.kbd} pour faciliter leur enchaînement avec l’insécable fine. + + +Efficace en anglais +-------------------------------------------------------------------------------- + +### Même optimisation qu’en français + +Ergo‑L porte la même attention au confort de la saisie de texte en anglais qu’en +français, mais doit faire quelques compromis pour faire cohabiter les deux +langues. Certaines lettres sont beaucoup plus fréquentes dans une langue que +l’autre, (comme le [U]{.kbd} et la touche typo en français et le [H]{.kbd} en +anglais) et les enchaînements courrant peuvent être très différents. + +Ergo‑L optimise le plus possible la saisie de texte anglais et français sans +causer de problèmes rédhibitoires dans une de ces deux langues. Par exemple, +l’enchaînement `TH` (*le* digramme le plus fréquent en anglais, avec 3.2% +d’occurences) est très confortable, mais le `H` occupe une place dont on peut +se dispenser en français. De même, `U` et ★ sont très fréquent en français, +mais peu fréquent en anglais, ce qui a été pris en compte pour leur placement. + +:::{ style="text-align: center;" } + +![fréquence d’utilisation des touches en anglais](img/ergol_en.svg) + fréquence d’utilisation des touches en anglais +::: + +Ergo‑L a donc une ergonomie comparable en français et en anglais. Bien que de +nombreuses dispositions dédiés exclusivement à l’anglais soient plus efficace +qu’Ergo‑L dans cette langue, Ergo‑L est *la première disposition **reéellement** +optimisée pour le français **et** l’anglais*. + + +### Et les autres langues ? + +Ergo‑L est capable de saisir du texte dans presque toutes le langues +européennes, mais ne cherche pas a optimiser la saisie de texte dans d’autres +langues que le français et l’anglais. Certains caractères sont disponibles en +touche typo, comme `ß` ou `ñ`, et il existe de nombreuses touches mortes en +[AltGr-Shift]{.kbd} : par exemple, `^` étant en [AltGr]{.kbd}[J]{.kbd}, +[Shift]{.kbd}[AltGr]{.kbd}[J]{.kbd} produit un accent circonflexe mort, ce qui +est suffisant pour la saisie occasionnelle de caractères spéciaux. + +Pour des usages plus réguliers, plutôt que de chercher à couvrir tous les cas +possibles nous avons préféré faire en sorte que la disposition soit **simple à +modifier**. Le [dépôt github d’Ergo‑L](https://github.com/Nuclear-Squid/ErgoL) +contient le fichier source de la disposition (un fichier `.toml` facile à lire +et modifier) ainsi que des instructions pour construire votre disposition +personnalisée ou évaluer la qualité des enchaînements de votre variante. +Remplacer les caractères de la touche morte par ceux dont vous avez besoin +devrait être relativement simple, et le résultat sera bien plus efficace que +n’importe quelle disposition de clavier cherchant à couvrir toutes les langues ! + +![Un exemple d’adaptation d’Ergo‑L pour l’allemand](img/ergol_1dk_de.svg) + +Si vous voulez adapter Ergo‑L à une langue étrangère, nous vous recommandons de +concevoir la couche typo uniquement pour cette langue et d’installer votre +adaptation en même temps qu’Ergo‑L en lui donnant un autre nom (comme +« ergol-de » pour l’allemand, par exemple). Tous les bureaux modernes proposent +un raccourci clavier pour basculer d’une langue à l’autre, et vous pourrez ainsi +basculer d’Ergo‑L à votre variante spécifique en un clin d’œil. + + +Redoutable pour le code +-------------------------------------------------------------------------------- + +### Héritage QWERTY-US + +La grande majorité des touches en dehors du pavé de 3×10 sont identiques à +celles de Qwerty‑US. Cela implique que les chiffres sont en accès direct (sans +[Shift]{.kbd}), ce qui facilite grandement la saisie de nombres. + +QWERTY‑US est réputé pour son efficacité dans la saisie de symboles de +programation, mais elle est perfectible : **tous** les symboles de programmation +nécessitent au moins un auriculaire et une extension, car ils sont tous sous un +auriculaire, ou en [Shift]{.kbd}, ou les deux. Ergo‑L a donc à cœur de proposer +une meilleure alternative. + + +### Couche symboles + +Ergo‑L propose une couche [AltGr]{.kbd} optionelle optimisée pour le placement +et les enchaînements de symboles de programmation. + +![La couche AltGr d’Ergo‑L.](img/ergol_altgr.svg) + +Cette couche [AltGr]{.kbd} est plutôt simple à mémoriser, car les symboles sont +regroupés par « blocs ». On y retrouve : + +- les délimiteurs `(){}[]<>` +- les délimiteurs de chaîne de caractères ``'`"`` +- les symboles arithmétiques `+-/*` +- les ponctuations `!;:?` (de plus, `;:` sont à leur emplacement en Qwerty Européen) +- `$%^&*` sont à leur position en [Shift]{.kbd} + chiffres, mais une rangée plus bas. + +Comme pour l’emplacement des lettres de la disposition, une grande attention à +été portée au placement des symboles de prog et aux enchaînements courrants. Les +symboles peu courrants (``~@#%^`|``) sont loins des positions de repos, et la +grande majorité des enchaînements de symboles de prog se fait soit avec une +alternance de main (`~/`, `);`, ``, `+=`, `['']`, …) soit avec un roulement +(`>=`, `/*`, `";`, `()`, `\"`, …). + +Comme pour la saisie de texte en français ou anglais, la couche [AltGr]{.kbd} +d’Ergo‑L ne contient pratiquement aucun enchaînement inconfortable. + + +### Compatibilité Vim + +Pour une utilisation technique, Vim apporte une ergonomie reconnue et de +nombreux éditeurs de code implémentent un mode de navigation Vim. La couche +[AltGr]{.kbd} d’Ergo‑L lui permet de conserver les principales commandes de +déplacement : + +- [AltGr]{.kbd} + `jk` donne `+-`, qui est une action très proche de `jk` +- les sauts verticaux `{}`, `()` et `[]` sont en AltGr + main gauche + +À ce jour, nous n’avons pas trouvé de meilleure couche de symboles que celle que +nous avons développée. Elle a été reprise dans d’autres projets, notamment +[Lafayette]. + + +Licence +-------------------------------------------------------------------------------- + +[WTFPL][] – Do What The Fuck You Want To Public License. Bien qu’il existe des +licences mieux réputées, nous avons choisi d’en utiliser une dont on comprend +tous les mots. + + + +[WTFPL]: http://wtfpl.net +[dvorak]: https://fr.wikipedia.org/wiki/Disposition_Dvorak +[bépo]: https://bepo.fr +[workman]: https://workmanlayout.org +[colemak]: https://colemak.com +[lafayette]: https://qwerty-lafayette.org/ diff --git a/www/content/bepo/charge_bepo_en.png b/www/content/bepo/charge_bepo_en.png new file mode 100644 index 00000000..35b1c6f9 Binary files /dev/null and b/www/content/bepo/charge_bepo_en.png differ diff --git a/www/content/bepo/charge_bepo_en_fr.png b/www/content/bepo/charge_bepo_en_fr.png new file mode 100644 index 00000000..fec9f37c Binary files /dev/null and b/www/content/bepo/charge_bepo_en_fr.png differ diff --git a/www/content/bepo/charge_bepo_fr.png b/www/content/bepo/charge_bepo_fr.png new file mode 100644 index 00000000..1e4cca2e Binary files /dev/null and b/www/content/bepo/charge_bepo_fr.png differ diff --git a/www/content/bepo/charge_ergol_en.png b/www/content/bepo/charge_ergol_en.png new file mode 100644 index 00000000..1b808990 Binary files /dev/null and b/www/content/bepo/charge_ergol_en.png differ diff --git a/www/content/bepo/charge_ergol_en_fr.png b/www/content/bepo/charge_ergol_en_fr.png new file mode 100644 index 00000000..4dc57c81 Binary files /dev/null and b/www/content/bepo/charge_ergol_en_fr.png differ diff --git a/www/content/bepo/charge_ergol_fr.png b/www/content/bepo/charge_ergol_fr.png new file mode 100644 index 00000000..ad2e44bb Binary files /dev/null and b/www/content/bepo/charge_ergol_fr.png differ diff --git a/www/content/bepo/index.md b/www/content/bepo/index.md new file mode 100644 index 00000000..dfdefa6b --- /dev/null +++ b/www/content/bepo/index.md @@ -0,0 +1,328 @@ ++++ +title = "Ergo‑L ou Bépo ?" + +[params] +cssSheets = ["/css/keyboard.css"] +jsModules = ["/js/x-keyboard.js"] +jsScripts = ["/js/demo.js", "/js/svg.js"] ++++ + +{{< x-keyboard + name="Bépo" + download="https://bepo.fr" + src="/layouts/bepo.json" + image="/img/bepo.svg" >}} + +:::{.highlight style="max-width: 32em;"} +- [Ergonomie] +
une priorité pour Ergo‑L bien plus que pour Bépo +- [Optimisation] +
Dvorak pour Bépo, Colemak/Workman pour Ergo‑L +- [Typographie] +
deux approches différentes +- [Programmation] +
la spécialité d’Ergo‑L +- [Variantes de Bépo] +::: + +Ergonomie +-------------------------------------------------------------------------------- + +### Bépo + +Conservant l’approche AZERTY d’avoir certaines lettres accentuées en direct +(`É`, `È`, `À`, `Ç`), Bépo a manqué de place pour placer toutes les lettres et a +choisi d’occuper les colonnes excentrées pour des lettres jugées moins +fréquentes (`M`, `Z`, `W`, `Ç`). Il en résulte une incompatibilité avec la +plupart des claviers ergonomiques du marché, qui ne proposent que 6 colonnes de +touches par main pour respecter le principe [1DFH](#dfh-1u-distance-from-home). + +Par ailleurs, la charge des doigts est mal répartie : + +- la charge de l’index gauche est très élevée (> 23 % en français), et c’est + d’autant plus gênant que ce doigt gère à lui seul la moitié des [digrammes de + même doigt](#optimisation) ; +- plus grave, la charge de l’auriculaire droit (> 11 % en français) est bien + plus élevée que dans toutes les dispositions de clavier francophones, + optimisées ou non ; +- une grande partie des touches doublées se trouvent sous l’auriculaire droit — + et souvent en extension ! + +C’est notamment le cas du `M` : 13e lettre la plus fréquente en français (2.7 % +de fréquence, soit plus que tous les caractères accentués cumulés), fréquemment +doublé (0.2 % du temps) et en extension latérale sur l’auriculaire droit. Cela +favorise grandement les déviations ulnaires, qui sont la principale cause de +développement de troubles musculo-squelettiques associés à la saisie au clavier. + +Enfin, par inspiration [Dvorak][], Bépo a renoncé aux raccourcis clavier +positionnels [Ctrl]{.kbd}‑[Z]{.kbd}[X]{.kbd}[C]{.kbd}[V]{.kbd}. + +### Ergo‑L + +Ergo‑L se veut [ergonomique avant tout](/#ergonomique-avant-tout). À ce titre, +il suit une approche 1DFH stricte, plaçant les 26 lettres et les 4 principales +ponctuations dans le pavé central de 3×10 touches, garantissant une +compatibilité parfaite avec tous les claviers de 33 à 105 touches, ergonomiques +ou non. + +Cette approche permet aussi de garder les chiffres en direct, rendant le pavé +numérique inutile. On peut ainsi utiliser des claviers compacts qui favorisent +une meilleure posture de travail, notamment quand on utilise la souris de la +main droite. + +Les auriculaires sont préservés, en particulier le droit qui est en charge des +touches [Entrée]{.kbd} et [Backspace]{.kbd} sur la plupart des claviers (et qui +ne sont pas comptées dans ces métriques). + +Les lettres fréquemment doublées (e.g. [L]{.kbd}, [N]{.kbd} et [M]{.kbd}) sont +placées sous les index. + +Les raccourcis clavier positionnels [Ctrl]{.kbd}‑[Z]{.kbd}[X]{.kbd}[C]{.kbd}[V]{.kbd} +ainsi que [Ctrl]{.kbd}‑[Q]{.kbd}[A]{.kbd}[S]{.kbd} sont préservés, mais le +[C]{.kbd} a été déplacé pour permettre un gain d’optimisation très sensible. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Comparaison des charges des doigts entre Bépo et Ergo‑L.
+ (cliquer sur l’histogramme pour plus d’infos) +
Bépo Ergo‑L
fr
fr‑en
en
+ + + + + + + + + + + + +
9.6 % 8.0 % 9.7 %23.0 % 15.2 %12.3 %15.6 %13.7 %
+
max. + + + + + + + + + + + + +
9.2 %12.0 %19.5 %14.8 % 18.6 %15.2 %11.1 % 6.9 %
+
+ +**De notre point de vue** : Bépo a été optimisée au détriment de l’ergonomie, +notamment en surchargeant beaucoup trop l’auriculaire droit et en s’aliénant la +plupart des claviers ergonomiques. + + +Optimisation +-------------------------------------------------------------------------------- + +### Bépo + +Bépo applique une optimisation de type [Dvorak][] au français : + +- maximiser l’alternance des mains lors de la frappe ; +- répartir les touches de façon équitable sur les deux mains ; +- utiliser en priorité la rangée centrale, puis haute, puis inférieure ; +- en cas de non-alternance des mains sur un digramme, diriger la frappe vers le + centre du clavier ce qui sollicite davantage les doigts les plus habiles à + savoir l’index et le majeur. + +Bépo cherche également à minimiser le taux de digrammes de même doigt, que nous +mesurons à 2.6 % en français contre 8.0 % pour l’AZERTY. C’est un score très +proche de celui obtenu par Dvorak en anglais, là où QWERTY est à 7.2 %. + +Cette optimisation est faite au détriment de l’anglais : +- la charge de l’auriculaire droit grimpe à 13.7 % ; +- certains digrammes, notamment `WH`, sont rédhibitoires. + + +### Ergo‑L + +Ergo‑L reprend les principes ci-dessus mais intègre les inspirations [Colemak][] +et [Workman][] : + +- on privilégie les roulements aux alternances de main : + - les alternances de main étaient nécessaires à l’époque des machines à + écrire mécaniques pour éviter de coincer les marteaux, mais ne le sont + plus aujourd’hui ; + - les roulements permettent de faire moins d’erreurs de saisie à haute + vitesse, tout en restant très confortables ; +- on évite les colonnes centrales qui requièrent une extension de l’index ; +- faute de pouvoir utiliser les positions de repos on privilégie les touches : + - de la rangée supérieure pour l’annulaire et le majeur ; + - de la rangée inférieure pour l’index ; +- on fait le choix de conserver les raccourcis clavier positionnels se justifie, + tant l’impact sur les métriques d’optimisation est limité. + +Malgré ces compromis et le fait qu’il soit optimisé pour les **deux** langues, +français **et** anglais, Ergo‑L affiche de meilleures métriques d’optimisation, +tant sur la charge des doigts (voir ci-dessus) que sur le taux de digrammes de +même doigt : + + +:::{.sfu} +| | AZERTY | Bépo | Ergo‑L | Dvorak | QWERTY | +| -:|:--------------------------------:|:------------------------------:|:-------------------------------:|:--------------------------------:|:--------------------------------:| +|**fr**| [7.97 %](/stats/#/azerty/iso/fr) | [2.55 %](/stats/#/bepo/iso/fr) | [1.23 %](/stats/#/ergol/iso/fr) | [3.31 %](/stats/#/dvorak/iso/fr) | [7.16 %](/stats/#/qwerty/iso/fr) | +|**en**| [6.31 %](/stats/#/azerty/iso/en) | [3.01 %](/stats/#/bepo/iso/en) | [1.40 %](/stats/#/ergol/iso/en) | [2.62 %](/stats/#/dvorak/iso/en) | [5.76 %](/stats/#/qwerty/iso/en) | +: Taux de digrammes de même doigts en français et anglais. +::: + +**De notre point de vue** : l’optimisation de Bépo est faite au détriment de +l’anglais et de l’ergonomie, et elle est (très) inférieure à celle que propose +Ergo‑L dans les deux langues. + + +Typographie +-------------------------------------------------------------------------------- + +### Bépo + +Bépo gère les caractères accentués de façon similaire à AZERTY : + +- certaines lettres comme [ÉÈÀÇ]{.kbd} sont accessibles directement ; +- l’accent circonflexe et le tréma sont faits avec une touche morte (le tréma + nécessitant *en plus* [AltGr]{.kbd} avec Bépo) ; +- certains caractères nécessitent la touche [AltGr]{.kbd}, ce qui complique les + enchaînements : [Ù]{.kbd}, [Œ]{.kbd}, [Æ]{.kbd}, points de suspension… + +De plus, Bépo propose beaucoup de caractères spéciaux (i.e. non liés à la langue +français ou au code informatique) via la couche AltGr ou des touches mortes, au +prix d’une certaine complexité des pilotes de clavier : + +- les pilotes Windows existent en deux versions, l’une « tronquée » et stable, + l’autre « complète » mais dont le comportement est présenté comme moins + fiable ; +- le pilote Linux, théoriquement inclus a XKB, se base sur des définitions de + touches mortes qu’il faut ajouter manuellement coté utilisateur. + + +### Ergo‑L + +À l’inverse, Ergo‑L utilise une touche morte de type [Qwerty-Lafayette][3] pour +tous les caractères accentués et ponctuations spéciales : la fluditié des +enchaînements est préservée, et la touche [AltGr]{.kbd} peut être dédiée aux +seuls symboles de programmation. + +Cette touche morte occasionne des frappes supplémentaires sur un texte francophone : + +- 1.0 % pour `È`, `À`, `Ç`, `Œ`, `Æ` +- 1.5 % pour le seul `É` +- 1.5 % si on utilise l’apostrophe typographique `’` plutôt que l’apostrophe + droite `'` + +… soit environ 4 % de frappes supplémentaires. Pour une vitesse de saisie de 60 +mots/minutes, on perd ainsi 2 mots/minute en Ergo‑L. + +Le support typographique du français est tout aussi complet que celui de Bépo, +mais pour les autres caractères spéciaux Ergo‑L se contente des touches mortes +standard définies dans XKB afin de proposer des pilotes plus robustes. +Les autres caractères spéciaux sont laissés à la touche Compose. + +![La couche Typo d’Ergo‑L.](/img/ergol_1dk.svg) + +**De notre point de vue** : la saisie de la plupart des caractères accentués +est plus intuitive avec Bépo. L’approche d’Ergo‑L permet d’éviter les extensions +de doigts mais nécessite un apprentissage. + + +Programmation +-------------------------------------------------------------------------------- + +Avec son optimisation pour l’anglais et sa couche dédiée aux symboles de +programmation en [AltGr]{.kbd}, Ergo‑L est de loin la disposition la plus +adaptée à la programmation. Comme pour les lettres en français et en anglais, +les symboles sont placés de façon à faciliter les enchaînements et éviter les +touches répétées sous les auriculaires. + +![La couche Symboles d’Ergo‑L.](/img/ergol_altgr.svg) + +La touche [AltGr]{.kbd} reste facultative, les symboles étant également +disponibles aux emplacements du QWERTY ANSI, qui est perçu comme efficace pour +cet usage. + + +Variantes de Bépo +-------------------------------------------------------------------------------- + +De par son ancienneté, Bépo a vu naître beaucoup de variantes qui ont toutes +repris la philosophie initiale : + +- toutes les voyelles à gauche (approche Dvorak) ; +- les lettres sont étalées sur toutes les colonnes du clavier ; +- les chiffres restent en Shift. + +Et très logiquement, ces variantes présentent les mêmes défauts d’ergonomie : + +- compatibilité délicate avec la quasi-totalité des claviers ergonomiques ; +- surcharge importante de l’auriculaire droit ; +- perte des raccourcis claviers positionnels. + +Optimot est une variante non-libre de Bépo qui l’optimise très nettement : le +taux de digrammes de même doigt est divisé par deux en anglais et par trois en +français ! Mais les défauts d’ergonomie restent les mêmes, ou ne sont atténués +que très marginalement : + +- les lettres excentrées posent toujours le même problème de compatibilité avec + les claviers ergonomiques ; +- la charge de l’auriculaire droit est diminuée en anglais mais reste + strictement identique pour le français littéraire, et s’accroît dès que l’on + utilise des symboles de programmation (dont l’accès recommandé par l’auteur se + fait via la touche morte circonflexe, placée sous l’auriculaire en extension). + +**De notre point de vue**, les deux dispositions portent bien leur nom : + +- Optimot est une **opti**misation de Bépo qui apportera un gain de confort aux + utilisateurs satisfaits de Bépo ; +- Ergo‑L est **ergo**nomique avant tout, et apportera une solution radicale aux + personnes qui ont des difficultés avec Bépo. + + +[bépo]: https://bepo.fr +[dvorak]: https://fr.wikipedia.org/wiki/Disposition_Dvorak +[workman]: https://workmanlayout.org +[colemak]: https://colemak.com diff --git a/data/dicts/LICENSE b/www/content/dactylo/LICENSE similarity index 100% rename from data/dicts/LICENSE rename to www/content/dactylo/LICENSE diff --git a/data/dicts/README.md b/www/content/dactylo/README.md similarity index 100% rename from data/dicts/README.md rename to www/content/dactylo/README.md diff --git a/data/dicts/english_10k.json b/www/content/dactylo/english_10k.json similarity index 100% rename from data/dicts/english_10k.json rename to www/content/dactylo/english_10k.json diff --git a/data/dicts/english_1k.json b/www/content/dactylo/english_1k.json similarity index 100% rename from data/dicts/english_1k.json rename to www/content/dactylo/english_1k.json diff --git a/data/dicts/french_10k.json b/www/content/dactylo/french_10k.json similarity index 100% rename from data/dicts/french_10k.json rename to www/content/dactylo/french_10k.json diff --git a/data/dicts/french_1k.json b/www/content/dactylo/french_1k.json similarity index 100% rename from data/dicts/french_1k.json rename to www/content/dactylo/french_1k.json diff --git a/www/content/dactylo/index.html b/www/content/dactylo/index.html new file mode 100644 index 00000000..d2653cdb --- /dev/null +++ b/www/content/dactylo/index.html @@ -0,0 +1,120 @@ ++++ +title = "Duck Typist" + +[params] +cssSheets = ["/css/keyboard.css"] +jsModules = ["/js/x-keyboard.js"] +jsScripts = ["/js/duck-typist.js"] + +footer = """ + powered by [x-keyboard](https://onedeadkey.github.io/x-keyboard), + inspired by [keyzen](https://github.com/wwwtyro/keyzen) + and [keybr](https://github.com/aradzie/keybr.com), + fuelled by [MonkeyType](https://github.com/monkeytypegame/monkeytype) +""" ++++ + + + +

🦆

+

·

+ +
+ +

+ +

+ + + + + +

+
diff --git a/quack.wav b/www/content/dactylo/quack.wav similarity index 100% rename from quack.wav rename to www/content/dactylo/quack.wav diff --git a/www/content/erglace.md b/www/content/erglace.md new file mode 100644 index 00000000..b755c1db --- /dev/null +++ b/www/content/erglace.md @@ -0,0 +1,178 @@ ++++ +title = "Erglace (WiP)" + +[params] +cssSheets = ["/css/keyboard.css"] +jsModules = ["/js/x-keyboard.js"] +jsScripts = ["/js/demo.js", "/js/svg.js"] ++++ + +{{< x-keyboard + name="Erglace" + download="https://github.com/Lysquid/Erglace" + src="/layouts/erglace.json" + image="/img/erglace.svg" >}} + + +## Notes de conception + +Le point de départ était de faire une disposition avec moins de redirections +qu’Ergo‑L. Nous nous sommes vite rendu compte qu'il fallait pour cela isoler les +voyelles de consonnes. Les lettres de la home row sont les lettres les plus +utilisées du français et de l'anglais. + + + +Pour l'ordre des consonnes de la home row, nous avons cherché à maximiser les +roulements, tout en s'assurant d'une bonne répartition de la charge. `t` est un +bon candidat pour l'index, puisqu'il se combine assez peu avec d'autres +consonnes comparé aux autres, or l'index à 6 lettres. Les autres ordres testés +avaient une répartition de charge moins bonne et/ou un SFB plus haut. Cet ordre +a toutefois le défaut de privilégier les outrolls, et n'est pas celui qui +minimise les redirects (voir l'ordre de Nerps). + +Le raisonnement est similaire pour l'ordre des voyelles. `u` est de loin la +lettre qui se combine le moins avec les consonnes et les signes de ponctuation, +il a donc sa place sur l'index, même si c'est une lettre peu courante en +anglais. + + +Toutefois, `e` est une lettre particulière puisque c'est la plus utilisée et +elle se combine avec la quasi-totalité des autres lettres, à l'exception de `o` +et des lettres accentuées. N'ayant pas de touches dédiées aux accents comme +ErgEAU, j'ai dû me résoudre à mettre `o` au-dessus de `e`. La charge devenant +trop grande pour l'annulaire, je l'ai mis sur l'index comme en Ergo-L et +Optimot. `a` est resté sur l'annulaire car il a une charge plus importante que +`i`. Les enchaînements de cette disposition restent bons, à l'exception du bad +redirect assez ironique `aie`, équivalent de `sad` en qwerty. + +J'ai essayé de laisser `e` sur l'annulaire, d'abord en mettant la touche morte +au-dessus, ce qui faisait une charge beaucoup trop importante pour l'annulaire, +ou en mettant une lettre rare, tel que `k` ou `z`, mais le SFB engendré était de +loin le plus important du layout, et je trouvais dommage de mettre une des +lettres les plus rares sur un bon emplacement. + +Nous avons d'abord cherché à conserver le roulement `th`, digramme le plus +commun. Mais nous nous sommes rendu compte que `h` allait aussi très bien du +côté des voyelles avec lesquelles il fait de nombreux roulements, même si ce +sont des outrolls. Avoir `h` sous `u` permet aussi de charger plus l'index en +anglais. + +Les autres consonnes du côté de voyelles ont été choisies pour minimiser le SFB. +`j` est en bas pour simplifier l'écriture de `je`, et `f` en haut pour taper +`of`. `y` en haut permet quant à lui un roulement confortable pour écrire `you`. +Une attention particulière a été portée sur le LSB, qui reste malgré tout élevé +à cause des digrammes `e,`, `ez` et `ek`, ce qui est assez inévitable compte +tenu du placement de `e`. + +La charge de l'annulaire est alors plus importante que celle de l'index en +français. J'ai essayé de mettre la touche morte sur l'index comme en ErgEAU, +mais comme `e`, `a` se lit à presque toutes les autres lettres. On retrouve donc +les mêmes problèmes qu'avec `e`, mais cette fois avec une charge trop faible sur +l'annulaire. Par ailleurs, le touche morte sur l'index réduisait encore la +charge de ce doigt en anglais. + +Le placement des consonnes restantes à droite à fait l'objet de beaucoup de +variations. `dmlcp` sont celles qui ont le moins bougé, étant les consonnes plus +fréquentes après celle de la home row, elles occupent les meilleurs emplacements +sur les colonnes où elles font le moins de SFB. Le placement de `c` et `p` en +haut permet de garantir de bons enchaînements avec `l`. + +Nous avons considéré d'inverser `d` et `p` pour le digramme `ld`. Mais `ld` est +moins courant que `pl`, et `d` serait plus difficale à atteindre en haut, alors +qu'il est deux fois plus courant que `p`. + +Le cas de `g` est particulier du fait de l'importance des digrammes `ng` et +`gr`. Le placer en bas l'annulaire rend ces digrammes inconfortables sur un +clavier split. Pour ne pas avoir un trop gros LSB avec le digramme `ng`, la +seule position convenable est donc à gauche de `t`. + +Les consonnes restantes, `vbwq` peuvent être interchangées facilement, et ont +fait l'objet d'une mise à jour de la dispositon. Le `v` était initialement placé +sur l'annulaire en bas, mais l’enchaînement `vr` était alors très inconfortable. +Le `w` a pris cette place, au détriment de la compatibilité Vim puisque `cw` +devient un SFB important. Heureusement, `ce` fait le même chose que `cw` sur +Vim. `q` se retrouve sur l'auriculaire car c'est le moins utilisé. + +`v` et `b` sont alors sur l'index et peuvent être facilement inversés. Le choix +de `b` en bas à été fait pour éviter l'enchaînement `mb` qui est très compliqué +avec `b` en haut. Cela se fait au détriment de l'enchaînement `bl` qui est deux +fois plus courant, mais tout de même plus acceptable. Un avantage à avoir `v` en +haut est de pouvoir enchaîner Ctrl+C et Ctrl+V. + +`q` et `x` sur la colonne de l'auriculaire peuvent aussi être intervertis. Mais +`q` étant beaucoup plus courant, il a la position la plus confortable, en haut. +Un défaut est l'enchaînement `sq` qui n'est alors pas très confortable. + +Un autre digramme problématique est `j'`, un ciseau désagréable. On pourrait +être tenté d'inverser `j` et `y`, mais cela créerait alors un ciseau pour `you`, +qui est sinon un très bon roulement, et rend `je` moins confortable. Il a été +envisagé d'inverser `j` et `x`, mais cela aurait créé des redirections pour +`eux` et `aux` et un SFB important avec `ix`, particulièrement en anglais +(digramme potentiellement biaisé dans le corpus: "Don Quixote" en anglais). Le +mod `jx` reste intéressant pour ceux qui trouvent `j'` vraiment trop +inconfortable. + +Les accents ont ensuite été répartis sur la couche correspondante, de préférence +proches des lettres correspondantes, dans la limite de la place disponible du +côté des voyelles. `ê` est sur e, car il y a souvent un autre `e` dans le même +mot comme dans `même` et `être`. + +`a` étant sous la touche morte, ses variantes accentuées ne peuvent pas être sur +cette colonne sous peine d'un SFB important. `à` et `â` ont donc été placés à +droite sur les lettres avec lesquelles il fait le plus petit SFB. `œ` a aussi +été placé à droite par manque de place, ce qui lui donne une place sur la home +row. + +`é` est de loin l'accent le plus important, étant la 15ème lettre la plus +utilisée en français. Le placer sous `e` rendrait le digramme `ée` lent et +surchargerait encore plus le majeur. J'ai essayé de le placer sous `r`, colonne +sur laquelle le SFB est minimal, mais le SKU engendré sur l'annulaire était +considérable, et se ressentait beaucoup dans des mots comme 'préféré'. J'ai +finalement opté pour le mettre derrière `u`, ce qui lui donne une place +confortable sur la home row, et qui s’enchaîne bien avec `e`. Cela permet aussi +de mieux charger l'index en français. La contre-parti est les digrammes `é,` et +`éf`, ainsi qu'un décalage nécessaire des variantes accentuées de `u`. + +`_` a une place sur la home de la couche 1dk pour pouvoir écrire facilement des +noms de fichiers et variables où les mots sont espacés d'underscores. + +`-` est derrière `e` en shift pour minimiser le SFB. N'importe quel autre +caractère créé un SFB important avec la colonne `oe`. `,` a une meilleure +position que `.` car elle est beaucoup plus courante. + +J'aurais aimé avoir `'` en accès direct puisque c'est un caractère courant en +français, anglais et programmation, mais il se lit avec toutes les lettres. Je +suis resté sur la solution plutôt élégante de Ergo-L, d'avoir `'` derrière la +touche morte + espace, qui garantit un SFB minimum. + + + +Dans cette version précédente, `?`, `!` et `_` étaient respectivement derrière +`,`, `.` et `-` en shift. Nous avons longtemps débattu sur ce sujet, la +conclusion étant que cela est plutôt une affaire de goût personnel. La solution +la plus simple a donc été de se caler sur les conventions d'Ergo-L, ce qui +simplifie la compatibilité avec la couche de symboles. + +Sur la page de statistiques du site d'Ergo-L, Erglace a un SFB important en +anglais a cause des guillemets, comme `.”` qui contribue à lui seul à 0.16%. Je +considère que ces guillemets sont surreprésentés dans le corpus, et que cet +enchaînements n'est pas assez courant au quotidien pour essayer de le prendre en +compte. + +En conclusion, la disposition a des défauts et fait un certain nombre de +compromis. Avec les mêmes contraintes, on peut encore faire mieux. On peut +remettre en question l'approche visant à minimiser les redirections, car cela +implique d'avoir peu de roulements, qui sont pourtant agréables et propices à la +mémoire musculaire. Erglace ne devrait cependant pas connaître de changements +majeurs, s'il y en a, ce sera une nouvelle disposition. + + +## Ressources utilisées + +- [Keyboard Layouts Doc](https://bit.ly/keyboard-layouts-doc), ressource théorique très complète +- La [page de statistiques](https://lysquid.github.io/Erglace/stats) d'Ergo-L +- [Layout playground](https://o-x-e-y.github.io/layouts/playground/), pour des statistiques complémentaires (LSB, BadRedirects) et du prototypage rapide +- Les [statistiques de fréquence](https://github.com/Nuclear-Squid/ergol/tree/master/data/corpus) de Ergo-L pour le français et l'anglais +- [Heatmap d'effort](https://colemakmods.github.io/mod-dh/model.html) des touches du clavier, développée pour Colmak-DH +- Les retours sur le [discord d'Ergo-L](https://discord.gg/RH34GjQEgC) diff --git a/www/content/lafayette.md b/www/content/lafayette.md new file mode 100644 index 00000000..91778dd3 --- /dev/null +++ b/www/content/lafayette.md @@ -0,0 +1,63 @@ ++++ +title = "Adaptations type « Lafayette »" + +[params] +cssSheets = ["/css/keyboard.css"] +jsModules = ["/js/x-keyboard.js"] +jsScripts = ["/js/demo.js", "/js/svg.js"] ++++ + +Une série de disposition de clavier été adaptées au français et/ou aux claviers +compacts via une touche « Typo ». + + +QWERTY-Lafayette +-------------------------------------------------------------------------------- + +{{< x-keyboard + name="QWERTY-Lafayette" + download="https://qwerty-lafayette.org" + src="/layouts/lafayette.json" + image="/img/ergol.svg" >}} + +La disposition de clavier par laquelle tout a commencé ! + +Publiée en 2010, Lafayette est une simple adaptation du QWERTY ANSI au français. +Aucune optimisation : on a HJKL sur la homerow et c’est très bien ainsi ! + +C’est cette disposition qui a introduit l’idée d’une touche morte « à tout +faire » et d’une couche AltGr entièrement dédiée aux symboles de programmation. +Cette couche de symboles était longtemps annoncée comme « à personnaliser » : +chaque utilisateur·ice était sensé·e se l’approprier et l’adapter à son langage +de programmation de prédilection. + +Kalamine a ainsi été développé dans le but de faciliter la personnalisation de +Lafayette. Puis x-keyboard a suivi, afin de pouvoir tester ces dispositions sans +avoir à les installer. Et de fil en aiguille… + + +Colemak French Touch +-------------------------------------------------------------------------------- + +{{< x-keyboard + name="QWERTY-Lafayette" + download="https://qwerty-lafayette.org" + src="/layouts/lafayette.json" + image="/img/ergol.svg" >}} + +Une adaptation du Colemak au français : + +- inversion O/U +- touche Typo pour les diacritiques francophones + + +Bepolar +-------------------------------------------------------------------------------- + +{{< x-keyboard + name="QWERTY-Lafayette" + download="https://qwerty-lafayette.org" + src="/layouts/lafayette.json" + image="/img/ergol.svg" >}} + +Une adaptation de Bépo aux claviers compacts. diff --git a/www/content/lts/index.html b/www/content/lts/index.html new file mode 100644 index 00000000..eeb4c9cf --- /dev/null +++ b/www/content/lts/index.html @@ -0,0 +1,80 @@ ++++ +title = "Ergo‑L v0.7 LTS" + +[params] +jsScripts = ['js/svg.js'] ++++ + +{{< x-keyboard image="img/ergol.svg" >}} + +

Téléchargement

+
+ +
+ Windows, installeur : + ergol_KbdEditInstaller.exe +
+
+

Exécuter l’installeur et relancer la session. La disposition de + clavier apparaît dans la barre de langues (indicateur de la barre des + tâches).

+
+ +
+ Windows, version portable : + ergol_ahk.exe +
+
+

Après lancement, un indicateur apparaît dans la barre des tâches. + Le pilote peut être activé / désactivé avec le raccourci + Alt+AltGr +

Ne nécessite pas de droits d’administration, peut fonctionner depuis + une clé USB.

+
+ +
+ macOS : + ergol.keylayout +
+
+

Enregistrer dans /Library/Keyboard Layouts et relancer + la session. La disposition de clavier est disponible dans les préférences + « Langue et Texte », onglet « Méthodes de saisie ».

+

On peut aussi l’enregistrer dans ~/Library/Keyboard Layouts + (pour le seul utilisateur courant), mais la disposition ne sera pas + active au login.

+

Il est possible (et recommandé) d’utiliser Karabiner pour inverser les touches + ⌘ Command et ⌥ Option à droite, afin d’accéder plus + facilement à la couche de symboles.

+
+ +
+ GNU/Linux : + ergol.xkb_custom +
+
+

Copier le pilote dans xkb/symbols/custom :

+
+    wget https://github.com/Nuclear-Squid/ergol/blob/master/0_7_0/ergol.xkb_custom
+    sudo mv ergol.xkb_custom ${XKB_CONFIG_ROOT:-/usr/share/X11/xkb}/symbols/custom 
+

La disposition de clavier est disponible dans le gestionnaire de + préférences du bureau sous un nom générique (« custom layout », + « disposition personnalisée », etc.). + Sous XOrg on peut aussi l’activer directement en ligne de commande :

+
+    setxkbmap custom 
+

D’autres méthodes d’installation sont possibles, en passant le fichier source à XKalamine. +

Remarque : avec certains bureaux (Gnome notamment), la touche morte + ne fonctionne que si Lafayette est définie comme disposition + de par défaut, i.e. en haut de la liste dans les préférences clavier.

+
+ +
+ +

Licence

+

WTFPL + – Do What the Fuck You Want to Public License.

diff --git a/img/karabiner_altgr.png b/www/content/lts/karabiner_settings.png similarity index 100% rename from img/karabiner_altgr.png rename to www/content/lts/karabiner_settings.png diff --git a/slides/CapitoleDuLibre2023/images/charge_doigts_ergol.png b/www/content/slides/CapitoleDuLibre2023/images/charge_doigts_ergol.png similarity index 100% rename from slides/CapitoleDuLibre2023/images/charge_doigts_ergol.png rename to www/content/slides/CapitoleDuLibre2023/images/charge_doigts_ergol.png diff --git a/slides/CapitoleDuLibre2023/images/ergol_altgr.png b/www/content/slides/CapitoleDuLibre2023/images/ergol_altgr.png similarity index 100% rename from slides/CapitoleDuLibre2023/images/ergol_altgr.png rename to www/content/slides/CapitoleDuLibre2023/images/ergol_altgr.png diff --git a/slides/CapitoleDuLibre2023/images/ergolak.png b/www/content/slides/CapitoleDuLibre2023/images/ergolak.png similarity index 100% rename from slides/CapitoleDuLibre2023/images/ergolak.png rename to www/content/slides/CapitoleDuLibre2023/images/ergolak.png diff --git a/slides/CapitoleDuLibre2023/images/ferris2.jpg b/www/content/slides/CapitoleDuLibre2023/images/ferris2.jpg similarity index 100% rename from slides/CapitoleDuLibre2023/images/ferris2.jpg rename to www/content/slides/CapitoleDuLibre2023/images/ferris2.jpg diff --git a/slides/CapitoleDuLibre2023/images/heatmap_bepo.png b/www/content/slides/CapitoleDuLibre2023/images/heatmap_bepo.png similarity index 100% rename from slides/CapitoleDuLibre2023/images/heatmap_bepo.png rename to www/content/slides/CapitoleDuLibre2023/images/heatmap_bepo.png diff --git a/slides/CapitoleDuLibre2023/images/heatmap_colemak.png b/www/content/slides/CapitoleDuLibre2023/images/heatmap_colemak.png similarity index 100% rename from slides/CapitoleDuLibre2023/images/heatmap_colemak.png rename to www/content/slides/CapitoleDuLibre2023/images/heatmap_colemak.png diff --git a/slides/CapitoleDuLibre2023/images/heatmap_dvorak.png b/www/content/slides/CapitoleDuLibre2023/images/heatmap_dvorak.png similarity index 100% rename from slides/CapitoleDuLibre2023/images/heatmap_dvorak.png rename to www/content/slides/CapitoleDuLibre2023/images/heatmap_dvorak.png diff --git a/slides/CapitoleDuLibre2023/images/heatmap_mtgap.png b/www/content/slides/CapitoleDuLibre2023/images/heatmap_mtgap.png similarity index 100% rename from slides/CapitoleDuLibre2023/images/heatmap_mtgap.png rename to www/content/slides/CapitoleDuLibre2023/images/heatmap_mtgap.png diff --git a/slides/CapitoleDuLibre2023/images/heatmap_qwerty.png b/www/content/slides/CapitoleDuLibre2023/images/heatmap_qwerty.png similarity index 100% rename from slides/CapitoleDuLibre2023/images/heatmap_qwerty.png rename to www/content/slides/CapitoleDuLibre2023/images/heatmap_qwerty.png diff --git a/slides/CapitoleDuLibre2023/images/heatmap_workman.png b/www/content/slides/CapitoleDuLibre2023/images/heatmap_workman.png similarity index 100% rename from slides/CapitoleDuLibre2023/images/heatmap_workman.png rename to www/content/slides/CapitoleDuLibre2023/images/heatmap_workman.png diff --git a/slides/CapitoleDuLibre2023/images/jeu_reponse.png b/www/content/slides/CapitoleDuLibre2023/images/jeu_reponse.png similarity index 100% rename from slides/CapitoleDuLibre2023/images/jeu_reponse.png rename to www/content/slides/CapitoleDuLibre2023/images/jeu_reponse.png diff --git a/slides/CapitoleDuLibre2023/images/jeu_reponse_cache.png b/www/content/slides/CapitoleDuLibre2023/images/jeu_reponse_cache.png similarity index 100% rename from slides/CapitoleDuLibre2023/images/jeu_reponse_cache.png rename to www/content/slides/CapitoleDuLibre2023/images/jeu_reponse_cache.png diff --git a/slides/CapitoleDuLibre2023/images/kinesis_contour.png b/www/content/slides/CapitoleDuLibre2023/images/kinesis_contour.png similarity index 100% rename from slides/CapitoleDuLibre2023/images/kinesis_contour.png rename to www/content/slides/CapitoleDuLibre2023/images/kinesis_contour.png diff --git a/slides/CapitoleDuLibre2023/images/machine_a_ecrire.jpg b/www/content/slides/CapitoleDuLibre2023/images/machine_a_ecrire.jpg similarity index 100% rename from slides/CapitoleDuLibre2023/images/machine_a_ecrire.jpg rename to www/content/slides/CapitoleDuLibre2023/images/machine_a_ecrire.jpg diff --git a/slides/CapitoleDuLibre2023/images/planck2.png b/www/content/slides/CapitoleDuLibre2023/images/planck2.png similarity index 100% rename from slides/CapitoleDuLibre2023/images/planck2.png rename to www/content/slides/CapitoleDuLibre2023/images/planck2.png diff --git a/slides/CapitoleDuLibre2023/images/planck_layers.png b/www/content/slides/CapitoleDuLibre2023/images/planck_layers.png similarity index 100% rename from slides/CapitoleDuLibre2023/images/planck_layers.png rename to www/content/slides/CapitoleDuLibre2023/images/planck_layers.png diff --git a/slides/CapitoleDuLibre2023/images/top10letters.png b/www/content/slides/CapitoleDuLibre2023/images/top10letters.png similarity index 100% rename from slides/CapitoleDuLibre2023/images/top10letters.png rename to www/content/slides/CapitoleDuLibre2023/images/top10letters.png diff --git a/slides/CapitoleDuLibre2023/images/top10letters_ergol.png b/www/content/slides/CapitoleDuLibre2023/images/top10letters_ergol.png similarity index 100% rename from slides/CapitoleDuLibre2023/images/top10letters_ergol.png rename to www/content/slides/CapitoleDuLibre2023/images/top10letters_ergol.png diff --git a/slides/CapitoleDuLibre2023/index.html b/www/content/slides/CapitoleDuLibre2023/index.html similarity index 100% rename from slides/CapitoleDuLibre2023/index.html rename to www/content/slides/CapitoleDuLibre2023/index.html diff --git a/slides/CapitoleDuLibre2023/remark.js b/www/content/slides/CapitoleDuLibre2023/remark.js similarity index 100% rename from slides/CapitoleDuLibre2023/remark.js rename to www/content/slides/CapitoleDuLibre2023/remark.js diff --git a/slides/CapitoleDuLibre2023/style.css b/www/content/slides/CapitoleDuLibre2023/style.css similarity index 100% rename from slides/CapitoleDuLibre2023/style.css rename to www/content/slides/CapitoleDuLibre2023/style.css diff --git a/slides/CapitoleDuLibre2023/vimrc b/www/content/slides/CapitoleDuLibre2023/vimrc similarity index 100% rename from slides/CapitoleDuLibre2023/vimrc rename to www/content/slides/CapitoleDuLibre2023/vimrc diff --git a/slides/HumanTalk2022/images/benchmark_ergol.png b/www/content/slides/HumanTalk2022/images/benchmark_ergol.png similarity index 100% rename from slides/HumanTalk2022/images/benchmark_ergol.png rename to www/content/slides/HumanTalk2022/images/benchmark_ergol.png diff --git a/slides/HumanTalk2022/images/benchmark_qwerty.png b/www/content/slides/HumanTalk2022/images/benchmark_qwerty.png similarity index 100% rename from slides/HumanTalk2022/images/benchmark_qwerty.png rename to www/content/slides/HumanTalk2022/images/benchmark_qwerty.png diff --git a/slides/HumanTalk2022/images/benchmark_qwerty.png.svg b/www/content/slides/HumanTalk2022/images/benchmark_qwerty.png.svg similarity index 100% rename from slides/HumanTalk2022/images/benchmark_qwerty.png.svg rename to www/content/slides/HumanTalk2022/images/benchmark_qwerty.png.svg diff --git a/slides/HumanTalk2022/images/benchmark_workman.png b/www/content/slides/HumanTalk2022/images/benchmark_workman.png similarity index 100% rename from slides/HumanTalk2022/images/benchmark_workman.png rename to www/content/slides/HumanTalk2022/images/benchmark_workman.png diff --git a/slides/HumanTalk2022/images/benchmarks.png b/www/content/slides/HumanTalk2022/images/benchmarks.png similarity index 100% rename from slides/HumanTalk2022/images/benchmarks.png rename to www/content/slides/HumanTalk2022/images/benchmarks.png diff --git a/slides/HumanTalk2022/images/charge_doigts_azerty.png b/www/content/slides/HumanTalk2022/images/charge_doigts_azerty.png similarity index 100% rename from slides/HumanTalk2022/images/charge_doigts_azerty.png rename to www/content/slides/HumanTalk2022/images/charge_doigts_azerty.png diff --git a/slides/HumanTalk2022/images/charge_doigts_bepo.png b/www/content/slides/HumanTalk2022/images/charge_doigts_bepo.png similarity index 100% rename from slides/HumanTalk2022/images/charge_doigts_bepo.png rename to www/content/slides/HumanTalk2022/images/charge_doigts_bepo.png diff --git a/slides/HumanTalk2022/images/top10letters.png b/www/content/slides/HumanTalk2022/images/top10letters.png similarity index 100% rename from slides/HumanTalk2022/images/top10letters.png rename to www/content/slides/HumanTalk2022/images/top10letters.png diff --git a/slides/HumanTalk2022/index.html b/www/content/slides/HumanTalk2022/index.html similarity index 100% rename from slides/HumanTalk2022/index.html rename to www/content/slides/HumanTalk2022/index.html diff --git a/slides/HumanTalk2022/remark.js b/www/content/slides/HumanTalk2022/remark.js similarity index 100% rename from slides/HumanTalk2022/remark.js rename to www/content/slides/HumanTalk2022/remark.js diff --git a/slides/HumanTalk2022/style.css b/www/content/slides/HumanTalk2022/style.css similarity index 100% rename from slides/HumanTalk2022/style.css rename to www/content/slides/HumanTalk2022/style.css diff --git a/slides/HumanTalk2022/vimrc b/www/content/slides/HumanTalk2022/vimrc similarity index 100% rename from slides/HumanTalk2022/vimrc rename to www/content/slides/HumanTalk2022/vimrc diff --git a/slides/jdll2022/images/basic-position.png b/www/content/slides/jdll2022/images/basic-position.png similarity index 100% rename from slides/jdll2022/images/basic-position.png rename to www/content/slides/jdll2022/images/basic-position.png diff --git a/slides/jdll2022/images/ergol42_layout.png b/www/content/slides/jdll2022/images/ergol42_layout.png similarity index 100% rename from slides/jdll2022/images/ergol42_layout.png rename to www/content/slides/jdll2022/images/ergol42_layout.png diff --git a/slides/jdll2022/images/ergol42_lower.png b/www/content/slides/jdll2022/images/ergol42_lower.png similarity index 100% rename from slides/jdll2022/images/ergol42_lower.png rename to www/content/slides/jdll2022/images/ergol42_lower.png diff --git a/slides/jdll2022/images/ergol_top10.png b/www/content/slides/jdll2022/images/ergol_top10.png similarity index 100% rename from slides/jdll2022/images/ergol_top10.png rename to www/content/slides/jdll2022/images/ergol_top10.png diff --git a/slides/jdll2022/images/ergol_top10.svg b/www/content/slides/jdll2022/images/ergol_top10.svg similarity index 100% rename from slides/jdll2022/images/ergol_top10.svg rename to www/content/slides/jdll2022/images/ergol_top10.svg diff --git a/slides/jdll2022/images/ergol_vide.png b/www/content/slides/jdll2022/images/ergol_vide.png similarity index 100% rename from slides/jdll2022/images/ergol_vide.png rename to www/content/slides/jdll2022/images/ergol_vide.png diff --git a/slides/jdll2022/images/ergonomic-basics.png b/www/content/slides/jdll2022/images/ergonomic-basics.png similarity index 100% rename from slides/jdll2022/images/ergonomic-basics.png rename to www/content/slides/jdll2022/images/ergonomic-basics.png diff --git a/slides/jdll2022/images/heatmap_bepo.png b/www/content/slides/jdll2022/images/heatmap_bepo.png similarity index 100% rename from slides/jdll2022/images/heatmap_bepo.png rename to www/content/slides/jdll2022/images/heatmap_bepo.png diff --git a/slides/jdll2022/images/heatmap_colemak.png b/www/content/slides/jdll2022/images/heatmap_colemak.png similarity index 100% rename from slides/jdll2022/images/heatmap_colemak.png rename to www/content/slides/jdll2022/images/heatmap_colemak.png diff --git a/slides/jdll2022/images/heatmap_dvorak.png b/www/content/slides/jdll2022/images/heatmap_dvorak.png similarity index 100% rename from slides/jdll2022/images/heatmap_dvorak.png rename to www/content/slides/jdll2022/images/heatmap_dvorak.png diff --git a/slides/jdll2022/images/heatmap_ergol.png b/www/content/slides/jdll2022/images/heatmap_ergol.png similarity index 100% rename from slides/jdll2022/images/heatmap_ergol.png rename to www/content/slides/jdll2022/images/heatmap_ergol.png diff --git a/slides/jdll2022/images/heatmap_lafayette.png b/www/content/slides/jdll2022/images/heatmap_lafayette.png similarity index 100% rename from slides/jdll2022/images/heatmap_lafayette.png rename to www/content/slides/jdll2022/images/heatmap_lafayette.png diff --git a/slides/jdll2022/images/heatmap_workman.png b/www/content/slides/jdll2022/images/heatmap_workman.png similarity index 100% rename from slides/jdll2022/images/heatmap_workman.png rename to www/content/slides/jdll2022/images/heatmap_workman.png diff --git a/slides/jdll2022/images/mouse-closer.png b/www/content/slides/jdll2022/images/mouse-closer.png similarity index 100% rename from slides/jdll2022/images/mouse-closer.png rename to www/content/slides/jdll2022/images/mouse-closer.png diff --git a/slides/jdll2022/images/superduck.jpg b/www/content/slides/jdll2022/images/superduck.jpg similarity index 100% rename from slides/jdll2022/images/superduck.jpg rename to www/content/slides/jdll2022/images/superduck.jpg diff --git a/slides/jdll2022/images/top10letters.png b/www/content/slides/jdll2022/images/top10letters.png similarity index 100% rename from slides/jdll2022/images/top10letters.png rename to www/content/slides/jdll2022/images/top10letters.png diff --git a/slides/jdll2022/images/touch-type.png b/www/content/slides/jdll2022/images/touch-type.png similarity index 100% rename from slides/jdll2022/images/touch-type.png rename to www/content/slides/jdll2022/images/touch-type.png diff --git a/slides/jdll2022/index.html b/www/content/slides/jdll2022/index.html similarity index 100% rename from slides/jdll2022/index.html rename to www/content/slides/jdll2022/index.html diff --git a/slides/jdll2022/remark.js b/www/content/slides/jdll2022/remark.js similarity index 100% rename from slides/jdll2022/remark.js rename to www/content/slides/jdll2022/remark.js diff --git a/slides/jdll2022/style.css b/www/content/slides/jdll2022/style.css similarity index 100% rename from slides/jdll2022/style.css rename to www/content/slides/jdll2022/style.css diff --git a/slides/jdll2022/vimrc b/www/content/slides/jdll2022/vimrc similarity index 100% rename from slides/jdll2022/vimrc rename to www/content/slides/jdll2022/vimrc diff --git a/www/content/stats.html b/www/content/stats.html new file mode 100644 index 00000000..c048d5b5 --- /dev/null +++ b/www/content/stats.html @@ -0,0 +1,145 @@ ++++ +title = "Heatmap" + +[params] +description = "Fréquences de touches obtenues avec le “Don Quichotte” de Cervantès." +cssSheets = ["/css/heatmap.css"] +jsModules = ["/js/x-keyboard.js", "/js/collapsable-table.js"] +jsScripts = ["/js/layout-analyzer.js", "/js/demo.js"] +footer = "powered by [x-keyboard](https://onedeadkey.github.io/x-keyboard)" ++++ + +
+ + +
+ +
+
+ + + +
+
+ +

+ +Cette disposition ne sait pas générer un nombre non-négligeable de +symboles, les résultats sont peu fiables. + +

+ +

Métriques

+ +

Charge des doigts

+ / +
+ +
+
+ +

Digrammes à un doigt

+ +
+ +
+
+ +

Touches doublées

+ +
+ +
+
+ + + + / + / + / + + +
+
+
+
+
+ + + + / + / + + +
+
+
+
+ + + + / + / + / + + +
+
+
+
+
+ + + + + + + +

Mise en garde

+

Ces métriques ne sont pas des cibles d’optimisation !

+ +
+

Lorsqu'une métrique devient un objectif, elle cesse d'être une bonne métrique.

+

loi de Goodhart

+
+ +
+

Les chiffres sont aux analystes ce que les lampadaires sont aux ivrognes : + ils fournissent bien plus un appui qu'un éclairage. +

— Jean Dion

+ +
+ +

Notre recommandation : utilisez ces métriques non pour mesurer les qualités +d’une disposition de clavier, mais pour essayer d’en évaluer le défaut le plus +gênant. Puis itérez sur votre layout jusqu’à ce que ce que ce défaut soit +suffisamment réduit… sans en créer un pire ailleurs.

+ +

Et recommencez. :-)

diff --git a/www/hugo.toml b/www/hugo.toml new file mode 100644 index 00000000..799a19cc --- /dev/null +++ b/www/hugo.toml @@ -0,0 +1,14 @@ +# baseURL = "https://ergol.org" +relativeURLs = true +languageCode = "fr" +title = "Ergo‑L" + +[params] +subtitle = "Ergonomie optimisée pour le français, l’anglais, le code." +description = "Une disposition de clavier ergonomique de type Colemak, optimisée pour le français, l’anglais et le code." + +[security.exec] +allow = ["pandoc"] + +[markup] +defaultMarkdownHandler = "pandoc" diff --git a/www/layouts/_default/baseof.html b/www/layouts/_default/baseof.html new file mode 100644 index 00000000..ce9613a2 --- /dev/null +++ b/www/layouts/_default/baseof.html @@ -0,0 +1,17 @@ + + + + {{ partial "head.html" . }} + + +
+ {{ partial "header.html" . }} +
+
+ {{ block "main" . }}{{ end }} +
+ + + diff --git a/www/layouts/_default/home.html b/www/layouts/_default/home.html new file mode 100644 index 00000000..89c84cad --- /dev/null +++ b/www/layouts/_default/home.html @@ -0,0 +1,7 @@ +{{ define "main" }} + {{ .Content }} + + + + +{{ end }} diff --git a/www/layouts/_default/list.html b/www/layouts/_default/list.html new file mode 100644 index 00000000..0dfbd7e5 --- /dev/null +++ b/www/layouts/_default/list.html @@ -0,0 +1,8 @@ +{{ define "main" }} + + {{ .Content }} + {{ range .Pages }} +

{{ .LinkTitle }}

+ {{ .Summary }} + {{ end }} +{{ end }} diff --git a/www/layouts/_default/single.html b/www/layouts/_default/single.html new file mode 100644 index 00000000..e0e83081 --- /dev/null +++ b/www/layouts/_default/single.html @@ -0,0 +1,3 @@ +{{ define "main" }} + {{ .Content }} +{{ end }} diff --git a/www/layouts/partials/footer.html b/www/layouts/partials/footer.html new file mode 100644 index 00000000..ef19944b --- /dev/null +++ b/www/layouts/partials/footer.html @@ -0,0 +1,3 @@ +{{ .Params.footer | markdownify }} +GitHub | +Discord diff --git a/www/layouts/partials/head.html b/www/layouts/partials/head.html new file mode 100644 index 00000000..87d2f402 --- /dev/null +++ b/www/layouts/partials/head.html @@ -0,0 +1,8 @@ + + +{{ if .IsHome }}{{ site.Title }}{{ else }}{{ printf "%s | %s" .Title site.Title }}{{ end }} + + + +{{ partial "head/js.html" . }} +{{ partial "head/css.html" . }} diff --git a/www/layouts/partials/head/css.html b/www/layouts/partials/head/css.html new file mode 100644 index 00000000..177795f5 --- /dev/null +++ b/www/layouts/partials/head/css.html @@ -0,0 +1,22 @@ +{{- with resources.Get "css/layout.css" }} + {{- if eq hugo.Environment "development" }} + + {{- else }} + {{- with . | minify | fingerprint }} + + {{- end }} + {{- end }} +{{- end }} + +{{ range .Params.cssSheets }} + {{- with resources.Get . }} + {{- if eq hugo.Environment "development" }} + + {{- else }} + {{- with . | minify | fingerprint }} + + {{- end }} + {{- end }} + {{- end }} +{{ end }} + diff --git a/www/layouts/partials/head/js.html b/www/layouts/partials/head/js.html new file mode 100644 index 00000000..0094e30b --- /dev/null +++ b/www/layouts/partials/head/js.html @@ -0,0 +1,23 @@ +{{ range .Params.JsModules }} + {{- with resources.Get . }} + {{- if eq hugo.Environment "development" }} + + {{- else }} + {{- with . | minify | fingerprint }} + + {{- end }} + {{- end }} + {{- end }} +{{ end }} + +{{ range .Params.JsScripts }} + {{- with resources.Get . }} + {{- if eq hugo.Environment "development" }} + + {{- else }} + {{- with . | minify | fingerprint }} + + {{- end }} + {{- end }} + {{- end }} +{{ end }} diff --git a/www/layouts/partials/header.html b/www/layouts/partials/header.html new file mode 100644 index 00000000..72e77ac2 --- /dev/null +++ b/www/layouts/partials/header.html @@ -0,0 +1,17 @@ + + + + +{{ partial "menu.html" (dict "menuID" "main" "page" .) }} + +

{{ .Title }}

diff --git a/www/layouts/partials/menu.html b/www/layouts/partials/menu.html new file mode 100644 index 00000000..71831809 --- /dev/null +++ b/www/layouts/partials/menu.html @@ -0,0 +1,51 @@ +{{- /* +Renders a menu for the given menu ID. + +@context {page} page The current page. +@context {string} menuID The menu ID. + +@example: {{ partial "menu.html" (dict "menuID" "main" "page" .) }} +*/}} + +{{- $page := .page }} +{{- $menuID := .menuID }} + +{{- with index site.Menus $menuID }} + +{{- end }} + +{{- define "partials/inline/menu/walk.html" }} + {{- $page := .page }} + {{- range .menuEntries }} + {{- $attrs := dict "href" .URL }} + {{- if $page.IsMenuCurrent .Menu . }} + {{- $attrs = merge $attrs (dict "class" "active" "aria-current" "page") }} + {{- else if $page.HasMenuCurrent .Menu .}} + {{- $attrs = merge $attrs (dict "class" "ancestor" "aria-current" "true") }} + {{- end }} + {{- $name := .Name }} + {{- with .Identifier }} + {{- with T . }} + {{- $name = . }} + {{- end }} + {{- end }} +
  • + {{ $name }} + {{- with .Children }} + + {{- end }} +
  • + {{- end }} +{{- end }} diff --git a/www/layouts/partials/terms.html b/www/layouts/partials/terms.html new file mode 100644 index 00000000..47cf6e41 --- /dev/null +++ b/www/layouts/partials/terms.html @@ -0,0 +1,23 @@ +{{- /* +For a given taxonomy, renders a list of terms assigned to the page. + +@context {page} page The current page. +@context {string} taxonomy The taxonony. + +@example: {{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }} +*/}} + +{{- $page := .page }} +{{- $taxonomy := .taxonomy }} + +{{- with $page.GetTerms $taxonomy }} + {{- $label := (index . 0).Parent.LinkTitle }} +
    +
    {{ $label }}:
    + +
    +{{- end }} diff --git a/www/layouts/shortcodes/x-keyboard.html b/www/layouts/shortcodes/x-keyboard.html new file mode 100644 index 00000000..ec597a4a --- /dev/null +++ b/www/layouts/shortcodes/x-keyboard.html @@ -0,0 +1,33 @@ +
    + {{ with .Get "image" }} + +

    + powered by x-keyboard + + géométrie : + +

    + {{ end }} + +
    + +{{ $name := .Get "name" }} + +{{ with .Get "src" }} + + + + +{{ end }} + diff --git a/www/static/corpus b/www/static/corpus new file mode 120000 index 00000000..ed3814a9 --- /dev/null +++ b/www/static/corpus @@ -0,0 +1 @@ +../../corpus \ No newline at end of file diff --git a/favicon.svg b/www/static/favicon.svg similarity index 90% rename from favicon.svg rename to www/static/favicon.svg index ca66985b..309df766 100644 --- a/favicon.svg +++ b/www/static/favicon.svg @@ -7,9 +7,13 @@ .red { fill: hsl( 0, 92%, 50%); } .blue { fill: hsl(200, 100%, 40%); } .yellow { fill: hsl( 50, 100%, 50%); } - #logo { fill: #333; } - @media (prefers-color-scheme: dark) { #logo { fill: #fff; } } + #rocket { fill: #544; } + @media (prefers-color-scheme: dark) { #rocket { fill: #cbb; } } + + /* favicon */ @media (max-width: 32px) { #oif path { fill: none; } } + @media (max-width: 32px) and (prefers-color-scheme: dark) { #rocket { fill: #fff; } } + @media (max-width: 32px) and (prefers-color-scheme: light) { #rocket { fill: #333; } } @@ -22,7 +26,7 @@ -