タグ付けされた質問 「elisp」

他の言語、特に他のLisp方言と比較した、言語としてのEmacs Lispに関する質問。つまり、*言語*自体についての質問です。* Emacs Lispの*使用*についての質問には*使用しないでください*。Emacs Lispは、Emacsエディターが組み込まれているスクリプトおよびプログラミング言語です。


1
Emacsはその実行ファイルのパスを検出できますか?
私のシステムに(同じバージョンの)2つの同一のemacがあるとします。1つはC:\Program Files\Gnu Emacs別の場所に、もう1つは別の場所に配置されますC:\Program Files\New Gnu Emacs。実行中のEmacsはどれかを検出できますか?たとえば、実行可能ファイルのパス(つまり、emacs.exeまたはemacs.binが見つかるパス)を指定できますか?

2
ラムダをデエイリアスする方法は?
私は私の.emacsにこれを持っています: (defalias 'λ 'lambda) これは、のような単純なものでは問題なく機能し(funcall (λ (x) x) 1)ます。 しかし、(org-add-link-type "foo" (λ (s) (message s)))またはのようなことをすると(add-to-list 'auto-mode-alist '("foo" . (λ () (message "bar"))))、それは機能せず、 org-open-at-point:無効な関数:(λ(s)(message s)) そして ファイルモード指定エラー:(無効な機能(λnil(メッセージ "bar"))) それぞれ。 誰かがここで何が悪いのか知っていますか?
8 elisp 

