Acrobat Reader DCのツールパネルを非表示にする方法

DCにアップデートしてから、PDFを開いたときに右側にパネルが表示されるようになった。ファイルの表示領域が圧迫されるし目を引くしで非表示にしたいんだけど、設定には項目がなく、毎回手動で閉じるしかない。自分でファイルを変更することで非表示にする方法はいくつかあるみたい。www.ka-net.org

最もよい方法は「Viewer.apppテキストエディタで開いてツールパネルを読み込んでいる部分をコメントアウトする」だろう。ファイル構成を変更しないためトラブルが起こりづらく、元にも戻しやすい。

Readerはプラグインのように、外部ファイルで各パネルのレイアウトを読み込んでいるみたい。レイアウトを決定しているファイルは「~.appp」というファイルで、中身はXMLなので普通に編集できる。下記の方法で、ツールパネルを非表示にできた。

非表示にする手順

  • Viewer.apppを探す

自分の環境では「C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroApp\JPN」にあった。

念のため、バックアップとして同じフォルダにコピーしておくといいかも。

<Application xmlns="http://ns.adobe.com/acrobat/app/2014" title="ビューア" id="Viewer" majorVersion="1" requiresDoc="true" minorVersion="0">
	<Layouts>
	<!--
		<Layout name="Default">
			<RHP>
				<Component name="AppShortcutListView" type="Custom"/>
			</RHP>
		</Layout>
	-->
	</Layouts>
</Application>

これだけです。かんたん!

WindowsのPowerShellによく使うディレクトリのブックマークモジュールを追加

WindowsCUI、ヘビーユーザでもないので特に探しもせずPowerShellを使ってる。あまり不満はないけど1つだけ、いくら補完があっても毎回cd C:\Users\hoge\Desktop\Dropbox\project\ とか書くのがキツいので、cdb projectとかでブックマークできるモジュールを入れた。元ネタはココ

こんな感じで使える

Set-Bookmark <name> <path>
Get-Bookmark # to list all
Get-Bookmark <name>
Remove-Bookmark <name>
Clear-Bookmarks
Invoke-Bookmark <name>

Set-Bookmarkでブックマーク保存して、Invoke-Bookmarkで移動する。
Set-Alias cdb Invoke-Bookmarkとか設定すると、cdb projectなどで可能。

やり方ざっくり

  • $profile で自分のプロフィールパスを確認
  • $profile/Microsoft.PowerShell_profile.ps1 がなければ作成
  • $profile/Modules/bookmarks/ を作成(途中のディレクトリがなければ作成)
  • $profile/Modules/bookmarks/bookmarks.psm1 を作成し、以下のスクリプトを記述
# bookmarks.psm1
# Exports: Set-Bookmark, Get-Bookmark, Remove-Bookmark, Clear-Bookmarks, Invoke-Bookmark

# holds hash of bookmarked locations
$_bookmarks = @{}

function Get-Bookmark() {
  Write-Output ($_bookmarks.GetEnumerator() | sort Name)
}

function Remove-Bookmark($key) {
<#
.SYNOPSIS
  Removes the bookmark with the given key.
#>
  if ($_bookmarks.keys -contains $key) {
    $_bookmarks.remove($key)
  }
}

function Clear-Bookmarks() {
<#
.SYNOPSIS
  Clears all bookmarks.
#>
  $_bookmarks.Clear()
}

function Set-Bookmark($key, $location) {
<#
.SYNOPSIS
  Bookmarks the given location or the current location (Get-Location).
#>
  # bookmark the current location if a specific path wasn't specified
  if ($location -eq $null) {
    $location = (Get-Location).Path
  }

  # make sure we haven't already bookmarked this location (no need to clutter things)
  if ($_bookmarks.values -contains $location) {
    Write-Warning ("Already bookmarked as: " + ($_bookmarks.keys | where { $_bookmarks[$_] -eq $location }))
    return
  }

  # if no specific key was specified then auto-set the key to the next bookmark number
  if ($key -eq $null) {
    $existingNumbers = ($_bookmarks.keys | Sort-Object -Descending | where { $_ -is [int] })
    if ($existingNumbers.length -gt 0) {
      $key = $existingNumbers[0] + 1
    }
    else {
      $key = 1
    }
  }

  $_bookmarks[$key] = $location
}

