emacs/sekka.el in sekka-1.4.0 vs emacs/sekka.el in sekka-1.5.0

- old
+ new

@@ -75,11 +75,11 @@ (defcustom sekka-realtime-guide-running-seconds 30 "リアルタイムガイド表示の継続時間(秒数)・ゼロでガイド表示機能が無効になる" :type 'integer :group 'sekka) -(defcustom sekka-realtime-guide-limit-lines 5 +(defcustom sekka-realtime-guide-limit-lines 3 "最後に変換した行から N 行離れたらリアルタイムガイド表示が止まる" :type 'integer :group 'sekka) (defcustom sekka-realtime-guide-interval 0.2 @@ -278,27 +278,30 @@ ;; 初期化完了 (setq sekka-init t))) (defun sekka-construct-curl-argstr (arg-alist) - (apply 'concat - (mapcar - (lambda (x) - (format "--data '%s=%s' " (car x) - (if (stringp (cdr x)) - (http-url-encode (cdr x) 'utf-8) - (cdr x)))) - arg-alist))) + (apply + 'append + (mapcar + (lambda (x) + (list "--data" (format "%s=%s" + (car x) + (if (stringp (cdr x)) + (http-url-encode (cdr x) 'utf-8) + (cdr x))))) + arg-alist))) ;; test-code (when nil (sekka-construct-curl-argstr '( ("yomi" . "kanji") ("limit" . 2) ("method" . "normal") - ))) + )) + ) ;; ;; 接続先を次候補のsekka-serverに切りかえる ;; @@ -343,21 +346,68 @@ ) (progn (sekka-next-sekka-server) nil) result))) + (let ((arg-alist + (cons + `(userid . ,sekka-login-name) + arg-alist))) + (or + (one-request func-name arg-alist) + (one-request func-name arg-alist) + (one-request func-name arg-alist) + (concat + "Error: All sekka-server are down. " + " " sekka-server-url + " " sekka-server-url-2 + " " sekka-server-url-3)))) - (or - (one-request func-name arg-alist) - (one-request func-name arg-alist) - (one-request func-name arg-alist) - (concat - "Error: All sekka-server are down. " - " " sekka-server-url - " " sekka-server-url-2 - " " sekka-server-url-3))) +(defun sekka-rest-request-by-curl (func-name arg-alist) + (let* ((lst + (append + (if (< 0 (length sekka-no-proxy-hosts)) + (list "--noproxy" sekka-no-proxy-hosts) + nil) + (sekka-construct-curl-argstr (cons + '(format . "sexp") + arg-alist)))) + (buffername "*sekka-output*") + (result "")) + (sekka-debug-print (format "arg-lst :[%S]\n" lst)) + (progn + (apply + 'call-process + sekka-curl + nil buffername nil + "--silent" "--show-error" + "--max-time" (format "%d" sekka-server-timeout) + "--insecure" + "--header" "Content-Type: application/x-www-form-urlencoded" + (concat current-sekka-server-url func-name) + lst) + (setq result + (with-current-buffer buffername + (buffer-substring-no-properties (point-min) (point-max)))) + (kill-buffer buffername) + result))) + +(when nil + ;; unit test + (setq sekka-curl "curl") + (setq sekka-login-name (user-login-name)) + (setq current-sekka-server-url "http://localhost:12929/") + (sekka-rest-request-by-curl + "henkan" + '( + ("yomi" . "Nihon") + (limit . "1") + (method . "normal") + ("userid" . "kiyoka"))) + ) + (defun sekka-rest-request-sub (func-name arg-alist) (if sekka-psudo-server (cond @@ -372,35 +422,12 @@ "(\"四文字熟語\" \"4文字熟語\" \"4文字熟語\" \"よんもじじゅくご\" \"ヨンモジジュクゴ\")" ;; 2) しょかいきどう ;; "(\"初回起動\", \"諸快気堂\", \"諸開基堂\", \"しょかいきどう\", \"ショカイキドウ\")" )) ;; 実際のサーバに接続する - (let ((command - (concat - sekka-curl " --silent --show-error " - (if (< 0 (length sekka-no-proxy-hosts)) - (concat " --noproxy " sekka-no-proxy-hosts) - "") - (format " --max-time %d " sekka-server-timeout) - " --insecure " - " --header 'Content-Type: application/x-www-form-urlencoded' " - (format "%s%s " current-sekka-server-url func-name) - (sekka-construct-curl-argstr (cons - '("format" . "sexp") - arg-alist)) - (format "--data 'userid=%s' " sekka-login-name)))) + (sekka-rest-request-by-curl func-name arg-alist))) - (sekka-debug-print (format "curl-command :%s\n" command)) - - (let ( - (result - (shell-command-to-string - command))) - - (sekka-debug-print (format "curl-result-sexp :%s\n" result)) - result)))) - ;; ;; 現在時刻をUNIXタイムを返す(単位は秒) ;; (defun sekka-current-unixtime () (let ( @@ -420,11 +447,11 @@ (setq yomi (replace-regexp-in-string ":" "+" yomi))) (sekka-debug-print (format "henkan-send :[%s]\n" yomi)) (let ( (result (sekka-rest-request "henkan" `((yomi . ,yomi) - (limit . ,limit) + (limit . ,(format "%d" limit)) (method . ,sekka-roman-method))))) (sekka-debug-print (format "henkan-result:%S\n" result)) (if (eq (string-to-char result) ?\( ) (progn (message nil) @@ -1619,10 +1646,10 @@ ;; input-method として登録する。 (set-language-info "Japanese" 'input-method "japanese-sekka") (setq default-input-method "japanese-sekka") (defconst sekka-version - "1.4.0" ;;SEKKA-VERSION + "1.5.0" ;;SEKKA-VERSION ) (defun sekka-version (&optional arg) "入力モード変更" (interactive "P") (message sekka-version))