キルリングのコンテンツをフィルタリングするにはどうすればよいですか?


9

kill-ring空白/空行を保存しないようにすることは可能ですか?今、いくつかの変更を行ってから、次のbrowse-kill-ringようなことがよくあります。

-------



-------
   merchant_uuid: "some_uuid"
-------
   it "creates a webhook" do
-------

-------

-------

kill-ringに意味のあるコンテンツのみを追加させる方法はありますか?


1
答えではありませんが、私は使用してhelm-show-kill-ringおり、空白のキルリングエントリを除外するようです。私はまだたくさんの空白をヤンクすることができるので、質問に+1してください。
グルカ、2015

組み込まれている最も近いものはのようですkill-do-not-save-duplicates。これによりkill-new、同じものを2回続けてキルリングに追加できなくなります。
グルカ、2015

回答:


3

ここでは、空白(つまり空白のみ)のキルを処理するための1つの方法を示します。それらを完全に除外するのではなく、これにより、killリングに最大で1つの空白のエントリが許可されます。新たにキルするたびに、キルリングのヘッドがチェックされ、ブランクの場合は置き換えられます。

(defun my/replace-blank-kill (args)
  (let ((string (car args))
        (replace (cdr args))
        (last (car-safe kill-ring)))
    (when (and last (string-blank-p last))
      (setq replace t))
    (list string replace)))

(advice-add 'kill-new :filter-args #'my/replace-blank-kill)

ここではEmacs 24.4以降のアドバイスメカニズムを使用して、最終的にに渡される引数をフィルタリングしていることに注意してくださいkill-new

その効果は、あなたはまだたくさんの空白を殺してヤンクすることができるということです、しかしあなたがいくつかの空白を殺してそして次に何かを殺すならば、空白のエントリーは捨てられます。


必要に応じて、をkill ring instedaに追加しないことを選択できます。このアプローチkillkill-ring-save、などで機能します。コールせずにキルリングに追加するコマンドがある場合kill-new、もちろん機能しません。
グルカ、2015

これは私のためにそれを解決しました。kill-newなしでkill ringに追加するコマンドは使用していないと思います。または、少なくとも奇妙な動作に気づきませんでした。
Ignacy Moryc 2015

0

1つの問題は、すべてのコマンドがを変更する可能性kill-ringがあることpost-command-hookです。これを行うのに十分強力なフックはだけです。これは非効率的ですが、AFAIKはこれを厳密に行う唯一の方法です。それがあなたにうまく聞こえる場合は、これを行うことができます:

(defun kill-ring-clean-whitespace-only ()
  (when (string-match "^[[:space:]]*$" (car kill-ring))
    (setq kill-ring (cdr kill-ring))))

(add-hook 'post-command-hook #'kill-ring-clean-whitespace-only)

効率を上げるために、すべてのコマンドがに追加されると想定していますがkill-ring、これはおそらく安全ですが、関数はの任意の場所にテキストを挿入できることに注意してくださいkill-ring。ただし、これはまれであり、すべてのコマンドでkillリング全体を繰り返し処理したくないと思います。


これを行うためのもう少し効率的な方法は、defadviceまたは独自のコマンドを使用して、ヤンクまたはブラウズする直前にキルリングをクリーンアップすることです。
Sacha Chua

私はそれについて考えましたが、ヤンクのためにキルリングにアクセスするすべてのコマンドのリストが必要です。誰かがリストを思い付くことができれば、残りは簡単です(もちろん)。
PythonNut、2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.