2013-10-04 22 views
2

在emacs flyspell模式下,有時建議列表非常長,所以彈出式菜單比屏幕更高,並且需要垂直滾動菜單,因爲「Save word」選項位於菜單底部。如何限制flyspell提供的「建議」的數量?

有沒有辦法做到下列之一:

  1. 移動「保存字」到菜單的頂部?
  2. 對顯示的建議數量設置嚴格限制?
  3. 修改匹配詞的閾值?

回答

1

這個代碼將限制所有ispell的解決方案,以最大的limit-ispell-choices-to,其獲取flyspell所需的極限。

(defvar limit-ispell-choices-to 5 
    "Number indicating the maximum number of choices to present") 

(defadvice ispell-parse-output (after limit-ispell-choices activate) 
    (when (and (listp ad-return-value) 
      ad-return-value) 
    (let* ((miss-list-end (nthcdr (- limit-ispell-choices-to 1) 
            (nth 2 ad-return-value))) 
      (guess-list-end (nthcdr (- limit-ispell-choices-to 1) 
            (nth 3 ad-return-value)))) 
     (when miss-list-end (setcdr miss-list-end nil)) 
     (when guess-list-end (setcdr guess-list-end nil))))) 
0

這將把「保存字」放在頂部。我只是在源代碼中交換了兩個單詞。 這有點破解,但我看不到更好的方法。

(defun flyspell-emacs-popup (event poss word) 
    "The Emacs popup menu." 
    (unless window-system 
    (error "This command requires pop-up dialogs")) 
    (if (not event) 
     (let* ((mouse-pos (mouse-position)) 
     (mouse-pos (if (nth 1 mouse-pos) 
       mouse-pos 
       (set-mouse-position (car mouse-pos) 
          (/ (frame-width) 2) 2) 
       (mouse-position)))) 
    (setq event (list (list (car (cdr mouse-pos)) 
       (1+ (cdr (cdr mouse-pos)))) 
       (car mouse-pos))))) 
    (let* ((corrects (if flyspell-sort-corrections 
      (sort (car (cdr (cdr poss))) 'string<) 
       (car (cdr (cdr poss))))) 
    (cor-menu (if (consp corrects) 
      (mapcar (lambda (correct) 
        (list correct correct)) 
       corrects) 
       '())) 
    (affix  (car (cdr (cdr (cdr poss))))) 
    show-affix-info 
    (base-menu (let ((save (if (and (consp affix) show-affix-info) 
        (list 
         (list (concat "Save affix: " (car affix)) 
         'save) 
         '("Accept (session)" session) 
         '("Accept (buffer)" buffer)) 
        '(("Save word" save) 
        ("Accept (session)" session) 
        ("Accept (buffer)" buffer))))) 
       (if (consp cor-menu) 
       (append save (cons "" cor-menu)) 
      save))) 
    (menu  (cons "flyspell correction menu" base-menu))) 
    (car (x-popup-menu event 
       (list (format "%s [%s]" word (or ispell-local-dictionary 
          ispell-dictionary)) 
       menu)))))