               (overlay-put candidate-content-overlay
                            'face
                            'snails-candiate-content-face))
-            (insert "\n")
-            )
+            (insert "\n"))
+
+          ;; Insert new empty line at last candiate of backend.
           (insert "\n"))
+        ;; Update candidate index to fetch name of next backend.
         (setq candiate-index (+ candiate-index 1)))
 
+      ;; Select first line after render finish.
       (goto-char (point-min))
       (snails-select-next-item)
       )))
 
-(defun snails-update-list-by-index (list n val)
-  (nconc (subseq list 0 n)
-         (cons val (nthcdr (1+ n) list))))
-
-(defun snails-select-next-item ()
-  (interactive)
-  (with-current-buffer snails-content-buffer
-    (goto-line snails-select-line-number)
-    (snails-jump-to-next-item)
-    (setq snails-select-line-number (line-number-at-pos))
-    (move-overlay snails-select-line-overlay
-                  (point-at-bol)
-                  (point-at-eol))
-    (snails-keep-cursor-visible)))
-
-(defun snails-select-prev-item ()
-  (interactive)
-  (with-current-buffer snails-content-buffer
-    (goto-line snails-select-line-number)
-    (snails-jump-to-previous-item)
-    (setq snails-select-line-number (line-number-at-pos))
-    (move-overlay snails-select-line-overlay
-                  (point-at-bol)
-                  (point-at-eol))
-    (snails-keep-cursor-visible)))
-
 (defun snails-jump-to-next-item ()
+  "Select next candidate item."
+  ;; Forward line.
   (forward-line)
+  ;; Skip empty line and header line.
   (while (and (not (eobp))
               (or
                (snails-empty-line-p)
                (snails-header-line-p)))
     (forward-line))
+  ;; Adjust line if reach bottom line.
   (when (and (eobp)
              (snails-empty-line-p))
-    (previous-line 2))
-  )
-
-(defun snails-do ()
-  (interactive)
-  (with-current-buffer snails-content-buffer
-    (goto-line snails-select-line-number)
-    (end-of-line)
-    (backward-char)
-    (let ((overlays (overlays-at (point))))
-      (catch 'do
-        (while overlays
-          (let ((overlay (car overlays)))
-            (when (eq (overlay-get overlay 'face) 'snails-candiate-content-face)
-              (snails-backend-do
-               (snails-get-candidate-backend-name (point))
-               (buffer-substring (overlay-start overlay) (overlay-end overlay)))
-              (throw 'do nil)
-              ))
-          (setq overlays (cdr overlays))))
-      )))
+    (previous-line 2)))
+
+(defun snails-jump-to-previous-item ()
+  "Select previous candidate item."
+  ;; Previous line.
+  (previous-line)
+  ;; Skip empty line and header line.
+  (while (and (not (bobp))
+              (or
+               (snails-empty-line-p)
+               (snails-header-line-p)))
+    (previous-line))
+  ;; Adjust line if reach to line.
+  (when (bobp)
+    (forward-line)))
 
 (defun snails-get-candidate-backend-name (candidate-point)
+  "Get backend name at selected candidate position."
   (catch 'backend-name
     (dolist (header-line-overlay snails-header-line-overlays)
       (when (> candidate-point (overlay-end header-line-overlay))

                         'face
                         'snails-candiate-name-face)

            (setq candidate-content-start (point))
            (insert (format "%s" (nth 1 candiate)))
            (setq candidate-content-end (point))

                         ))
          (forward-char)

          ;; Render candidate list.
          (dolist (candiate candiate-list)
            ;; Render candidate display name.
            (setq candidate-name-start (point))
            (insert (nth 0 candiate))
            (setq candidate-name-end (point))
