Как я могу настроить так, чтобы я мог определить несколько действий в cperl-mode-hook в.emacs?
Вот выдержка из моего.emacs
ПРИМЕР 1: С конфигурацией ниже, режим завершения perl работает отлично.
;;-------------------------------------------------------
;; -*-- CPerl mode
;;-------------------------------------------------------
(defalias 'perl-mode 'cperl-mode)
(add-to-list 'auto-mode-alist '("\\.[apP][Llm]$" . cperl-mode))
(add-to-list 'auto-mode-alist '("\\.al$" . cperl-mode))
(add-to-list 'auto-mode-alist '("\\.t$" . cperl-mode))
(add-to-list 'interpreter-mode-alist '("perl" . cperl-mode))
(defun my-cperl-hook-func()
(add-to-list 'load-path "~/.emacs.d/elpa/perl-completion-20090527.2336")
(require 'perl-completion)
(perl-completion-mode t)
;; (make-local-variable 'compile-command)
;; (setq compile-command
;; (concat "perl " (buffer-file-name)))
;; (cperl-define-key "\C-c\C-c" 'compile)
)
(add-hook 'cperl-mode-hook 'my-cperl-hook-func)
СЛУЧАЙ 2: С помощью приведенной ниже конфигурации Cc Cc в режиме cperl успешно запустит компиляцию perl.
;;-------------------------------------------------------
;; -*-- CPerl mode
;;-------------------------------------------------------
(defalias 'perl-mode 'cperl-mode)
(add-to-list 'auto-mode-alist '("\\.[apP][Llm]$" . cperl-mode))
(add-to-list 'auto-mode-alist '("\\.al$" . cperl-mode))
(add-to-list 'auto-mode-alist '("\\.t$" . cperl-mode))
(add-to-list 'interpreter-mode-alist '("perl" . cperl-mode))
(defun my-cperl-hook-func()
;; (add-to-list 'load-path "~/.emacs.d/elpa/perl-completion-20090527.2336")
;; (require 'perl-completion)
;; (perl-completion-mode t)
(make-local-variable 'compile-command)
(setq compile-command
(concat "perl " (buffer-file-name)))
(cperl-define-key "\C-c\C-c" 'compile)
)
(add-hook 'cperl-mode-hook 'my-cperl-hook-func)
СЛУЧАЙ 3: Однако, с помощью приведенного ниже кода, в котором есть и Perl-Завершение, и Cc Cc для запуска компиляции perl, раскомментировав все строки в функции ловушки (my-cperl-hook-func), он просто заканчивается этим perl- завершение будет работать нормально, в то время как Cc Cc вообще не будет работать (emacs говорит, что Cc Cc не определен).
Как я могу сделать оба действия действительными в cperl-mode-hook?
;;-------------------------------------------------------
;; -*-- CPerl mode
;;-------------------------------------------------------
(defalias 'perl-mode 'cperl-mode)
(add-to-list 'auto-mode-alist '("\\.[apP][Llm]$" . cperl-mode))
(add-to-list 'auto-mode-alist '("\\.al$" . cperl-mode))
(add-to-list 'auto-mode-alist '("\\.t$" . cperl-mode))
(add-to-list 'interpreter-mode-alist '("perl" . cperl-mode))
(defun my-cperl-hook-func()
(add-to-list 'load-path "~/.emacs.d/elpa/perl-completion-20090527.2336")
(require 'perl-completion)
(perl-completion-mode t)
(make-local-variable 'compile-command)
(setq compile-command
(concat "perl " (buffer-file-name)))
(cperl-define-key "\C-c\C-c" 'compile)
)
(add-hook 'cperl-mode-hook 'my-cperl-hook-func)
1 ответ
Прежде всего, если вы используете elpa и систему пакетов для установки perl-completion
, он автоматически добавит его в путь загрузки, поэтому add-to-list load-path
не нужно К сожалению, пакет не включает автозагрузку для perl-completion-mode
, Итак (require 'perl-completion)
является необходимым.
После изучения perl-completion
библиотека на http://www.emacswiki.org/emacs/perl-completion.el, похоже, она использует C-c C-c
в качестве префикса. К сожалению, используя его в качестве префикса, он теряет способность связывать C-c C-c
за compile
в perl-mode
,
Я использовал следующее, чтобы проверить это и связать компиляцию с C-c C-c c
,
(require 'package)
(add-to-list 'package-archives
'("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-initialize)
(package-refresh-contents)
(package-install 'anything)
(package-install 'perl-completion)
;;-------------------------------------------------------
;; -*-- CPerl mode
;;-------------------------------------------------------
(defalias 'perl-mode 'cperl-mode)
(add-to-list 'auto-mode-alist '("\\.[apP][Llm]$" . cperl-mode))
(add-to-list 'auto-mode-alist '("\\.al$" . cperl-mode))
(add-to-list 'auto-mode-alist '("\\.t$" . cperl-mode))
(add-to-list 'interpreter-mode-alist '("perl" . cperl-mode))
(defun my-cperl-hook-func()
(require 'perl-completion)
(perl-completion-mode t)
(make-local-variable 'compile-command)
(setq compile-command
(concat "perl " (buffer-file-name)))
(cperl-define-key "\C-c\C-cc" 'compile)
)
(add-hook 'cperl-mode-hook 'my-cperl-hook-func)
Сохранено как cperl-init.el
и запустить без других пакетов, используя emacs -q -l cperl-init.el
,
Если вы хотите использовать C-c C-c
для компиляции я думаю, что вы должны отменить привязку его использования в perl-завершении. Похоже, что сам cperl имеет некоторую совместимость с mode-compile, но не уверен, добавляет ли он какие-либо привязки.