[Mac] 如何更改 Safari 操作的快速鍵?(How to change the shortcut of Safari?)

開啟 Safari 看到功能列

點開任何一項功能(在此我以修改 “打開網址” 的快速鍵為例)

要做的功能是將

原本 Safari 要打開網址列,輸入網址的快速鍵(cmd+L),更改為(cmd+E)

如此一來單手就能進行了!!!

不然 cmd+L 真的太遠了 (手掌沒有那麼長啊!)

 

運用的功能就是 Mac 系統自己內建的快速鍵修改系統囉

  1. 打開”系統偏好設定”
  2. 進去”鍵盤”
  3. 選擇”快速鍵”
  4. 選擇左邊側欄的”App快速鍵”

然後就會到下圖(已新增完的樣子)的地方

找到 Safari 按下 “+”:輸入 “打開網址⋯”

那個刪節號超難打!

打 “…”(英輸入>) 和 “···”(中文全形輸入option+>,再按”下”選擇”間隔號”)都不行

只能用中文輸入法 Shift+option+b 來打出刪節號,然後取一個複製下來貼上

os. 其實直接複製 “打開網址⋯” 就好了XD

 

再來右邊有個”加入快速鍵”的按鈕,就依個人喜好自由決定囉

[Java] 在Java中執行Apple Script (How to run apple script in Java?)

這兩行 Apple script

set volSettings to get volume settings
set volume output volume ((output volume of volSettings) + 7)

是讓 Mac 的系統音量提高一格

同理,要讓它降一格就改成 -7 就行了

 

ps. Mac 的系統音量是 16 格 而 apple script 的音量值大小是以百分比來看 所以就用 100/16 = 6.25 每一格,取整數為 7

這支 Demo 是在 java 中執行上述的兩行 Apple script

 

完整 Code:

