Loading operational +49 −2 Original line number Diff line number Diff line Loading @@ -111,11 +111,58 @@ cd ~/lisp/elisp/zero/ * later :entry: * current :entry: ** ** 2019-11-03 add completion support for zero-input-set-im complete registered im symbols. ** 2019-10-23 checkdoc and package-lint can't ignore some non-issues. I can't run them in git pre-commit hook. * done :entry: ** 2019-11-03 add completion support for zero-input-set-im complete registered im symbols. - 2020-02-16 Function: completing-read prompt collection &optional predicate make sure non-interactively usage still works. (zero-input-set-im 'pinyin) - DONE allow input method name to be string. to add backward compatibility, symbol is also supported. symbol is auto converted to lower case string. string is a better fit for names. it can include unicode strings easier. - problems - how to call completing-read when call interactively? search: use completing-read with interactive function just call the function when &optional arg is nil. - (zero-input-set-im 'pinyin) this doesn't allow input pinyin after switching to table and back。 if then else issue. fixed. - DONE when im name is string, alist eq comparison won't work. change to string-equal based compare. search: assq-delete-all but with string-equal emacs - Elisp: How to delete an element from an association list with string key - Stack Overflow https://stackoverflow.com/questions/9812393/elisp-how-to-delete-an-element-from-an-association-list-with-string-key - (zero-input-set-im 'pinyin) method not registered. (assq im-name zero-input-ims) (assoc im-name zero-input-ims) - try switch to empty and back. (zero-input-set-im 'pinyin) (zero-input-set-im 'empty) it works. ** 2020-02-16 declare zero-input-punctuation-level, zero-input-full-width-p using defcustom use set-default to set the value. Loading zero-input-framework.el +27 −22 Original line number Diff line number Diff line Loading @@ -133,7 +133,7 @@ If item is not in lst, return nil." ;; zero-input-el version (defvar zero-input-version nil "Zero package version.") (setq zero-input-version "2.4.0") (setq zero-input-version "2.5.0") ;; FSM state (defconst zero-input--state-im-off 'IM-OFF) Loading Loading @@ -797,11 +797,14 @@ virtual functions corresponding variable registered input method is saved in `zero-input-ims'" ;; add or replace entry in `zero-input-ims' (unless (symbolp im-name) (signal 'wrong-type-argument (list 'symbolp im-name))) (setq zero-input-ims (assq-delete-all im-name zero-input-ims)) (unless (stringp im-name) (signal 'wrong-type-argument (list 'stringp im-name))) (setq zero-input-ims (delq (assoc im-name zero-input-ims) zero-input-ims)) (setq zero-input-ims (push (cons im-name im-functions-alist) zero-input-ims))) ;; Built-in empty input method. It only handles Chinese punctuation. (zero-input-register-im "empty" nil) ;;============ ;; public API ;;============ Loading Loading @@ -845,21 +848,32 @@ LEVEL the level to set to." (message "punctuation level set to %s" zero-input-punctuation-level)) ;;;###autoload (defun zero-input-set-im (im-name) (defun zero-input-set-im (&optional im-name) "Select zero input method for current buffer. if IM-NAME is nil, use default empty input method" ;; TODO provide auto completion for im-name (interactive "SSet input method to: ") IM-NAME (a string) should be a registered input method in zero-input." (interactive) ;; when switch away from an IM, run last IM's :shutdown function. (if zero-input-im (let ((shutdown-func (cdr (assq :shutdown (cdr (assq zero-input-im zero-input-ims)))))) (let ((shutdown-func (cdr (assq :shutdown (cdr (assoc zero-input-im zero-input-ims)))))) (if (functionp shutdown-func) (funcall shutdown-func)))) (if im-name (let ((im-functions (cdr (assq im-name zero-input-ims)))) (if im-functions (cond ((null im-name) ;; TODO is there an easier way to provide auto complete in mini buffer? ;; I used a recursive call to the same function. (let ((im-name-str (completing-read "Set input method to: " zero-input-ims))) (if (s-blank? im-name-str) (error "Input method name is required") (zero-input-set-im im-name-str)))) ((symbolp im-name) ;; for backward compatibility (zero-input-set-im (symbol-name im-name))) (t (let* ((im-slot (assoc im-name zero-input-ims)) (im-functions (cdr im-slot))) (if im-slot (progn (zero-input-debug "switching to %s input method" im-name) ;; TODO create a macro to reduce code duplication and human ;; error. ;; Loading Loading @@ -895,16 +909,7 @@ if IM-NAME is nil, use default empty input method" (if (functionp init-func) (funcall init-func))) (setq zero-input-im im-name)) (error "Input method %s not registered in zero" im-name))) (zero-input-debug "using default empty input method") (setq zero-input-build-candidates-func 'zero-input-build-candidates-default) (setq zero-input-build-candidates-async-func 'zero-input-build-candidates-async-default) (setq zero-input-can-start-sequence-func 'zero-input-can-start-sequence-default) (setq zero-input-handle-preedit-char-func 'zero-input-handle-preedit-char-default) (setq zero-input-get-preedit-str-for-panel-func 'zero-input-get-preedit-str-for-panel-default) (setq zero-input-backspace-func 'zero-input-backspace-default) (setq zero-input-preedit-start-func nil) (setq zero-input-preedit-end-func nil))) (error "Input method %S not registered in zero" im-name)))))) ;;;###autoload (defun zero-input-set-default-im (im-name) Loading zero-input-pinyin.el +1 −1 Original line number Diff line number Diff line Loading @@ -356,7 +356,7 @@ DIGIT 0 means delete 10th candidate." (defun zero-input-pinyin-register-im () "Register pinyin input method in zero framework." (zero-input-register-im 'pinyin "pinyin" (append (if zero-input-pinyin-use-async-fetch '((:build-candidates-async . zero-input-pinyin-build-candidates-async)) Loading zero-input-table.el +1 −1 Original line number Diff line number Diff line Loading @@ -69,7 +69,7 @@ ;;=============================== (zero-input-register-im 'zero-input-table "zero-input-table" '((:build-candidates . zero-input-table-build-candidates) (:can-start-sequence . zero-input-table-can-start-sequence))) Loading zero-input.el +30 −25 Original line number Diff line number Diff line Loading @@ -12,7 +12,7 @@ ;; See the License for the specific language governing permissions and ;; limitations under the License. ;; Version: 2.4.0 ;; Version: 2.5.0 ;; URL: https://gitlab.emacsos.com/sylecn/zero-el ;; Package-Requires: ((emacs "24.3") (s "1.2.0")) Loading Loading @@ -246,7 +246,7 @@ If item is not in lst, return nil." ;; zero-input-el version (defvar zero-input-version nil "Zero package version.") (setq zero-input-version "2.4.0") (setq zero-input-version "2.5.0") ;; FSM state (defconst zero-input--state-im-off 'IM-OFF) Loading Loading @@ -910,11 +910,14 @@ virtual functions corresponding variable registered input method is saved in `zero-input-ims'" ;; add or replace entry in `zero-input-ims' (unless (symbolp im-name) (signal 'wrong-type-argument (list 'symbolp im-name))) (setq zero-input-ims (assq-delete-all im-name zero-input-ims)) (unless (stringp im-name) (signal 'wrong-type-argument (list 'stringp im-name))) (setq zero-input-ims (delq (assoc im-name zero-input-ims) zero-input-ims)) (setq zero-input-ims (push (cons im-name im-functions-alist) zero-input-ims))) ;; Built-in empty input method. It only handles Chinese punctuation. (zero-input-register-im "empty" nil) ;;============ ;; public API ;;============ Loading Loading @@ -958,21 +961,32 @@ LEVEL the level to set to." (message "punctuation level set to %s" zero-input-punctuation-level)) ;;;###autoload (defun zero-input-set-im (im-name) (defun zero-input-set-im (&optional im-name) "Select zero input method for current buffer. if IM-NAME is nil, use default empty input method" ;; TODO provide auto completion for im-name (interactive "SSet input method to: ") IM-NAME (a string) should be a registered input method in zero-input." (interactive) ;; when switch away from an IM, run last IM's :shutdown function. (if zero-input-im (let ((shutdown-func (cdr (assq :shutdown (cdr (assq zero-input-im zero-input-ims)))))) (let ((shutdown-func (cdr (assq :shutdown (cdr (assoc zero-input-im zero-input-ims)))))) (if (functionp shutdown-func) (funcall shutdown-func)))) (if im-name (let ((im-functions (cdr (assq im-name zero-input-ims)))) (if im-functions (cond ((null im-name) ;; TODO is there an easier way to provide auto complete in mini buffer? ;; I used a recursive call to the same function. (let ((im-name-str (completing-read "Set input method to: " zero-input-ims))) (if (s-blank? im-name-str) (error "Input method name is required") (zero-input-set-im im-name-str)))) ((symbolp im-name) ;; for backward compatibility (zero-input-set-im (symbol-name im-name))) (t (let* ((im-slot (assoc im-name zero-input-ims)) (im-functions (cdr im-slot))) (if im-slot (progn (zero-input-debug "switching to %s input method" im-name) ;; TODO create a macro to reduce code duplication and human ;; error. ;; Loading Loading @@ -1008,16 +1022,7 @@ if IM-NAME is nil, use default empty input method" (if (functionp init-func) (funcall init-func))) (setq zero-input-im im-name)) (error "Input method %s not registered in zero" im-name))) (zero-input-debug "using default empty input method") (setq zero-input-build-candidates-func 'zero-input-build-candidates-default) (setq zero-input-build-candidates-async-func 'zero-input-build-candidates-async-default) (setq zero-input-can-start-sequence-func 'zero-input-can-start-sequence-default) (setq zero-input-handle-preedit-char-func 'zero-input-handle-preedit-char-default) (setq zero-input-get-preedit-str-for-panel-func 'zero-input-get-preedit-str-for-panel-default) (setq zero-input-backspace-func 'zero-input-backspace-default) (setq zero-input-preedit-start-func nil) (setq zero-input-preedit-end-func nil))) (error "Input method %S not registered in zero" im-name)))))) ;;;###autoload (defun zero-input-set-default-im (im-name) Loading Loading @@ -1088,7 +1093,7 @@ if IM-NAME is nil, use default empty input method" ;;=============================== (zero-input-register-im 'zero-input-table "zero-input-table" '((:build-candidates . zero-input-table-build-candidates) (:can-start-sequence . zero-input-table-can-start-sequence))) Loading Loading @@ -1548,7 +1553,7 @@ DIGIT 0 means delete 10th candidate." (defun zero-input-pinyin-register-im () "Register pinyin input method in zero framework." (zero-input-register-im 'pinyin "pinyin" (append (if zero-input-pinyin-use-async-fetch '((:build-candidates-async . zero-input-pinyin-build-candidates-async)) Loading Loading
operational +49 −2 Original line number Diff line number Diff line Loading @@ -111,11 +111,58 @@ cd ~/lisp/elisp/zero/ * later :entry: * current :entry: ** ** 2019-11-03 add completion support for zero-input-set-im complete registered im symbols. ** 2019-10-23 checkdoc and package-lint can't ignore some non-issues. I can't run them in git pre-commit hook. * done :entry: ** 2019-11-03 add completion support for zero-input-set-im complete registered im symbols. - 2020-02-16 Function: completing-read prompt collection &optional predicate make sure non-interactively usage still works. (zero-input-set-im 'pinyin) - DONE allow input method name to be string. to add backward compatibility, symbol is also supported. symbol is auto converted to lower case string. string is a better fit for names. it can include unicode strings easier. - problems - how to call completing-read when call interactively? search: use completing-read with interactive function just call the function when &optional arg is nil. - (zero-input-set-im 'pinyin) this doesn't allow input pinyin after switching to table and back。 if then else issue. fixed. - DONE when im name is string, alist eq comparison won't work. change to string-equal based compare. search: assq-delete-all but with string-equal emacs - Elisp: How to delete an element from an association list with string key - Stack Overflow https://stackoverflow.com/questions/9812393/elisp-how-to-delete-an-element-from-an-association-list-with-string-key - (zero-input-set-im 'pinyin) method not registered. (assq im-name zero-input-ims) (assoc im-name zero-input-ims) - try switch to empty and back. (zero-input-set-im 'pinyin) (zero-input-set-im 'empty) it works. ** 2020-02-16 declare zero-input-punctuation-level, zero-input-full-width-p using defcustom use set-default to set the value. Loading
zero-input-framework.el +27 −22 Original line number Diff line number Diff line Loading @@ -133,7 +133,7 @@ If item is not in lst, return nil." ;; zero-input-el version (defvar zero-input-version nil "Zero package version.") (setq zero-input-version "2.4.0") (setq zero-input-version "2.5.0") ;; FSM state (defconst zero-input--state-im-off 'IM-OFF) Loading Loading @@ -797,11 +797,14 @@ virtual functions corresponding variable registered input method is saved in `zero-input-ims'" ;; add or replace entry in `zero-input-ims' (unless (symbolp im-name) (signal 'wrong-type-argument (list 'symbolp im-name))) (setq zero-input-ims (assq-delete-all im-name zero-input-ims)) (unless (stringp im-name) (signal 'wrong-type-argument (list 'stringp im-name))) (setq zero-input-ims (delq (assoc im-name zero-input-ims) zero-input-ims)) (setq zero-input-ims (push (cons im-name im-functions-alist) zero-input-ims))) ;; Built-in empty input method. It only handles Chinese punctuation. (zero-input-register-im "empty" nil) ;;============ ;; public API ;;============ Loading Loading @@ -845,21 +848,32 @@ LEVEL the level to set to." (message "punctuation level set to %s" zero-input-punctuation-level)) ;;;###autoload (defun zero-input-set-im (im-name) (defun zero-input-set-im (&optional im-name) "Select zero input method for current buffer. if IM-NAME is nil, use default empty input method" ;; TODO provide auto completion for im-name (interactive "SSet input method to: ") IM-NAME (a string) should be a registered input method in zero-input." (interactive) ;; when switch away from an IM, run last IM's :shutdown function. (if zero-input-im (let ((shutdown-func (cdr (assq :shutdown (cdr (assq zero-input-im zero-input-ims)))))) (let ((shutdown-func (cdr (assq :shutdown (cdr (assoc zero-input-im zero-input-ims)))))) (if (functionp shutdown-func) (funcall shutdown-func)))) (if im-name (let ((im-functions (cdr (assq im-name zero-input-ims)))) (if im-functions (cond ((null im-name) ;; TODO is there an easier way to provide auto complete in mini buffer? ;; I used a recursive call to the same function. (let ((im-name-str (completing-read "Set input method to: " zero-input-ims))) (if (s-blank? im-name-str) (error "Input method name is required") (zero-input-set-im im-name-str)))) ((symbolp im-name) ;; for backward compatibility (zero-input-set-im (symbol-name im-name))) (t (let* ((im-slot (assoc im-name zero-input-ims)) (im-functions (cdr im-slot))) (if im-slot (progn (zero-input-debug "switching to %s input method" im-name) ;; TODO create a macro to reduce code duplication and human ;; error. ;; Loading Loading @@ -895,16 +909,7 @@ if IM-NAME is nil, use default empty input method" (if (functionp init-func) (funcall init-func))) (setq zero-input-im im-name)) (error "Input method %s not registered in zero" im-name))) (zero-input-debug "using default empty input method") (setq zero-input-build-candidates-func 'zero-input-build-candidates-default) (setq zero-input-build-candidates-async-func 'zero-input-build-candidates-async-default) (setq zero-input-can-start-sequence-func 'zero-input-can-start-sequence-default) (setq zero-input-handle-preedit-char-func 'zero-input-handle-preedit-char-default) (setq zero-input-get-preedit-str-for-panel-func 'zero-input-get-preedit-str-for-panel-default) (setq zero-input-backspace-func 'zero-input-backspace-default) (setq zero-input-preedit-start-func nil) (setq zero-input-preedit-end-func nil))) (error "Input method %S not registered in zero" im-name)))))) ;;;###autoload (defun zero-input-set-default-im (im-name) Loading
zero-input-pinyin.el +1 −1 Original line number Diff line number Diff line Loading @@ -356,7 +356,7 @@ DIGIT 0 means delete 10th candidate." (defun zero-input-pinyin-register-im () "Register pinyin input method in zero framework." (zero-input-register-im 'pinyin "pinyin" (append (if zero-input-pinyin-use-async-fetch '((:build-candidates-async . zero-input-pinyin-build-candidates-async)) Loading
zero-input-table.el +1 −1 Original line number Diff line number Diff line Loading @@ -69,7 +69,7 @@ ;;=============================== (zero-input-register-im 'zero-input-table "zero-input-table" '((:build-candidates . zero-input-table-build-candidates) (:can-start-sequence . zero-input-table-can-start-sequence))) Loading
zero-input.el +30 −25 Original line number Diff line number Diff line Loading @@ -12,7 +12,7 @@ ;; See the License for the specific language governing permissions and ;; limitations under the License. ;; Version: 2.4.0 ;; Version: 2.5.0 ;; URL: https://gitlab.emacsos.com/sylecn/zero-el ;; Package-Requires: ((emacs "24.3") (s "1.2.0")) Loading Loading @@ -246,7 +246,7 @@ If item is not in lst, return nil." ;; zero-input-el version (defvar zero-input-version nil "Zero package version.") (setq zero-input-version "2.4.0") (setq zero-input-version "2.5.0") ;; FSM state (defconst zero-input--state-im-off 'IM-OFF) Loading Loading @@ -910,11 +910,14 @@ virtual functions corresponding variable registered input method is saved in `zero-input-ims'" ;; add or replace entry in `zero-input-ims' (unless (symbolp im-name) (signal 'wrong-type-argument (list 'symbolp im-name))) (setq zero-input-ims (assq-delete-all im-name zero-input-ims)) (unless (stringp im-name) (signal 'wrong-type-argument (list 'stringp im-name))) (setq zero-input-ims (delq (assoc im-name zero-input-ims) zero-input-ims)) (setq zero-input-ims (push (cons im-name im-functions-alist) zero-input-ims))) ;; Built-in empty input method. It only handles Chinese punctuation. (zero-input-register-im "empty" nil) ;;============ ;; public API ;;============ Loading Loading @@ -958,21 +961,32 @@ LEVEL the level to set to." (message "punctuation level set to %s" zero-input-punctuation-level)) ;;;###autoload (defun zero-input-set-im (im-name) (defun zero-input-set-im (&optional im-name) "Select zero input method for current buffer. if IM-NAME is nil, use default empty input method" ;; TODO provide auto completion for im-name (interactive "SSet input method to: ") IM-NAME (a string) should be a registered input method in zero-input." (interactive) ;; when switch away from an IM, run last IM's :shutdown function. (if zero-input-im (let ((shutdown-func (cdr (assq :shutdown (cdr (assq zero-input-im zero-input-ims)))))) (let ((shutdown-func (cdr (assq :shutdown (cdr (assoc zero-input-im zero-input-ims)))))) (if (functionp shutdown-func) (funcall shutdown-func)))) (if im-name (let ((im-functions (cdr (assq im-name zero-input-ims)))) (if im-functions (cond ((null im-name) ;; TODO is there an easier way to provide auto complete in mini buffer? ;; I used a recursive call to the same function. (let ((im-name-str (completing-read "Set input method to: " zero-input-ims))) (if (s-blank? im-name-str) (error "Input method name is required") (zero-input-set-im im-name-str)))) ((symbolp im-name) ;; for backward compatibility (zero-input-set-im (symbol-name im-name))) (t (let* ((im-slot (assoc im-name zero-input-ims)) (im-functions (cdr im-slot))) (if im-slot (progn (zero-input-debug "switching to %s input method" im-name) ;; TODO create a macro to reduce code duplication and human ;; error. ;; Loading Loading @@ -1008,16 +1022,7 @@ if IM-NAME is nil, use default empty input method" (if (functionp init-func) (funcall init-func))) (setq zero-input-im im-name)) (error "Input method %s not registered in zero" im-name))) (zero-input-debug "using default empty input method") (setq zero-input-build-candidates-func 'zero-input-build-candidates-default) (setq zero-input-build-candidates-async-func 'zero-input-build-candidates-async-default) (setq zero-input-can-start-sequence-func 'zero-input-can-start-sequence-default) (setq zero-input-handle-preedit-char-func 'zero-input-handle-preedit-char-default) (setq zero-input-get-preedit-str-for-panel-func 'zero-input-get-preedit-str-for-panel-default) (setq zero-input-backspace-func 'zero-input-backspace-default) (setq zero-input-preedit-start-func nil) (setq zero-input-preedit-end-func nil))) (error "Input method %S not registered in zero" im-name)))))) ;;;###autoload (defun zero-input-set-default-im (im-name) Loading Loading @@ -1088,7 +1093,7 @@ if IM-NAME is nil, use default empty input method" ;;=============================== (zero-input-register-im 'zero-input-table "zero-input-table" '((:build-candidates . zero-input-table-build-candidates) (:can-start-sequence . zero-input-table-can-start-sequence))) Loading Loading @@ -1548,7 +1553,7 @@ DIGIT 0 means delete 10th candidate." (defun zero-input-pinyin-register-im () "Register pinyin input method in zero framework." (zero-input-register-im 'pinyin "pinyin" (append (if zero-input-pinyin-use-async-fetch '((:build-candidates-async . zero-input-pinyin-build-candidates-async)) Loading