Changeset 1829 for lang/elisp

Show
Ignore:
Timestamp:
11/20/07 05:58:48 (7 years ago)
Author:
elim
Message:

lang/elisp/simple-hatena-mode:

  • implemented `simple-hatena-read-string-and-match-check'.
  • improved validation in simple-hatena-group-setup' and simple-hatena-setup-id'.
  • improved looping in simple-hatena-group-setup' and simple-hatena-setup-id'.
  • call simple-hatena-group-setup' in simple-hatena-setup'.
Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/elisp/simple-hatena-mode/simple-hatena-mode.el

    r1827 r1829  
    189189  5. 月(MM) 
    190190  6. 日(DD)") 
     191 
     192;; はてなIDの正規表現 
     193;; > http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CAID 
     194;; > 大文字あるいは小文字のアルファベット・0-9の数字・「-」・「_」(いずれも 
     195;; 半角)のいずれかを3-32文字並べたもの(ただし最初の文字はアルファベットで 
     196;; あること)から成る。 
     197(defconst simple-hatena-id-regex 
     198  "^[A-z][\-_A-z0-9]+[A-z0-9]$" 
     199  "") 
    191200 
    192201;; はてなグループ名の正規表現 
     
    283292 
    284293   ;; hatena id(s) 
    285    (simple-hatena-setup-id))) 
     294   (simple-hatena-setup-id) 
     295 
     296   ;; hatena group 
     297   (when (y-or-n-p 
     298          "do the setting of the 'Hatena group' successively? ") 
     299     (simple-hatena-group-setup)))) 
    286300 
    287301(defun simple-hatena-setup-check-hatena-bin-exists-p () 
     
    304318  (let 
    305319      ((ids (list))) 
    306  
    307320    (when (file-directory-p simple-hatena-root) 
    308321      (dolist (id (simple-hatena-internal-list-directories simple-hatena-root)) 
     
    312325      (add-to-list 'ids simple-hatena-default-id)) 
    313326 
    314     (when (eq (length ids) 0) 
    315       (add-to-list 'ids (read-string "Please input your default Hatena id: "))) 
    316  
    317     (while (y-or-n-p 
    318             (format 
    319              "id `%s' found.\nsetup other id(s)? " 
    320              (mapconcat 'identity 
    321                         ids "', `"))) 
    322       (add-to-list 'ids (read-string "Please input your other Hatena id: "))) 
     327    (while 
     328        (or (not ids) ;;FIXME incomprehensible. 
     329            (y-or-n-p 
     330             (format 
     331              "existing id(s) '%s'.\nsetup other id? " 
     332              (mapconcat 'identity 
     333                         ids "', '")))) 
     334      (add-to-list 
     335       'ids (simple-hatena-read-string-and-match-check 
     336             "Please input your other Hatena id: " 
     337             simple-hatena-id-regex 
     338             "`%s' is invalid hatena id."))) 
    323339 
    324340    (dolist (id ids) 
    325       (simple-hatena-setup-id-create-directory-and-file id)))) 
     341      (simple-hatena-setup-id-create-directory-and-file id)) 
     342    ids)) 
    326343 
    327344(defun simple-hatena-setup-id-create-directory-and-file (id) 
     
    342359       (id (condition-case err 
    343360               simple-hatena-local-current-buffer-id 
    344              (error (simple-hatena-internal-completing-read-id simple-hatena-root))))) 
    345     (add-to-list 
    346      'groups (read-string 
    347               (format "Please input create Hatena group for id:%s :" id))) 
    348  
    349     (while (y-or-n-p 
    350             (format 
    351              "group '%s' found.\nsetup other group(s)? " 
    352              (mapconcat 'identity 
    353                         groups "', `"))) 
     361             (error (simple-hatena-internal-completing-read-id 
     362                     simple-hatena-root)))) 
     363       (group-dir (expand-file-name (format "%s/%s/group" 
     364                                            simple-hatena-root id)))) 
     365 
     366    (unless (file-directory-p group-dir) 
     367      (make-directory group-dir 'parents)) 
     368 
     369    (dolist (group (simple-hatena-internal-list-directories group-dir)) 
     370      (add-to-list 'groups group)) 
     371 
     372    (while 
     373        (or (not groups) 
     374            (y-or-n-p 
     375             (format 
     376              "existing group(s) '%s'.\nsetup other group? " 
     377              (mapconcat 'identity 
     378                         groups "', '")))) 
    354379      (add-to-list 
    355        'groups (read-string 
     380       'groups (simple-hatena-read-string-and-match-check 
    356381                (format 
    357                  "Please input create Hatena group for id:%s :" id)))) 
     382                 "Please input create Hatena group for id:%s :" id) 
     383                simple-hatena-group-regex 
     384             "`%s' is invalid hatena group."))) 
    358385 
    359386    (dolist (group groups) 
     
    377404        (make-directory dirname 'parents)) 
    378405      (append-to-file 1 1 filename)))) 
     406 
     407(defun simple-hatena-read-string-and-match-check (prompt regex 
     408                                                         &optional errmsg) 
     409  "Read a string from the minibuffer, prompting with string prompt, 
     410and Cheking input value. If non-nil, third args, you can set error message. 
     411NOTE: Please refer to `format' for the format of the error message." 
     412  (let 
     413      ((input nil) 
     414       (errmsg (or errmsg 
     415                   "your input is invalid..."))) 
     416    (while 
     417        (and 
     418         (setq input (read-string prompt)) 
     419         (not (string-match regex input))) 
     420      (message (format errmsg input)) 
     421      (sleep-for 1)) 
     422    input)) 
    379423 
    380424(defun simple-hatena (id)