2012-08-17 3 views
1

Я хочу создать функцию в emacs, которая создаст новый кадр, а затем в этом новом кадре выберет список буферов. Я пробовал:emacs make frame switch buffer

(defun get-buffer-menu-in-new-frame (arg) 
(make-frame) 
(switch-to-buffer-other-frame (list-buffers))) 

Я работал в init.el. Я добавил это, чтобы назвать это:

(get-buffer-menu-in-new-frame) 

Тогда я запустил «eval-buffer». Это, похоже, работал: я получил новый кадр, и имеет список буферов в нем (я надеюсь, что этот результат не был случайностью

Но потом я попытался это:.

(global-set-key (kbd "<f4>") 'get-buffer-menu-in-new-frame) 

Тогда я ударил ключ function4, но я получил:.

recursive-edit: Wrong type argument: commandp, get-buffer-menu-in-new-frame 

Что я делаю неправильно

ответ

4

Вы должны сделать вашу функцию в команде, используя interactive

(defun get-buffer-menu-in-new-frame() 
    (interactive) 
    (switch-to-buffer-other-frame (list-buffers-noselect))) 

Я также удалил arg, который не использовался.

+0

Хм, это помогло, но у меня все еще есть проблема. Я добавил (интерактивный), затем сделал eval-buffer. Это позволяет мне нажать кнопку function4 и получить результат. Но я получаю странный результат: появляется новый фрейм, но он открыт для буфера init.el, где я только что работал. Затем появляется другой кадр, или я переключаю кадры, и появляется список буферов. И я получаю: «pop-to-buffer: неправильный аргумент типа: stringp, # ». Я хочу, чтобы список буфера появлялся в новом фрейме. Что мне делать? – cerhovice

+0

Попробуйте новую версию. –

+0

Спасибо. Это работает отлично. – cerhovice

Смежные вопросы