5

SQL INSERTステートメントを解析し、カーソルが列名にあるときに列の値を強調表示する、またはその逆の小さな関数を実装しました。

次に、列名と列値の間をすばやくジャンプする可能性を追加したいと思いました。実装ではプッシュマークを使用したので、Cx Cx(exchange-point-and-mark)でジャンプできます。それも機能します。私を悩ませているのは、elispdocだけです。

初心者のEmacsLispプログラマーは、間違った目的でマークを使用しようとすることがよくあります。マークは、ユーザーの便宜のために場所を保存します。ほとんどの編集コマンドは、マークを変更するべきではありません。

私のマークの使い方-それは正しいですか?または、より良い解決策は何でしょうか?

4

2 に答える 2

7

ポイントの位置との類推を考えてみましょう。ユーザーは、ポイント移動コマンドを発行したときにのみポイントを移動したいと考えています。フォントロックなどのランダムな操作でポイントが移動すると、非常に迷惑になります。したがって、関数本体を でラップすることをお勧めし(save-excursion ...)ます。

関数がユーザーに対して明示的にマークを設定する場合は問題ありません。sql-mark-column-value(この場合、マークを設定することがその機能の 1 つであることを明確にするために、関数を次のように呼び出すことをお勧めします) 。そうしないと。

ユーザーが SQL ステートメントの列名にポイントを置いたときに関数がたまたまマークを設定した場合、それはおそらくあまり便利ではありません。誰かが SQL ステートメントのセクションをカットまたはコピーしようとするユースケースを想像してみてください。ステートメント内でポイントを移動しようとするたびに、マークが上書きされます。この使用例sql-goto-column-valueでは、 に依存する代わりに、 のような別のコマンドを提供することをお勧めしますexchange-point-and-mark

もちろん、これが純粋に自分用であれば何でも構いません。

于 2009-02-23T15:14:19.897 に答える
2

私の知る限り、これはプッシュマークの正しい使い方です。ドキュメントでは、特定の操作の実行中にバッファの状態を保存する目的で、save-excursion の代わりに push-mark を使用することを推奨していないと思います。

于 2009-02-23T14:04:08.833 に答える