Yazımı “boşlukta” otomatik olarak düzeltmek mümkün mü?


10

Soruyu göndermek üzereydim ama sonra otomatik düzeltme olasılıklarını ararken Stack Overflow'da gördüm . Bağlantılı sorunun cevabı yok, bu yüzden bu sitede daha fazla şans olacağını düşündüm. İşte metin:

Keşke bir kelime yanlış yazdığımda, sineklik "büyük olasılıkla" düzeltmesine otomatik olarak düzeltmek için bir yol olsaydı. Bir kelimeyi yanlış yazdığımda ve düzeltmek için OPTION-TAB tuşuna bastığımda, sinek ALMOST DAİMA varsayılan olarak ana öneri olarak doğru düzeltmeyi seçer.

Ancak, ben flyspell bunu OPTION-TAB vurmak zorunda kalmadan yanlış yazdığım her kelime ile yapmak istiyorum. Sadece SPACE çubuğuna vurup bir sonraki kelimeye geçmekten.

Mümkün mü?

Temel olarak cep telefonlarında otomatik düzeltme gibi bir şey. Böyle bir özellik gibi modları için olması faydalı olacaktır jabberve capturedeorg-mode


Düzenle :

Bu özelliği varsayılan sinek büyü işlevselliğinin üzerine yazmaktan ayrı bir küçük mod olarak tercih ederim. Ek olarak veya gerektiğinde sinek büyüsü yerine etkinleştirilebilir


1
Eminim ki (ve muhtemelen saldırıya uğramak zor değildir), ama IMHO'nun çok kötü bir fikir olacağını söylemek zorunda hissediyorum.
mbork

1
@mbork Sinek büyüsünün çalışma şeklini değiştirmek kötü bir fikir olurdu, ancak talep üzerine etkinleştirilebilen / devre dışı bırakılabilen ek bir küçük moda sahip olmanın nesi yanlış?
Tymric

Telefonumdaki benzer bir özellik beni sürekli rahatsız ediyor. Onların ;-) değil, özellikle, onlar daha akıllı benden daha olduğunu davranarak makineleri sevmiyorum: onlar kelime çok bazen özellikle de, sınırlı istiyorum (bazı özel adların gibi) olmayan kelimeleri yazın.
mbork

@mbork Doğru, ama aynı zamanda her şeyi yazmak konusunda endişelenmenize gerek yok gibi avantajları da var '. Bir Alman klavyesi kullanıyorum ve bu tuşa her ulaştığımda
pinkiğim

1
@mbork "olmayan_sayılar" sorununu çözmek için, belki de S-SPC"tek başına bırak" kelimesine bağlanabilir miyiz ?
Tymric

Yanıtlar:


6

Sizi bu konudaki gönderime yönlendireyim .


Kısaltmalar üzerinde düzeltme yapmanın en iyi yolu olduğunu gördüm, SPCsadece istediğiniz düzeltmeleri tanımlamanız gerekiyor. Bunun için aşağıdaki yaklaşımı benimsiyorum:

  1. Aşağıdaki kodu init dosyanıza ekleyin.
  2. Yanlış bir şey yazdığınızda, C-x C-isunulan düzeltmelerden birini seçin ve seçin.
  3. Bu kadar! Düzeltme otomatik olarak orada değiştirilecek ve bundan sonra bu hatayı her yaptığınızda otomatik olarak yapılacaktır.

İşte kod

(define-key ctl-x-map "\C-i" 'endless/ispell-word-then-abbrev)

(defun endless/ispell-word-then-abbrev (p)
  "Call `ispell-word'. Then create an abbrev for the correction made.
With prefix P, create local abbrev. Otherwise it will be global."
  (interactive "P")
  (let ((bef (downcase (or (thing-at-point 'word) ""))) aft)
    (call-interactively 'ispell-word)
    (setq aft (downcase (or (thing-at-point 'word) "")))
    (unless (string= aft bef)
      (message "\"%s\" now expands to \"%s\" %sally"
               bef aft (if p "loc" "glob"))
      (define-abbrev
        (if p local-abbrev-table global-abbrev-table)
        bef aft))))

(setq save-abbrevs t)
(setq-default abbrev-mode t)

Elle, düzeltmeleri eklemek hantal gelebilir, ancak gerçekten değil. Sadece birkaç tuşa basıyorsunuz ve birkaç düzeltmenin size uzun bir yol kazandıracağını göreceksiniz.

Ayrıca, alternatif (ispell'in kelimeyi her kullanışınızda sizin için düzeltmeyi seçmesine izin vermek ) size yanlış düzeltmeleri daha sık yapmaz. Bu yüzden zaten kendi tanımlamak en iyisidir. Hatta gerçekten kelime olmayan yazmak istediğinizde bile sorunu çözer .


Ben bir ikame ekleyerek çalıştı dontiçin don'tkullanıyor C-x C-i 1ancak mektup eklendi tyerine ( "dont" now expands to "t" globally). Kesme işaretlerini iyi işlediğini sanmıyorum. Bunun için bir düzeltme var mı?
Tymric

@Timmy Bu bir programlama modunda mı? Metin modunda bu benim için olmadı.
Malabarba

Bir jabber sohbetinde denedim, ancak yorumunuzdan sonra metin modunda test ettim ve küresel olarak çalıştı. Teşekkür ederim
Tymric

2

İşte basit bir girişim:

(defun my-flyspell-correct-on-space ()
  (interactive)
  (when flyspell-mode
    (flyspell-auto-correct-word))
  (self-insert-command 1))
(local-set-key " " 'my-flyspell-correct-on-space)

Bir satıra birden fazla boşluk eklediğinizde garip davranır ve bazen düzeltilmekte olan sözcüğün bir kısmını ayırır. Dolayısıyla bu yazı topluluk wiki'sidir; geliştirmek için çekinmeyin.


6
Boşluk tuşunu yalnız bırakmayı tercih ederim ve bunun yerine post-self-insert-hookboşlukların eklenmesini izlemek ve buna göre hareket etmek için kullanın . Bu daha güvenli ve daha verimlidir.
lunaryorn

1

Otomatik cevap ve @ legoscia'nın cevabı hakkında başka bir sorudan esinlenen geç cevap . İşte kullanarak otomatik olarak düzelecek hızlı bir küçük mod flyspell. Aslında, tavsiye ettiği gibi "küresel" dir self-insert-command, ancak sadece flyspell-modeaçılmış tamponlarda yangın çıkarır .

(defun flyspell-ac-word (&optional arg)
  "Autocorrect a word when entering a non-word character."
  (when flyspell-mode
    (unless (eq ?w (char-syntax (string-to-char (this-command-keys))))
      (when (or (bobp)
                (eq ?w (char-syntax (char-before))))
        (flyspell-auto-correct-word)))))

(define-minor-mode flyspell-autocorrect-mode
  "Toggle `flyspell-autocorrect-mode'.  Fires flyspell on a
just-completed word.  Only operates when `flyspell-mode' is on."
  :init-value nil
  :lighter (" AC")
  (if flyspell-autocorrect-mode
      (progn 
        (require 'flyspell)
        (advice-add #'self-insert-command :before #'flyspell-ac-word))
    (advice-remove #'self-insert-command #'flyspell-ac-word)))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.