2016-03-27 2 views
1

Когда я редактирую кучу файлов в emacs, мне нравится использовать emacs --daemon, поэтому я получаю много открытых кадров. Проблема в том, что я пытаюсь переключить буферы, используя C-x b. Я точно не знаю, как это происходит, но иногда следующий буфер уже будет в кадре, сведенном к минимуму в фоновом режиме. В этом случае он помещает буфер, который я ухожу в этот фрейм, подталкивает буфер до нижней части списка буферов и заставляет меня заходить как сумасшедший, чтобы вернуться к нему. Затем это происходит со вторым буфером, заставляя меня заставлять меня играть как сумасшедший, чтобы вернуться к нему.В emacs нефокусированные фреймы крадут верхний буфер

Он превращает эффективный рабочий цикл «Cx b [редактировать] Cx b [редактировать]» в «Cx b [tabtabtabatbatbatbat] [enter] [изменить] Cx b [tabtabtabatbatbabatbtba] [sigh] [enter] [изменить] ». Единственное решение, которое я могу найти, это Alt-Tab, пока я не найду фрейм, который украл эти буферы, и закройте его. Пока это не исчезнет и не произойдет снова, и я хочу что-то задушить.

Что я хочу ... когда я переключаю буферы с помощью «Cx b», буфер, который я оставляю, никогда не должен перетасовываться в другой открытый кадр, но просто больше не отображается, оставаясь в верхней части списка буферов для следующий «Cx b», чтобы вернуться к нему. Как мне это сделать?

+0

Вы не можете полагаться на обычный буферный список, глобальный или фреймо-локальный - они постоянно меняются и, как правило, не подпадают под ваш контроль. Вам следует рассмотреть возможность использования 'frame-bufs' by Alp Aker - https://github.com/alpaker/Frame-Bufs - который вводит локальный буферный список в параметр frame для связывания буферов выбора с определенными кадрами. Чтобы контролировать, какие буферы отображаются в определенных кадрах, взгляните на ** Как перехватить файл перед его открытием и решить, какой кадр **: http://stackoverflow.com/questions/18346785/how-to-intercept-a -file-before-it-opens-and-solve-which-frame – lawlist

+0

Если вам нравится идея вкладок, следующая ссылка сочетает концепцию 'frame-bufs' с' tabbar' - с дополнительным настраиваемым завихрением для динамического добавлять и удалять выбранные вкладки буферов на основе фрейма: http://emacs.stackexchange.com/a/10112/2287, и все это может быть в браке с концепцией во второй ссылке вышеприведенного комментария (для отображения буфер в определенном кадре). – lawlist

ответ

0

Две вещи, которые могут вам помочь:

  1. Получается эффективный рабочий цикл "Cx б [править] Cx б [править]" в «Cx б [tabtabtabatbatbatbat] [войти] [редактировать] Cx b [tabtabtabatbatbabatbtba] [sigh] [enter] [изменить] ".

    Скорее всего, вы можете использовать C-r для циклического перемещения буферов назад. Таким образом, вы могли бы C-x b TAB двигаться вперед, а C-x b C-r - вернуться назад.

  2. Вы открываете файл с emacsclient file.txt? Если это так, это приводит к тому, что Emacs обрабатывает буфер file.txt особым образом, и вам это не нравится. Вы можете обмануть Emacs, рассматривая его как любой другой буфер, вместо этого запустив emacsclient -e '(find-file "file.txt")'. Таким образом, Emacs не знает, что вы открыли file.txt из команды emacsclient и не помещаете буфер в нижнюю часть списка буферов. Имеет ли это смысл?

    emacsclient -e '(find-file "file.txt")' совсем немного, чтобы напечатать, вы могли бы сократить его, поместив это в .bashrc:

    edit() { 
        emacsclient -e '(find-file "'"$1"'")' 
    } 
    

    Затем откройте файл с edit file.txt.

0

Я нашел решение, я думаю. Проблема заключается в том, что other-buffer игнорирует уже видимые буферы, поэтому, когда switch-to-buffer пытается получить буфер по умолчанию для переключения, other-buffer возвращает скрытые буферы, предпочтительные для видимых. И C-x b звонки switch-to-buffer.

К счастью, other-buffer имеет необязательный аргумент, который отключает эту относительную обработку видимых буферов. switch-to-buffer не указывает этот аргумент, но переопределение кода других людей - это именно то, что defadvice для!

(defadvice other-buffer (before switch-to-visible-darnyou 
           activate preactivate compile) 
    (ad-set-arg 1 t)) 

И пуф, теперь вызывают (другой-буфер что-то) результаты (другие-буферное что-то т), и визуальность буфера не украсть его из switch-to-buffer строки.

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