Разделение окна в функции Emacs Lisp - PullRequest
1 голос
/ 05 мая 2009

Я бы хотел иметь возможность запустить команду оболочки для текущего файла, который я редактирую, и отобразить вывод в окне Вывод команды оболочки . Я был в состоянии определить функция, которая показана ниже.

(defun cpp-check ()
  "Run cpp-check on current file the buffer is visiting."
  (shell-command
   (concat "/home/sburke/downloads/cppcheck-1.31/cppcheck "
       (buffer-file-name))))

Единственная проблема в том, что окно вывода никак не выводится на передний план. Я хотел бы, чтобы окно было разделено и окно вывода отображалось там. Кроме того, я на правильном пути, определяя функцию, которая будет добавлена ​​в мой файл .emacs, или есть лучший способ?

Любая помощь будет оценена. Спасибо.

Ответы [ 4 ]

4 голосов
/ 05 мая 2009

Посмотрите на документацию для 'shell-command, у меня это хорошо сработало:

(defun cpp-check ()
  "Run cpp-check on current file the buffer is visiting."
  (shell-command
   (concat "/home/sburke/downloads/cppcheck-1.31/cppcheck "
       (buffer-file-name))
   "cpp-check"))

Создает новый буфер с именем "cpp-check" и помещает результаты туда. Текущий кадр разделяется на, а буфер "cpp-check" помещается в другое окно.

3 голосов
/ 05 мая 2009

Смотрите функцию `pop-to-buffer '. Я думаю.

Вы должны иметь возможность дать ему имя буфера для всплытия - просто укажите в буфере вывода команд оболочки.

2 голосов
/ 05 мая 2009

Это то, что я придумал. Спасибо за ответы. Я определил функцию, которая будет запускаться и запускать cpp-check. Я хотел, чтобы он был привязан к ключу в c-mode, поэтому я добавил его как хук. Я столкнулся с различием между обычными функциями и теми, которые могут быть связаны с клавишами, поэтому мне пришлось сделать функцию интерактивной. Эта статья помогла объяснить это. Так что теперь, когда нажата комбинация клавиш, результаты появляются в другом окне, но курсор остается в исходном буфере, чего я и хочу. Единственная проблема заключается в том, что вывод отображается также в минибуфере, что не совсем то, что я хочу. Есть мысли по поводу исправления этой маленькой детали?

(defun cpp-check ()
  (interactive)
  "Run cpp-check on current file the buffer is visiting."
  (shell-command
   (concat "/home/sburke/downloads/cppcheck-1.31/cppcheck "
       (buffer-file-name)))
  (display-buffer "*Shell Command Output*"))

(add-hook 'c-mode-common-hook
           (lambda ()
         (define-key c-mode-base-map
               "\C-x\p" 'cpp-check)))
1 голос
/ 05 мая 2009

разделение окна - это (split-window-vertical). У него есть необязательный аргумент размера (верхней части, если положительной, нижней, если отрицательной) части окна.

Затем вам нужно вывести буфер результатов оболочки на передний план с помощью switch-to-buffer или switch-buffer-other-window.

Помните, что когда вы выплевываете окно (фрейм) в emacs, вы получаете два "окна" из-за путаницы имен в тот день, когда уже слишком поздно иметь дело ...

...