Режим компиляции Emacs не видит bash псевдоним

Компиляция Emacs M-x не видит никаких псевдонимов, установленных в .bashrc. Если я использую оболочку M-x, то введите псевдоним, это нормально. Я попытался найти .bashrc из /etc/profile, из ~/.profile, ~/bash_env, все, что я могу придумать безрезультатно.

Я на Emacs 23 и Ubuntu 11. Я запускаю emacs, используя /usr/bin/emacs % F, с помощью кнопки рабочего стола.

Любые идеи?

Ответы

Ответ 1

Emacs наследует свою среду от родительского процесса. Как вы вызываете Emacs - из командной строки или каким-либо другим способом?

Что произойдет, если вы:

M-x compile RET C-a C-k bash -i -c your_alias RET

Вызов bash в качестве интерактивной оболочки (-i) должен читать ваши псевдонимы .bashrc.

Изменить: Я думаю, что команда M-x shell-command и M-x скомпилируют команды выполнения в нижней оболочке через call-процесс. Попробуйте следующее в вашем .emacs(или просто оцените):

(setq shell-file-name "bash")
(setq shell-command-switch "-ic")

Я заметил, что после оценки выше, псевдонимы .bashrc выбираются для использования как с командой M-x shell-command, так и с M-x компиляцией, i.e

M-x скомпилировать RET your_alias RET

должен работать.

Моя среда: Emacs 24.1 (preest rc1), OSX 10.7.3

Ответ 2

Ответ Keith Flower работает, но может привести к некоторым замедлениям из-за ненужной загрузки .bashrc в других местах (по-видимому, много раз, мой компьютер не совсем под напряжением, но emacs практически не использовался при попытке использовать autocomplete.el).

Альтернативный способ - локально изменить shell-command-switch только на те функции, где это необходимо. Это можно сделать, используя функцию "рекомендации" emacs, чтобы создать оболочку вокруг этих функций. Вот пример, который изменяет compile:

;; Define + active modification to compile that locally sets
;; shell-command-switch to "-ic".
(defadvice compile (around use-bashrc activate)
  "Load .bashrc in any calls to bash (e.g. so we can use aliases)"
  (let ((shell-command-switch "-ic"))
    ad-do-it))

Вам нужно написать аналогичный "совет" для каждой функции, которую вы хотите использовать .bashrc(например, мне также необходимо было определить тот же совет для recompile), просто скопируйте приведенное выше и замените compile в приведенном выше другое имя функции.

Ответ 3

Я думаю, что команды компиляции не интерпретируются через оболочку: они juste exec'ed от emacs (что означает, что псевдонимы, функции оболочки и другие вещи, относящиеся к оболочке, не учитываются).

Попробуйте включить команду компиляции в оболочку script, которая будет источником правильной среды.

Вы можете сделать это либо с полноценной оболочкой script в форме

#!/bin/bash
source "~/.bashrc"
my_command

или непосредственно в emacs с командой компиляции формы

bash -c "source ~/.bashrc; my_command"

Ответ 4

Вам может понравиться emac bash -completion:

https://github.com/szermatt/emacs-bash-completion/tree/7d6236e6e733ad857ff33af2d9fda38218aec13b

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

Наслаждайтесь!

(они говорят об этом здесь Bash автозаполнение в режиме оболочки Emacs)