2
特定のバッファでのみ空白モードを有効にする
組織モード以外のすべてのバッファで空白モードをオンにしたいのですが。emacsの起動時にこれを行うのは簡単ですが、私はemacsの永続的なコピーをemacsデーモンモードで使用しているため、そのようにすることはできません。 私は試した: (require 'whitespace) (setq whitespace-line-column 80) (setq whitespace-style '(face lines-tail)) (global-whitespace-mode t) (add-hook 'org-mode-hook (lambda () (visual-line-mode 1) (auto-fill-mode -1) (setq whitespace-style nil))) しかし、org-modeバッファーにアクセスするとすぐに、将来のすべてのバッファーに空白モードがなくなります。 他のメジャーモードで空白モードをオンにするフックを追加することを考えましたが、他のすべての可能なモードを列挙したくないので、これは悪い方法のように思えます。 ホワイトスペースモードとグローバルホワイトスペースモードがあることは知っていますが、これをどのように使用してここを助けることができるかはわかりません。 これを達成するために私が考えていない他の方法はありますか?

3
独自の行の閉じ括弧は受け入れられませんか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 5年前休業。 私はかなり長い間Emacsを使用してきましたが、最近、コーディング標準に出くわしました。そこにはそれが述べられています: 自分で行に閉じ括弧を付ける習慣をつけないでください。Lispプログラマーはこれを当惑させます。 これは、コードを読みやすくするために、私が構築した習慣とまったく同じです。Emacsで提供されるパッケージに混合スタイルが表示されます。私の質問は、この混乱がほとんどのelispプログラマに共通しているかどうかです。 編集:私のコードを見て、私は厳密にこれに従っていません。次に、コードはかなり恐ろしいでしょう。ほとんどの場合、defun、let、ifなどです。しかし、それは木目に反しているようなので、おそらくこれをやめるべきです。入力のための乾杯。 (ボーダーラインの意見に基づいていますが、C ++での閉じ括​​弧に関連しているようです。この場合、通常は独自の行にあるべきであると述べることは議論の余地がないはずです)。

1
ビジュアル秒時計カウンターを表示する方法— 10、9、8、。。時間切れ!
Q:オプションを選択すると、または時計がなくなると消えるビジュアル秒カウンターを組み込む方法を教えてください。 例 - *Messages*バッファ 10秒以内に選択してください。 9秒以内に選択してください。 。。。 時間切れ! と呼ばれる変数がありますinit-variable。の場合non-nil、Emacsはさまざまなユーザーカスタマイズの完全な構成でロードされます。の場合nil、Emacsは同等のものでEmacs -Qロードされます-つまり、ユーザーのカスタマイズはロードされません。この関数にread-char-exclusiveは秒カウンター用の優れた機能があり、その機能を以下のコードスニペットに組み込みました。オプション番号1はをに設定init-variableしnilます。オプション番号2またはアクションなしの場合、デフォルト設定はになりますnon-nil。 (defvar init-variable t) (let* ( (emacs-q (read-char-exclusive nil nil 10))) (cond ((eq emacs-q ?1) (setq init-variable nil) (message "Emacs -Q")) ((eq emacs-q ?2) (message "Regular Loading.")) (t (message "This is the default.")) ))
8 elisp 

1
パッケージを更新するときにyasnippetが壊れないようにするにはどうすればよいですか?
パッケージが更新されると、ロードされたelispファイルの場所が、新しいバージョンのパッケージのフォルダーに変更されます。 Yasnippetは、それがインストールされたファイルのスニペットを遅延ロードしようとします。これは、これまでに見たことのないメジャーモードでファイルを開いたときです。 これは、emascが更新された後、以前に表示されなかったメジャーモードでの読み込みに失敗することを意味します。 これを解決するための良い一般的な方法はありますか?(agが更新されると、似たような面倒な問題が発生します)。または、パッケージを読み込めなかった場合にエラーを表示するのではなく、警告を表示するだけで警告を表示するように、yasnippetで何かをアドバイスすることをお勧めしますか? 明確化: emacsを起動すると、yasnippetが読み込まれます。 メジャーモードが(たとえば)makefileであるファイルをロードしません。 パッケージマネージャーを使用して、新しいバージョンのyasnippetに更新します 私はメイクファイルをロードし、yasnippetはメイクファイルのスニペットをロードしようとしますが、スニペットに使用していたフォルダーが存在しないため失敗します。それだけでなく、yasnippetがインストールしたコマンドへの事前フックが失敗するため、他のすべてのコマンドも失敗します。 回避策:メッセージバッファーを開き、開くことができないフォルダーを見つけて実行しmkdir ~/.blargh/folder-yasnippet-wantsます。 明らかに、yasnippetについて少しアドバイスを書くこともできますが、もっとグローバルなソリューションを望んでいます(確かに、elispで遊んでアドバイスを得るには少し時間がかかります)。

1
comint派生モードはどのようにバッファーとプロセスを追跡する必要がありますか?
いくつかのカスタムcomint派生モードを記述した後、バッファーとプロセスを追跡する方法を決定するのは難しい場合があります。たとえば、異なるソースバッファーを異なるインタープリターに関連付ける場合などです。バッファまたはプロセスへの参照を保持する方が良いですか? バッファを指定すると、関連するプロセスをを使用して見つけることができますget-buffer-process。逆に、プロセスが指定されると、process-bufferそれに関連付けられたバッファーを返します。バッファとプロセスのどちらも、一意の名前でそれらを検索することにより、間接的な追加の層を許可しますが、オブジェクト自体への参照を保持するだけに比べると、これは脆弱に見えます。 データを1回だけ格納するという原則に違反しているため、1つの可能性は明らかに悪いように見えます。つまり、バッファとプロセスの両方への参照を保持しています。 comint-入力を送信するためのほとんどの関数は、引数としてバッファではなくプロセスを受け取ります。これは、バッファではなくプロセスオブジェクトに依存することを主張します。一方、バッファはプロセスよりも長く留まる傾向があります。プロセスが終了するか強制終了され、以前使用していたバッファで新しいプロセスが開始される場合があります。 プロセスまたはそのバッファを参照するための他の説得力のある引数はありますか?

2
emacs-lispバッファーのs式の自動更新値を表示するモードは何ですか?
emacs-lispバッファのモードがあり、各式の値を1行ずつ表示でき、式が編集されるとすぐに式の値を更新します。それは次のようになります: (+ 1 1)-> 2 (* 2 3)-> 6 このモードの名前は何ですか?私はそれを実際に見て使用しましたが、どのように呼び出されるかを忘れてしまいました。
8 elisp 

1
読み取り専用のテキストで始まるバッファの先頭にテキストを挿入しない
既存のEmacsパッケージを拡張していて、バッファーの一部を編集不可にしたい(読み取り専用)。実際、バッファの中央の1行だけを編集可能にしたいので、次のスニペットを使用してそれを実現しています。 (put-text-property (point-min) point-before-editable-text 'read-only t) ;; (put-text-property point-after-editable-text (point-max) 'read-only t) ただし、バッファの先頭にカーソルを置いて、目的の動作ではないテキストを挿入することはできます。 バッファの先頭での挿入を防ぐにはどうすればよいですか?

2
Emacs 24のバイトコード関数のArgspecまたはArity
関数のアリティをテストするコードがあります。これを使用して、パッケージの最新バージョンで追加されたオプションの引数が存在するかどうかを判断します。subr-arity組み込み関数を呼び出し、バイトコードオブジェクトとラムダのarglistを解析します。 (defun function-argspec (func) (if (symbolp func) (setq func (indirect-function func))) (cond ((byte-code-function-p func) (aref func 0)) ((and (consp func) (eq (car func) 'lambda) (consp (cdr func))) (car (cdr func))) )) これはEmacs 23までうまく機能しました。Ubuntu14.04上のEmacs 24.3では、一部の機能ではうまく機能しますが、他の機能では機能しません。 (function-argspec 'revert-buffer) (&optional ignore-auto noconfirm preserve-modes) (require 'vc) vc (function-argspec 'vc-print-log-internal) 1283 どうやら、バイトコード形式がマニュアルに反映されていない方法で変更されました。 (symbol-function 'vc-print-log-internal) #[1283 …

2
最も外側の境界でウィンドウを分割
新しいフルハイトウィンドウ分割を既存の(分割された)ウィンドウ構成に追加する方法を探しています。適切に説明する方法がわからないので、2つのウィンドウ構成例の望ましい動作を示すASCIIグラフィックを投稿します。 from to +-------------------------+ +---------------------+---+ | | | | | | | | | | | A | => | A | E | | | | | | | | | | | +-------------------------+ +---------------------+---+ +------------+------------+ +----------+----------+---+ | | B | | | B | | | A +------------+ …
8 elisp  window  frames 

3
ポータブルElispの作成
理想的には、.emacs.dディレクトリのコンテンツ全体を保存し、ロードしたEmacsで「そのまま」機能させながら、GUIウィンドウシステムなどの特定の環境の機能を利用したいのです。 互換性のない機能の百科事典を探しているのではありません。機能、OS、バージョン、グラフィックスなどを確認する方法と、他の構成のコードを壊さずにこれらを利用する方法を知りたいのですが。 プラットフォームを活用しながら、一般に普及しているEmacsの複数のバージョン(22.x +など)および複数の基盤となるプラットフォーム(OSX、Linux、Windows、その他の* nixなど)で機能するElispを作成するために使用できる基本的なテクニックおよび該当する場合はバージョン固有の機能?

1
メジャーモードの単純な構文テーブルを作成するにはどうすればよいですか?
構文テーブルのしくみを理解しようとしていますが、最小限のメジャーモードでは何も強調されません。 私は次のelispを書きました。 (defconst my-yaml-mode-syntax-table (let ((table (make-syntax-table))) (modify-syntax-entry ?# "<" table) (modify-syntax-entry ?\n ">" table) table) "Syntax table for `my-yaml-mode'.") (define-derived-mode my-yaml-mode fundamental-mode "My YAML" "testing" :syntax-table my-yaml-mode-syntax-table) ただし、ファイルが与えられた場合: # foo # bar baz でメジャーモードをアクティブにしてM-x my-yaml-modeも、強調表示されません。C-u C-x =は、面が適用されていないことを示しています。

1
関数を引数としてelispに渡す方法
私は最近、lispプログラミングを学ぶためにSICPを読んでいます。 本には、以下のような高レベルの関数和を作成する例があります。 (define (sum term a next b) ... (term a) ... (next a) ... この関数では、termとnextが関数です。 同じ関数をelispでこのように記述したいと思います。 (defun sum (term a next b) .... (funcall term a) ... (func next a) .... 次に、合計をテストするためにいくつかのテスト関数を定義します (defun inc-test (x) (+ x 1)) sum inc-test 1 inc-test 10 しかし、次のようなエラーが表示されます:無効な関数:inc-test 私はelispを使い始めたばかりなので、修正方法を誰かに教えてもらえますか?とても感謝しています
8 elisp 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.