class AppleScriptTesting{
	public static void main(String[] args){
		Runtime runtime = Runtime.getRuntime();
		String applescriptCommand =  "set volSettings to get volume settings\n" + 
                             "set volume output volume ((output volume of volSettings) + 7)\n";
		String[] script = { "osascript", "-e", applescriptCommand };

		try{
			Process process = runtime.exec(script);
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

 

參考:

Java AppleScript: How to run a multi-line Applescript command from a Java program: https://alvinalexander.com/blog/post/java/how-run-multi-multiple-line-applescript-java-program

[Java] 把 Java 的選單列改到 Mac 的選單列上(Put JMenuBar to Native Mac OS X menubar)

使用前:

使用後:

 


一開始我是找到這篇:

https://alvinalexander.com/apple/mac/java-mac-native-look/Putting_JMenuBar_on_Mac_men.shtml

把下面這行加入到程式碼裡:

System.setProperty("apple.laf.useScreenMenuBar", "true");

發現無效!

 

然後又看到別篇有人說要在main function的很早就要放 System.setProperty 這行了

我把它移到 main 的最上面了,還是不行!

 

 

後來是這篇成功了:

https://stackoverflow.com/questions/1654531/jmenubar-at-the-top-in-macosx

原來是我加入 JMenuBar 和原來的不一樣

要使用 setJMenuBar 的方式來加入選單列才可以用

System.setProperty("apple.laf.useScreenMenuBar", "true");

放到 Mac OS X的原生選單列上

 

我原來加入選單列的方式是:

Container contentPage = getContentPane();
contentPage.add(menubar, BorderLayout.NORTH);

 

 

[Mac] 設定全域快速鍵來開啟Youtube (Global shortcut to launch Youtube)

有時候就是很懶,不想開瀏覽器然後再點我的最愛,才能連到youtube

就算在 Mac 上已經有神器 Alfred,只要用快速鍵(我的快速鍵是option+空白鍵)開 Alfred

然後用自訂的 keyword 來啟動 app store 都抓得到的 youtube app

不過還是很懶(扭~~)

 

我會想要設定快速鍵來啟動 Youtube App,是因為我想要在背景聽 youtube 的音樂

不想要他放在我的 safari 的分頁裡,也不想讓他放在我桌面的任何地方

所以就可以 cmd+shift+’,換完別首歌後,再 cmd+h 讓他隱藏

 

反正就是懶人專用,讓 Automator 來幫我們做事吧

分成兩個部分

  1. 在 Automator 制訂服務
  2. 用 System Preference 讓 服務 綁定自訂的快速鍵(前提是這個快速鍵不衝突其他功能的快速鍵)

 


  1. Automator 服務

到這裡就可以存檔了!

 

2. 替剛剛做好的服務,綁定一個快速鍵

開啟”系統偏好設定”(System Preference),切換到”鍵盤”裡面的”快速鍵”中的”服務”

找到”一般”裡面,你剛剛做好的服務所取的名字,替他加入一個快速鍵

然後不用關機就直接成立囉,可以直接用用看,如果沒反應

那可能是你設定的快速鍵有衝突到別的功能,換換別的快速鍵試試看吧

 

ps. 同理可以設定多個快速鍵,來快速啟動某些非常常用的 App 哦

[Eclipse] 讓你的Eclipse也有自動提示程式碼的功能

我是先接觸 Android Studio 開發一些簡單的 App

後來想把 Java 底子打穩

才轉用 Eclipse 練習 Java 專案開發的

 

但是在剛轉換兩個 IDE 時,最讓我適應不良的地方就是

Eclipse 沒有像是 Android Studio 有自動提示程式碼的功能拉!!

像我這種還是練習中的新手,對各種 library、class 都還很不熟

一沒有提示就很難進行開發

 

所以就來記錄一下,怎麼樣讓 Eclipse 也有自動提示的功能

主要是參考這篇文章:電腦茶包|讓你的Eclipse更好用

不需要額外加裝套件,不過會需要多用一些電腦資源

也就是會有一點Lag

 

不過!!!為了自動提示,這點不方便不算什麼!!

也就是讓他判斷到這些字元,就觸發自動提示的功能

 

[Mac] run a system notification in Java

Java 程式端可以呼叫終端機來執行 apple script

靠的是 runtime.exec(args); 這行,來執行 args 的參數們

 

而實際執行的指令是

osascript -e 'display notification "Take a break" with title "Time up!!!" sound name ""'
//可直接在終端機執行

 

我是放在 timer 倒數完結後(timeOut Override method),引發一個系統通知:

Runtime runtime = Runtime.getRuntime();
String[] args = { "osascript", "-e", "display notification \"Take a break\" with title \"Time's Up!!!\" sound name \"\"" };

try
{
    Process process = runtime.exec(args);
}
catch (IOException ioError)
{
    ioError.printStackTrace();
}

references:

https://alvinalexander.com/blog/post/java/how-run-execute-applescript-java-mac

https://apple.stackexchange.com/questions/57412/how-can-i-trigger-a-notification-center-notification-from-an-applescript-or-shel

[Mac App] A simple Menu Bar App in Java

import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.MalformedURLException;
import java.net.URL;

public class MenuBarIconTest {
    public static void main(String[] args) throws MalformedURLException {
        TrayIcon trayIcon = null;
         if (SystemTray.isSupported()) {
             // get the SystemTray instance
             SystemTray tray = SystemTray.getSystemTray();
             // load an image
             Image image = Toolkit.getDefaultToolkit().getImage(new URL("http://cdn1.iconfinder.com/data/icons/Hypic_Icon_Pack_by_shlyapnikova/16/forum_16.png"));
             // create a action listener to listen for default action executed on the tray icon
             ActionListener listener = new ActionListener() {
                 public void actionPerformed(ActionEvent e) {
                     System.out.println("action");
                     // execute default action of the application
                     // ...
                 }
             };
             // create a popup menu
             PopupMenu popup = new PopupMenu();
             // create menu item for the default action
             MenuItem defaultItem = new MenuItem("Do the action");
             defaultItem.addActionListener(listener);
             popup.add(defaultItem);
             /// ... add other items
             // construct a TrayIcon
             trayIcon = new TrayIcon(image, "Tray Demo", popup);
             // set the TrayIcon properties
             trayIcon.addActionListener(listener);
             // ...
             // add the tray image
             try {
                 tray.add(trayIcon);
             } catch (AWTException e) {
                 System.err.println(e);
             }
             // ...
         } else {
             // disable tray option in your application or
             // perform other actions
             //...
         }
         // ...
         // some time later
         // the application state has changed - update the image
         if (trayIcon != null) {
             //trayIcon.setImage(updatedImage);
         }

    }
}

 

reference:

https://stackoverflow.com/questions/13481504/creating-an-nsstatusitem-menubar-app-in-java

[Mac App] 以Java檔從零打造Mac App

  1. 打包寫好的 Java 程式,製作成 Jar 檔
  2. 將 Jar 檔打包成可以在 Mac 點兩下就執行的 Mac App

 

將編譯好的Class 打包成Jar

除了class檔們之外,還要製作一個純文字檔: manifest.mf (副檔名也可以是txt)

裡面內容為:(主要是要指定我們的起始MainClass是哪一個檔案)

Main-Class: HelloWorld



// 注意: 1. Main-Class寫完後,要往下空兩行
//       2. Main-Class的冒號後面記得要加一個空白

(假設我們的起始class檔為 HelloWorld.class的話,完成MainClass設定後,存檔為 manifest.mf)

 

再來打開終端機,輸入

$ jar cvfm MyJar.jar manifest.mf HelloWorld.class HelloWorld$1.class
// cvfm 的順序,會影響到後面接的參數順序

如果有很多個 class 檔也可以寫成
$ jar cvfm MyJar.jar manifest.mf *.class

就成功打包成為 MyJar.jar 檔

 

將 Jar 打包成 Mac App

可以利用現成的程式來打包: jar2app

從名字就可以推斷出,就是要將 jar 轉為 app 檔

這支程式是以終端機指令來進行包裝

 

安裝方式:

$ git clone https://github.com/Jorl17/jar2app
$ cd jar2app
$ chmod +x install.sh uninstall.sh
$ sudo ./install.sh

 

安裝完後,

將終端機目錄切換到 Jar 檔的所在目錄

$ jar2app MyJar.jar -i icon.icns

( icns 檔為 Mac App 的 icon 樣子,需事先準備好)

隨即就產生 MyJar.app 的 Mac App 囉

 

 

Java編譯器的參數怎麼下

假設我們想要把程式java檔和編譯過的class檔分開在不同資料夾下

project資料夾底下放著 src 和 classes 兩個資料夾

src: 放java檔(原始碼),目前裡面有兩個檔案:Main.java, Console.java

classes: 放class檔(編譯後),目前裡面為空

 

開啟terminal,將目錄切換到project資料夾,輸入

javac -verbose -sourcepath src -d classes src/Main.java

-verbose:可以看到編譯的過程

-sourcepath:之後接的參數src,就是我們存放java檔的資料夾

-d:之後接的參數classes,就是我們想要放編譯後的class檔的資料夾(可以把d想成destination或directory)

最後接的參數就是我們想要編譯的檔案,放在src資料夾底下的Main.java檔

 

也可以再多下一個參數

-cp/ -classpath:之後接的參數,在這個情況是classes資料夾,也就是如果整個專案中,在classes裡,有些檔案沒有更改,就不會重新再編譯一次