LINUX.ORG.RU

Группировка нескольких буферов на одной вкладке в GNU Emacs

 ,


0

3

Hi, folks!

Можно ли в Emacs реализовать такую вещь. Допустим у меня есть 3 буфера, которые отображаются одновременно на экране. Эти буферы связаны между собой какой-то задачей, которую я выполняю. Есть еще 3 буфера которые связаны с какой-то другой задачей. Как можно объеденить эти буферы в одну вкладку (или другую сущность) и переключаться между ними по необходимости. Т.е. выбрал другую вкладку и переключился на другую группу буферов.

Короче говоря, нужно что-то типа тегов (или рабочих столов), внутри Emacs и возможность между ними переключаться.

Спасибо.

Я с этой целью использую обыкновенный менеджер окон.
В одном emacsclient'e висит один сплит нужных буферов, в другом — другой. И им никто не мешает пересекаться.

aidaho ★★★★★
()

Эти буферы связаны между собой какой-то задачей, которую я выполняю. Есть еще 3 буфера которые связаны с какой-то другой задачей.

Projectile (helm-projectile, counsel-projectile). Ну и

В одном emacsclient'e висит один сплит нужных буферов, в другом — другой

feofan ★★★★★
()

ivy

Там есть ivy-push-view, сохраняет текущую раскладку окон с буферами.
Переключаться между ним можно «стандартным» переключением буферов (тот, что идет с ivy).

окна, окна, окна...
M-x ivy-push-view RET task1-with-3-windows RET

Другие окна
M-x ivy-push-view RET task2-with-2-windows RET

Переключаемся
С-x b task1-with-3-windows

С-x b task2-with-2-windows

habamax ★★★
()
Ответ на: комментарий от ananas

Есть мануал, как это сделать? Знаю что в tabbar есть возможность группировки, но я так и не осилил :( пока что, во всяком случае.

trancefer ★★
() автор топика
Ответ на: комментарий от trancefer
(setq tabbar-buffer-groups-function 'buffer-groups)
(defun buffer-groups ()
  "Tabbar grouping function"
  (list
   (cond
    ((string-match "^*" (buffer-name))
     "Special")
    (t
     "All buffers"))))

у меня так, я просто вынес в отдельную группу все специальные буфера типа выхлопа компилятора и т.д.

но что там в функции наворотить, и по какому признаку делать группировку - тут фантазия может разгуляться

ananas ★★★★★
()
Ответ на: комментарий от ananas

но что там в функции наворотить, и по какому признаку делать группировку - тут фантазия может разгуляться

как вариант - можно делать группы по каталогам открываемых файлов

ananas ★★★★★
()
Ответ на: комментарий от ananas

и до купы, переключение между буферами - ctrl+<>, между группами - ctrl+shift+<>

(global-set-key [(control \.)] 'tabbar-forward-tab)
(global-set-key [(control \,)] 'tabbar-backward-tab)
(global-set-key [(control >)] 'tabbar-forward-group)
(global-set-key [(control <)] 'tabbar-backward-group)
ananas ★★★★★
()
Ответ на: комментарий от ananas

А есть возможность создания группы по запросу? В идеале так: нажал хоткей, тебя спросили идентификатор группы и создали ее. Другим хоткеем подабавлял в группу нужные буферы.

trancefer ★★
() автор топика
Ответ на: комментарий от trancefer

черт его знает. никогда подобного не требовалось. глянь на emacs wiki, там дофига примерчиков было

ananas ★★★★★
()

Как можно объеденить эти буферы в одну вкладку (или другую сущность) и переключаться между ними по необходимости

Несколько фреймов открой. Ну или мучайся с сохранением окон в регистры.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Не хочу несколько фреймов. Я периодически работаю удаленно, подключаясь к рабочей машине в существующую сессию tmux, в котором уже запущен emacsclient. Другой emacsclient в это время продолжает висеть в Ховом сеансе до моего возвращения. Нафигачить в tmux несколько emacsclientов тоже как-то не очень.

trancefer ★★
() автор топика
23 ноября 2017 г.
Ответ на: комментарий от habamax

Спасибо тебе, добрый человек! Спецом зологинился, чтобы поблагодарить.

Я для этого workgroups2 использую, жаль что майнтейнер недавно его дропнул. Workspaces основаный на escreen тоже был неплох и юзабелен, но больно уж топорен, и подустарел уже. Не знал, что в ivy есть простенький оконный менеджмент. Интересно, они в регистры сохраняются?

Pitometsu
()

Насчет регистров не скажу, но у меня такой конфиг:

(use-package ivy
  :defer 2
  :diminish ivy-mode
  :init
  ;; clear default ^ for counsel-M-x and friends
  (setq ivy-initial-inputs-alist '())
  :config
  (use-package ivy-hydra :defer)
  (use-package flx :defer)
  (ivy-mode 1)
  (setq ivy-use-virtual-buffers t)
  (setq ivy-re-builders-alist '((swiper . ivy--regex-plus)
                                (t . ivy--regex-fuzzy)))

  (defun haba/save-ivy-views ()
    (interactive)
    (with-temp-file (concat user-emacs-directory "ivy-views")
      (prin1 ivy-views (current-buffer))
      (message "Save ivy-views")))

  (defun haba/load-ivy-views ()
    (interactive)
    (setq ivy-views
          (with-temp-buffer
            (insert-file-contents (concat user-emacs-directory "ivy-views"))
            (read (current-buffer))))
    (message "Load ivy-views"))
  )


функциями save-ivy-views, load-ivy-views сохраняю в файл/загружаю из файла.

habamax ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.