Показаны сообщения с ярлыком emacs. Показать все сообщения
Показаны сообщения с ярлыком emacs. Показать все сообщения

2010-08-17

Определение рабочего окружения и возможностей платформы в Emacs

Для правильной работы файла настроек .emacs на различных платформах и различных версиях Emacs требуется проверять множество условий.

Я собрал несколько из них.

2010-03-07

emacs.info в Debian.

Политика проекта Debian запрещает размещение пакетов с контентом, покрытым лицензией FDL, если в тексте имеются инвариантные секции.

Потому мантейнеры пакета Emacs исключают emacs.info, eintr.info, elisp.info и некоторые другие документы из пакета.

Система документации Info очень удобна для пользователей Emacs. В основном за счет легкости пользования поиском.

Можно было бы получить emacs-no-chunk.html, открыть html в Firefox и с включенным "Search for text when I start typing" также легко искать текст, но:

  • приходится помнить/искать где лежит emacs-no-chunk.html
  • документ большой ~= 1 MiB, долго загружается Firefox'ом и немного натупляет Firefox

И так нужно поступать с каждым документом, тогда как при использовании site wide installed info по C-h i видны и искабельны by s или C-s все info-файлы.

Из дистрибутива исходных текстов Emacs извлекаем *.info файлы:

$ tar zxf emacs-22.2.tar.gz $ mkdir ~/usr/share/info $ cp emacs-22.2/info/* ~/usr/share/info

О наличии *.info файлов Emacs'у можно сказать переменной среды INFOPATH:

$ echo export INFOPATH=~/usr/share/info: > ~/.bash_profile
Двоеточие в конце необходимо как признак включать пути к *.info, установленными с Emacs'ом.

Я пошел по другому пути, что бы не прописывать на каждом хосте INFOPATH, добавил следующее в .emacs:

;; Because of Debian policy documentation covered by FDL license ;; with invariant sections is not allowed in packets ;; repository tree. So it must be installed manually. ;; My usual configuration is install user local software ;; into ~/usr DISTDIR. (unless (getenv "INFOPATH") (setenv "INFOPATH" "~/usr/share/info:"))

(unless (getenv "INFOPATH") позволит использовать переменную среды INFOPATH, которую я обычно устанавливаю в Windows для чтения info, поставляемых с MinGW/MSYS/Cygwin, из Emacs, но об этом в следующий раз.

Также это удобно тем, что собранные вручную программы я обычно конфигурирую таким образом:

$ configure --prefix=$HOME/use
потому их info документация автоматически становится доступной из Emacs.

2009-11-04

Переименование пользователя в Linux.

Необходимо переименовать пользователя и его домашний каталог.
Собственно переименовать пользователя легко (используется дистрибутив Debian). От имени root выполняем команды:
# groupmod --new-name newuser olduser # usermod --login newuser --home /home/newhome olduser
Перемещение домашнего каталога командой mv не ограничится:
# mv /home/oldhome /home/newhome
Множество программ, используемых пользователем, использует файлы настроек (dot-файлы). Их придется править вручную ((. В каждом случае решение о правке приходится принимать человеку на основании знания форматов конфигурационных файлов.

Находим все вхождения слова olduser в конфигурационных файлах:

# find /home/newhome -maxdepth 2 -type f | xargs grep -Hn
Обычно пользовательские конфигурационные файлы находятся в корне домашнего каталога пользователя или в соответствующем подкаталоге. Потому глубина поиска ограничена 2.

Можно было использовать следующий способ поиска вхождений:

# grep -Hn user .* .*/*
правда некоторые программы отклоняются от стандартов именования конфигурационных файлов (или каталогов с конфигурационными файлами) - их названия не начинается с точки (dot).

Я для правок использовал команду Emacs grep-find, это позволяло мне быстро переходить в место вхождения заменяемого слова:

C-x d C-a C-k /home/newuser RET С-x grep-find grep -Hn user .* .*/* RET C-x ` =edit= C-x ` =edit= C-x ` =edit= C-x ` ....
Приятного Вам переименовывания пользователей!

2009-10-11

Сортируем без повторений в Emacs.

Только для сортировки строк в Emacs имеется встроенная функция: M-x sort-lines.

Для сортировки без повторений выполняем:

  • выделить область
  • C-u M-| sort -u RET

С включенными режимами transient-mark-mode и delete-selection-mode можно сразу заменить выделенную область отсортированными без повторения строками:

  • выделить область
  • M-| sort -u RET

2009-08-20

Переход на GNU Emacs 23.1 в Windows.

Переход с версий 22.x на недавно вышедший релиз GNU Emacs 23.1 прошел гладко за исколючением двух моментов.

Первое с чем пришлось столкнутся это сообщение об ошибке при выполнении функции (server-start):

error: The directory e:/home/.emacs.d/server is unsafe
Проблема расположена в функции server-ensure-safe-dir:
(unless (and (eq t (car attrs)) (eql (nth 2 attrs) (user-uid)) (or (eq system-type 'windows-nt) (zerop (logand ?\077 (file-modes dir))))) (error "The directory %s is unsafe" dir))))
На stackoverflow.com описано решение проблемы. Cледует удалить выделенный участок кода и обновить байткод (Emacs сначала ищет .elc файла и только затем .el, редактируем файл emacs-23.1/lisp/server.el, C-x byte-compile-file <Down> <Ret>).

Вторая проблема состояла в том что функция codepage-setup устарела и ее определение исключили из дистрибутива. Теперь нет необходимости предварительно перед использованием кодовой страницы IBM cpXXX ее создавать! Для совместимости со старыми версиями Emacs воспользуйтесь следующим кодом:

(when (<= emacs-major-version 22) (codepage-setup 866) (codepage-setup 1251) )

Новость о релизе GNU Emacs 23.1: groups.google.com

Update: 2010-03-17.

2009-09-19 был исправлен баг #4197 касающийся server-ensure-safe-dir. Из ChangeLog:

This fixes bug#4197 (merged to bug#865, though not identical). * server.el (server-auth-dir): Add docstring note about FAT32. (server-ensure-safe-dir): Accept FAT32 directories as "safe", but warn against using them.
Также я нашел другой способ обойти эту проблему:
(require 'server) (when (and (= emacs-major-version 23) (= emacs-minor-version 1) (equal window-system 'w32)) (defun server-ensure-safe-dir (dir) "Noop" t)) ; Suppress error directory ~/.emacs.d/server is unsafe on windows. (server-start)