chenyanming / anki.el Goto Github PK
View Code? Open in Web Editor NEWEmacs Anki Client
Emacs Anki Client
GNU Emacs 27.2-1
Arch Linux
(use-package anki
:straight (anki :type git :host github :repo "chenyanming/anki.el")
:init
(add-hook 'anki-mode-hook #'shrface-mode)
(add-hook 'anki-card-mode-hook #'shrface-mode)
(autoload 'anki "anki")
(autoload 'anki-browser "anki")
(autoload 'anki-list-decks "anki")
:config
(setq anki-shr-rendering-functions (append anki-shr-rendering-functions shr-external-rendering-functions))
(setq sql-sqlite-program "/usr/bin/sqlite3")
(setq anki-collection-dir "/home/jonny/.local/share/Anki2/Usuário 1"))
After running M-x Anki
or M-x Anki-Browser
it gives the error Debugger entered--Lisp error: (json-readtable-error 99)
emacs -debug-init
Debugger entered--Lisp error: (json-readtable-error 99)
signal(json-readtable-error (99))
json-read()
json-read-from-string("cp: overwrite '/tmp/collection.anki2'? \2")
(let* ((json-array-type 'list) (json-object-type 'hash-table) (json-false nil)) (json-read-from-string (anki-core-query anki-core-query-models)))
(let ((models (let* ((json-array-type 'list) (json-object-type 'hash-table) (json-false nil)) (json-read-from-string (anki-core-query anki-core-query-models))))) (setq anki-core-models-hash-table models) models)
anki-core-parse-models()
(let* ((query-result (anki-core-query anki-core-query-cards)) (lines (if query-result (split-string query-result anki-core-sql-newline)))) (anki-core-parse-models) (anki-core-parse-decks) (cond ((equal "" query-result) '("")) (t (let* ((--cl-var-- lines) (line nil) (--cl-var-- nil)) (while (consp --cl-var--) (setq line (car --cl-var--)) (if (not (equal line "")) (progn (setq --cl-var-- ...))) (setq --cl-var-- (cdr --cl-var--))) (nreverse --cl-var--)))))
anki-core-parse-cards()
(let* ((--cl-var-- (anki-core-parse-cards)) (card nil)) (while (consp --cl-var--) (setq card (car --cl-var--)) (if (hash-table-p card) (progn (let ((id (gethash ... card))) (puthash 'card-format (anki-core-format-card-hash-table card) card) (setq anki-core-database-index (cons id anki-core-database-index)) (puthash id card cards)))) (setq --cl-var-- (cdr --cl-var--))) nil)
(let ((cards (make-hash-table :test 'equal))) (let* ((--cl-var-- (anki-core-parse-cards)) (card nil)) (while (consp --cl-var--) (setq card (car --cl-var--)) (if (hash-table-p card) (progn (let ((id ...)) (puthash 'card-format (anki-core-format-card-hash-table card) card) (setq anki-core-database-index (cons id anki-core-database-index)) (puthash id card cards)))) (setq --cl-var-- (cdr --cl-var--))) nil) (setq anki-core-hash-table cards) cards)
anki-core-cards()
(hash-table-values (anki-core-cards))
anki-core-cards-list()
(setq anki-search-entries (anki-core-cards-list))
(progn (setq anki-search-entries (anki-core-cards-list)) (setq anki-full-entries anki-search-entries))
(if anki-search-entries anki-search-entries (progn (setq anki-search-entries (anki-core-cards-list)) (setq anki-full-entries anki-search-entries)))
anki()
funcall-interactively(anki)
call-interactively(anki record nil)
command-execute(anki record)
counsel-M-x-action("anki")
ivy-call()
ivy-read("M-x " [eww-buffer-select Post\ Handshake\ Auth ansi-color-apply-overlay-face epg-context-signers locals 0 --cl-block-eaf-deferred-object-errorback--cmacro-- vc-git-stash-snapshot denied custom-face-menu pdf-cache-renderpage-highlight pdf-cache-pagelinks bbdb-current-record duplicate olp mml-secure-smime-sign-with-sender url-cookie-multiple-line url-scheme-registry no-activate vc-src-log-switches prequery mixal gnus-summary-recenter avl-tree--stack-store--cmacro bibtex-reformat-previous-reference-keys which-key-side-window-max-height org-fragtog-ignore-predicates :examined org-agenda-regexp-filter-preset vc-git-conflicted-files edited-forwarded-messages IBM\ Plex\ Sans\ Condensed semanticdb-project-database-file-child-p shr-parse-image-data \" line-num message-kill-actions nnheader-translate-file-chars package-menu--new-package-list vc-bzr-shelve ---5 gnus-summary-catchup-from-here :start-time ---8 sessions dont-create calc-embedded-mode-hook define-mode-local-override mu4e-view-image-max-height doc-view-pdf/ps->png ...] :predicate #f(compiled-function (sym) #<bytecode 0x157af2c92721>) :require-match t :history counsel-M-x-history :action counsel-M-x-action :keymap (keymap (67108908 . counsel--info-lookup-symbol) (67108910 . counsel-find-symbol)) :initial-input nil :caller counsel-M-x)
counsel-M-x()
funcall-interactively(counsel-M-x)
call-interactively(counsel-M-x nil nil)
command-execute(counsel-M-x)
GNU Emacs 28.0.50
Linux Mint 19.3
(use-package anki
:straight (anki :type git :host github :repo "chenyanming/anki.el")
:init
(add-hook 'anki-mode-hook #'shrface-mode)
(add-hook 'anki-card-mode-hook #'shrface-mode)
(autoload 'anki "anki")
(autoload 'anki-browser "anki")
(autoload 'anki-list-decks "anki")
:config
(setq sql-sqlite-program "~/bin/sqlite/sqlite3")
(setq anki-collection-dir "~/.local/share/Anki2/User 1")
(setq anki-audio-player "mpv")
;; (setq anki-audio-player (or (executable-find "aplay") (executable-find "afplay")))
(setq anki-shr-rendering-functions (append anki-shr-rendering-functions shr-external-rendering-functions)))
I get this error when starting emacs.
Error (use-package): anki/:catch: Cannot open load file: No such file or directory, emacsql-sqlite
emacs -debug-init
Debugger entered--Lisp error: (file-missing "Cannot open load file" "No such file or directory" "emacsql-sqlite")
require(emacsql-sqlite)
eval-buffer(#<buffer *load*-109428> nil "/home/last/.emacs.d/straight/build/anki/anki-core...." nil t) ; Reading at buffer position 896
load-with-code-conversion("/home/last/.emacs.d/straight/build/anki/anki-core...." "/home/last/.emacs.d/straight/build/anki/anki-core...." nil t)
require(anki-core)
eval-buffer(#<buffer *load*-580086> nil "/home/last/.emacs.d/straight/build/anki/anki.el" nil t) ; Reading at buffer position 1114
load-with-code-conversion("/home/last/.emacs.d/straight/build/anki/anki.el" "/home/last/.emacs.d/straight/build/anki/anki.el" t t)
require(anki nil t)
(not (require 'anki nil t))
(if (not (require 'anki nil t)) (display-warning 'use-package (format "Cannot load %s" 'anki) :error) (condition-case err (progn (setq sql-sqlite-program "~/bin/sqlite/sqlite3") (setq anki-collection-dir "~/.local/share/Anki2/User 1") (setq anki-audio-player "mpv") (setq anki-shr-rendering-functions (append anki-shr-rendering-functions shr-external-rendering-functions)) t) ((debug error) (funcall use-package--warning65 :config err))))
(progn (condition-case err (progn (add-hook 'anki-mode-hook #'shrface-mode) (add-hook 'anki-card-mode-hook #'shrface-mode) (autoload 'anki "anki") (autoload 'anki-browser "anki") (autoload 'anki-list-decks "anki")) ((debug error) (funcall use-package--warning65 :init err))) (if (not (require 'anki nil t)) (display-warning 'use-package (format "Cannot load %s" 'anki) :error) (condition-case err (progn (setq sql-sqlite-program "~/bin/sqlite/sqlite3") (setq anki-collection-dir "~/.local/share/Anki2/User 1") (setq anki-audio-player "mpv") (setq anki-shr-rendering-functions (append anki-shr-rendering-functions shr-external-rendering-functions)) t) ((debug error) (funcall use-package--warning65 :config err)))))
(condition-case err (progn (condition-case err (progn (add-hook 'anki-mode-hook #'shrface-mode) (add-hook 'anki-card-mode-hook #'shrface-mode) (autoload 'anki "anki") (autoload 'anki-browser "anki") (autoload 'anki-list-decks "anki")) ((debug error) (funcall use-package--warning65 :init err))) (if (not (require 'anki nil t)) (display-warning 'use-package (format "Cannot load %s" 'anki) :error) (condition-case err (progn (setq sql-sqlite-program "~/bin/sqlite/sqlite3") (setq anki-collection-dir "~/.local/share/Anki2/User 1") (setq anki-audio-player "mpv") (setq anki-shr-rendering-functions (append anki-shr-rendering-functions shr-external-rendering-functions)) t) ((debug error) (funcall use-package--warning65 :config err))))) ((debug error) (funcall use-package--warning65 :catch err)))
eval-buffer(#<buffer *load*> nil "/home/last/.emacs.d/init.el" nil t) ; Reading at buffer position 27791
load-with-code-conversion("/home/last/.emacs.d/init.el" "/home/last/.emacs.d/init.el" t t)
load("/home/last/.emacs.d/init" noerror nomessage)
startup--load-user-init-file(#f(compiled-function () #<bytecode 0x2f4c7aea8315f07>) #f(compiled-function () #<bytecode 0x81a386fa1b19353>) t)
command-line()
normal-top-level()
Why doesn't anki.el modify the original anki database? What work needs to be done to make it happen? I think that being able to use both anki.el and the official Anki app would be really awesome.
When a card with audio is open, just noise comes as audio.
Is this correct (setq anki-audio-player (or (executable-find "aplay") (executable-find "afplay")))
?
(executable-find "aplay")
is repeat twice.
(executable-find "aplay")
=> "/usr/bin/aplay"
GNU Emacs 27.1
Arch Linux
(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
(package-initialize)
(add-to-list 'load-path "~/.emacs.d/lisp/anki/")
(require 'anki)
(setq sql-sqlite-program "/usr/bin/sqlite3")
(setq anki-collection-dir "/home/comp/.local/share/Anki2/1")
(setq anki-audio-player "mpv")
(require 'shrface)
(setq anki-shr-rendering-functions (append anki-shr-rendering-functions shr-external-rendering-functions))
(custom-set-variables
'(package-selected-packages '(cl-lib-highlight exec-path-from-shell emacsql-sqlite)))
(custom-set-faces
)
In anki-mode contents of cards displayed: as a:
<hr><div>
And I see messages:
Symbol's function definition is void: copy-list
let: Wrong type argument: char-or-string-p, nil
In anki-browser, I can see flashcards.
Is it possible to edit the shrface
rendered card in its Emacs buffer and have the results write back to the Anki database?
hi, im using This is GNU Emacs 26.1 (build 2, arm-unknown-linux-gnueabihf, GTK+ Version 3.24.5)
of 2021-02-07, modified by Debian.
Debugger entered--Lisp error: (wrong-type-argument char-or-string-p nil)
json-read-from-string(nil)
(let* ((json-array-type 'list) (json-object-type 'hash-table) (json-false nil)) (json-read-from-string (anki-core-query anki-core-query-models)))
(let ((models (let* ((json-array-type 'list) (json-object-type 'hash-table) (json-false nil)) (json-read-from-string (anki-core-query anki-core-query-models))))) (setq anki-core-models-hash-table models) models)
anki-core-parse-models()
(let* ((query-result (anki-core-query anki-core-query-cards)) (lines (if query-result (split-string query-result anki-core-sql-newline)))) (anki-core-parse-models) (anki-core-parse-decks) (cond ((equal "" query-result) '("")) (t (let* ((--cl-var-- lines) (line nil) (--cl-var-- nil)) (while (consp --cl-var--) (setq line (car --cl-var--)) (if (not (equal line "")) (progn (setq --cl-var-- (cons (anki-core-parse-card-to-hash-table line) --cl-var--)))) (setq --cl-var-- (cdr --cl-var--))) (nreverse --cl-var--)))))
anki-core-parse-cards()
(let* ((--cl-var-- (anki-core-parse-cards)) (card nil)) (while (consp --cl-var--) (setq card (car --cl-var--)) (if (hash-table-p card) (progn (let ((id (gethash 'id card))) (puthash 'card-format (anki-core-format-card-hash-table card) card) (setq anki-core-database-index (cons id anki-core-database-index)) (puthash id card cards)))) (setq --cl-var-- (cdr --cl-var--))) nil)
(let ((cards (make-hash-table :test 'equal))) (let* ((--cl-var-- (anki-core-parse-cards)) (card nil)) (while (consp --cl-var--) (setq card (car --cl-var--)) (if (hash-table-p card) (progn (let ((id (gethash 'id card))) (puthash 'card-format (anki-core-format-card-hash-table card) card) (setq anki-core-database-index (cons id anki-core-database-index)) (puthash id card cards)))) (setq --cl-var-- (cdr --cl-var--))) nil) (setq anki-core-hash-table cards) cards)
anki-core-cards()
(hash-table-values (anki-core-cards))
anki-core-cards-list()
(setq anki-search-entries (anki-core-cards-list))
(progn (setq anki-search-entries (anki-core-cards-list)) (setq anki-full-entries anki-search-entries))
(if anki-search-entries anki-search-entries (progn (setq anki-search-entries (anki-core-cards-list)) (setq anki-full-entries anki-search-entries)))
anki()
funcall-interactively(anki)
call-interactively(anki record nil)
command-execute(anki record)
execute-extended-command(nil "anki" "anki")
funcall-interactively(execute-extended-command nil "anki" "anki")
call-interactively(execute-extended-command nil nil)
command-execute(execute-extended-command)
M-x anki
throw this message json-read: JSON readtable error: 2
.
Debugging:
(setq debug-on-error t)
Debugger entered--Lisp error: (json-readtable-error 2)
signal(json-readtable-error (2))
json-read()
json-read-from-string("\2")
anki-parse-decks()
anki-parse-cards()
anki-format-cards()
anki()
funcall-interactively(anki)
call-interactively(anki record nil)
command-execute(anki record)
execute-extended-command(nil "anki" nil)
funcall-interactively(execute-extended-command nil "anki" nil)
call-interactively(execute-extended-command nil nil)
command-execute(execute-extended-command)
When enabling debugging, getting this:
Debugger entered--Lisp error: (json-readtable-error 99)
signal(json-readtable-error (99))
json-read()
json-read-from-string("cp: overwrite '/tmp/collection.anki2'? ")
(let* ((json-array-type 'list) (json-object-type 'hash-table) (json-false nil)) (json-read-from-string (anki-core-query anki-core-query-models)))
(let ((models (let* ((json-array-type 'list) (json-object-type 'hash-table) (json-false nil)) (json-read-from-string (anki-core-query anki-core-query-models))))) (setq anki-core-models-hash-table models) models)
anki-core-parse-models()
(let* ((query-result (anki-core-query anki-core-query-cards)) (lines (if query-result (split-string query-result anki-core-sql-newline)))) (anki-core-parse-models) (anki-core-parse-decks) (cond ((equal "" query-result) '("")) (t (let* ((--cl-var-- lines) (line nil) (--cl-var-- nil)) (while (consp --cl-var--) (setq line (car --cl-var--)) (if (not (equal line "")) (progn (setq --cl-var-- ...))) (setq --cl-var-- (cdr --cl-var--))) (nreverse --cl-var--)))))
anki-core-parse-cards()
(let* ((--cl-var-- (anki-core-parse-cards)) (card nil)) (while (consp --cl-var--) (setq card (car --cl-var--)) (if (hash-table-p card) (progn (let ((id (gethash ... card))) (puthash 'card-format (anki-core-format-card-hash-table card) card) (setq anki-core-database-index (cons id anki-core-database-index)) (puthash id card cards)))) (setq --cl-var-- (cdr --cl-var--))) nil)
(let ((cards (make-hash-table :test 'equal))) (let* ((--cl-var-- (anki-core-parse-cards)) (card nil)) (while (consp --cl-var--) (setq card (car --cl-var--)) (if (hash-table-p card) (progn (let ((id ...)) (puthash 'card-format (anki-core-format-card-hash-table card) card) (setq anki-core-database-index (cons id anki-core-database-index)) (puthash id card cards)))) (setq --cl-var-- (cdr --cl-var--))) nil) (setq anki-core-hash-table cards) cards)
anki-core-cards()
(hash-table-values (anki-core-cards))
anki-core-cards-list()
(setq anki-search-entries (anki-core-cards-list))
(progn (setq anki-search-entries (anki-core-cards-list)) (setq anki-full-entries anki-search-entries))
(if anki-search-entries anki-search-entries (progn (setq anki-search-entries (anki-core-cards-list)) (setq anki-full-entries anki-search-entries)))
anki()
funcall-interactively(anki)
call-interactively(anki record nil)
command-execute(anki record)
execute-extended-command(nil "anki" #("anki" 0 4 (ws-butler-chg chg)))
funcall-interactively(execute-extended-command nil "anki" #("anki" 0 4 (ws-butler-chg chg)))
call-interactively(execute-extended-command nil nil)
command-execute(execute-extended-command)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.