[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Seeking Advice about refactoring and advice snippet
From: |
Filipe Silva |
Subject: |
Seeking Advice about refactoring and advice snippet |
Date: |
Fri, 10 Feb 2017 09:43:53 -0200 |
Dear good people of the emacs help list,
I have a working snippet that advices both kill-buffer and kill-this-buffer
to not kill the *scratch* buffer:
(defun ninrod/scratch-bodyguard (buffer-assassin &rest arguments)
(let ((buffer-to-kill (buffer-name (current-buffer))))
(if (equal buffer-to-kill "*scratch*")
(message "DENIED! don't kill my precious *scratch*!!")
(apply buffer-assassin arguments))))
(defun ninrod/scratch-protection (buffer-assassin &rest arguments)
(let ((buffer-to-kill (car arguments)))
(if (equal buffer-to-kill "*scratch*")
(message "DENIED! don't kill my precious *scratch*!!")
(apply buffer-assassin arguments))))
(advice-add #'kill-this-buffer :around #'ninrod/scratch-bodyguard)
(advice-add #'kill-buffer :around #'ninrod/scratch-protection)
The problem is that these lines:
(message "DENIED! don't kill my precious *scratch*!!")
(apply buffer-assassin arguments))))
Are repeated in both functions, so I thought that I could apply the DRY
principle and refactor the snippet to this:
(defun ninrod--protection (buffer-assassin buffer-to-kill &rest
arguments)
(if (equal buffer-to-kill "*scratch*")
(message "DENIED! don't kill my precious *scratch*!!")
(apply buffer-assassin arguments)))
(defun ninrod/scratch-bodyguard (buffer-assassin &rest arguments)
(let ((buffer-to-kill (buffer-name (current-buffer))))
(ninrod--protection 'buffer-assassin buffer-to-kill arguments)))
(defun ninrod/scratch-protection (buffer-assassin &rest arguments)
(let ((buffer-to-kill (car arguments)))
(ninrod--protection 'buffer-assassin buffer-to-kill arguments)))
(advice-add #'kill-this-buffer :around #'ninrod/scratch-bodyguard)
(advice-add #'kill-buffer :around #'ninrod/scratch-protection)
This causes all hell to break loose. Now I can't even close emacs, because
apparently emacs tries to kill all buffers
and as I've just tampered with the kill buffer functions, well, it's bad.
Very bad.
I know I mean well, but I'm must be doing something very stupid. For
starters, I don't know if I can really pass around
functions as parameters? So it could be that?
How would you refactor that snippet to apply the dry principle?
thanks in advance,
Filipe.
- Seeking Advice about refactoring and advice snippet,
Filipe Silva <=
- Re: Seeking Advice about refactoring and advice snippet, Narendra Joshi, 2017/02/10
- Re: Seeking Advice about refactoring and advice snippet, Yuri Khan, 2017/02/10
- Re: Seeking Advice about refactoring and advice snippet, Filipe Silva, 2017/02/10
- Re: Seeking Advice about refactoring and advice snippet, Stefan Monnier, 2017/02/10
- Re: Seeking Advice about refactoring and advice snippet, Chunyang Xu, 2017/02/10