function Invoke-Bookmark($key) {
<#
.SYNOPSIS
  Goes to the location specified by the given bookmark.
#>
  if ([string]::IsNullOrEmpty($key)) {
    Get-Bookmarks
    return
  }

  if ($_bookmarks.keys -contains $key) {
    Push-Location $_bookmarks[$key]
  }
  else {
    Write-Warning "No bookmark set for the key: $key"
  }
}

Export-ModuleMember Get-Bookmark, Remove-Bookmark, Clear-Bookmarks, Set-Bookmark, Invoke-Bookmark
  • $profile/Microsoft.PowerShell_profile.ps1 以下のスクリプトを記述(ショートカットは自由に書き換えてOK)
# Microsoft.PowerShell_profile.ps1

Import-Module bookmarks.psm1
Set-Alias cdb Invoke-Bookmark

Set-Bookmark project c:\path\to\my\project

スクリプトの実行権限がある人はPowerShellを再起動して完了。
再起動時に実行権限がないと警告される場合は、
Set-ExecutionPolicy RemoteSignedする。
http://windows-podcast.com/sundayprogrammer/archives/95

Set-ExecutionPolicyレジストリ編集権限がないと言われる人は、
管理者権限でPowerShellを再起動(右クリック→管理者として起動)して再度行う。

yeomanのgeneratorをつくる際のポイントとハマた点

周回遅れでyeomanに手を出した。ネットには古い記事が多く、公式も必要最小限しか書いてないなーという印象。以下の記事はかなり参考にさせてもらった。バグがあったときに内部のエラーしか吐かれないため、慣れるまでは原因がわかりづらい。

既存のgeneratorは古い設計のものが多い

既存のgeneratorをベースにする方法を推奨する記事が多いが、古くからあるものは Base.prototypeを拡張して書かれており、あまりきれいじゃない。web上の入門記事もその形が多い。

比較的新しい方法なんだろうか、公式にあるBaseをextendしてゆく形の方がシンプルで見通しがいい。最初から入っているyeoman-generatorはその形でスケルトンが書かれているので、それを元に書いていくのが楽だと思う。ただし、自分の環境ではnode.jsのバージョンが古く、アップデートしないと動かなかった。
(ちなみに2015年1月現在、windowsでは npm install -g n が通らない問題があり、面倒だがパッケージを落として実行する必要がある模様)

基本の流れ(node.js, yeomanなど入ってる前提)

  1. 対象ディレクトリを作成、移動。ディレクトリ名の形式はgenerator-custom-name
  2. yo generatorでスケルトンを生成
  3. npm linkでnode_modulesにシンボリックリンクを作成
  4. index.js をいじったりモジュールをインストール、package.jsonの設定など
  5. yo custom-nameで使う

使っているプラグインをpackage.jsonにちゃんと書く

プラグインのインストール時に-D の付け忘れなどで index.js で使われているモジュールがpackage.jsonに入っていないとevent.jsのエラーになるので注意。モジュールが足りないとか言ってくれないので知らないと気づきにくい。

yeoman:installDependencyのcallbackでcopyが動かぬ

yeomanで自分用generatorをつくったらハマった。
bowerでファイルのインストール後に開発ディレクトリに配置したいのだが、
エラーが出ずcopyも実行されない。

install: function () {
  this.installDependencies({
    callback: function () {
      this.copy(
        this.destinationPath("/bower_components/normalize.css/normalize.css"),
        this.destinationPath("/src/css/normalize.css")
      );
    }.bind(this)
  });
}

thisもちゃんとBaseが入ってたしcopyの中身もおかしくない。
また、コピー元も先も存在しているため原因不明。

結局、気持ち悪いがstackoverflowを参考にネイティブのfsを使った。

install: function () {
  this.installDependencies({
    callback: function () {
      var fs = require('fs');
      fs.createReadStream(this.destinationPath("/bower_components/normalize.css/normalize.css"))
        .pipe(fs.createWriteStream(this.destinationPath("/src/css/normalize.css"));
    }.bind(this)
  });
}

この形だと存在しないディレクトリが含まれている場合、copyのように自動では生成されない。
エラーも吐かず、実行されてないことに気づきにくくいため注意。