• ベストアンサー

emacsの設定

「.c」の拡張子をもつファイルのモードをc-modeにする.emacsの設定 (setq auto-mode-alist (cons '("\\.c$" . c-mode) auto-mode-alist)) のcons の意味がよくわからなくて困っています。 あと、cons 'の  'マークがなぜ必要なのかわかりません。 調べてもなかなかcons の意味が単体で出てこなくて困っているので、誰か教えてください。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nightowl
  • ベストアンサー率44% (490/1101)
回答No.2

こんばんは。 cons の名は基本データ型「コンスセル(cons cell)」を構築すること (construction of cells)に由来します。 (本当は歴史的経緯がいろいろあるのですが、下記のオンラインリファレンスに 詳しく書いてありますので略させていただきます。) コンスセルとは「(CAR . CDR)」という形で表現される、 2つのポインタが対になったオブジェクトのことです。 cons とは、「(cons object1 object2)」の形で、object1 を CAR(カー)、 object2 を CDR(クダー)とするコンスセルを構築するための関数です。 cons はリストの先頭に要素を1つ追加するためにしばしば用いられます。 この場合、auto-mode-alist という連想リスト(associative list, alist)の 先頭にコンスセルを追加したものを新たな auto-mode-alist として設定しています。 Lisp の性質として「(1 2 3)」のようなリストは「(1 . (2 . (3 . nil)))」と等価です。 だから、コンスセルを構築する cons を使って連想リストの要素を追加できるのです。 >あと、cons 'の  'マークがなぜ必要なのかわかりません。 これは、'でクォートしておかないと、括弧の中身が展開され、 「"\\.c$"」という名前の関数の呼び出しと解釈されてしまうからです。 で、当然ながらそんな変な関数は知らないと叱られます。 *scratch* バッファやミニバッファで「("\\.c$" . c-mode) 」を評価してみてください。 (setq list '((1 . 2))) (setq list (cons '(3 . 4) list)) またこのようにリストにどんどんコンスセルをつないで遊んでみるのも面白いでしょう。 elisp の仕様に関して最も詳しいのは当然ながら Lewis, LaLiberte, Stallman らの 「Emacs Lisp リファレンスマニュアル」(アスキー出版局)ですが、 私は手引書として yatex(野鳥)モードの作者・広瀬雄二さんの 「やさしい Emacs-Lisp 講座」(カットシステム)もお勧めします。 http://www.ascii.co.jp/books/detail/4-7561/4-7561-3414-9.html

参考URL:
http://www.fan.gr.jp/~ring/doc/elisp-manual/elisp.html,http://www.cutt.co.jp/book/4-906391-70-2.html
msndance
質問者

お礼

ありがとうございました。 私は与えられた開発環境の中でプログラミングするのは まあまあできるのですが、いつも環境設定でミスするので、 OSの知識を総ざらいしているところです。

その他の回答 (2)

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.3

.emacs設定ファイルで使われるemacs-lispについては、 以下のURLが参考になりますでしょうか。 簡単に言うと、 (1)'(アポストロフィ)は、そのあとのリストを評価せずにそのまま扱う。 (2)consは#1の回答にあるように、リストの先頭に要素を入れて、新しいリストを作る。 となります。

参考URL:
http://www.math.s.chiba-u.ac.jp/~matsu/lisp/emacs-lisp-intro-jp.html#SEC_Top
  • pierre2
  • ベストアンサー率24% (259/1070)
回答No.1

あまり得意ではないのですが consはconstructの略でリストの先頭に 加える時に使うんじぁなかったでしたっけ?

関連するQ&A

  • emacs lisp

    OS:ubuntu feisty fawn app:emacs-snapshot (emacs23) アンチエイリアスフォントのためにemacs23を使用しております。 実行したのは以下のとおり。 sudo apt-get install emacs-snapshot emacs-snapshot-el .emacs.el (autoload 'c++-mode "cc-mode" nil t) (add-hook 'c-mode-common-hook (lambda () (setq c-set-style "linux") c-basic-offset 4)) (setq auto-mode-alist (append '(("\\.cpp$" . c++-mode)auto-mode-alist)) cc-modeのバージョンは5.28です。 この設定を施したにもかかわらず、Syntax highlightが動いてくれません。(強調表示) どなたかご教授願えませんでしょうか? よろしくお願いします。

  • yatexでタイプセットに失敗

    yatexのタイプセットが上手くいかず困っています. 他の質問も探したのですが,自分と同じ状況の方がいらっしゃらなかったため,どなたかご助言をいただけますと助かります. 以下,自分の環境及び,行った作業になります. 環境 OS : Windows7 Professional 32bit Emacs : gnupack_basic-8.0.0(http://sourceforge.jp/projects/gnupack/releases/?package_id=10360)についてきたものを利用..init.elファイルはネットで拾ったものを利用( https://gist.github.com/4335284 ) yatex : http://www.yatex.org/ より,1.76版を利用 TeX : TeXインストーラ3 0.83(http://www.math.sci.hokudai.ac.jp/~abenori/soft/index.html)をデフォルト設定のままインストール * EasyTex(http://www.juen.ac.jp/math/nakagawa/texguide.html#easytex)では,tex文書を書き,タイプセット,dvi化,pdf化までできることを確認しています. * コマンドライン上では,「platex --help」「dvipdfmx --help」のコマンドが通ることを確認しています. 行った作業 1. yatexを上記URLよりダウンロード 2. ファイルを解凍 3. ディレクトリ"yatex1.76"を"yatex"にリネーム 4. yatexを.emacs.d/に移動 5. .emacs.d/init.elに以下の記述を追記 ;;; YaTeX-mode (setq auto-mode-alist (cons (cons "\\.tex$" 'yatex-mode) auto-mode-alist)) (autoload 'yatex-mode "yatex" "Yet Another LaTeX mode" t) (setq load-path (cons "~/.emacs.d/yatex" load-path)) (setq tex-command "platex") (setq dvi2-command "c:/w32tex/dviout/dviout") (setq dviprint-command-format "dvipdfmx %s ") 最終的なinit.elは( https://gist.github.com/4335284 ) 6. EasyTexではpdf化まですることのできていたtexファイルをemacsから開き,「やてふ」と表示されているのを確認 7. C-c t j と入力すると,以下のようなエラーが出る /usr/bin/bash: platex: コマンドが見つかりません Call `platex hogehoge.tex' 以上です.よろしくお願いします.

  • .emacsの編集について

    windowsでGNU Emacsを使い始めた初心者です。 .emacsを編集してemacsをカスタマイズしようと思い,.emacsが保存されていたCドライブの中のAPPData/Roamingというフォルダに入りました。予定通り.emacsファイルがあったのでそのファイルに命令を追加したのですがemacsに反映されずに困っています。なにか間違っているのでしょうか?教えてください。ちなみにファイルの中身は以下のように記述されています。 /*Textモードとauto-fillモードを自動的に有効にする*/ (setq default-major-mode'text-mode) (add-Hook 'Texy-mode-hook 'turn-on-auto-fill) /*言語設定*/ (set-language-environment"japanese" ) /*フォントの設定*/ (create-fontset-from-request "private-fontset" '((width . 25) (height . 16) (fixed . t) (italic . nil)) '((family . "MS ゴシック") (family . "Courier New"))) /*色に関する設定*/ (setq default-frame-alist (append (list '(font . "private-fontset")) default-frame-alist)) (if window-system (progn (set-face-foreground 'font-lock-comment-face "MediumSeaGreen") (set-face-foreground 'font-lock-string-face "purple") (set-face-foreground 'font-lock-keyword-face "blue") (set-face-foreground 'font-lock-function-name-face "blue") (set-face-bold-p 'font-lock-function-name-face t) (set-face-foreground 'font-lock-variable-name-face "black") (set-face-foreground 'font-lock-type-face "LightSeaGreen") (set-face-foreground 'font-lock-builtin-face "purple") (set-face-foreground 'font-lock-constant-face "black") (set-face-foreground 'font-lock-warning-face "blue") (set-face-bold-p 'font-lock-warning-face nil) (set-background-color "black") ) ;対応する括弧を表示する (show-paren-mode t)

  • 指定文字数で、行を折り返す設定(Emacs)

    こんにちは。 Emacsは、Gnu Emacs for Windows 23.4 を使っています。 Emacsにおいて、指定文字数を越えた時に、折り返す機能について調べたところ、 特定のメジャーモードにおいて、以下のような2行を実行すれば、 80文字を越えた時点で、行が折り返されると書いてあるサイトを、いくつか見かけました。 -------------------------------------------------------------------------------- ;;auto-fillモードを有効にする. (turn-on-auto-fill) ;;これは, メジャーモードごとに設定する必要がある. ;;無効にするには, 「M-x auto-fill-mode」と入力する. ;:折り返しを行う時の文字数を指定する. (setq fill-column 80) ;;これは, メジャーモードごとに設定する必要がある. ;;auto-fillモードが有効な状態だと, 80文字で行が折り返される -------------------------------------------------------------------------------- そこで、Emacs-Lispモードや、C++モードなどのバッファにおいて、 上記の2行を実行したのですが、80文字を越えても、行が折り返されませんでした。 具体的に言いますと、 -------------------------------------------------------------------------------- あああああああああああああああああああああああああああああああああああああああああああああああああああああ -------------------------------------------------------------------------------- のように、日本語を入力したときは、80文字(全角40文字)を越えたところで、折り返されました。 ところが、 -------------------------------------------------------------------------------- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -------------------------------------------------------------------------------- のように、半角の英数字を入力したときは、80文字を越えても折り返されませんでした。 より詳しく調べてみると、どうやら、80文字を越えるところで、全角文字が入力されて確定される場合にのみ、行が折り返されるようでした。 例えば、 -------------------------------------------------------------------------------- 1234567890123456789012345678901234567890123456789012345678901234567890123456ああああああああ -------------------------------------------------------------------------------- のように、半角数字を76文字入力した後、「ああああああああ」と入力して確定すると、 2つ目と3つめの「あ」の間で、行が折り返されました。 半角文字だけの行でも、80文字を越えたら、折り返されるように設定したいのですが、 Emacsでそれは可能なのでしょうか? 色々調べてみても、やり方が分からなかったので、今回質問させて頂きました。 以上の件について何かご存知の方がいらっしゃれば、是非教えて頂きたいと思います。 では、よろしくお願い致します。

  • emacsのカスタマイズ

    emacsのカスタマイズで質問です。 cモードになったとき(できれば他の全てのモードでも)、フリーにタブを入力したいのですが、どのようにカスタマイズすれば良いのでしょう? いろいろ調べてみて、 (setq c-auto-newline nil) とか、 (setq c-tab-always-indent nil) としてもダメです。 ついでに、タブ幅を4にしたとき、 (setq-default tab-width 4) (setq-default tab-always-indent t) タブは4桁になるのですが、タブキーを押すと2タブ入ってしまいます。 どうしても、1タブキーで8桁進めたいようです。 これを1タブキーでタブ1つが入って、4桁であって欲しいのですが、どうすれば良いでしょう? よろしくお願いします。

  • emacsの設定(.emacs.el)について勉強するのによいサイト、書籍、資料等を紹介してください。

    emacsの設定(.emacs.el)について勉強するのによいサイト、書籍、資料等を紹介してください。 ・本格的にEmacsLispをやる気は無いです。 ・いままでごまかしごまかしでコピペしてました。 ・setqとかconsとかdefunとか良く出てきているけどよくわかりません。 ・関数型言語はわかりません。JavaやRubyやPerlやJavaScriptならできます。 Webにある設定を持ってきてコピペしてもエラーがでてうまく動かない、そうすると何が原因なのかわからないのでお手上げ。そんな状況から抜け出たいと思っています。 ちなみに使っているEmacsはOSXでのCarbonEmacsです。 こんな私にぴったりなものをよろしくお願いします。

  • XEmacsにnxml-modeをインストールしたい

    RedHat9を使っています。 James Clark氏のnxml-modeを落してきて、使おうとしたのですが、Linuxは初心者で、XEmacsのモジュール追加(?)の方法が良く分りません。 とりあえず、 1: nxml-mode-20030915.tar.gzを落し、 2: 解凍し、/usr/share/xemacs/xemacs-packages/lispにコピー。 3: ~/.xemacs/custom.elに以下を追加。 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; for nXML ;; (setq load-path (append '("/usr/share/xemacs/xemacs-packages/lisp/nxml-mode-20030915") load-path)) (load "/usr/share/xemacs/xemacs-packages/lisp/nxml-mode-20030915/rng-auto.el") (setq auto-mode-alist (cons '("\\.\\(xml\\|xsl\\|rng\\|xhtml\\)\\'" . nxml-mode) auto-mode-alist)) 4: XEmacsを起動すると、以下のメッセージ。 FSF GNU Emacs version 21 or later required xemacs --versionでは、以下のようにでますので、バージョンはOKだと思いますが。 XEmacs 21.4 (patch 12) "Portable Code" [Lucid] (i386-redhat-linux, Mule) of Thu Feb 20 2003 on porky.devel.redhat.com 何かヒントをお持ちの方、ご教授いただけないでしょうか?

  • Emacs (gnupack)のカスタマイズ

    Emacs (gnupack配布ページから単体で落とせるEmacs)の カスタマイズをしたいのですが、 既にいろいろ設定された状態で配布されているので、 それを基本的に生かしつつカスタマイズする場合、 既に存在する設定ファイルを編集するのですよね? だとすると、設定ファイルはどこにあるのでしょうか。 よろしくお願いいたします。

  • Emacsが出てこない!?

    大学の方で、プログラミングの授業をしていて、自分のPCでも練習ができるようにと、UNIXの疑似環境を作ったのですが、友達のがうまく作動しなくて困っています。あたし自身まだ直接その画面を見ていないので回答者の方々には迷惑をおかけするかもしれませんが・・・。 cygwin(端末エミュレーター)の中で emacs ファイル名.c とうっても、command not foundと出てきてMedow(Emacs)にいけないそうです。 Medow(Emacs)はインストールされていて単体では起動できるのですが・・・。 インストールの手順の中で何か不備があってきちんと入っていないのではとも考えたのですが、一緒にやっていた私はちゃんと作動するし、その友達もファイルにきちんと入っていたので、これはなさそうなのですが・・・。 こんな情報だけじゃ答えれないかも知れませんが、もし思い当たるような原因がありましたら、なるべく詳しく教えてください!(なにせまだ始めたばかりでよくわからないので・・・)

  • emacsのメール送信について

    【質問】 Emacs M-x mail でメール送信ができません. どうか解決方法をご教授いただきたく存じます. 【環境】 OS: Mac OS 10.5 EMACS: Carbon Emacs 22.3 【現象】 M-x mailを打ち,以下の内容をタイプ ----------------------------- From: xxx <***@***.ac.jp> To: ***@***.ac.jp Subject: test7 --text follows this line-- test7 ----------------------------- ctrl+cを2回で送信. Emacsのmessageには以下のように記載されております. 一見送信できているのかのように見えるのですが, いくら待てどもメールが送信先に届きません. ----------------------------- Carbon Emacs Package (2009) For information about GNU Emacs and the GNU system, type C-h C-a. Loading sendmail... Loading regexp-opt...done Loading sendmail...done Sending... Loading mailclient...done Loading browse-url...done Sending...done Loading url-parse...done Loading url-methods...done Making completion list... [2 times] ------------------------------- .emacsには以下の設定がされております. ------------------------------- ;;For window configuration (if window-system (progn (setq initial-frame-alist '((width . 80) (height . 50) (top . 0) (left . 600))) )) ;;For font configuration (if (eq window-system 'mac) (require 'carbon-font)) (fixed-width-set-fontset "hiramaru" 18) ;;For mail configuration (setq user-mail-address "***@***.ac.jp") ------------------------------------------- その他の現象としましては以下になります. + M-x rmail でメールの受信を確認することは可能 + ターミナル上で mail ***@***.xxx.xx としてメールを送信することは可能 ですのでネットワークの問題ではないと考えております. 以上,どうかよろしくお願いいたします.