diff --git a/print.html b/print.html index 491a062..fe021b1 100644 --- a/print.html +++ b/print.html @@ -1192,6 +1192,7 @@
The reading page has frames for the content and the form and dictionaries. Hide the borders with this:
#read_pane_right::after {
background-color: transparent;
width: 4px;
@@ -1202,6 +1203,9 @@
+div#thetext {writing-mode: vertical-rl;}
+
body { font-family: "Comic Sans MS"; }
diff --git a/searchindex.js b/searchindex.js
index 9cd7d4c..0cd11e0 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Object.assign(window.search, {"doc_urls":["intro.html#introduction","background.html#background","background.html#lute-alternatives","background.html#should-i-use-lute-lwt-hugos-fork-or-something-else","background.html#so-why-even-consider-lute","background.html#why-might-you-not-use-lute","install/install.html#installation","install/install.html#using-pip","install/install.html#using-docker","install/install.html#from-source","install/windows/index.html#windows","install/windows/windows-10-32-bit-using-python.html#windows-10-32-bit-using-python","install/windows/windows-10-32-bit-using-python.html#detailed-instructions","install/windows/windows-10-32-bit-using-python.html#stopping-lute","install/windows/windows-10-32-bit-using-python.html#restarting-lute","install/windows/windows-using-docker.html#windows-using-docker","install/windows/windows-using-docker.html#1-start-docker-desktop","install/windows/windows-using-docker.html#2-create-the-necessary-folders","install/windows/windows-using-docker.html#3-create-docker-composeyml","install/windows/windows-using-docker.html#4-open-a-command-prompt-and-go-to-the-my_lute-folder","install/windows/windows-using-docker.html#5-run-it","install/windows/windows-using-docker.html#troubleshooting","install/mecab.html#installation","install/mecab.html#mac","install/mecab.html#windows","install/mecab.html#verifying-on-windows","install/mecab.html#continuing-on","install/mecab.html#linux","install/mecab.html#verification","install/mecab.html#lute-configuration","install/mecab.html#sample-mecab_path-values","install/mecab.html#finding-the-mecab-library","install/troubleshooting.html#troubleshooting","install/troubleshooting.html#certificate_verify_failed","install/beta-releases.html#beta-releases","usage/starting-and-stopping.html#starting-and-stopping","usage/starting-and-stopping.html#if-using-pip","usage/starting-and-stopping.html#custom-configyml","usage/starting-and-stopping.html#pythonpip-startup-options","usage/starting-and-stopping.html#if-using-docker","usage/starting-and-stopping.html#if-you-installed-from-source","usage/starting-and-stopping.html#startup-scripts","usage/starting-and-stopping.html#on-a-mac-with-pip","usage/starting-and-stopping.html#on-windows-with-pip","usage/language-setup.html#defining-a-language","usage/language-setup.html#dictionary-1-and-2","usage/language-setup.html#image-lookups","usage/language-setup.html#sentence-lookups","usage/language-setup.html#external-dictionary-lookups","usage/books.html#creating-books","usage/books.html#from-input-or-files","usage/books.html#importing-web-pages","usage/reading.html#reading","usage/keyboard-bindings.html#key-bindings","usage/keyboard-bindings.html#navigation","usage/keyboard-bindings.html#misc-actions","usage/keyboard-bindings.html#updating-status","usage/overlapping-terms.html#overlapping-terms","usage/tutorial.html#the-demo-tutorial","usage/terms.html#terms","usage/terms.html#filtering","usage/terms.html#searching","usage/terms.html#csv-export","usage/parent-terms.html#parent-terms","usage/parent-terms.html#setting-an-existing-term-as-a-parent","usage/parent-terms.html#defining-a-term-and-a-new-parent","usage/parent-terms.html#click-a-parent-tag-to-edit-the-parent-term","usage/parent-terms.html#multiple-parents","usage/parent-terms.html#bulk-assigning-parents","usage/parent-terms.html#1-search-for-the-terms-you-want","usage/parent-terms.html#2-check-the-boxes-next-to-the-terms-you-want-to-assign","usage/parent-terms.html#2-set-the-parent","usage/parent-terms-bulk-mapping.html#bulk-mapping-parent-terms","usage/parent-terms-bulk-mapping.html#what-mapping-does","usage/parent-terms-bulk-mapping.html#the-import-mapping-file","usage/parent-terms-bulk-mapping.html#generating-an-import-file","usage/parent-terms-bulk-mapping.html#exporting-books-vs-language","usage/parent-terms-bulk-mapping.html#why-isnt-this-automatically-built-in-to-lute","usage/bulk-term-import.html#bulk-term-import","usage/bulk-term-import.html#csv-file-format","usage/bulk-term-import.html#field-notes","usage/bulk-term-import.html#examples","usage/bulk-term-import.html#ex-1---single-record","usage/bulk-term-import.html#ex-2---carriage-return-in-field","usage/bulk-term-import.html#ex-3---parent-record","usage/bulk-term-import.html#ex-4---translation-only","usage/bulk-term-import.html#ex-5---multiple-parents","usage/bulk-term-import.html#creating-csv-files","usage/themes/themes.html#themes","usage/themes/themes.html#the-currently-available-themes","usage/themes/themes.html#default","usage/themes/themes.html#apple-books","usage/themes/themes.html#dark-slate","usage/themes/themes.html#night","usage/themes/themes.html#change-theme-hotkey---m","usage/themes/toggling-highlights.html#toggling-highlights","usage/themes/toggling-highlights.html#toggling-highlight-hotkey-h","usage/themes/custom-styles.html#custom-styles","usage/themes/custom-styles.html#styling-examples-for-your-inspiration","usage/themes/custom-styles.html#change-colors","usage/themes/custom-styles.html#language-specific-styles","usage/themes/custom-styles.html#larger-text-with-more-space-between-each-line","usage/themes/custom-styles.html#hide-the-green-checkmarks-at-the-bottom-of-the-reading-pane","usage/themes/custom-styles.html#text-justification","usage/themes/custom-styles.html#paragraph-spacing","usage/themes/custom-styles.html#hide-the-frame-borders","usage/themes/custom-styles.html#why-would-you-ever-do-this","usage/themes/custom-styles.html#notes","usage/audio.html#adding-audio","usage/audio.html#adding-audio-1","usage/audio.html#the-player","usage/audio.html#bookmarks","usage/audio.html#suggestions-for-using-audio","usage/audio.html#why-isnt-the-player-synced-with-the-pages","backup/backup.html#backup","backup/backup.html#configuration","backup/backup.html#manual-and-automatic-backups","backup/backup.html#automatic-backups-only-run-from-the-home-screen","backup/restore.html#restoring-backups","backup/restore.html#database-restores","backup/restore.html#image-restores","backup/restore.html#test-your-backups","backup/restore.html#checking-database-backupa","backup/restore.html#check-using-queries","backup/restore.html#check-using-lute-itself-replace-your-current-db-with-a-backup-and-verify","backup/restore.html#checking-image-backup","usage/command-line-jobs.html#command-line-jobs","usage/command-line-jobs.html#how-to-run-the-jobs","usage/command-line-jobs.html#sample-calls","usage/command-line-jobs.html#configyml-file","usage/command-line-jobs.html#why-arent-these-built-into-the-ui","usage/command-line-jobs.html#docker-users","usage/command-line-jobs.html#1-ssh-into-the-running-docker-instance","usage/command-line-jobs.html#2-with-pip","usage/updating.html#updating-lute","usage/updating.html#-if-using-pip","usage/updating.html#-if-using-docker","usage/updating.html#-if-using-source","usage/updating.html#keeping-up-to-date-when-installing-from-source","faq/help.html#where-can-i-get-help","faq/setup/web-server.html#can-i-run-lute-on-a-private-web-server","faq/setup/usb.html#can-i-store-lute-data-on-a-usb-key","faq/setup/usb.html#pip","faq/setup/usb.html#docker","faq/adding-basic-auth.html#can-i-make-lute-secure","faq/adding-basic-auth.html#docker-composeyml","faq/adding-basic-auth.html#nginxconf","faq/adding-basic-auth.html#htpasswd","faq/adding-basic-auth.html#start-it-up","faq/online-lute.html#is-there-an-online-version-of-lute","faq/defining-language.html#how-can-i-figure-out-my-languages-word-characters","faq/defining-language.html#understanding-the-word-characters-field","faq/add-a-language.html#can-you-add-language-x","faq/books/finding-stuff.html#where-can-i-find-books-to-import","faq/books/epub-import.html#why-wont-my-epub-import-correctly","faq/terms-cannot-be-changed-once-created.html#why-cant-i-change-a-term","faq/sentences-only-shown-when-page-is-read.html#where-are-my-new-terms-sentences","faq/v2-to-v3.html#migrating-from-v2-to-v3","faq/v2-to-v3.html#database-and-images","faq/v2-to-v3.html#for-non-docker-users","faq/v2-to-v3.html#for-docker-users","faq/v2-to-v3.html#backup-settings","faq/v2-to-v3.html#custom-styles","faq/import-from-other-systems.html#can-i-import-data-from-other-systems","faq/import-from-other-systems.html#importing-data-from-lwt","faq/stats.html#the-stats-calculation","faq/stats.html#example","faq/stats.html#cant-lute-calculate-the-percent-using-the-whole-text","faq/why-no-flashcards.html#why-doesnt-lute-have-flashcards-or-an-srs","faq/free.html#why-is-this-free","misc/changelog.html#changelog","misc/changelog.html#notes-about-the-version-numbers","misc/changelog.html#stable-versions","misc/changelog.html#beta-launches","misc/backlog.html#backlog","misc/doc-feedback.html#documentation-feedback"],"index":{"documentStore":{"docInfo":{"0":{"body":115,"breadcrumbs":2,"title":1},"1":{"body":147,"breadcrumbs":2,"title":1},"10":{"body":68,"breadcrumbs":3,"title":1},"100":{"body":29,"breadcrumbs":6,"title":3},"101":{"body":9,"breadcrumbs":10,"title":7},"102":{"body":13,"breadcrumbs":9,"title":6},"103":{"body":8,"breadcrumbs":5,"title":2},"104":{"body":17,"breadcrumbs":5,"title":2},"105":{"body":12,"breadcrumbs":6,"title":3},"106":{"body":7,"breadcrumbs":3,"title":0},"107":{"body":50,"breadcrumbs":4,"title":1},"108":{"body":16,"breadcrumbs":4,"title":2},"109":{"body":26,"breadcrumbs":4,"title":2},"11":{"body":28,"breadcrumbs":15,"title":6},"110":{"body":55,"breadcrumbs":3,"title":1},"111":{"body":38,"breadcrumbs":3,"title":1},"112":{"body":24,"breadcrumbs":5,"title":3},"113":{"body":88,"breadcrumbs":6,"title":4},"114":{"body":25,"breadcrumbs":2,"title":1},"115":{"body":142,"breadcrumbs":2,"title":1},"116":{"body":76,"breadcrumbs":4,"title":3},"117":{"body":27,"breadcrumbs":6,"title":5},"118":{"body":57,"breadcrumbs":5,"title":2},"119":{"body":93,"breadcrumbs":5,"title":2},"12":{"body":185,"breadcrumbs":11,"title":2},"120":{"body":22,"breadcrumbs":5,"title":2},"121":{"body":9,"breadcrumbs":5,"title":2},"122":{"body":12,"breadcrumbs":6,"title":3},"123":{"body":50,"breadcrumbs":6,"title":3},"124":{"body":18,"breadcrumbs":12,"title":9},"125":{"body":106,"breadcrumbs":6,"title":3},"126":{"body":24,"breadcrumbs":6,"title":3},"127":{"body":56,"breadcrumbs":5,"title":2},"128":{"body":19,"breadcrumbs":5,"title":2},"129":{"body":11,"breadcrumbs":5,"title":2},"13":{"body":10,"breadcrumbs":11,"title":2},"130":{"body":60,"breadcrumbs":6,"title":3},"131":{"body":21,"breadcrumbs":5,"title":2},"132":{"body":75,"breadcrumbs":8,"title":5},"133":{"body":52,"breadcrumbs":5,"title":2},"134":{"body":15,"breadcrumbs":4,"title":2},"135":{"body":21,"breadcrumbs":4,"title":2},"136":{"body":28,"breadcrumbs":4,"title":2},"137":{"body":28,"breadcrumbs":4,"title":2},"138":{"body":87,"breadcrumbs":7,"title":5},"139":{"body":35,"breadcrumbs":2,"title":1},"14":{"body":43,"breadcrumbs":11,"title":2},"140":{"body":49,"breadcrumbs":11,"title":5},"141":{"body":13,"breadcrumbs":11,"title":5},"142":{"body":32,"breadcrumbs":7,"title":1},"143":{"body":12,"breadcrumbs":7,"title":1},"144":{"body":46,"breadcrumbs":7,"title":3},"145":{"body":55,"breadcrumbs":6,"title":2},"146":{"body":75,"breadcrumbs":5,"title":1},"147":{"body":20,"breadcrumbs":5,"title":1},"148":{"body":21,"breadcrumbs":6,"title":2},"149":{"body":73,"breadcrumbs":7,"title":3},"15":{"body":20,"breadcrumbs":8,"title":3},"150":{"body":56,"breadcrumbs":11,"title":5},"151":{"body":37,"breadcrumbs":10,"title":4},"152":{"body":20,"breadcrumbs":7,"title":3},"153":{"body":13,"breadcrumbs":7,"title":3},"154":{"body":58,"breadcrumbs":9,"title":4},"155":{"body":117,"breadcrumbs":7,"title":3},"156":{"body":83,"breadcrumbs":7,"title":3},"157":{"body":0,"breadcrumbs":7,"title":3},"158":{"body":23,"breadcrumbs":6,"title":2},"159":{"body":36,"breadcrumbs":7,"title":3},"16":{"body":7,"breadcrumbs":9,"title":4},"160":{"body":29,"breadcrumbs":6,"title":2},"161":{"body":16,"breadcrumbs":6,"title":2},"162":{"body":19,"breadcrumbs":6,"title":2},"163":{"body":11,"breadcrumbs":6,"title":3},"164":{"body":112,"breadcrumbs":6,"title":3},"165":{"body":55,"breadcrumbs":4,"title":2},"166":{"body":29,"breadcrumbs":3,"title":1},"167":{"body":73,"breadcrumbs":9,"title":7},"168":{"body":133,"breadcrumbs":8,"title":4},"169":{"body":94,"breadcrumbs":2,"title":1},"17":{"body":36,"breadcrumbs":9,"title":4},"170":{"body":3,"breadcrumbs":2,"title":1},"171":{"body":12,"breadcrumbs":4,"title":3},"172":{"body":22,"breadcrumbs":3,"title":2},"173":{"body":49,"breadcrumbs":3,"title":2},"174":{"body":23,"breadcrumbs":2,"title":1},"175":{"body":12,"breadcrumbs":4,"title":2},"18":{"body":24,"breadcrumbs":9,"title":4},"19":{"body":82,"breadcrumbs":12,"title":7},"2":{"body":50,"breadcrumbs":3,"title":2},"20":{"body":25,"breadcrumbs":7,"title":2},"21":{"body":43,"breadcrumbs":6,"title":1},"22":{"body":27,"breadcrumbs":3,"title":1},"23":{"body":17,"breadcrumbs":3,"title":1},"24":{"body":70,"breadcrumbs":3,"title":1},"25":{"body":52,"breadcrumbs":4,"title":2},"26":{"body":19,"breadcrumbs":3,"title":1},"27":{"body":14,"breadcrumbs":3,"title":1},"28":{"body":4,"breadcrumbs":3,"title":1},"29":{"body":58,"breadcrumbs":4,"title":2},"3":{"body":85,"breadcrumbs":7,"title":6},"30":{"body":31,"breadcrumbs":5,"title":3},"31":{"body":62,"breadcrumbs":5,"title":3},"32":{"body":9,"breadcrumbs":2,"title":1},"33":{"body":26,"breadcrumbs":2,"title":1},"34":{"body":81,"breadcrumbs":4,"title":2},"35":{"body":21,"breadcrumbs":4,"title":2},"36":{"body":32,"breadcrumbs":4,"title":2},"37":{"body":44,"breadcrumbs":4,"title":2},"38":{"body":54,"breadcrumbs":5,"title":3},"39":{"body":33,"breadcrumbs":4,"title":2},"4":{"body":105,"breadcrumbs":4,"title":3},"40":{"body":14,"breadcrumbs":4,"title":2},"41":{"body":11,"breadcrumbs":4,"title":2},"42":{"body":55,"breadcrumbs":4,"title":2},"43":{"body":49,"breadcrumbs":4,"title":2},"44":{"body":17,"breadcrumbs":4,"title":2},"45":{"body":52,"breadcrumbs":5,"title":3},"46":{"body":52,"breadcrumbs":4,"title":2},"47":{"body":6,"breadcrumbs":4,"title":2},"48":{"body":25,"breadcrumbs":5,"title":3},"49":{"body":0,"breadcrumbs":4,"title":2},"5":{"body":89,"breadcrumbs":3,"title":2},"50":{"body":10,"breadcrumbs":4,"title":2},"51":{"body":56,"breadcrumbs":5,"title":3},"52":{"body":110,"breadcrumbs":2,"title":1},"53":{"body":21,"breadcrumbs":5,"title":2},"54":{"body":42,"breadcrumbs":4,"title":1},"55":{"body":33,"breadcrumbs":5,"title":2},"56":{"body":35,"breadcrumbs":5,"title":2},"57":{"body":92,"breadcrumbs":5,"title":2},"58":{"body":641,"breadcrumbs":5,"title":2},"59":{"body":9,"breadcrumbs":2,"title":1},"6":{"body":58,"breadcrumbs":2,"title":1},"60":{"body":63,"breadcrumbs":2,"title":1},"61":{"body":27,"breadcrumbs":2,"title":1},"62":{"body":39,"breadcrumbs":3,"title":2},"63":{"body":29,"breadcrumbs":5,"title":2},"64":{"body":23,"breadcrumbs":7,"title":4},"65":{"body":72,"breadcrumbs":7,"title":4},"66":{"body":29,"breadcrumbs":9,"title":6},"67":{"body":32,"breadcrumbs":5,"title":2},"68":{"body":23,"breadcrumbs":6,"title":3},"69":{"body":27,"breadcrumbs":7,"title":4},"7":{"body":136,"breadcrumbs":3,"title":2},"70":{"body":2,"breadcrumbs":10,"title":7},"71":{"body":13,"breadcrumbs":6,"title":3},"72":{"body":95,"breadcrumbs":9,"title":4},"73":{"body":107,"breadcrumbs":6,"title":1},"74":{"body":20,"breadcrumbs":8,"title":3},"75":{"body":39,"breadcrumbs":8,"title":3},"76":{"body":83,"breadcrumbs":9,"title":4},"77":{"body":129,"breadcrumbs":9,"title":4},"78":{"body":19,"breadcrumbs":7,"title":3},"79":{"body":37,"breadcrumbs":7,"title":3},"8":{"body":114,"breadcrumbs":3,"title":2},"80":{"body":74,"breadcrumbs":6,"title":2},"81":{"body":0,"breadcrumbs":5,"title":1},"82":{"body":18,"breadcrumbs":8,"title":4},"83":{"body":16,"breadcrumbs":9,"title":5},"84":{"body":25,"breadcrumbs":8,"title":4},"85":{"body":2,"breadcrumbs":7,"title":3},"86":{"body":4,"breadcrumbs":8,"title":4},"87":{"body":54,"breadcrumbs":7,"title":3},"88":{"body":11,"breadcrumbs":2,"title":1},"89":{"body":0,"breadcrumbs":4,"title":3},"9":{"body":46,"breadcrumbs":2,"title":1},"90":{"body":0,"breadcrumbs":2,"title":1},"91":{"body":0,"breadcrumbs":3,"title":2},"92":{"body":0,"breadcrumbs":3,"title":2},"93":{"body":0,"breadcrumbs":2,"title":1},"94":{"body":11,"breadcrumbs":5,"title":4},"95":{"body":31,"breadcrumbs":5,"title":2},"96":{"body":6,"breadcrumbs":7,"title":4},"97":{"body":51,"breadcrumbs":5,"title":2},"98":{"body":0,"breadcrumbs":6,"title":3},"99":{"body":48,"breadcrumbs":5,"title":2}},"docs":{"0":{"body":"LUTE (Learning Using Texts) is a standalone web application that you install on your computer and read texts with. Lute contains the core features you need for learning through reading: defining languages and dictionaries creating and editing texts creating terms and multi-word terms In addition, Lute has features missing from other tools, which I consider absolutely essential: Defining \"parent terms\". For example, for Spanish, hablar (to speak) is the root form of habló (he spoke). In Lute, you can set a root form as the Parent Term, and the definition for that root form is available for all child terms. Also, when you ask Lute for sample sentences using a term, it includes sentences for all related terms as well. Adding word images. This helps learning, and is more interesting and entertaining than adding reams of text. Lute v3 demo This 5-minute video gives a very brief demonstration and shows how easy it is to install Lute: Lute has many other features, see the sidebar and browse around. Lute is a work in progress, as is all software, but it works. I've been using it to learn Spanish, and it's super.","breadcrumbs":"Introduction » Introduction","id":"0","title":"Introduction"},"1":{"body":"Lute -- Learning Using Texts -- is software for learning foreign languages by reading. In summary, you import foreign language texts into Lute, and read through them, creating saved definitions and associations for words as you read. As you read more, you continue to build your personal dictionary. I am currently using Lute to read texts in Spanish, and it works great. It should work very well for other left-to-right languages like French, German, English, Italian, Classical Chinese, etc. Lute can also handle right-to-left languages like Persion, and with some extra tools installed, Japanese. Lute has a few features which I feel are critical: Parent terms. For example, in Spanish, \"hablo\" is a conjugation of \"hablar\". With Lute, you can specify these links, and see how different forms are used in the texts you read. Images. Lute lets you add an image to words. It's much more fun and intuitive to attach a picture of a cat to a Spanish term \"gato\". In addition, the spirit of Lute is full open-source software: Installed locally. I am leery of sending an data to a company that may change their direction or disappear, or change their pricing. Data control. Lute runs on your machine. You own the data, you can do what you want with it. Ultimately, I hope for Lute to interoperate seamlessly with other tools, rather than become yet another closed garden. Free, no limits. I've benefitted hugely from free tools such as Anki -- my hope is that Lute, or a successor, makes an impact.","breadcrumbs":"Background » Background","id":"1","title":"Background"},"10":{"body":"Windows sometimes makes installations more challenging due to OS variants and lack of support for som tech. Some users have provided more detailed instructions for Windows: The YouTube channel is4ndroide made a fantastic video on installing Lute for Windows . [1] Windows 10 (32 bit) using Python and pip Windows using Docker Discord user Keruah noted that you may need to set the Execution Policy for the shell script: \"... when you launch the environment script, your Windows may say that you don't have permissions ... open PowerShell, and type Set-ExecutionPolicy -ExecutionPolicy RemoteSigned to define the policy.\" -- See about Execution Policies - PowerShell","breadcrumbs":"Installing on Windows » Windows","id":"10","title":"Windows"},"100":{"body":"You might want different colors or font sizes for different languages. You can get the language ID by clicking on it in the language listing (Settings > Languages), it's at the end of the URL; e.g., http://localhost:5000/language/edit/9, \"9\" is the ID. span.status0[lid=\"8\"] { background-color: red; }\nspan.status0[lid=\"4\"] { background-color: blue; }","breadcrumbs":"Themes » Custom styles » Language-specific styles","id":"100","title":"Language-specific styles"},"101":{"body":"div#thetext p { line-height: 2; }\nspan.textitem { font-size: 18px; }","breadcrumbs":"Themes » Custom styles » Larger text with more space between each line","id":"101","title":"Larger text with more space between each line"},"102":{"body":"Clicking the green checks sets unknown to well-known, which you might not like. #footerMarkRestAsKnown { display: none; }\n#footerMarkRestAsKnownNextPage { display: none; }","breadcrumbs":"Themes » Custom styles » Hide the green checkmarks at the bottom of the reading pane","id":"102","title":"Hide the green checkmarks at the bottom of the reading pane"},"103":{"body":"div#thetext { text-align: justify; text-justify: inter-word;\n}","breadcrumbs":"Themes » Custom styles » Text justification","id":"103","title":"Text justification"},"104":{"body":"#thetext p:after { content: \"\\00a0\"; /* Adds a non-breaking space */ display: block; margin-bottom: 10px; /* Adjust the value for the desired space */\n}","breadcrumbs":"Themes » Custom styles » Paragraph spacing","id":"104","title":"Paragraph spacing"},"105":{"body":"#read_pane_right::after { background-color: transparent; width: 4px;\n} .dictframecontainer::after { background-color: transparent; height: 4px;\n}","breadcrumbs":"Themes » Custom styles » Hide the frame borders","id":"105","title":"Hide the frame borders"},"106":{"body":"body { font-family: \"Comic Sans MS\"; } Yuck.","breadcrumbs":"Themes » Custom styles » Why would you ever do this?","id":"106","title":"Why would you ever do this?"},"107":{"body":"The styles used by Lute out-of-the-box are in the GitHub repo , hack away! The data you put in the text box must be valid CSS, as it is picked up verbatim and inserted into the HTML. Some of the current css class names are bad (e.g. \"status98\" means \"ignored\", but that's pretty hard to follow). If those class names get changed in a future release, I'll add a note in the release notes. Using css is pretty tricky, but it works for now!","breadcrumbs":"Themes » Custom styles » Notes:","id":"107","title":"Notes:"},"108":{"body":"Feature added in Lute 3.0.5 Lute lets you add an audio file (.mp3, .wav, .ogg) to any book so you can listen to your book as you read.","breadcrumbs":"Adding audio » Adding audio","id":"108","title":"Adding audio"},"109":{"body":"You can add audio to a new book during creation, or to an existing book using the \"Edit\" icon in the book listing. Lute stores a copy of the added audio in your data folder, in the same folder where it stores your database and user images.","breadcrumbs":"Adding audio » Adding audio","id":"109","title":"Adding audio"},"11":{"body":"(Instructions courtesy of user axmanalex, so you'll see that username in these notes.) A summary of what you're doing: Download and install Python 3.8.0 , and put Python on your system PATH Create a directory in your Documents Install Lute into a virtual environment, and start it up.","breadcrumbs":"Installing on Windows » Windows 10 (32 bit) using Python and pip » Windows 10 (32 bit) using Python","id":"11","title":"Windows 10 (32 bit) using Python"},"110":{"body":"If your book has an audio file, a player is included on the reading page: image You can do the usual things: start and pause the player, fast-forward and rewind, and increase/decrease the playback speed. The spacebar also starts and pauses the player. The \"sticky player\" toggle sticks the player to the bottom of the screen. When you start the player, it plays until you stop it, or until you open the Term form by clicking on a word or defining a new multi-word Term. Once you've defined a term, click Play to restart the player from where it stopped.","breadcrumbs":"Adding audio » The player","id":"110","title":"The player"},"111":{"body":"You can add and remove bookmarks to your book's audio, and jump back and forth along the timeline to your bookmarks. Lute's audio playback is not syncronized with the text or pages in any way, so for multi-page books with audio, you'll likely want to use bookmarks to note the start of each page. If you move back and forth between pages, the player doesn't follow you.","breadcrumbs":"Adding audio » Bookmarks","id":"111","title":"Bookmarks"},"112":{"body":"A suggestion only, do how you see fit! Do several passes through the book and audio, marking each new page with a bookmark, adding any new Terms as needed. Re-listen and read along Listen to the audio alone","breadcrumbs":"Adding audio » Suggestions for using audio","id":"112","title":"Suggestions for using audio"},"113":{"body":"Good question. There are a few reasons, none of which may satisfy you! Currently, Lute lets you add an arbitrary number of bookmarks to each book audio. There is no simple way to differentiate between an arbitrary bookmark vs. a special bookmark indicating the start of a page. I believe that audio books are vital for the beginning and intermediate phases of learning, for which the reading materials are likely going to be short. Syncing is not as critical here, as you will be able to find the accompanying portion of the audio track easily using simple bookmarks. Syncing audio to page turns is possible, and perhaps will be delivered at some point in the future (if a developer really wants it!). Having used this feature myself, I find the current implementation completely satisfactory -- I rarely jump around to random pages in lengthy texts. Lute's still open source software, so we do the best we can in the time we have available to work on it!","breadcrumbs":"Adding audio » Why isn't the player synced with the pages?","id":"113","title":"Why isn't the player synced with the pages?"},"114":{"body":"Lute provides a simple backup facility that creates copies your Sqlite database and all of your term images to a backup folder that you specify. You don't have to use it, but please be sure that you have some kind of backup strategy in place! Back up your stuff!","breadcrumbs":"Backup » Backup","id":"114","title":"Backup"},"115":{"body":"Backup is configured in the Settings. Setting Values Notes Backup enabled yes or no Set to \"yes\" if you want to run them through the Lute UI or have Lute do daily backups, and \"no\" if you're handling your own backups with scripts or whatever. Backup directory (Non-Docker users only) Full directory path This is the existing directory where a gzipped database export, and copy of all of your images, will be sent. Set this to something that is backed up, such as to a DropBox folder or similar. This is disabled for Docker users, because the backup directory has to be mounted to a host folder. Run backups automatically (daily) yes or no If yes, Lute will run the backup from the Home page every day. Note that this is only from the Home page, so if you have a book open for reading for 2 weeks, it won't be backed up. :-) Warn if backup hasn't run in a week yes or no If yes, Lute will print a warning on the Home page if the last backup was run more than one week ago. Again, this is only from the home page. Retain backup count Number The number of automatic backup files to keep. Backups are created with date-time stamp added (e.g. lute_backup_2023-04-19_204452.db.gz), and Lute only keeps the specified count of most recent backups. Note that this number is only used for automatic backups. For \"manual\" backups (where you click the link to create a backup from the Home page), you have to delete old files.","breadcrumbs":"Backup » Configuration","id":"115","title":"Configuration"},"116":{"body":"There are two kinds of backups, \"manual\" and \"automatic\". Both are placed in the folder you specify in your settings. Manual backups are created when you click \"create backup\" from the Home page. All of these are kept. Automatic backups are created every day by Lute, if you enable them, but only from the home screen (see below). Lute only stores a limited number of automatic backups. Here's an example on my system: $ ls -1 zz_backup/\nlute_backup_2023-04-20_204452.db.gz\nlute_backup_2023-04-21_204512.db.gz\nlute_backup_2023-04-22_204519.db.gz\nlute_backup_2023-04-23_204547.db.gz\nlute_backup_2023-04-24_204604.db.gz\nmanual_lute_backup_2023-04-19_204132.db.gz\nmanual_lute_backup_2023-04-19_204204.db.gz\nmanual_lute_backup_2023-04-19_204652.db.gz\nuserimages_backup/ I only have 5 \"automatic\" backups I have as many manual_ backups as I need/want There is only one userimages_backup/ folder, ever.","breadcrumbs":"Backup » Manual and automatic backups","id":"116","title":"Manual and automatic backups"},"117":{"body":"If you just leave Lute running all the time, and have it opened to a book that you're reading, Lute's automatic backup process doesn't start . Lute only runs the daily automated backups from the Home screen -- so, periodically, head on to Lute Home, and wait for that to complete.","breadcrumbs":"Backup » Automatic backups only run from the Home screen","id":"117","title":"Automatic backups only run from the Home screen"},"118":{"body":"As you use Lute more and more, you're building up a ton of valuable data! It would really suck to lose that. I'm hoping that you have configured backups in your Settings, and that you are periodically backing up. If you're not using Lute's built-in backup methods, please take time to set up some kind of backup. All you need to do is copy your data file to some location and zip it -- that will back up your database and images. Restoring backups are as simple as replacing your Lute database with one of your unzipped backups, and restoring your image folder as well.","breadcrumbs":"Backup » Restoring backups » Restoring backups","id":"118","title":"Restoring backups"},"119":{"body":"To find the directory where your database is, start Lute and go to About > Version and Software Info. It's the \"Data path\" line. ( Docker users: use the data directory you mounted for the container.) Summary: you replace your database with an unzipped and renamed db backup. Here's one way to do that: Copy a db backup that you want to restore from your backup directory to the \"data path\" directory. For example, after this step, I might have lute/data/lute_backup_2023-10-04_022616.db.gz. Stop Lute. Browse to that \"Data path\" directory on your machine, and rename the file lute.db to old_lute.db (the exact name you pick doesn't matter -- this is just in case your restore goes wrong) Unzip your backup from step 1, and rename it to lute.db. Your data folder should now contain old_lute.db and lute.db Start Lute, and refresh the browser. Lute is now connected to your restored backup db. You can either get rid of the old_lute.db, or move it somewhere else if you want to keep it.","breadcrumbs":"Backup » Restoring backups » Database restores","id":"119","title":"Database restores"},"12":{"body":"Download Python version 3.8.0: https://www.python.org/downloads/windows/ Install Python with admin privileges, tick \"Add python 3.8 to PATH\" and click on install. image When the install is done, open CMD with admin privileges and write \"python --version\" to check it works. You should see something like the below: image Still in CMD, type cd C:\\Users, hit Enter, then type dir and hit Enter. Your screen should look like this: image This shows all users on your machine. Now you'll cd (change directory) to your personal user directory. This user's name was axmanalex, so he wrote cd axmanalex and then hit Enter. Use your own user name instead of axmanalex, and hit Enter. Then type dir and hit Enter. Your screen should look like this: image You'll install Lute in one of your personal folders. axmanalex chose to install it in Documents, so he wrote cd Documents and hit Enter. Replace Documents with where you want to put Lute. Make a folder for Lute with the following commands (hit Enter after each line): mkdir my_lute\ncd my_lute Create and activate your \"virtual environment\" with the following commands (hit Enter after each line): python -m venv myenv\n.\\myenv\\Scripts\\activate.bat Install Lute pip install --upgrade lute3 and press Enter. Lute will now start to download and install all the components. Errors will be printed as red text -- if you get any errors, google for solutions or ask for help in Discord. Start it up! python -m lute.main and press Enter. The screen should look something like this: image The server should be running. Open any browser (Chrome, Firefox, etc), and go to http://localhost:5000/ . It should look like this: image ... and that's it, you're up and running! Leave this command prompt window running while you're using Lute.","breadcrumbs":"Installing on Windows » Windows 10 (32 bit) using Python and pip » Detailed instructions","id":"12","title":"Detailed instructions"},"120":{"body":"The images directory is the same as the database directory. Summary: copy files! Your backup images are stored in your backup directory, in userimages_backup. Copy the contents of that directory to the userimages directory of your \"Data path\" directory.","breadcrumbs":"Backup » Restoring backups » Image restores","id":"120","title":"Image restores"},"121":{"body":"It's a good idea to periodically check your backups to ensure that they're good.","breadcrumbs":"Backup » Restoring backups » Test your backups!","id":"121","title":"Test your backups!"},"122":{"body":"First obvious thing to check is the backup file size -- if it's way too small, that's no good.","breadcrumbs":"Backup » Restoring backups » Checking database backupa","id":"122","title":"Checking database backupa"},"123":{"body":"You can query the backup database just to validate that the data is present. Unzip one of your backups, and use Sqlite to connect to it and run queries. For example, in my backup folder, I have lute_backup_2023-10-04_022616.db.gz. I can unzip this somewhere as lute_backup_2023-10-04_022616.db and then try some queries: sqlite3 lute_backup_2023-10-04_022616.db SQLite version 3.39.5 2022-10-14 20:58:05\nEnter \".help\" for usage hints.\nsqlite> select count(*) from words; # <-- this is my query\n51839 That's about right.","breadcrumbs":"Backup » Restoring backups » Check using queries","id":"123","title":"Check using queries"},"124":{"body":"Another option is to temporarily replace your current lute.db with one of your backups. You could follow the steps you did for the database restore, but as a final step rename your old_lute.db to lute.db again.","breadcrumbs":"Backup » Restoring backups » Check using Lute itself (replace your current DB with a backup and verify)","id":"124","title":"Check using Lute itself (replace your current DB with a backup and verify)"},"125":{"body":"You can check the userimages_backup folder in your designated backup folder to see if your images are there. Just check the dates of the last handful of files. On a Mac (and perhaps on Linux systems), you could also use terminal. E.g. on my Mac, I can check the latest files: ls -larth ~/Dropbox/LuteBackup/userimages_backup/1 | tail -n 20\n...\n-rw-r--r--@ 1 jeff staff 15K 18 Sep 13:56 cenagoso.jpeg\n-rw-r--r--@ 1 jeff staff 3.0K 18 Sep 13:56 patena.jpeg\n-rw-r--r--@ 1 jeff staff 15K 20 Sep 22:01 carrocería.jpeg\n-rw-r--r--@ 1 jeff staff 5.4K 20 Sep 22:01 escupitajo.jpeg\n-rw-r--r--@ 1 jeff staff 12K 20 Sep 22:01 broche.jpeg\ndrwxr-xr-x@ 1895 jeff staff 59K 26 Sep 17:17 .\n-rw-r--r--@ 1 jeff staff 11K 26 Sep 17:17 encuadre.jpeg","breadcrumbs":"Backup » Restoring backups » Checking image backup","id":"125","title":"Checking image backup"},"126":{"body":"While Lute is almost solely a web app, it has some jobs that are run from the terminal, outside of the browser. hello: Say hi! Proof-of-concept language_export: Get all terms from active books in the language, and write a data file of term frequencies and children.","breadcrumbs":"Command line jobs » Command line jobs","id":"126","title":"Command line jobs"},"127":{"body":"These jobs are (currently) only runnable through the command line for pip installs. Open a terminal, change directory to your Lute folder, and enter the following commands: source .venv/bin/activate # Activate your virtual environment.\nflask --app lute.app_factory cli The reading page has frames for the content and the form and dictionaries. Hide the borders with this:
#read_pane_right::after {
background-color: transparent;
width: 4px;
@@ -237,6 +238,9 @@
+div#thetext {writing-mode: vertical-rl;}
+
body { font-family: "Comic Sans MS"; }