20

My~/.emacsには、特定のアプリケーション (Ubuntu 12.10; Emacs 24) で特定のファイルを開くための次の設定が含まれています。

(setq dired-guess-shell-alist-user
      '(("\\.pdf\\'" "okular ? &")
    ("\\.djvu\\'" "okular ? &")
        ("\\.mp3\\'" "vlc ? &")
    ("\\.mp4\\'" "vlc ? &")
    ))

で.pdfに移動してdired-modeヒット!すると、.pdfがOkularで開きますが、dired-bufferは2つの部分に分割され、2番目の部分は次の*Async Shell Command*ようなコンテンツを含む役に立たないバッファになっています

okular(25393)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::writeConfig:
okular(25393)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::writeConfig:
okular(25393)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::writeConfig:
okular(25393)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::writeConfig:

このバッファが開かれないようにするにはどうすればよいですか? (ただし、エラーが発生し、この情報が役立つ場合を除きます)。

関連する質問hereおよびhereを見つけましたが、一般的なものではなく、非同期で実行される特定のコマンドを扱っているようです*Async Shell Command*(可能であれば、特定のファイルタイプだけでなく、非同期プロセスの一般的な動作を変更したいと思います)

4

8 に答える 8

24

ここでこれを見つけました:

(call-process-shell-command "okular&" nil 0)

私のために働きます。stderr gobbledygook はありません。

于 2014-04-10T08:21:01.317 に答える
10

この質問は 2012 年に出されたもので、この記事を書いている時点で最新の回答は 2015 年のものです。2017 年現在、答えは簡単だと言えます。

(add-to-list 'display-buffer-alist
  (cons "\\*Async Shell Command\\*.*" (cons #'display-buffer-no-window nil)))
于 2017-12-01T05:29:15.200 に答える
1

一般的に非同期プロセスでそれを行うことについては完全にはわかりませんが、 を通過するものについてはasync-shell-command、これでうまくいくはずです:

    (defadvice async-shell-command (around hide-async-windows activate)
       (save-window-excursion
          ad-do-it))
于 2012-12-17T03:53:54.207 に答える
0

この方法を使用して問題を解決しました:

;list of programs, corresponding to extensions
(setq alist-programs
      '(("pdf" ."okular")
        ("djvu" . "okular")
        ("mp3" . "xmms")))

(defun my-run-async-command (command file)
  "Run a command COMMAND on the file asynchronously.
   No buffers are created"
  (interactive
   (let ((file (car (dired-get-marked-files t current-prefix-arg))))
     (list
      ;last element of alist-programs, contains COMMAND
      (cdr
       (assoc
        (file-name-extension file)
        alist-programs))
      file)))
  ;begin of function body
  (if command ;command if not nil?
      (start-process "command" nil command file)
    )
)

;attach function to <f2> key
(add-hook 'dired-mode-hook
      (lambda ()
    (define-key dired-mode-map (kbd "<f2>") 'my-run-async-command)))
于 2013-10-03T11:04:10.350 に答える
0

もう少し複雑な呪文は、あなたが望むものを手に入れるはずです. 次のようなシェル コマンドを使用するだけです (okular ? >& /dev/null &)

これを okular でテストしたことはありませんがM-! ((echo foo; sleep 10; echo bar) >& /dev/null &)、新しいバッファーを作成せずに Emacs がすぐに戻ることができます。

于 2012-12-17T15:15:46.317 に答える